ich eine Funktion in Python zu finden, wenn ein Punkt in einem 2d-Dreieck ist, das wie folgt aussieht:Schleife für Punkte in 2D Dreiecken
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
Mein ‚P‘ ist ein Bündel von (etwa 15) Punkte, das von diesem (Stück) Datei kommen:
PointXY
[387.9385, 200.0]
PointXY
[200.0, 387.9385]
PointXY
[200.0, 387.9385]
PointXY
[200.0, 353.2089]
PointXY
My p1, p2 und p3 ist die Ecke in der Dreiecke Koordinaten. Sie kommen aus diesem (Stück) Datei:
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]
Was ich mein Skript tun wollen, ist IF jeder Punkt (e) ist in (oder auf der Seite) jedem Dreieck (n), kehren Sie mir die (3) spezifische Koordinaten aus diesem Dreieck p1, p2 und p3 und dem spezifischen Punkt P, der darin enthalten ist. Es funktioniert jetzt nur für ein einzelnes P und eine einzelne Menge von p1, p2 und p3, und ich möchte, dass es für alle Punkte P und alle dreieckigen Ecken p1, p2 und p3 funktioniert. Hat jemand eine Idee wie man das in meinem Skript entsprechend anpasst? Mein P und P1, P2 und P3 werden durch diese Skripte genannt:
# 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 ist die Information in dieser Frage klar genug? – Henry