谁能告诉我为什么它对输入 0 0 0 0 0 0
不起作用?
struct pPoint
{
float x, y;
};
struct line
{
pPoint x1, x2, x3;
};
bool judge(line& x)
{
if (x.x1.x == x.x2.x == x.x3.x)
return true;
else
{
if (x.x1.y == x.x2.y == x.x3.y)
return true;
else
{
float a = (x.x1.y - x.x2.y) / (x.x1.x - x.x2.x);
float b = x.x1.y - x.x1.x*a;
if (x.x3.y == a*x.x3.x + b)
return true;
return false;
}
}
}
int main()
{
line x;
cin >> x.x1.x >> x.x1.y >> x.x2.x >> x.x2.y >> x.x3.x >> x.x3.y;
cout << (judge(x) ? "YES" : "NO") << "\n";
return 0;
}
它检查 3 个点是否共线,它工作正常,但对于输入
0 0 0 0 0 0
它显示 NO
或崩溃,它适用于 1 1 1 1 1 1
等。
当我调试它时,它只是跳过了判断中的第一个if
。
最佳答案
它不起作用,因为在这一行中:
if (x.x1.x == x.x2.x == x.x3.x)
您首先将 int 与 int x.x1.x == x.x2.x
进行比较,然后将 int 与 bool 进行比较
bool == x.x3.x。
您必须像这样将每个点与其他点进行比较:
if (x.x1.x == x.x2.x && x.x2.x == x.x3.x && x.x1.x == x.x2.x )
如果你在任何地方都改变它,它应该可以工作;)
关于c++ - 3 个共线点 - 一些错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423792/