Программа с++ для поиска координат пересечения сторон двух треугольников работает не совсем верно, в чем ошибка?
Если на бумаге реально пересечений 2 или 1, она может выдать 5 штук. Я думаю ошибка где-то в цикле, потому что по отдельности алгоритм работает, проверял в отдельной программе, то есть точку пересечения двух отрезков находит правильно.
Спасибо большое заранее!
код:
ax[2] // x pervogo treugoljnika
ay[2] // y pervogo treugoljnika
bx[2] // x vtorogo
by[2] // y vtorogo
for (int i=0; i<3; i++)
       {
           x=0.0;
           y=0.0;
           if (i+1>3) break;
           a=koefA( ax, ay, ax[i+1], ay[i+1]);
           b=koefB( ax, ay, a );
           for(int j=0; j<3; j++)
           {
               x=0.0;
               y=0.0;
               if (j+1>3) break;
               a1=koefA( bx[j], by[j], bx[j+1], by[j+1] );
               b1=koefB( bx[j], by[j], a1 );
               x=findx(a,b,a1,b1);
               y=findy(a,b,findx(a,b,a1,b1));
                 
                   if ( (x-ax)/(ax[i+1]-ax)==(y-ay)/(ay[i+1]-ay) )
                   {
                       cout << x << " ; " << y << endl;
                       count++;
                   }
           }
       }
       if (count==0) cout << "tochek perese4enija net" << endl;
       cout << endl;
       cout << "prodolzitj (1) zakon4itj (0) ?" << endl;
       cin >> ok;
   } while (ok==1);
   return 0;
}
double koefA (double x1, double y1, double x2, double y2)
{
   double a;
   a = (y2-y1)/(x2-x1);
   return a;
};
double koefB (double x1, double y1, double a)
{
   double b;
   b = y1 - x1*a;
   return b;
};
double findx(double a, double b, double a1, double b1)
{
   double x;
   x=(b1-b)/(a-a1);
   return x;
};
double findy(double a, double b, double x)
{
   double y;
   y=a*x+b;
   return y;
};

Комментарии (11)









нумерация идёт с 0. то есть 0 1 2 - всего 3 элемента, тут всё правильно