二维三角形中的点循环

2024-06-25 07:06:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中有一个函数,用来确定一个点是否在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

这是我的档案里的15分

^{pr2}$

我的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]

我想让我的脚本做的是,如果任何一个点在三角形(或三角形的边上)中,返回三角形p1、p2和p3的(3)特定坐标,以及其中的特定点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())

Tags: inlineabsx1x2p2p3三角形
1条回答
网友
1楼 · 发布于 2024-06-25 07:06:40

也许你想要这样的东西:

def pointsInsideTriangles(points,triangles):
    for (P in points):
        for (t in triangles):
            if isInsideTriangle(P,t[0],t[1],t[2]):
                print("Point " + str(P) + " is inside traingle " + str(t))

总的来说,你会有这样的东西:

^{pr2}$

相关问题 更多 >