Berechnen Sie den Abstand zwischen zwei parallelen Linien einschließlich ! - Seite 7

 
Олег avtomat:

wie Sie wollen.

Wie Sie sehen können, ist das Ganze nicht kompliziert. Man muss nur ein bisschen darüber nachdenken.

Mit einer so ausführlichen Antwort wird TC in der Lage sein, den Code selbst zu schreiben.

Viele Menschen hier haben die Schulaufgaben bereits vergessen, weil sie deren Bedeutung in der Schule nicht verstanden haben.

 

Die Ausgabe ist:

 // ЗАДАЕМ ДВЕ ТОЧКИ ПРИВЯЗКИ ДЛЯ ГЛАВНОЙ ЛИНИИ: ТОЧКА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. ОПТИМАЛЬНЫМ И УНИВЕРСАЛЬНЫМ ПАРАМЕТРОМ РАЗМЕРА НАВЕРНОЕ БУДУТ - ПИКСЕЛИ.

Anschließend wird durch ObjectGetValueByShift("Line1",a++) und ObjectGetValueByShift("Value",a++) und ObjectGetValueByShift("Line2",a++) nach dem Schnittpunkt gesucht

Lese ich das richtig?
 
Олег avtomat:

Um das Problem zu lösen, müssen Sie:

1. eine Senkrechte zu den gegebenen parallelen Linien zeichnen

2. Bestimmen Sie die Schnittpunkte der Senkrechten mit den gegebenen Linien

3. Berechnen Sie den Abstand zwischen den Kreuzungspunkten.


Deutlich in Bildern:

(unterschiedliche Linien und Abstände zwischen ihnen)



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


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


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


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


Nicht überzeugend.

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

Nicht überzeugend.

Schlagen Sie Ihre Lehrbücher auf und lassen Sie sich überzeugen

 
Die Theorie scheint klar zu sein und es scheint nichts Kompliziertes zu geben, aber... Die Frage ist nur, wie man das in der Praxis umsetzt und wie es funktionieren wird...
 
Itum:

Ja

Leider bin ich kein Mathematiker (
Wie wäre es, wenn Sie es googeln?


blauer Winkel = 90 - Linienwinkel

Winkel in Bogenmaß umrechnen

roter entgegengesetzter Katheter = grüne Hypotenuse * Sinus (blauer Winkel)

Wir haben die Hypotenuse bereits in diesem Thema gefunden, indem wir beide Linien senkrecht gekreuzt haben

Wenn der Winkel der Linie 90 oder 0 beträgt, muss die Entfernung auf andere Weise ermittelt werden, d. h. durch horizontale oder vertikale Kreuzung paralleler Linien.

 
Renat Akhtyamov:
Wie wäre es, wenn Sie es googeln?


blauer Winkel = 90 - Linienwinkel

Winkel in Bogenmaß umrechnen

roter entgegengesetzter Katheter = grüne Hypotenuse * Sinus (blauer Winkel)

Wir haben die Hypotenuse bereits in diesem Thema gefunden, indem wir beide Linien senkrecht gekreuzt haben

Wenn der Winkel der Linie 90 oder 0 beträgt, wird die Entfernung auf andere Weise gezählt, d. h. durch horizontale oder vertikale Kreuzung paralleler Linien.

Hmmm...

Aus irgendeinem Grund klappt es nicht

   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 /* */);
 
Es scheint einfach zu sein ... Aber es führt nicht zu dem gewünschten Ergebnis
 
Itum:
Es scheint einfach zu sein ... aber es bringt nicht das gewünschte Ergebnis


Ja, alles ist einfach, nur Ihre Aufgabe ist nicht lösbar.... ))

Vergessen Sie zunächst die FunktionObjectGetDouble(0,"Line1",OBJPROP_ANGLE), die immer 0 zurückgibt, da sie nicht auf eine Trendlinie angewendet werden kann. Sie wird insbesondere für die "Winkel"-Trendlinie benötigt, die nicht von der Chart-Skala abhängt, ABER auch nicht von den Balkenpreisen. Das heißt, der Winkel ändert sich nicht, wenn der Maßstab geändert wird, aber die Linie selbst bewegt sich von den Balken weg...


Aber das ist nicht das größte Problem... Es geht darum, die Größe der Senkrechten zwischen 2 parallelen Trendlinien zu finden, indem man versucht, eine solche Senkrechte in den Chart zu zeichnen... Und dann ändern Sie den Maßstab des Diagramms... das Lot wird nicht mehr senkrecht... )))) Das Problem ist also genau das, was Sie für ein Lot halten (abhängig vom Maßstab und davon, wie Sie es sehen) und ein mathematisches Lot.

Das Lot auf einem preislich skalierten Diagramm ist eine optische Täuschung.

Mit Hilfe der Geometrie wird dieses Problem in seiner reinen Form in einem Zug gelöst... ABER das mathematische Ergebnis der Berechnung wird niemals mit dem auf dem Diagramm zu sehenden Ergebnis übereinstimmen... Und Sie brauchen genau die gleiche Menge, also ist das Problem unlösbar. Vereinfachen Sie Ihre Anforderungen und suchen Sie nicht nach einer Senkrechten, sondern nur nach dem Abstand zwischen 2 Linien zum gleichen Zeitpunkt...

 

Ich habe keine Worte.

Ich kenne alle Buchstaben, aber ich kann das Wort nicht lesen

Komm schon, komm schon, gib nicht auf, studiere MQL, es ist nur eine Frage der Zeit
Grund der Beschwerde: