색상을 음영으로 분해하는 기능. - 페이지 2

 
Alexey Viktorov :

물론 CodeBade의 경우 국제 언어로 작성해야 합니다. 그러나 러시아어를 사용하는 포럼에서 이것을 주장하는 이유는 무엇입니까?

개인적으로, 이 국제적 언어는 나에게 역겹습니다. 왜냐하면 저는 그것을 전혀 모르고 제 모국어인 러시아어가 훨씬 더 명확하기 때문입니다.

이러한 코드의 주요 문제는 디버깅 중에 키릴 자모가 지원되지 않는다는 것입니다.


Alt+G(변수 정의로 이동)도 작동하지 않습니다.


 
그리고 구성 요소라는 단어는 남성적입니다.
 
Алексей Тарабанов :
그리고 구성 요소라는 단어는 남성적입니다.

그리고 여성 구성 요소 .

 
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
:

CCanvas 클래스를 사용하여 이 작업을 해결하는 방법도 매우 흥미롭습니다. 원래 색상의 모든 음영을 어떻게 통과할 수 있습니까?

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

마커는 그라디언트 계산과 관련된 사항을 강조 표시하고 나머지는 화면에 표시됩니다.


파일:
Gradient.mq5  4 kb
 
Nikolai Semko :

이러한 코드의 주요 문제는 디버깅 중에 키릴 자모가 지원되지 않는다는 것입니다.

..

Alt+G(변수 정의로 이동)도 작동하지 않습니다.

하아!

그러나 이것은 이미 그러한 "러시아어"코드의 매우 심각한 단점입니다!

Peter, 코드를 어떻게 디버깅합니까? 특정 "러시아어"변수의 값을 어떻게 보십니까?

* * *

위에서 올바르게 지적한 바와 같이 HSL 및 HLS 시스템은 오랫동안 표준화되어 있으며 RGB에서 이들로의 전환은 표준 공식에 의해 수행됩니다. 또한 Lab 시스템이 있습니다. 바퀴를 재발명하는 요점은 무엇입니까?

이러한 기능을 어디에 적용할 수 있는지 완전히 명확하지 않습니다. 이것은 지역 프로그래머의 매우 흔한 실수입니다. 그들은 매우 흥미로운 프로그램을 작성하지만 응용 프로그램의 데모와 함께 플러그를 씁니다. 반년 전에 Canvas 작업에 대한 수업이 제공되었던 것으로 기억합니다. 매우 인상적인 데모가 제공되었습니다. 그러나 나는 이러한 기능의 사용을 보지 못했고 저자는 시연하겠다고 약속했지만 시연하지는 않았습니다.

이 모든 데모의 대부분은 CSF를 즐겁게 하기 위해 만들어졌다는 인상을 받았습니다. "어떻게 할 수 있는지 보세요." 나는 그것이 옳은 일이라고 주장하지 않습니다 ... 그러나 대다수가 응용 프로그램에 관심이 있기 때문에 대다수에게는 쓸모가 없지만 응용 프로그램에는 걸림돌이됩니다.

많은 사람들이 작고 유용한 가제트를 작성합니다. 그러나 지금까지 fxsaber 만이 내 생각에 말 그대로 모든 사람에게 매우 유용한 라이브러리를 도입했다는 것을 알았습니다. 그런 방대하고 동시에 일반적으로 유용한 작업 - 나는 모릅니다. 이 경우 Canvas를 사용하면(완전히 슬프지만) 포럼 회원 중 눈에 띄는 부분이 필요할 정도로 이 모든 것을 어디에 적용할 수 있는지 상상하기 어렵습니다.

소스 코드를 공개하지 않고 응용 프로그램의 특정 예를 보고 싶습니다. 아이디어 자체만, 이 모든 것이 어디에 유용하게 적용될 수 있습니까?

 
Nikolai Semko :

이러한 코드의 주요 문제는 디버깅 중에 키릴 자모가 지원되지 않는다는 것입니다.


Alt+G(변수 정의로 이동)도 작동하지 않습니다.

문제, Nikolai는 코드에 있지 않고 디버거에 있지 않습니다. 문제는 사람과 관계에 있습니다. 이 코드에 관심이 있다면 변수 이름을 쉽게 변경할 수 있으며 디버깅이 작동합니다. 그러나 우리의 훌륭한 언어를 모르는 외국인이 가지 않는 국제 사용을 요구하려면 ... 네, 심지어이 코드를 다운로드하지 않고 테스트하지 말라고 요구하기까지 ...

 
Georgiy Merts :

하아!

그러나 이것은 이미 그러한 "러시아어"코드의 매우 심각한 단점입니다!

Peter, 코드를 어떻게 디버깅합니까? 특정 "러시아어"변수의 값을 어떻게 보십니까?

