【发布时间】:2021-12-25 13:41:47
【问题描述】:
如何检查两条线是否平行?在纸上你可以评估den 的值,当它为 0 时,线是平行的,但我如何在浮点算术中做到这一点?
bool Tema1::lineLine(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
{
float den = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
float numA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);
float numB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);
float uA = numA / den;
float uB = numB / den;
return uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1;
}
如果我尝试将短线与长线进行比较,den 仍然会很大。
【问题讨论】:
-
当您必须将两个数字相除并且分母可能为零或非常接近时,建议检查该条件以避免除以零或
NaN为结果。实际上,在这种特殊情况下,我会尽量避免除法重写std::signbit(numA)==std::signbit(den) && std::fabs(numA)<=std::fabs(den) && ...之类的条件。顺便说一句,所有这些局部变量都可以是const。
标签: c++ math geometry 2d glm-math