Dahil olmak üzere iki paralel çizgi arasındaki mesafeyi hesaplayın! - sayfa 7

 
Олег avtomat :

herhangi bir uygun şekilde

Gördüğünüz gibi, karmaşık bir şey yok. Sadece biraz düşünmen gerekiyor.

Böyle ayrıntılı bir cevapla, TS'nin zaten kod yazma ile başa çıkacağını düşünüyorum.

Buradaki birçok kişi okul bulmacalarını çoktan unuttu, çünkü okulda anlamını kavrayamadılar.

 

Şekline dönüştü:

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

Ayrıca, ObjectGetValueByShift("Line1",a++) ve ObjectGetValueByShift("Value",a++) ve ObjectGetValueByShift("Line2",a++) aracılığıyla kesişimi ararız

doğru anlamış mıyım?
 
Олег avtomat :

Sorunu çözmek için ihtiyacınız olan:

1. verilen paralel çizgilere bir dik çizin

2. Verilen doğrularla dikin kesişme noktalarını belirleyin

3. kavşak noktaları arasındaki mesafeyi hesaplayın


Resimlerde açıkça:

(çeşitli çizgiler ve aralarındaki mesafeler)



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


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


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


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


İkna edici değil

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

İkna edici değil

Ders kitaplarını açın ve emin olun

 
Teori açık görünüyor ve karmaşık bir şey yok gibi görünüyor, ama ... Ama işte pratikte nasıl yapılacağı ve nasıl çalışacağı ...
 
Itum :

Evet

Maalesef matematikçi değilim
google'dan ne haber?


mavi açı = 90 - çizgi açısı

açıyı radyana çevir

kırmızı karşı bacak = yeşil hipotenüs * sinüs (mavi köşe)

Dikey çizginin her iki çizgisini de geçen bu dalda hipotenüsü zaten bulduk.

Çizginin açısı 90 veya 0 ise, mesafeyi farklı hesaplıyoruz, yani paralel çizgileri yatay veya dikey olarak kesiyoruz.

 
Renat Akhtyamov :
google'dan ne haber?


mavi açı = 90 - çizgi açısı

açıyı radyana çevir

kırmızı karşı bacak = yeşil hipotenüs * sinüs (mavi köşe)

Dikey çizginin her iki çizgisini de geçen bu dalda hipotenüsü zaten bulduk.

Çizginin açısı 90 veya 0 ise, mesafeyi farklı hesaplıyoruz, yani paralel çizgileri yatay veya dikey olarak kesiyoruz.

Hımm...

neden çalışmıyor

   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 /* */ );
 
Her şey basit görünüyor ... ama istenen sonucu elde etmek için çalışmıyor
 
Itum :
Her şey basit görünüyor ... ama istenen sonucu elde etmek için çalışmıyor


Evet, görevinizin çözülemez olması dışında her şey basit ..))

İlk olarak, ObjectGetDouble ( 0 , "Line1" , OBJPROP_ANGLE ) işlevini unutun.. bir eğilim çizgisi için geçerli olmadığı için her zaman 0 döndürür. Özellikle, grafiğin ölçeğine bağlı olmayan ancak çubuk fiyatlarına bağlı olmayan "açısal" eğilim çizgisi için gereklidir.Yani, ölçek değiştiğinde açısı değişmeyecektir. , ama çizginin kendisi parmaklıklardan uçup gidecek..


Ama en büyük sorun bu değil.. Bütün mesele şu ki, 2 paralel trend çizgisi arasındaki dikeyin boyutunu bulmak istiyorsunuz, çizelgeye böyle bir dik çizmeye çalışın.. Ve sonra grafiğin ölçeğini değiştirin.. dik dik olmayacak.. )))) Yani sorun tam olarak sizin dik (ölçeğe ve nasıl gördüğünüze bağlı olarak) ve matematiksel bir dik olarak düşündüğünüz şeydir.

Yakınlaştırılmış fiyat grafiğindeki dikey, optik bir yanılsamadır.

Geometri kullanarak, böyle bir problem en saf haliyle bir veya iki olarak çözülebilir .. ANCAK hesaplamaların matematiksel sonucu grafikte görünenle asla örtüşmez .. Ve tam olarak bir eşleşmeye ihtiyacınız var, yani problem değil çözülebilir. Sadece gereksinimlerinizi basitleştirin, dik değil, aynı anda sadece 2 çizgi arasındaki mesafeyi arayın..

 

sözüm yok

Bu zaten diziden - tüm harfleri biliyorum, kelimeyi okuyamıyorum

Hadi pes etmeyelim, MQL öğrenelim, yapacak az kaldı