* * *

위에서 올바르게 지적한 바와 같이 HSL 및 HLS 시스템은 오랫동안 표준화되어 있으며 RGB에서 이들로의 전환은 표준 공식에 의해 수행됩니다. 또한 Lab 시스템이 있습니다. 바퀴를 재발명하는 요점은 무엇입니까?

이러한 기능을 어디에 적용할 수 있는지 완전히 명확하지 않습니다. 이것은 지역 프로그래머의 매우 흔한 실수입니다. 그들은 매우 흥미로운 프로그램을 작성하지만 응용 프로그램의 데모와 함께 플러그를 씁니다. 반년 전에 Canvas 작업에 대한 수업이 제공되었던 것으로 기억합니다. 매우 인상적인 데모가 제공되었습니다. 그러나 나는 이러한 기능의 사용을 보지 못했고 저자는 시연하겠다고 약속했지만 시연하지는 않았습니다.

이 모든 데모의 대부분은 CSF를 즐겁게 하기 위해 만들어졌다는 인상을 받았습니다. "어떻게 할 수 있는지 보세요." 나는 그것이 옳은 일이라고 주장하지 않습니다 ... 그러나 대다수가 응용 프로그램에 관심이 있기 때문에 대다수에게는 쓸모가 없지만 응용 프로그램에는 걸림돌이됩니다.

많은 사람들이 작고 유용한 가제트를 작성합니다. 그러나 지금까지 fxsaber 만이 내 생각에 말 그대로 모든 사람에게 매우 유용한 라이브러리를 도입했다는 것을 알았습니다. 그런 방대하고 동시에 일반적으로 유용한 작업 - 나는 모릅니다. 이 경우 Canvas를 사용하면(완전히 슬프지만) 포럼 회원 중 눈에 띄는 부분이 필요할 정도로 이 모든 것을 어디에 적용할 수 있는지 상상하기 어렵습니다.

소스 코드를 공개하지 않고 응용 프로그램의 특정 예를 보고 싶습니다. 아이디어 자체만, 이 모든 것이 어디에 유용하게 적용될 수 있습니까?

조지, 내 머릿속에서 코드를 디버깅 중이야. :) 항상 그랬습니다. 나는 논리적으로 논쟁하는 오류를 찾습니다. Alert() 함수 는 많은 도움이 됩니다.

나를 위해 항상 내 자신의 솔루션을 찾는 것이 필요합니다. Metaeditor 디버깅의 부족은 저를 괴롭히지 않습니다. 나는 오류 감지 방법을 채택하고 찾았습니다. 그러나 글로벌 개발에서 다른 사람의(매우 이해하기 쉬운) 언어만 사용 하는 것은 실제 장벽 입니다. 혼자 글로벌 발전을 주도했다면 이해했을 것이다. 러시아어는 제 두뇌에서 최대한의 성과를 끌어내는 데 도움이 됩니다. 사실 저는 두 가지 언어로 프로그래밍을 합니다. 60% 러시아어와 40% 영어. 이중 언어 코드는 단일 언어 코드보다 훨씬 더 잘 기억됩니다. 또한 더 잘 읽힙니다. 많은 구문이 포함된 영어 코드만 보면 기억도 많이 나지 않고 프로그래밍도 많이 하지 않을 것입니다. 따라서 모든 사람이 라이브러리를 사용합니다. 나는 내 프로그램을 쉽게 암기할 수 있습니다. 다른 사람이 고안한 표준을 준수하는 것이 아니라 내 자신의 읽기 및 기억 용이성에 관심이 있기 때문입니다. 그렇기 때문에 스스로 많은 일을 해왔습니다.

거래 프로그램에서 그래픽을 사용하면 시장에서 판매하기에 더 매력적입니다. 이것 역시 신경써야 합니다. 이것은 실용적인 응용 프로그램입니다.


일반적으로 테이블, 프로그램 동작 관리, 자동화 설정, 정보 표시 - 이것이 바로 그래픽의 목적입니다. 거래 프로그램이 이것을 필요로 하지 않는다고 생각하는 것은 이상합니다.

 
Nikolai Semko :

마커는 그라디언트 계산과 관련된 사항을 강조 표시하고 나머지는 화면에 표시됩니다.


고마워요, 니콜라이. 색상을 보내고 즉시 모든 음영을 받으려면? 그런게 있나요?

 
Nikolai Semko :

마커는 그라디언트 계산과 관련된 사항을 강조 표시하고 나머지는 화면에 표시됩니다.


그건 그렇고, 사진으로 판단하면 여기에서 색상 분해가 완료되지 않습니다. 반만. 범위는 특정 색상의 모든 음영을 통해 절대 흰색에서 절대 검정색으로 확장되어야 합니다.