를 포함하는 두 평행선 사이의 거리를 계산하십시오. - 페이지 7

 
Олег avtomat :

편리한 방법으로

보시다시피 복잡한 것은 없습니다. 조금만 생각하시면 됩니다.

이런 자세한 답변으로 TS는 이미 코드 작성에 대처할 것이라고 생각합니다.

여기 많은 사람들은 학교에서 의미를 이해할 수 없었기 때문에 학교 퍼즐을 이미 잊어버렸습니다.

 

다음과 같이 밝혀졌습니다.

 // ЗАДАЕМ ДВЕ ТОЧКИ ПРИВЯЗКИ ДЛЯ ГЛАВНОЙ ЛИНИИ: ТОЧКА1(ВРЕМЯ,ЦЕНА) и ТОЧКА2(ВРЕМЯ,ЦЕНА)
   // ЭТА ЛИНИИ ГЛАВНАЯ
   datetime Line1_Врем 0 = Time [ 0 ], Line1_Врем 1 = Time [ 10 ];
   double Line1_Цена 0 = High [ 10 ], Line1_Цена 1 = Low [ 10 ];

   ObjectCreate ( "Line1" , OBJ_TRENDBYANGLE , 0 ,Line1_Врем 0 ,Line1_Цена 0 ,Line1_Врем 1 ,Line1_Цена 1 );
   ObjectSetInteger ( 0 , "Line1" , OBJPROP_STYLE , STYLE_SOLID );
   ObjectSetInteger ( 0 , "Line1" , OBJPROP_COLOR ,Red);
   ObjectSetInteger ( 0 , "Line1" , OBJPROP_WIDTH , 2 );

   // СТРОИМ ПАРАЛЛЕЛЬНУЮ ЛИНИЮ ТОЛЬКО ПО ОДНОЙ ТОЧКЕ-ПРИВЯЗКЕ
   ObjectCreate ( "Line2" , OBJ_TRENDBYANGLE , 0 , Time [ 15 ], Low [ 15 ], 0 , 0 );
   ObjectSetInteger ( 0 , "Line2" , OBJPROP_STYLE , STYLE_SOLID );
   ObjectSetInteger ( 0 , "Line2" , OBJPROP_COLOR ,Lime);
   ObjectSetInteger ( 0 , "Line2" , OBJPROP_WIDTH , 2 );

   // ПРИСВАИВАЕМ ЛИНИИ Line2 ТАКОЙ ЖЕ САМЫЙ УГОЛ КАК В ЛИНИИ Line1 ЧТО БЫ ЛИНИИ БЫЛИ ПАРАЛЛЕЛЬНЫЕ 
   ObjectSetDouble ( 0 , "Line2" , OBJPROP_ANGLE , ObjectGetDouble ( 0 , "Line1" , OBJPROP_ANGLE )); 

   // РИСУЕМ ПЕРПЕНДИКУЛЯРНУЮ ЛИНИЮ К Line1 и Line2
   ObjectCreate ( "Value" , OBJ_TRENDBYANGLE , 0 , Time [ 0 ], Low [ 15 ], 0 , 0 );
   ObjectSetInteger ( 0 , "Value" , OBJPROP_RAY , false );
   ObjectSetInteger ( 0 , "Value" , OBJPROP_COLOR ,Gold);
   ObjectSetInteger ( 0 , "Value" , OBJPROP_WIDTH , 3 );
   ObjectSetDouble ( 0 , "Value" , OBJPROP_ANGLE , 90 + ObjectGetDouble ( 0 , "Line1" , OBJPROP_ANGLE ));

   // ЗАДАЧА: ПОЛУЧИТЬ РАЗМЕР ЖЕЛТОЙ ЛИНИИ МЕЖДУ Line1 и Line2. ОПТИМАЛЬНЫМ И УНИВЕРСАЛЬНЫМ ПАРАМЕТРОМ РАЗМЕРА НАВЕРНОЕ БУДУТ - ПИКСЕЛИ.

다음으로 ObjectGetValueByShift("Line1",a++) 및 ObjectGetValueByShift("Value",a++) 및 ObjectGetValueByShift("Line2",a++)를 통해 교차점을 찾습니다.

내가 올바르게 이해하고 있습니까?
 
Олег avtomat :

문제를 해결하려면 다음이 필요합니다.

1. 주어진 평행선에 수직을 그립니다.

2. 주어진 선과 수직선의 교차점을 결정하십시오

3. 교차점 사이의 거리 계산


사진에서 분명히:

(다양한 선과 그 사이의 거리)



.................................................................. . ...........................


.................................................................. . ...........................


.................................................................. . ...........................


.................................................................. . ...........................


