检查两条线是否完全平行?

ude*_*er7 1 algorithm math geometry lines

行的形式为:

A1 x + B1 y = C1
A2 x + B2 y = C2
Run Code Online (Sandbox Code Playgroud)

我正在查:

A1*B2-A2*B1 != 0
Run Code Online (Sandbox Code Playgroud)

但我希望这些线应该完全平行而不是相同

PS - 仅检查A1*B2-A2*B1也会给出重合线。

Joh*_*man 5

你是对的

A1 x + B1 y = C1
A2 x + B2 y = C2
Run Code Online (Sandbox Code Playgroud)

平行当且仅当A1*B2 - B1*A2 == 0。

假设它们是平行的,您想要确定它们是否不同。

请注意,如果 则A1*B2 - B1*A2 == 0存在常量 、k和。该常数可以计算为或。必须注意不要除以。你不能在一行中同时拥有两者和等于,因此你可以使用(伪代码):A1*k = A2B1*k = B2k = A2/A1k = AB/B10A1B10

if A1 != 0 then k = A2/A1 else k = B2/B1
Run Code Online (Sandbox Code Playgroud)

一旦确定k,请检查是否C1*k == C2。如果这个等式成立,那么这些线是相同的,如果不成立,那么它们是平行但不同的。

与往常一样,浮点运算必须小心。abs(C1*k - C2) < 0.00000001检查eg而不是检查不是一个坏主意C1*k == C2。