看3个点p0,p1和{},你可以看到两个向量{}和{}的相对方向。一个简单的方法是计算两个向量之间的叉积。叉积的x和y分量都是0,因为这两个向量都在xy平面上。所以只需要计算叉积的z分量。在
如果叉积的z分量是正的,你知道第二个向量相对于第一个向量向左,因为第一个向量,第二个向量,和一个正z方向的向量都是右手的。如果叉积为负,则第二个向量相对于第一个向量指向右侧。在
我使用了我疯狂的Python技巧(我大约每年使用一次Python…)将其放入下面的代码中。即使在中间一点,也只能在右边的一点上计算出。为了实现这一点,前几行被保存起来,而它们的打印延迟了。实际计算在calcDir()函数中。在import sys
fileName = sys.argv[1]
dataFile = open(fileName, 'r')
def calcDir(p0, p1, p2):
v1x = float(p1[0]) - float(p0[0])
v1y = float(p1[1]) - float(p0[1])
v2x = float(p2[0]) - float(p1[0])
v2y = float(p2[1]) - float(p1[1])
if v1x * v2y - v1y * v2x > 0.0:
return 'Left'
else:
return 'Right'
lineIdx = 0
for line in dataFile:
line = line.rstrip()
lineIdx += 1
if lineIdx == 1:
print line
elif lineIdx == 2:
line0 = line
print line0
elif lineIdx == 3:
line1 = line
else:
line2 = line
dir = calcDir(line0.split()[1:], line1.split()[1:], line2.split()[1:])
print line1 + ' ' + dir
line0 = line1
line1 = line2
print line2