설득력이 없다

 
Алексей Тарабанов :

설득력이 없다

교과서를 펴고 확인하십시오.

 
이론은 명료하고 복잡한 것은 없어 보일 것 같지만 ... 하지만 실제로 하는 방법과 작동하는 방법은 다음과 같습니다 ...
 
Itum :

불행히도 나는 수학자가 아니다
구글은 어떻습니까?


파란색 각도 = 90 - 선 각도

각도를 라디안으로 변환

빨간색 반대쪽 다리 = 녹색 빗변 * 사인(파란색 모서리)

우리는 이미 수직선의 두 선을 교차하는 이 지점에서 빗변을 찾았습니다.

선의 각도가 90 또는 0이면 거리를 다르게 계산합니다. 즉, 평행선을 가로 또는 세로로 교차합니다.

 
Renat Akhtyamov :
구글은 어떻습니까?


파란색 각도 = 90 - 선 각도

각도를 라디안으로 변환

빨간색 반대쪽 다리 = 녹색 빗변 * 사인(파란색 모서리)

우리는 이미 수직선의 두 선을 교차하는 이 지점에서 빗변을 찾았습니다.

선의 각도가 90 또는 0이면 거리를 다르게 계산합니다. 즉, 평행선을 가로 또는 세로로 교차합니다.

흠...

작동하지 않는 이유

   datetime t1 = ( datetime ) ObjectGetInteger ( 0 , "Line1" , OBJPROP_TIME , 0 );
   datetime t2 = ( datetime ) ObjectGetInteger ( 0 , "Line2" , OBJPROP_TIME , 0 );
   double p1 = 0 ;
   double p2 = 0 ;
   
   if (t1 > t2)
   {
      p1 = ObjectGetValueByTime ( 0 , "Line1" , t2);
      p2 = ObjectGetDouble ( 0 , "Line2" , OBJPROP_PRICE , 0 );
   }
   if (t1 < t2)
   {
      p1 = ObjectGetDouble ( 0 , "Line1" , OBJPROP_PRICE , 0 );
      p2 = ObjectGetValueByTime ( 0 , "Line2" , t1);;
   }
   if (t1 == t2)
   {
      p1 = ObjectGetDouble ( 0 , "Line1" , OBJPROP_PRICE , 0 );
      p2 = ObjectGetDouble ( 0 , "Line2" , OBJPROP_PRICE , 0 );
   }
   
   double rez = NormalizeDouble ( MathAbs (p1 - p2) / _Point , 0 ) * MathSin ( ObjectGetDouble ( 0 , "Line1" , OBJPROP_ANGLE ));
   Comment ( "Разница: " , rez /* */ );
 
모든 것이 단순해 보이지만 ... 원하는 결과를 얻기 위해 작동하지 않습니다.
 
Itum :
모든 것이 단순해 보이지만 ... 원하는 결과를 얻기 위해 작동하지 않습니다.


예, 귀하의 작업을 해결할 수 없다는 점을 제외하고는 모든 것이 간단합니다 ..))

먼저 ObjectGetDouble ( 0 , "Line1" , OBJPROP_ANGLE ) 함수를 잊어버리십시오. 추세선에 적용할 수 없기 때문에 항상 0을 반환합니다. 특히 차트의 스케일에 의존하지 않지만 막대의 가격에도 의존하지 않는 "각도" 추세선에 필요합니다. 즉, 스케일이 변경될 때 각도가 변경되지 않습니다. , 그러나 라인 자체가 막대에서 날아갈 것입니다.


그러나 이것이 가장 큰 문제는 아닙니다.. 요점은 두 평행 추세선 사이의 수직선의 크기를 찾고 차트에 그러한 수직선을 그려보십시오. 그런 다음 차트의 축척을 변경하십시오.. 수직선은 수직이 아닐 것입니다.. )))) 즉, 문제는 정확히 수직선(척도와 보는 방법에 따라 다름)과 수학적 수직선으로 간주하는 것입니다.

가격 확대 차트의 수직선은 착시 현상입니다.

기하학을 사용하면 이러한 문제는 하나 또는 둘의 가장 순수한 형태로 해결할 수 있습니다. 그러나 계산의 수학적 결과는 그래프에 표시되는 것과 결코 일치하지 않습니다 .. 그리고 정확히 일치해야하므로 문제가 아닙니다. 풀 수 있는. 요구 사항을 단순화하고 수직선이 아닌 동일한 시점에서 두 선 사이의 거리를 찾으십시오..

 

할 말이 없다

이것은 이미 시리즈에서 - 나는 모든 글자를 알고 단어를 읽을 수 없습니다

가자, 포기하지 말고 MQL을 배우자, 할 일이 얼마 남지 않았다