2016-11-24 6 views
-1

, чтобы начать с того, что я сделал простой код, который проверяет, сталкиваются ли 2 строки на основе 4 точек, заданных их координатами x и y. Он проверяет, совпадает ли угол (переменная k в моем коде) обеих линий, в этом случае они параллельны, иначе они сталкиваются. Угол (k) был рассчитан на основе математического равенства Click here [k = (y2-y1)/(x2-x1)]. Теперь я не уверен, как понять, в чем они столкнулись. Я был бы очень признателен, если бы вы могли мне помочь. Заранее спасибо.Найти координаты пересечения линейных линий в C#

Мой код: (метод, который я называю, чтобы вычислить угол)

static void MetodaTrazenjaPresjeka(Duzina d1, Duzina d2) 
    { 

     int k11 = d1.Krajy - d1.Pocy; //y2-y1 - first line 
     int k12 = d1.Krajx - d1.Pocx; //x2-x1 - first line 
     double k1 = (double)k11/k12; //angle of the first line 
     int k21 = d2.Krajy - d2.Pocy; //y2-y1 - second line 
     int k22 = d2.Krajx - d2.Pocx; //x2-x1 - second line 
     double k2 = (double)k21/k22; //angle of the second line 
     if (k1 == k2) 
     { 
      //they are parallel 
      Console.WriteLine("MOJA METODA:"); 
      Console.WriteLine("-----------------------------------"); 
      Console.Write("Pravci zadani tockama su paralelni!"); 
     } 
     else 
     { 
      //lines are colliding 
      Console.WriteLine("MOJA METODA:"); 
      Console.WriteLine("-----------------------------------"); 
      Console.Write("Pravci zadani tockama se sijeku!"); 
     } 
    } 

код в классе Duzina: уравнение

class Duzina 
{ 
    private int pocx, pocy, krajx, krajy; 
    //read/write attribute for the x coordinate of the first point 
    public int Pocx 
    { 
     get { return pocx; } 
     set { pocx = value; } 
    } 
    //read/write attribute for the y coordinate of the first point 
    public int Pocy 
    { 
     get { return pocy; } 
     set { pocy = value; } 
    } 
    //read/write attribute for the x coordinate of the second point 
    public int Krajx 
    { 
     get { return krajx; } 
     set { krajx = value; } 
    } 
    //read/write attribute for the y coordinate of the second point 
    public int Krajy 
    { 
     get { return krajy; } 
     set { krajy = value; } 
    } 
    //method that will print out coordinates of the given points 
    public void Ispis() 
    { 
     Console.Write("Pocetna tocka: ({0},{1})",Pocx,Pocy); 
     Console.Write("Krajnja tocka: ({0},{1})", Krajx, Krajy); 
    } 
} 
+0

Возможный дубликат [Как вы обнаруживаете, где пересекаются два отрезка?] (http://stackoverflow.com/questions/563198/how-do-you-detect -where-two-line-segment-intersect) – KISKE

+0

Не хотите использовать авто-свойства, чтобы сделать код короче? –

+0

Я нахожусь в старшей школе, и это способ убедиться, что я не забываю, что мы изучаем в классе @ThomasWeller –

ответ

0

линия: y = m * x + b

1) m_d1 = (d1.y2 - d1.y1)/(d1.x2 - d1.x1) 
    b_d1 = d1.y1 - m_d1 * d1.x1 
    (same for m_d2 and b_d2) 

2) intersect.y = m_d1 * intersect.x + b_d1 
    intersect.y = m_d2 * intersect.x + b_d2 

3) m_d1 * intersect.x + b_d1 = m_d2 * intersect.x + b_d2 

4) intersect.x = (b_d2 - b_d1)/(m_d1 - m_d2) 

Теперь подключи пересекаются. x, который был получен из 4) обратно в e ither в 2) получить intersection.y

+0

Это не вопрос кодирования, а математический вопрос, поэтому я представил математику, и вы можете написать код (что тривиально). – Danny

Смежные вопросы