Rengi gölgelere ayırma işlevi. - sayfa 2

 
Alexey Viktorov :

CodeBade için elbette uluslararası bir dilde yazmanız gerekiyor. Ama neden Rusça konuşulan bir forumda bu konuda ısrar ???

Şahsen, bu uluslararası benim için iğrenç ... çünkü onu hiç bilmiyorum ve anadili Rusça benim için çok daha açık.

Bu tür kodlardaki temel sorun, hata ayıklama sırasında Kiril alfabesinin desteklenmemesidir.


Alt+G (değişken tanımına git) de çalışmıyor.


 
Ve kelime bileşeni erildir.
 
Алексей Тарабанов :
Ve kelime bileşeni erildir.

Ve dişi bileşen .

 
HSL
HSL — Википедия
HSL — Википедия
  • ru.wikipedia.org
HSL, HLS или HSI (от англ.  ()) — цветовая модель, в которой цветовыми координатами являются тон, насыщенность и светлота. Следует отметить, что HSV и HSL — две разные цветовые модели (lightness — светлота, что отличается от яркости). L = 1 2 ( M A X + M I N ) {\displaystyle L={\begin{matrix}{\frac...
 

Реter Konow
:

Bu görevin CCanvas sınıfı kullanılarak nasıl çözüldüğü de çok ilginç. Orijinal rengin tüm tonlarını nasıl aşabilirsin?

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164 union rgb { uint clr; uchar c[ 4 ];}; void OnStart ()   {    rgb c,cc;    double d= 5 ;    while (! IsStopped ())      {       c.c[ 2 ]= uchar ( 127.5 *( 1 + sin (d* 1.2 ))+ 0.4999 ); c.c[ 1 ]= uchar ( 127.5 *( 1 + sin (d* 1.9 ))+ 0.4999 ); c.c[ 0 ]= uchar ( 127.5 *( 1 + sin (d* 2.8 ))+ 0.4999 ); // генерируем новый цвет       cc.clr=c.clr;        double k0,k1,k2;        if (c.c[ 2 ]>=c.c[ 1 ] && c.c[ 2 ]>=c.c[ 0 ]) {k2= 1 ; if (c.c[ 2 ]== 0 ) {k1= 1 ; k0= 1 ;} else {k1=( double )c.c[ 1 ]/c.c[ 2 ]; k0=( double )c.c[ 0 ]/c.c[ 2 ];}} // если Red - максимальный цвет        else if (c.c[ 1 ]>=c.c[ 2 ] && c.c[ 1 ]>=c.c[ 0 ]) {k1= 1 ; k2=( double )c.c[ 2 ]/c.c[ 1 ]; k0=( double )c.c[ 0 ]/c.c[ 1 ];} // если Green - максимальный цвет        else {k0= 1 ; k2=( double )c.c[ 2 ]/c.c[ 0 ]; k1=( double )c.c[ 1 ]/c.c[ 0 ];} // если Blue - максимальный цвет        for ( int y= 0 ; y<W.Height; y++)         {          double k= 255.0 *( double )y/(W.Height- 1 );          c.c[ 2 ]= uchar (k2*k+ 0.4999 );          c.c[ 1 ]= uchar (k1*k+ 0.4999 );          c.c[ 0 ]= uchar (k0*k+ 0.4999 );          Canvas.LineHorizontal( 0 ,W.Width- 1 ,y, ColorToARGB (c.clr, 240 ));         }       Canvas.FillRectangle(W.Width/ 2 - 80 ,W.Height/ 2 - 50 ,W.Width/ 2 + 80 ,W.Height/ 2 + 50 , ColorToARGB (cc.clr, 240 ));       Canvas.CurentFont( "Tahoma" , 20 , 22 , ColorToARGB (~cc.clr)); // 20 -  размер шрифта, 22 - межстрочный интервал       Canvas.TextPosition(W.Width/ 2 - 70 ,W.Height/ 2 - 40 );       Canvas.Comm( "Текущий цвет:" );       Canvas.Comm( "R = " + string (cc.c[ 2 ]));       Canvas.Comm( "G = " + string (cc.c[ 1 ]));       Canvas.Comm( "B = " + string (cc.c[ 0 ]));       ChartChanged(); // на всякий случай контролируем изменение размеров окна, т.к. это скрипт (в индикаторах и экспертах это происходит автоматически)       Canvas.Update();       d+= 0.01 ;        Sleep ( 30 );      } }

İşaret, degradenin hesaplanmasıyla ilgili olanı vurgular, gerisi ekranda görüntülenir.


Dosyalar:
Gradient.mq5  4 kb
 
Nikolai Semko :

Bu tür kodlardaki temel sorun, hata ayıklama sırasında Kiril alfabesinin desteklenmemesidir.

..

Alt+G (değişken tanımına git) de çalışmıyor.

Ha!

Ancak bu zaten böyle bir "Rus" kodunun çok ciddi bir dezavantajıdır!

Peter, kodunda nasıl hata ayıklarsın? Belirli "Rus" değişkenlerinin değerlerine nasıl bakıyorsunuz?

* * *

Yukarıda doğru bir şekilde belirtildiği gibi, uzun süredir standardize edilmiş HSL ve HLS sistemleri vardır ve bunlara RGB'den geçişler standart formüllerle gerçekleştirilir. Ayrıca Lab sistemi mevcuttur. Tekerleği yeniden icat etmenin amacı nedir?

Bu işlevlerin nerede uygulanabileceği bana tam olarak açık değil. Bu, yerel programcıların çok yaygın bir hatasıdır - çok ilginç programlar yazarlar, ancak uygulamanın bir gösterimi ile - bir fiş. Yarım yıl önce, Canvas ile çalışmak için bir sınıf sunuldu - çok etkileyici bir demo sunuldu. Ancak bu yeteneklerin kullanımını görmedim, yazar bunları göstermeye söz verdi, ancak göstermedi.

Tüm bu demoların çoğunun CSF'nizi eğlendirmek için yaratıldığı izlenimini edindim - "bak bunu nasıl yapabilirim." Tartışmıyorum, bu doğru ... ama çoğunluk için işe yaramaz, çünkü çoğunluk uygulamayla ilgileniyor, ancak uygulama ile bu bir engel.

Birçoğu küçük kullanışlı gadget'lar yazar. Ancak şu ana kadar sadece fxsaber'ın benim görüşüme göre kelimenin tam anlamıyla herkes için çok yararlı olan bir kütüphaneyi tanıttığını görüyorum. Böyle hacimli ve aynı zamanda genel olarak faydalı bir çalışma - bilmiyorum. Bu durumda, Canvas ile - ve bu tamamen üzücü - tüm bunların nerede uygulanabileceğini hayal etmek benim için zor, böylece forum üyelerinin göze çarpan herhangi bir bölümünün buna ihtiyacı var.

Kaynak kodunu açıklamadan bile belirli uygulama örneklerini görmek istiyorum - sadece fikrin kendisi, tüm bunlar nerede faydalı bir şekilde uygulanabilir?

 
Nikolai Semko :

Bu tür kodlardaki temel sorun, hata ayıklama sırasında Kiril alfabesinin desteklenmemesidir.


Alt+G (değişken tanımına git) de çalışmıyor.

Sorun, Nikolai, kodda veya hata ayıklayıcıda değil, sorun insanlarda, ilişkilerde. Bu kodla ilgileniyorsam, değişken adlarını kolayca değiştirebilirim ve hata ayıklama işe yarayacaktır. Ama bizim büyük dilimizi bilmeyen yabancıların gitmediği uluslararası kullanım talep etmek... Evet ve hatta bu kodu indirmemeyi ve test etmemeyi talep etmek...

 
Georgiy Merts :

Ha!

Ancak bu zaten böyle bir "Rus" kodunun çok ciddi bir dezavantajıdır!

Peter, kodunda nasıl hata ayıklarsın? Belirli "Rus" değişkenlerinin değerlerine nasıl bakıyorsunuz?

* * *

Yukarıda doğru bir şekilde belirtildiği gibi, uzun süredir standardize edilmiş HSL ve HLS sistemleri vardır ve bunlara RGB'den geçişler standart formüllerle gerçekleştirilir. Ayrıca Lab sistemi mevcuttur. Tekerleği yeniden icat etmenin amacı nedir?

Bu işlevlerin nerede uygulanabileceği bana tam olarak açık değil. Bu, yerel programcıların çok yaygın bir hatasıdır - çok ilginç programlar yazarlar, ancak uygulamanın bir gösterimi ile - bir fiş. Yarım yıl önce, Canvas ile çalışmak için bir sınıf sunuldu - çok etkileyici bir demo sunuldu. Ancak bu yeteneklerin kullanımını görmedim, yazar bunları göstermeye söz verdi, ancak göstermedi.

Tüm bu demoların çoğunun CSF'nizi eğlendirmek için yaratıldığı izlenimini edindim - "bak bunu nasıl yapabilirim." Tartışmıyorum, bu doğru ... ama çoğunluk için işe yaramaz, çünkü çoğunluk uygulamayla ilgileniyor, ancak uygulama ile bu bir engel.

Birçoğu küçük kullanışlı gadget'lar yazar. Ancak şu ana kadar sadece fxsaber'ın benim görüşüme göre kelimenin tam anlamıyla herkes için çok yararlı olan bir kütüphaneyi tanıttığını görüyorum. Böyle hacimli ve aynı zamanda genel olarak faydalı bir çalışma - bilmiyorum. Bu durumda, Canvas ile - ve bu tamamen üzücü - tüm bunların, forum üyelerinin göze çarpan herhangi bir bölümünün buna ihtiyaç duyacağı şekilde nerede uygulanabileceğini hayal etmek benim için zor.

Kaynak kodunu açıklamadan bile belirli uygulama örneklerini görmek istiyorum - sadece fikrin kendisi, tüm bunlar nerede faydalı bir şekilde uygulanabilir?

George, kafamda kodun hatalarını ayıklıyorum. :) Her zaman yaptım. Mantıksal olarak tartışan hataları ararım. Alert() işlevi çok yardımcı olur;

Benim için her zaman kendi çözümümü aramam gerekiyor. Hata ayıklama Metaeditor eksikliği beni rahatsız etmiyor. Uyum sağladım ve hata tespit yöntemlerimi buldum. Ancak küresel kalkınmada, yalnızca bir başkasının (çok anlaşılır olsa da) dilini kullanmak gerçek bir engeldir . Tek başına küresel kalkınmaya öncülük ediyor olsaydın, beni anlardın. Rus dili, kendi beynimden maksimum performansı çıkarmama yardımcı oluyor. Aslında, iki dilde programlama yapıyorum. %60 Rusça ve %40 İngilizce. İki dilli bir kod, tek dilli bir koddan çok daha iyi hatırlanır. Ayrıca daha iyi okuyor. Yalnızca İngilizce koduna (birçok sözdizimi ile) baktığınızda, fazla bir şey hatırlamazsınız ve fazla programlamazsınız. Bu nedenle, herkes kütüphaneleri kullanır. Programımı kolayca ezberleyebilirim, çünkü başkalarının icat ettiği standartları gözlemlemeye değil, kendi okuma ve hatırlama kolaylığıma önem veririm. Bu yüzden kendi başıma çok şey yaptım.

Ticaret programlarında grafiklerin kullanılması, onları Market'te satış için daha çekici hale getirecektir. Buna da özen gösterilmesi gerekiyor. Bu pratik uygulamadır.


Genel olarak, tablolar, programın davranışını yönetme, otomasyonu ayarlama, bilgi görüntüleme - grafikler bunun içindir. Ticaret programlarının buna ihtiyacı olmadığını düşünmeniz garip.

 
Nikolai Semko :

İşaret, degradenin hesaplanmasıyla ilgili olanı vurgular, gerisi ekranda görüntülenir.


Teşekkürler Nikolay. Ve böylece, bir renk göndermek ve hemen tüm tonları almak için mi? Böyle bir şey var mı?

 
Nikolai Semko :

İşaret, degradenin hesaplanmasıyla ilgili olanı vurgular, gerisi ekranda görüntülenir.


Bu arada, resme bakılırsa, buradaki renk ayrışması tam değil. Sadece yarısı. Aralık, belirli bir rengin tüm tonları boyunca mutlak beyazdan mutlak siyaha kadar uzanmalıdır.

Neden: