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

 

글쎄요, 오늘은 여기저기 돌아다니는 것으로 충분합니다. 제 알고리즘에서 버그와 문제를 찾는 데 참여하고 도움을 주신 모든 분들께 감사드립니다. Nikolay에게 특별한 감사를 드리며 오류를 지적해 주신 Yuri Kulikov에게도 감사드립니다.

시각화 알고리즘을 제공한 Nikolai에게 특별한 감사를 드립니다.

나는 코드를 개선하고 여기에 새롭고 더 나은 버전을 게시할 것입니다. 누군가에게 유용하기를 바랍니다.


추신. 작별인사에게 썩은 계란을 던지고 싶은 유혹이 있다는 걸 알지만 자제하자.)))

 
Реter Konow :

음, 어떤 종류의 델타인지 자세히 알려주세요. 왜. 어떻게. 그러면 나는 당신 자신이 모든 것을 발명했다는 것을 이해할 것입니다.

이해가 안 돼요 - 벌써 농담하는 겁니까?

나는 또한 썼다 :

deltaR=(R2-R1)/(size- 1 );

글쎄, 나는 공식의 언어로 말할 수 없습니다.

Delta R - 두 색상의 R 구성 요소 간의 차이를 필요한 그라디언트 수로 나눈 값과 같습니다.

왜냐하면 우리는 색상의 선형 변화에 관심이 있으며 일반적인 직선 공식을 갖습니다.

y=a+b*x;

우리의 경우

текущая_составляющая_цветаR = составляющая_R_ цвета 1 + дельта_R * номер_текущего_элемента_массива;
текущая_составляющая_цветаG = составляющая_G_ цвета 1 + дельта_G * номер_текущего_элемента_массива;
текущая_составляющая_цветаB = составляющая_B_ цвета 1 + дельта_B * номер_текущего_элемента_массива;
 
Реter Konow :

글쎄요, 오늘은 여기저기 돌아다니는 것으로 충분합니다. 제 알고리즘에서 버그와 문제를 찾는 데 참여하고 도움을 주신 모든 분들께 감사드립니다. Nikolay에게 특별한 감사를 드리며 실수를 지적해 주신 Yuri Kulikov에게도 감사드립니다.

시각화 알고리즘을 제공한 Nikolai에게 특별한 감사를 드립니다.

나는 코드를 개선하고 여기에 새롭고 더 나은 버전을 게시할 것입니다. 누군가에게 유용하기를 바랍니다.

추신. 작별인사에게 썩은 계란을 던지고 싶은 유혹이 있다는 걸 알지만 자제하자.)))

동의한다! 갑자기 코드가 필요한 경우 Nikolai의 코드를 100줄이 아닌 12줄로 가져갈 것입니다.

 
나는 겉보기에 적당한 사람들이 topikstarter의 도발에 어떻게 계속해서 이끌리는지 놀라움을 금치 못합니다. 그는 단지 이야기하고 싶어합니다, 여러분!
 
Andrey Khatimlianskii :
나는 겉보기에 적당한 사람들이 topikstarter의 도발에 어떻게 계속해서 이끌리는지 놀라움을 금치 못합니다. 그는 단지 이야기하고 싶어합니다, 여러분!
망했어, 안드레이. :)
사실, 흥미로운 작업은 색상 응고가 없고 색상 왜곡을 최소화하는 색상 팔레트 를 얻는 것입니다. 분명히 색상 구성 요소 간의 델타는 일정하지 않아야 하고 부드럽게 변해야 합니다. 위의 예에서 검은색과 흰색의 두 가지 값이 있습니다. 그래서 그것이 나를 사로 잡았습니다.
 
Andrey Khatimlianskii :
나는 겉보기에 적당한 사람들이 topikstarter의 도발에 어떻게 계속해서 이끌리는지 놀라움을 금치 못합니다. 그는 단지 이야기하고 싶어합니다, 여러분!

당신은 헛된 놀랐습니다. 나는 당신에게 설명하고 당신은 이해할 것입니다.

  1. 잠재의식적 반사가 유발 되어 익숙하지 않은 형태를 공격합니다 . 보이는 것의 형태가 비표준적이고 이 세상에서 그 자리를 주장한다면 그것은 파괴되어야 한다. 왜요? - 두 가지 이유:

  • 비표준 형태는 표준 세계에 위협이 됩니다.
  • 비표준 형태 - 약점, 불완전성 또는 퇴화의 징후가 될 수 있습니다.

