【问题标题】:Check If Two Lines Are Exactly Parallel or Not?检查两条线是否完全平行?
【发布时间】:2015-12-06 14:04:11
【问题描述】:

行的格式为:

A1 x + B1 y = C1
A2 x + B2 y = C2

我正在检查:

A1*B2-A2*B1 != 0

但我希望线条应该完全平行而不相同

附: - 只有检查A1*B2-A2*B1 也会给出重合线。

【问题讨论】:

  • 添加另一个检查它们是否不同。那只是比较两条线之间的一些比率。
  • 我正在使用 A1*C2 - A2*C1 !=0 和 B1*C2 - B2*C1 !=0
  • 但它没有处理这种情况,例如:平行于 X 轴或 Y 轴的线
  • 从概念上讲,您可以使用arctan。性能方面,您最好只处理特殊情况。作为编程问题,您应该知道不要依赖浮点运算的精确相等。这个好像和mathematica没什么关系,能把那个标签删掉吗?
  • @agentp 我将如何处理像 3*x = 1 和 4*x = 2 这样的情况

标签: algorithm math geometry lines


【解决方案1】:

你说得对

A1 x + B1 y = C1
A2 x + B2 y = C2

当且仅当A1*B2 - B1*A2 == 0 是并行的。

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

请注意,如果A1*B2 - B1*A2 == 0 存在一个常数k,则有A1*k = A2B1*k = B2。这个常数可以计算为k = A2/A1k = AB/B1。必须注意不要除以0。你不能让A1B1 在一行中等于0,因此你可以使用(伪代码):

if A1 != 0 then k = A2/A1 else k = B2/B1

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

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

【讨论】:

  • 它会处理 C1=0 或 C2=0 之类的情况
  • 我正在检查:如果 (A1*C2 - A2*C1)!=0 或 (A1*C2 - A2*C1)!=0 那么线条明显平行.. 对吗?
  • @uder7 它应该处理像 C1 = 0 和 C2 = 0 这样的情况。如果 LHS 上的两个表达式是彼此的常数倍,那么当且仅当 RHS 是相同的常数时,行重合彼此的倍数。 C1 = C2 = 0 时的特殊情况对应于线通过原点的情况。通过原点的两条平行线相互重合。我不太确定你的第二个问题——如果你在第二个表达式中指的是 B1,B2 而不是 A1,A2,我认为这是正确的
  • 如何检查负斜率
  • 那就是A1*B1 < 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多