我有Python中的函数找到,如果一个点是在2D的三角形,看起来像这样:循环为2D点三角形
def isInsideTriangle(P,p1,p2,p3): #is P inside triangle made by p1,p2,p3?
x,x1,x2,x3 = P[0],p1[0],p2[0],p3[0]
y,y1,y2,y3 = P[1],p1[1],p2[1],p3[1]
full = abs (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2))
first = abs (x1 * (y2 - y) + x2 * (y - y1) + x * (y1 - y2))
second = abs (x1 * (y - y3) + x * (y3 - y1) + x3 * (y1 - y))
third = abs (x * (y2 - y3) + x2 * (y3 - y) + x3 * (y - y2))
return abs(first + second + third - full) < .0000000001
我的“P”是一堆(15)分,其中来自这个(片)文件:
PointXY
[387.9385, 200.0]
PointXY
[200.0, 387.9385]
PointXY
[200.0, 387.9385]
PointXY
[200.0, 353.2089]
PointXY
我的P1,P2和P3是在三角形的顶点坐标。他们来自这个(片)文件:
TriangleXY
[193.0371, 0.1218346]
[193.0244, 0.1218346]
[186.0572, 0.4871899]
TriangleXY
[206.9799, 0.1218346]
[206.9756, 0.1218346]
[213.9428, 0.4871899]
TriangleXY
[193.0244, 0.1218346]
[193.0371, 0.1218346]
[200.0, 0.0]
TriangleXY
[206.9756, 0.1218346]
我想我的脚本做的,就是如果有任何点(S)是在(或一侧)任何三角形(S),返回我的(3)来自该三角形p1,p2和p3的特定坐标以及其中的特定点P.它现在只适用于单个P和单个集合p1,p2和p3,我希望它适用于所有点P和所有三角形p1,p2和p3。任何人有一个想法如何相应地调整我的脚本中的这个?我的P和P1,P2和P3都是由这些脚本调用:
# triangle coordinates p1 p2 p3
g = open("spheretop1.stl", "r")
m = open("TriangleXYcoordinates.gcode", "w")
searchlines = g.readlines()
file = ""
for i, line in enumerate(searchlines):
if "outer loop" in line:
p1 = map(float, searchlines[i+1].split()[1:3])
p2 = map(float, searchlines[i+2].split()[1:3])
p3 = map(float, searchlines[i+3].split()[1:3])
m.write("TriangleXY" + "\n" + str(p1) + "\n" + str(p2) + "\n" + str(p3) + "\n")
# Point coordinates P
import json
h = open("PointXYcoordinates.gcode", "r")
searchlines = h.readlines()
file = ""
for i, line in enumerate(searchlines):
if "PointXY" in line:
P = json.loads(searchlines[i+1].strip())
@ idjaw在这个问题中的信息是否足够清晰? – Henry