분명히, 이 반사는 모든 개인의 잠재의식에 존재합니다. 나는 프로그래밍에서 비표준적인 모든 것의 화신이다. 비표준 접근 방식, 비표준 스타일. 따라서 어떤 사람들은 무의식적으로 나를 세계에 대한 그들의 그림에 대한 위협으로 인식하고 다른 사람들은 약점으로 인식합니다. 두 경우 모두 "공격"하고 내 위치를 파괴하려는 유혹이 있습니다. 동기 부여는 더 많은 "포인트"를 얻고자 하는 열망에 의해 강화됩니다.

그러나 비표준 형태(내가 대표하는)는 나약함이나 타락의 표시일 뿐만 아니라 경이적인 힘과 능력의 표시일 수도 있습니다. 이 경우 비표준 양식이 새로운 표준이 될 수 있습니다.


2. "형태 = 본질"이라는 무의식적 결론이 촉발됩니다. 대부분의 사람들은 본질을 형태로 판단합니다. 형태가 우스꽝스럽거나 우스꽝스러워 보인다면 그들은 본질을 고려합니다. 우리 모두는 이것이 위대한 마음의 표시가 아니라는 것을 알고 있지만 우리는 이러한 고정 관념에 종속되어 있습니다.

첫 페이지에서 제 개념의 본질을 자세히 설명했습니다. 그러나 상대방은 그것을 높이 평가하지 않았습니다. 그들은 즉시 양식에 고정했습니다. 특정 알고리즘에. 예를 들어, 그는 나쁘고, 우스꽝스럽고, 느리다. 그들은 내 알고리즘을 폭파시키는 것만으로도 내 위치를 파괴하기에 충분하다고 결정했습니다. 그러나 내가 알고리즘에 넣은 아이디어는 이해하지 못했습니다. 따라서 알고리즘을 비판함으로써 알고리즘을 개선하는 데 도움이 됩니다. 동시에 그는 동일한 Essence - 동일한 색상 분해 원리를 유지합니다.

내 상대가 알고리즘이 아니라 내 개념을 파괴했다면 그들은 성공했을 것입니다. 그러나 그들 자신에게는 개념이 없습니다. 따라서 내 위치가 더 강력합니다.

위의 모든 내용은 상대방과의 다른 모순에 적용됩니다. 그들은 구현의 형태로 내 아이디어를 판단하고 본질을 보지 않습니다. 이대로라면 나는 언제나 승리할 것이다. 내 위치를 파괴하고 싶습니까? - 내가 만드는 것과 같은 수준에서 내 개념을 산산조각내십시오. 그러나 구현의 형태와 전쟁하는 것보다 더 어렵습니다.

 
Реter Konow :

당신은 헛된 놀랐습니다. 나는 당신에게 설명하고 당신은 이해할 것입니다.

...

Peter, 당신은 풍차와 전쟁 중입니다. 글쎄, 또 다른 옵션이 있습니다. 당신은 모든 결과를 가진 Elusive Joe입니다 :)

 
Реter Konow :



작동하는 mql5 코드는 어디에 있습니까?

 
Nikolai Semko :


작동하는 mql5 코드는 어디에 있습니까?

 //+------------------------------------------------------------------+
//|                                              Gradient test 1.mq4 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link        "https://www.mql5.com"
#property version    "1.00"
#include <Canvas\Canvas.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
union rgb { uint clr; uchar c[ 4 ];};
rgb C,cc;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   CCanvas canvas;
   if (!canvas.CreateBitmapLabel( "Gradient" , 200 , 200 , 768 , 256 , COLOR_FORMAT_ARGB_NORMALIZE )) { Print ( "Error creating canvas: " , GetLastError ()); }
   double d= 5 ;
   uint Gradient[ 256 ];
   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;
       ulong t= GetMicrosecondCount ();
      Диапазон_оттенков(C.clr,Gradient);
       //Gradient(C.clr,Gradient,256);
      t= GetMicrosecondCount ()-t;
       for ( int y= 0 ; y< 256 ; y++)
        {
         //Alert(__FUNCTION__,"  Gradient[",y,"]  ",Gradient[y]);
         //canvas.LineHorizontal(0,767,y,ColorToARGB(StringToColor(Gradient[y]),255));
         canvas.LineHorizontal( 0 , 767 ,y, ColorToARGB (Gradient[y], 255 ));
         C.clr=Gradient[y];
         canvas.PixelSet(( int )C.c[ 2 ]+( int )C.c[ 1 ]+( int )C.c[ 0 ],y, ColorToARGB ( clrWhite ));
         if (C.c[ 1 ]> 0 ) canvas.PixelSet( int ( 50.0 *( int )C.c[ 2 ]/( double )C.c[ 1 ]+ 50.0 *( int )C.c[ 0 ]/( double )C.c[ 1 ]),y, ColorToARGB ( clrGreen ));
         if (C.c[ 2 ]> 0 ) canvas.PixelSet( int ( 50.0 *( int )C.c[ 1 ]/( double )C.c[ 2 ]+ 50.0 *( int )C.c[ 0 ]/( double )C.c[ 2 ]),y, ColorToARGB ( clrRed ));
         if (C.c[ 0 ]> 0 ) canvas.PixelSet( int ( 50.0 *( int )C.c[ 2 ]/( double )C.c[ 0 ]+ 50.0 *( int )C.c[ 1 ]/( double )C.c[ 0 ]),y, ColorToARGB ( clrBlue ));
        }
      canvas.FillRectangle( 500 , 75 , 660 , 150 , ColorToARGB (cc.clr, 240 ));
      canvas.FontSet( "Tahoma" , 20 ); 
      canvas. TextOut ( 510 , 85 , "R = " + string (cc.c[ 2 ]), ColorToARGB (~cc.clr)); 
      canvas. TextOut ( 510 , 107 , "G = " + string (cc.c[ 1 ]), ColorToARGB (~cc.clr)); 
      canvas. TextOut ( 510 , 129 , "B = " + string (cc.c[ 0 ]), ColorToARGB (~cc.clr));
      canvas.FontSet( "Times New Roman" , 15 );
      canvas. TextOut ( 300 , 10 , "Время формирования градиентного массива из 256 элементов = " + string (t)+ " микросекунд" , ColorToARGB ( clrWhite ));
      canvas.Update();
      d+= 0.01 ;
       Sleep ( 30 );
     }
   canvas.Destroy();
//------------------------
  }
