1、根据四点直接计算出交点坐标:
def calPoint(pt1, pt2, imgShape):
pt11X = pt1[0]
pt11Y = pt1[1]
pt12X = pt1[2]
pt12Y = pt1[3]
pt21X = pt2[0]
pt21Y = pt2[1]
pt22X = pt2[2]
pt22Y = pt2[3]
tmpDen = (pt12Y-pt11Y)*(pt22X-pt21X) - (pt12X-pt11X)*(pt22Y-pt21Y)
tmpMol1 = pt21Y*pt22X - pt21X*pt22Y
tmpMol2 = pt11Y*pt12X - pt11X*pt12Y
ptX = ((pt21X-pt22X)*tmpMol2 - (pt11X-pt12X)*tmpMol1)/tmpDen
ptY = ((pt21Y-pt22Y)*tmpMol2 - (pt11Y-pt12Y)*tmpMol1)/tmpDen
if ptX < 0:
ptX = 0
elif ptX > imgShape[1]:
ptX = imgShape[1]
if ptY < 0:
ptY = 0
elif ptY > imgShape[0]:
ptY = imgShape[0]
ptSize = ptY*imgShape[1] + ptX
return [ptX, ptY, ptSize]
2、先分别计算线段的直线方程,然后根据两线段的直线方程求交点:
def calPoint1(pt1, pt2, imgShape):
temp = (pt1[0] - pt1[2])*1.0
if abs(temp) == 0.0:
temp = 0.0001
slope1 = (pt1[1]-pt1[3])/temp
temp = (pt2[0] - pt2[2])*1.0
if abs(temp) == 0.0:
temp = 0.0001
slope2 = (pt2[1]-pt2[3])/temp
temp = slope2-slope1
if abs(temp) == 0.0:
temp = 0.0001
ptX = (pt1[1] - pt2[1] + slope2*pt2[0] - slope1*pt1[0])/temp
ptY = slope1*(ptX-pt1[0]) + pt1[1]
return [ptX, ptY]