2016-06-01 41 views
0

Я очень новый на C++.inf выход вычислительные линии склоны

Я написал этот код ниже, который должен сказать мне, если две линии имеют точку пересечения, поэтому я решил, что две строки с равным «M» в уравнении y = Mx + B не должны пересекаться, а все остальные будут.

Программа, похоже, понимает это, но если наклон входящего сегмента линии не равен 0, он выводит inf или -inf.

Почему это происходит?

#include <iostream> 
using namespace std; 
int main() 
{ 
typedef double vector2d[2]; 
vector2d pointA, pointB, pointC, pointD; 
double LineSeg1, LineSeg2; 
double yes, no; 


cout << "Enter x for point A: "; 
cin >> pointA[0]; 
cout << "Enter y for point A: "; 
cin >> pointA[1]; 
cout << "Point A = (" << pointA[0] << "," << pointA[1] << ")" << endl; 

cout << "Enter x for point B: "; 
cin >> pointB[0]; 
cout << "Enter y for point B: "; 
cin >> pointB[1]; 
cout << "Point B = (" << pointB[0] << "," << pointB[1] << ")" << endl; 

cout << "Enter x for point C: "; 
cin >> pointC[0]; 
cout << "Enter y for point C: "; 
cin >> pointC[1]; 
cout << "Point C = (" << pointC[0] << "," << pointC[1] << ")" << endl; 

cout << "Enter x for point D: "; 
cin >> pointD[0]; 
cout << "Enter y for point D: "; 
cin >> pointD[1]; 
cout << "Point D = (" << pointD[0] << "," << pointD[1] << ")" << endl; 

LineSeg1 = ((pointB[1]-pointA[1])/(pointB[0]-pointB[0])); 
cout << "slope segment 1 = (" << LineSeg1 << endl; 

LineSeg2 = ((pointD[1]-pointC[1])/(pointD[0]-pointC[0])); 
cout << "slope segment 2 = (" << LineSeg2 << endl; 


if (LineSeg1 == LineSeg2) { 
    cout << "no\n"; 
} 

else (LineSeg1 != LineSeg2) ;{ 
    cout << "yes\n"; 
} 

return 0; 

} 
+0

'pointB [0] -pointB [0]' 'должно быть pointB [0] -pointA [0]'. Но вам нужно проверить деление на 0. –

+0

Имейте два вектора v0 = от A до B и v1 = C к D. Тогда, если векторное произведение (поперечное произведение) v0 x v1 равно нулю, линии не пересекаются. –

ответ

1

Эта линия:

LineSeg1 = ((pointB[1]-pointA[1])/(pointB[0]-pointB[0])); 

имеет деление на ноль ошибок.

Я считаю, что уравнение должно быть:

LineSeg1 = ((pointB[1]-pointA[1])/(pointB[0]-pointA[0])); 
+0

@TStro Если это исправляет вашу проблему, не забудьте отметить ответ на этот вопрос. – Stephen

+0

Это не исправляет случаи 'pointB [0] == pointA [0]' и 'pointD [0] == pointC [0]' –

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

  • Нет связанных вопросов^_^