假设给出了两个以上(几乎)的线段。如何计算它们的位置顺序?
我期望从输入中得到的结果
(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
答案 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
排序。