【发布时间】:2016-08-19 22:45:28
【问题描述】:
好的,问题来了。我试图通过比较从一系列 csv 文件中读取的多个线段来计算两条线的交点。我已经将每个线段的 x,y 坐标对放入元组内的元组列表中,如下所示:
continuousLine = [((x1,y1),(x2,y2)), ...]
crossingLines = [((x1,y1),(x2,y2)), ...]
我试图弄清楚如何沿着连续线和交叉线进行迭代,以找出每条交叉线沿连续线相交的位置。
基本上我想要(下面列出的伪代码):
for segment in continuousLine:
if segment in crossingLines intersect == True:
return intersection
else:
move on to next crossing line segment and repeat test
我讨厌在这方面寻求帮助,因为我对编码太陌生,无法帮助其他人,但希望有人能和我一起解决这个问题。
我确实有一种方法,我认为一旦我找出迭代器就可以计算交集:
line1 = ()
line2 = ()
def line_intersection(line1, line2):
xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0])
ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1]) #Typo was here
def det(a, b):
return a[0] * b[1] - a[1] * b[0]
div = det(xdiff, ydiff)
if div == 0:
raise Exception('lines do not intersect')
d = (det(*line1), det(*line2))
x = det(d, xdiff) / div
y = det(d, ydiff) / div
return x, y
print line_intersection((A, B), (C, D))
【问题讨论】:
-
你知道如何在给定端点的情况下确定两条线的交点吗?如果是这样,edit 你的问题并添加。
-
我愿意,感谢您的建议并查看上面的帖子编辑。
-
好极了——你可以看到你得到了一些答案。顺便说一句,我建议您
raise一个不太通用的异常,也许是像ValueError('lines do not intersect')这样的特定异常,因为通用异常可以隐藏许多其他问题(例如SyntaxError或KeyboardInterrupt),这会使代码开发更加困难,因为调用者将不得不except Exception:来处理不这样做的情况。