检查两条线是否完全平行?
Check If Two Lines Are Exactly Parallel or Not?
行的格式为:
A1 x + B1 y = C1
A2 x + B2 y = C2
我正在检查:
A1*B2-A2*B1 != 0
但我希望线条应该完全平行而不是相同
P.S。 - 只有检查 A1*B2-A2*B1
也会给出重合线。
你说得对
A1 x + B1 y = C1
A2 x + B2 y = C2
平行当且仅当A1*B2 - B1*A2 == 0
.
假设它们是平行的,你想判断它们是否不同。
请注意,如果 A1*B2 - B1*A2 == 0
则存在一个常量 k
,其中 A1*k = A2
和 B1*k = B2
。该常量可以计算为 k = A2/A1
或 k = AB/B1
。必须注意不要除以 0
。你不能在一行中同时让 A1
和 B1
等于 0
,因此你可以使用 (pseudocode):
if A1 != 0 then k = A2/A1 else k = B2/B1
确定 k
后,检查是否 C1*k == C2
。如果这个等式成立,那么这些线是相同的,如果不是,它们是平行但不同的。
像往常一样,浮点运算必须小心。检查例如abs(C1*k - C2) < 0.00000001
而不是 C1*k == C2
.
行的格式为:
A1 x + B1 y = C1
A2 x + B2 y = C2
我正在检查:
A1*B2-A2*B1 != 0
但我希望线条应该完全平行而不是相同
P.S。 - 只有检查 A1*B2-A2*B1
也会给出重合线。
你说得对
A1 x + B1 y = C1
A2 x + B2 y = C2
平行当且仅当A1*B2 - B1*A2 == 0
.
假设它们是平行的,你想判断它们是否不同。
请注意,如果 A1*B2 - B1*A2 == 0
则存在一个常量 k
,其中 A1*k = A2
和 B1*k = B2
。该常量可以计算为 k = A2/A1
或 k = AB/B1
。必须注意不要除以 0
。你不能在一行中同时让 A1
和 B1
等于 0
,因此你可以使用 (pseudocode):
if A1 != 0 then k = A2/A1 else k = B2/B1
确定 k
后,检查是否 C1*k == C2
。如果这个等式成立,那么这些线是相同的,如果不是,它们是平行但不同的。
像往常一样,浮点运算必须小心。检查例如abs(C1*k - C2) < 0.00000001
而不是 C1*k == C2
.