我有以下细分线的终点。
第1行:
A = (X1, Y1)
B = (X2, Y2)
第2行:
C = (X3, Y3)
D = (X4, Y4)
我想得到这两个线段的交点。
我试过这样:
def intersectionfn(l1,l2):
x1,y1 = l1.src.x, l1.src.y
x2,y2 = l1.dst.x, l1.dst.y
x3,y3 = l2.src.x, l2.src.y
x4,y4 = l2.dst.x, l2.dst.y
try:
xnum = float(((x1*y2-y1*x2)*(x3-x4))-((x1-x2)*(x3*y4-y3*x4)))
xden = float(((x1-x2)*(y3-y4))-((y1-y2)*(x3-x4)))
#print xnum, xden
xcoor = float(xnum)/xden
#print xcoor
ynum = float((x1*y2-y1*x2)*(y3-y4) - (y1-y2)*(x3*y4-y3*x4))
yden = float((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4))
#print ynum, yden
ycoor = float(ynum)/yden
#print ycoor
return Point(xcoor,ycoor)
except:
print "No intersection.. 0/0 attempted"
但是我得到了无限长线的输出。我不知道如何为线段找到它。如果有任何算法/数学规则,请向我建议。我会实现它。
答案 0 :(得分:0)
交叉乘积PQ x QR的符号(我们称之为Cross(P,Q,R))告诉您P是否在通过QR的线的左侧或右侧。
如果A和B位于CD的两侧,则两个段将相交,而C和D位于AB的相对侧。
此外,函数Cross是线性的,因此Cross((1-t)A + t B,C,D)=(1-t)交叉(A,C,D)+ t交叉(B,C) ,D)。如果计算取消此表达式的t,则会引导您到交点。