Fonction de décomposition de la couleur en nuances. - page 2

 
Alexey Viktorov:

Pour CodeBade, vous devez absolument écrire dans une langue internationale. Mais pourquoi insister sur ce point dans un forum en langue russe ???

Personnellement, je suis dégoûté par cette internationale... parce que je ne le connais pas du tout et qu'il est beaucoup plus clair pour moi que notre russe natal.

Le principal problème de ce code est que le cyrillique n'est pas pris en charge lors du débogage.


et aussi Alt+G ne fonctionne pas (aller à la définition de la variable).


 
Et le mot composant est masculin.
 
Алексей Тарабанов:
Et le mot composant est masculin.

Et le mot composant est féminin.

 
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
:

Il est également très intéressant de voir comment ce problème est résolu avec la classe CCanvas. Comment pouvez-vous obtenir toutes les nuances de la couleur originale à travers elle ?

#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);      } }

Le calcul du gradient est mis en évidence, le reste est la sortie.


Dossiers :
Gradient.mq5  4 kb
 
Nikolai Semko:

Le principal problème de ce type de code est que le cyrillique n'est pas pris en charge lors du débogage.

..

et aussi Alt+G ne fonctionne pas (aller à la définition de la variable).

Ha !

C'est un inconvénient très grave de ce code "russe" !

Peter, comment débogues-tu ton code ? Comment regarder les valeurs de certaines variables "russophones" ?

* * *

Comme indiqué à juste titre ci-dessus - il existe des systèmes HSL et HLS, qui sont normalisés depuis longtemps, et les transferts à partir de RGB sont effectués à l'aide de formules standard. En outre, il y a le système Lab. À quoi bon réinventer la roue ?

Je ne vois pas très bien où ces fonctions peuvent être appliquées. C'est une erreur très courante des programmeurs locaux - ils écrivent des programmes très intéressants, mais lors de la démonstration de l'application, ils se heurtent à un problème. Il y a six mois, je me souviens, une classe de travail avec Canvas a été présentée - il y avait une démo très impressionnante. Mais je n'ai vu aucune utilisation de ces fonctionnalités, l'auteur a promis de les démontrer mais ne l'a jamais fait.

J'ai l'impression que la plupart de ces démos sont créées pour divertir l'ego de chacun - "regardez comment je peux le faire". Je suis sûr que c'est une bonne chose... mais pour la plupart des gens, c'est inutile, parce que la plupart des gens sont intéressés par l'application, mais il y a un problème avec l'application.

Beaucoup de gens écrivent de petites pièces jointes utiles. Mais, jusqu'à présent, je constate que seul fxsaber a présenté une bibliothèque, qui, je pense, est très utile pour littéralement tout le monde. Je ne connais pas d'ouvrage aussi volumineux, mais généralement utile. Dans ce cas, avec Canvas, c'est encore plus triste - je ne peux pas imaginer où tout cela pourrait être appliqué d'une manière qui serait utile à une partie discernable de l'audience du forum.

J'aimerais voir des exemples concrets d'applications, même sans révéler le code source - juste l'idée d'où tout cela pourrait être utilement appliqué ?

 
Nikolai Semko:

Le principal problème de ce code est que le cyrillique n'est pas pris en charge lors du débogage.


et aussi Alt+G ne fonctionne pas (aller à la définition de la variable).

Le problème, Nikolaï, ce n'est pas le code ou le débogueur, le problème ce sont les gens, les relations. Si ce code m'intéresse, je remplacerai les noms de variables sans trop d'efforts et le débogage fonctionnera. Mais exiger d'en utiliser un international où les étrangers ne connaissent pas notre belle langue... Et exigeant de ne pas télécharger et tester ce code...

 
Georgiy Merts:

Ha !

C'est un inconvénient très grave de ce code "russe" !

Peter, comment débogues-tu ton code ? Comment considérez-vous les valeurs des variables spécifiques "russophones" ?

* * *