//+------------------------------------------------------------------+
//================================================================================================================================================================
void Диапазон_оттенков( color _Цвет, uint &Все_оттенки[])
{
 color R = 0 , G = 0 ,  B = 0 ;
 int    q = 0 , w1 = 0 , w2 = 0 ;
 //------------------------------------------------------
 uint Этот_цвет;
 double Тангенс_угла_старшего_треугольника_1,      
        Тангенс_угла_среднего_треугольника_1,                  
        Тангенс_угла_младшего_треугольника_1,                       
        Значение_в_точке_преломления_старшей_компоненты,  
        Значение_в_точке_преломления_средней_компоненты,
        Значение_в_точке_преломления_младшей_компоненты,    
        Тангенс_угла_старшего_треугольника_2,
        Тангенс_угла_среднего_треугольника_2,    
        Тангенс_угла_младшего_треугольника_2;
 //------------------------------------------------------
 double pi = 3.1415926536 ,
        Comp_1,Comp_2,Comp_3,
         //-----------------------------------------------
        Первая_компонента = 0.0 ,
        Вторая_компонента = 0.0 ,
        Третья_компонента = 0.0 ,
         //-----------------------------------------------
        Исходный_R = GetR(_Цвет), 
        Исходный_G = GetG(_Цвет),  
        Исходный_B = GetB(_Цвет),  
         //-----------------------------------------------
        Старшая_компонента         = Нужная_компонента(Исходный_R,Исходный_G,Исходный_B, 2 ), 
        Средняя_компонента         = Нужная_компонента(Исходный_R,Исходный_G,Исходный_B, 1 ), 
        Младшая_компонента         = Нужная_компонента(Исходный_R,Исходный_G,Исходный_B, 0 ), 
         //-----------------------------------------------
        Координата_исходного_цвета = Старшая_компонента/ tan (( 63.43989 *pi)/ 180 ) + Младшая_компонента/ 2 ; 
         //-----------------------------------------------
        
 //-----------------------------------------------
 if (Старшая_компонента == Исходный_R)R = ( color )Старшая_компонента;
 if (Старшая_компонента == Исходный_G)G = ( color )Старшая_компонента; 
 if (Старшая_компонента == Исходный_B)B = ( color )Старшая_компонента;     
 //------------------------
 if (Средняя_компонента == Исходный_R)R = ( color )Средняя_компонента;
 if (Средняя_компонента == Исходный_G)G = ( color )Средняя_компонента; 
 if (Средняя_компонента == Исходный_B)B = ( color )Средняя_компонента; 
 //------------------------
 if (Младшая_компонента == Исходный_R)R = ( color )Младшая_компонента;
 if (Младшая_компонента == Исходный_G)G = ( color )Младшая_компонента; 
 if (Младшая_компонента == Исходный_B)B = ( color )Младшая_компонента; 
 //------------------------------------------------
   
 //==========================================================================================
 if (Координата_исходного_цвета <= 127 )
   {
    Тангенс_угла_старшего_треугольника_1  = Старшая_компонента/Координата_исходного_цвета;
    Тангенс_угла_среднего_треугольника_1  = Средняя_компонента/Координата_исходного_цвета;     
    Тангенс_угла_младшего_треугольника_1  = Младшая_компонента/Координата_исходного_цвета;
     //-----------------------------------------------
    Значение_в_точке_преломления_старшей_компоненты  = Тангенс_угла_старшего_треугольника_1* 128 ;
    Значение_в_точке_преломления_средней_компоненты  = Тангенс_угла_среднего_треугольника_1* 128 ;
    Значение_в_точке_преломления_младшей_компоненты  = Тангенс_угла_младшего_треугольника_1* 128 ;    
     //-----------------------------------------------    
    Тангенс_угла_старшего_треугольника_2  = ( 255 - Значение_в_точке_преломления_старшей_компоненты)/ 128 ;
    Тангенс_угла_среднего_треугольника_2  = ( 255 - Значение_в_точке_преломления_средней_компоненты)/ 128 ;       
    Тангенс_угла_младшего_треугольника_2  = ( 255 - Значение_в_точке_преломления_младшей_компоненты)/ 128 ;
     //-----------------------------------------------    
     for ( int a1 = 0 ; a1 < 128 ; a1++)
      {
       Comp_1 = Тангенс_угла_старшего_треугольника_1*a1;
       Comp_2 = Тангенс_угла_среднего_треугольника_1*a1;
       Comp_3 = Тангенс_угла_младшего_треугольника_1*a1;
       //---------------------------------------------------
       if (Comp_1 > 255 )Comp_1 = 255 ;
       if (Comp_1 > 255 )Comp_2 = 255 ;
       if (Comp_1 > 255 )Comp_3 = 255 ;
       if (Comp_1 < 0 )Comp_1 = 0 ;
       if (Comp_2 < 0 )Comp_2 = 0 ;
       if (Comp_3 < 0 )Comp_3 = 0 ;           
       //---------------------------------------------------
       if (R == Старшая_компонента)Первая_компонента = Comp_1;
       if (R == Средняя_компонента)Первая_компонента = Comp_2;
       if (R == Младшая_компонента)Первая_компонента = Comp_3;
       //---------------------------------------------------
       if (G == Старшая_компонента)Вторая_компонента = Comp_1;
       if (G == Средняя_компонента)Вторая_компонента = Comp_2;
       if (G == Младшая_компонента)Вторая_компонента = Comp_3;
       //---------------------------------------------------
       if (B == Старшая_компонента)Третья_компонента = Comp_1;
       if (B == Средняя_компонента)Третья_компонента = Comp_2;
       if (B == Младшая_компонента)Третья_компонента = Comp_3;
       //---------------------------------------------------
       Все_оттенки[a1] = StringToColor (( string ) MathRound (Первая_компонента) + "," + ( string ) MathRound (Вторая_компонента) + "," + ( string ) MathRound (Третья_компонента));
       //---------------------------------------------------------------------------    
       w1++;
      }
     //------------------------------------------------------------------------------
     for ( int a2 = 255 ; a2 >= w1; a2--)
      {
       Comp_1 = 255 - Тангенс_угла_старшего_треугольника_2*q;
       Comp_2 = 255 - Тангенс_угла_среднего_треугольника_2*q;
       Comp_3 = 255 - Тангенс_угла_младшего_треугольника_2*q;
       //---------------------------------------------------
       if (Comp_1 > 255 )Comp_1 = 255 ;
       if (Comp_1 > 255 )Comp_2 = 255 ;
       if (Comp_1 > 255 )Comp_3 = 255 ;
       if (Comp_1 < 0 )Comp_1 = 0 ;
       if (Comp_2 < 0 )Comp_2 = 0 ;
       if (Comp_3 < 0 )Comp_3 = 0 ;           
       //---------------------------------------------------       
       if (R == Старшая_компонента)Первая_компонента = Comp_1;
       if (R == Средняя_компонента)Первая_компонента = Comp_2;
       if (R == Младшая_компонента)Первая_компонента = Comp_3;
       //---------------------------------------------------
       if (G == Старшая_компонента)Вторая_компонента = Comp_1;
       if (G == Средняя_компонента)Вторая_компонента = Comp_2;
       if (G == Младшая_компонента)Вторая_компонента = Comp_3;
       //---------------------------------------------------
       if (B == Старшая_компонента)Третья_компонента = Comp_1;
       if (B == Средняя_компонента)Третья_компонента = Comp_2;
       if (B == Младшая_компонента)Третья_компонента = Comp_3;
       //---------------------------------------------------
       Все_оттенки[a2] = StringToColor (( string ) MathRound (Первая_компонента) + "," + ( string ) MathRound (Вторая_компонента) + "," + ( string ) MathRound (Третья_компонента)); 
       //---------------------------------------------------------------------------
       q++;
      }
  } 
 //------------------------------------------------------------------------------
 if (Координата_исходного_цвета > 127 )
   {
    Тангенс_угла_старшего_треугольника_1  = ( 255 - Старшая_компонента)/( 255 - Координата_исходного_цвета);
    Тангенс_угла_среднего_треугольника_1  = ( 255 - Средняя_компонента)/( 255 - Координата_исходного_цвета);       
    Тангенс_угла_младшего_треугольника_1  = ( 255 - Младшая_компонента)/( 255 - Координата_исходного_цвета);
     //-----------------------------------------------
    Значение_в_точке_преломления_старшей_компоненты  = 255 - (Тангенс_угла_старшего_треугольника_1* 128 );
    Значение_в_точке_преломления_средней_компоненты  = 255 - (Тангенс_угла_среднего_треугольника_1* 128 );
    Значение_в_точке_преломления_младшей_компоненты  = 255 - (Тангенс_угла_младшего_треугольника_1* 128 );    
     //-----------------------------------------------    
    Тангенс_угла_старшего_треугольника_2  = Значение_в_точке_преломления_старшей_компоненты/ 128 ;
    Тангенс_угла_среднего_треугольника_2  = Значение_в_точке_преломления_средней_компоненты/ 128 ;      
    Тангенс_угла_младшего_треугольника_2  = Значение_в_точке_преломления_младшей_компоненты/ 128 ;
     //-----------------------------------------------    
     for ( int b1 = 0 ; b1 < 128 ; b1++)
      {
       Comp_1 = Тангенс_угла_старшего_треугольника_2*b1;
       Comp_2 = Тангенс_угла_среднего_треугольника_2*b1;
       Comp_3 = Тангенс_угла_младшего_треугольника_2*b1;
       //---------------------------------------------------
       if (Comp_1 > 255 )Comp_1 = 255 ;
       if (Comp_1 > 255 )Comp_2 = 255 ;
       if (Comp_1 > 255 )Comp_3 = 255 ;
       if (Comp_1 < 0 )Comp_1 = 0 ;
       if (Comp_2 < 0 )Comp_2 = 0 ;
       if (Comp_3 < 0 )Comp_3 = 0 ;           
       //---------------------------------------------------
       if (R == Старшая_компонента)Первая_компонента = Comp_1;
       if (R == Средняя_компонента)Первая_компонента = Comp_2;
       if (R == Младшая_компонента)Первая_компонента = Comp_3;
       //---------------------------------------------------
       if (G == Старшая_компонента)Вторая_компонента = Comp_1;
       if (G == Средняя_компонента)Вторая_компонента = Comp_2;
       if (G == Младшая_компонента)Вторая_компонента = Comp_3;
       //---------------------------------------------------
       if (B == Старшая_компонента)Третья_компонента = Comp_1;
       if (B == Средняя_компонента)Третья_компонента = Comp_2;
       if (B == Младшая_компонента)Третья_компонента = Comp_3;
       //---------------------------------------------------
       Все_оттенки[b1] = StringToColor (( string ) MathRound (Первая_компонента) + "," + ( string ) MathRound (Вторая_компонента) + "," + ( string ) MathRound (Третья_компонента));
       //---------------------------------------------------------------------------    
       w2++;
      }
     //------------------------------------------------------------------------------
     for ( int b2 = 255 ; b2 >= w2; b2--)
      {
       Comp_1 = 255 - Тангенс_угла_старшего_треугольника_1*q;
       Comp_2 = 255 - Тангенс_угла_среднего_треугольника_1*q;
       Comp_3 = 255 - Тангенс_угла_младшего_треугольника_1*q;
       //---------------------------------------------------
       if (Comp_1 > 255 )Comp_1 = 255 ;
       if (Comp_1 > 255 )Comp_2 = 255 ;
       if (Comp_1 > 255 )Comp_3 = 255 ;
       if (Comp_1 < 0 )Comp_1 = 0 ;
       if (Comp_2 < 0 )Comp_2 = 0 ;
       if (Comp_3 < 0 )Comp_3 = 0 ;           
       //---------------------------------------------------       
       if (R == Старшая_компонента)Первая_компонента = Comp_1;
       if (R == Средняя_компонента)Первая_компонента = Comp_2;
       if (R == Младшая_компонента)Первая_компонента = Comp_3;
       //---------------------------------------------------
       if (G == Старшая_компонента)Вторая_компонента = Comp_1;
       if (G == Средняя_компонента)Вторая_компонента = Comp_2;
       if (G == Младшая_компонента)Вторая_компонента = Comp_3;
       //---------------------------------------------------
       if (B == Старшая_компонента)Третья_компонента = Comp_1;
       if (B == Средняя_компонента)Третья_компонента = Comp_2;
       if (B == Младшая_компонента)Третья_компонента = Comp_3;
       //---------------------------------------------------
       Этот_цвет = StringToColor (( string ) MathRound (Первая_компонента) + "," + ( string ) MathRound (Вторая_компонента) + "," + ( string ) MathRound (Третья_компонента));
       //---------------------------------------------------------------------------    
       Все_оттенки[b2] = Этот_цвет; 
       //---------------------------------------------------------------------------
       q++;
      }
   }   
 //------------------------------------------------------------------------------  
}
//+------------------------------------------------------------------+
//| Получение значения компонента R                                  |
//+------------------------------------------------------------------+
double GetR( const color aColor)
  {
   return (aColor& 0xff );
  }
