Программа с++ для поиска координат пересечения сторон двух треугольников работает не совсем верно, в чем ошибка?
Если на бумаге реально пересечений 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 элемента, тут всё правильно