Comme cela a été correctement souligné ci-dessus - il existe des systèmes HSL et HLS, qui sont normalisés depuis longtemps, et les transitions à partir de RGB sont effectuées à l'aide de formules standard. D'ailleurs, il existe un système Lab, à quoi bon réinventer la roue ?

Je ne vois pas très bien où ces fonctions peuvent être appliquées. C'est une erreur très courante des programmeurs locaux - ils écrivent des programmes très intéressants, mais lors de la démonstration de l'application, ils se heurtent à un problème. Il y a six mois, je me souviens, une classe de travail avec Canvas a été présentée - il y avait une démo très impressionnante. Mais je n'ai vu aucune utilisation de ces fonctionnalités, l'auteur a promis de les démontrer mais ne l'a jamais fait.

J'ai l'impression que la plupart de ces démos sont créées pour divertir l'ego de chacun - "regardez comment je peux le faire". Je suis sûr que c'est une bonne chose... mais pour la plupart des gens, c'est inutile, parce que la plupart des gens sont intéressés par l'application, mais il y a un problème avec l'application.

Beaucoup de gens écrivent de petites pièces jointes utiles. Mais, jusqu'à présent, je constate que seul fxsaber a présenté une bibliothèque, qui, je pense, est très utile pour littéralement tout le monde. Je ne connais pas d'ouvrage aussi volumineux, mais généralement utile. Dans ce cas, avec Canvas, c'est encore plus triste - je ne peux pas imaginer où tout cela pourrait être appliqué d'une manière qui serait utile à une partie discernable du forum.

J'aimerais voir des exemples concrets d'applications, même sans révéler le code source - juste l'idée d'où tout cela pourrait être utilement appliqué ?

George, je suis en train de déboguer le code dans ma tête. Je l'ai toujours fait de cette façon. Je recherche les erreurs par un raisonnement logique. La fonction Alert() m'aide beaucoup ;

Pour moi, il est toujours nécessaire de chercher ma propre solution. Le manque de débogage de MetaEditor ne me dérange pas. Je m'y suis adapté et j'ai trouvé mes propres méthodes de détection des erreurs. Mais dans un contexte de développement mondial, le fait de n'utiliser que la langue d'un autre (même si elle est très claire) constitue un véritable obstacle. Si vous étiez un développeur mondial à part entière, vous me comprendriez. La langue russe m'aide à tirer le maximum de productivité de mon propre cerveau. En fait, je programme en deux langues. 60% de russe et 40% d'anglais. Le code bilingue est beaucoup plus mémorisable que le code monolingue. Il est également plus lisible. En ne regardant que le code anglais (avec beaucoup de syntaxe), on ne peut pas se souvenir de grand-chose et on ne peut pas programmer grand-chose. C'est pourquoi tout le monde utilise des bibliothèques. Moi, par contre, je peux mémoriser mon programme facilement, parce que je me soucie de ma propre facilité de lecture et de mémorisation, plutôt que d'adhérer aux normes inventées par quelqu'un d'autre. C'est pourquoi j'ai fait tant de choses par moi-même.

L'application de graphiques aux programmes commerciaux les rendra plus attrayants pour la vente sur la place de marché. Tu dois t'occuper de ça aussi. C'est l'application pratique.


En général, les tableaux, le contrôle du comportement des programmes, la mise en place d'automatismes, la sortie d'informations - voilà à quoi servent les graphiques. Il est étrange que vous pensiez que les programmes de trading n'en ont pas besoin.

 
Nikolai Semko:

Le calcul du gradient est mis en évidence, le reste de la sortie est à l'écran.


Merci, Nikolaï. Est-il possible d'envoyer une couleur et d'obtenir toutes les nuances en même temps ? Existe-t-il une telle méthode ?

 
Nikolai Semko:

Le marqueur est mis en évidence pour le calcul du gradient, le reste de la sortie est à l'écran.


D'ailleurs, à en juger par l'image, la décomposition des couleurs n'est pas complète ici. Seulement la moitié. La gamme doit s'étendre du blanc absolu au noir absolu, en passant par toutes les nuances d'une couleur particulière.