如何检测平行线段的顺序?

时间:2017-06-26 11:29:49

标签: algorithm geometry

假设给出了两个以上(几乎)的线段。如何计算它们的位置顺序?

实施例:enter image description here

我期望从输入中得到的结果

(x_0a,y_0a),(x_0b,y_0b),(x_1a,y_1a),(x_1b,y_1b),...,(x_4a,y_4a),(x_4b,y_4b)

L_0 - > L_4 - > L_2 - > L_1 - > L_3

2 个答案:

答案 0 :(得分:4)

选择任意段末尾作为基点。例如,(x0a,y0a)。

为此段制作矢量(不需要标准化)

v = (x0b,y0b) - (x0a,y0a) 

制作垂直向量

n = (-v.y, v.x)

计算线上每个线段任意端的投影值,垂直于v(此值对于线段的两端都相同)

d(i) = (xia-x0a, yia-y0a)
p(i) = Dot(d(i), n)

排序p(i)

答案 1 :(得分:1)

为每个细分构建线性方程:

Ai*x + Bi*y + Ci = 0, where  
    Ai = y_ib - y_ia
    Bi = x_ia - x_ib
    Ci = -A * x_ia - B * y_ia

对于每个等式,x替换为0,并找到y

Bi*y + Ci = 0
y = - Ci / Bi  

然后按结果y对细分进行排序。

当段不与y轴平行时,这是有效的。如果它们与y轴平行,则将y替换为0,找到x,然后按x排序。