//+------------------------------------------------------------------+
//| Получение значения компонента G                                  |
//+------------------------------------------------------------------+
double GetG( const color aColor)
  {
   return ((aColor>> 8 )& 0xff );
  }
//+------------------------------------------------------------------+
//| Получение значения компонента B                                  |
//+------------------------------------------------------------------+
double GetB( const color aColor)
  {
   return ((aColor>> 16 )& 0xff );
  }
//--------------------------------------------------------------------
double Нужная_компонента( double C1, double C2, double C3, int Index)
{
 double Components[ 3 ]; 
 //----------------------------------------------
 Components[ 0 ] = C1;
 Components[ 1 ] = C2;
 Components[ 2 ] = C3;
 //----------------------------------------------
 ArraySort (Components);
 //----------------------------------------------
 return (Components[Index]);
}
//=============================================================================
 
Nikolai Semko :


작동하는 mql5 코드는 어디에 있습니까?

"R = Initial_R"에 관해서는 당신이 옳았지만, 알고리즘의 원리가 이렇게 하면 더 명확하기 때문에 나는 그대로 두었습니다.

알고리즘은 확실히 더 많은 작업이 필요합니다. 그는 완벽하지 않습니다. 아마도 결국 나는 당신과 같은 알고리즘에 도달하게 될 것입니다. 그러나 이 모든 길을 가다 보면 비할 데 없이 더 많은 것을 얻게 될 것입니다. 결국, 나는 지식과 이해의 길을 갈 것입니다. 즉, 알고리즘을 구현하는 창의적인 영역은 단순히 누군가의 솔루션을 복사하는 것보다 훨씬 더 넓습니다. 그래서 저는 항상 제 길을 선택합니다.