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也会给出重合线。
你是对的
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。