创建 SymPy Triangle 三维点
Creating a SymPy Triangle three-dimensional points
我是 SymPy 的新手,我想从三维点创建一个 SymPy 三角形,例如获取其表面积:
import numpy as np
import sympy as sp
p1 = np.array([1,1,1])
p2 = np.array([3,2,2])
p3 = np.array([2,3,4])
不可能创建这样的三角形对象:
triangle = sp.Triangle(p1,p2,p3,) #Won't work: Nonzero coordinates cannot be removed.
在下一步中,我在 xy 平面上创建了一个平面,z=0,并将三角形的原始点投影到该平面上:
plane = sp.Plane((0,0,0), (1,0,0), (0,1,0))
p1_proj = plane.projection(p1) # Point3D(1,1,0)
p2_proj = plane.projection(p2) # Point3D(2,2,0)
p3_proj = plane.projection(p3) # Point3D(3,3,0)
triangle_proj = sp.Triangle(p1_proj, p2_proj, p3_proj,)
area_proj = triangle_proj.area # 3/2
现在我不再出错了,因为投影点的所有 z 分量都为零,但三角形现在显然也扭曲了,因此它的面积发生了变化:
area_original = 0.5 * np.linalg.norm( np.cross((p2-p1),(p3-p1),) ) # 2.96
有谁知道如何变换我的三角形的点,以便所有的 z 坐标都变为零?甚至可能使用 SymPy(但这不是必需的)。
非常感谢,空间想象力不是我的强项之一!
最好的祝福
马丁
Triangle
可以通过指示三角形每条边的长度来构造,因此无需寻找变换,您只需计算平面中定义的每条边的长度即可:
>>> a,b,c=map(Point,([1,1,1],[3,2,2],[2,3,4]))
>>> Triangle(sss=(a.distance(b),b.distance(c),c.distance(a)))
Triangle(Point2D(0, 0), Point2D(sqrt(6), 0), Point2D(7*sqrt(6)/6, sqrt(210)/6))
>>> _.area
sqrt(35)/2
>>> _.n()
2.95803989154981
讨论了平面到 xy 平面的变换here。
我是 SymPy 的新手,我想从三维点创建一个 SymPy 三角形,例如获取其表面积:
import numpy as np
import sympy as sp
p1 = np.array([1,1,1])
p2 = np.array([3,2,2])
p3 = np.array([2,3,4])
不可能创建这样的三角形对象:
triangle = sp.Triangle(p1,p2,p3,) #Won't work: Nonzero coordinates cannot be removed.
在下一步中,我在 xy 平面上创建了一个平面,z=0,并将三角形的原始点投影到该平面上:
plane = sp.Plane((0,0,0), (1,0,0), (0,1,0))
p1_proj = plane.projection(p1) # Point3D(1,1,0)
p2_proj = plane.projection(p2) # Point3D(2,2,0)
p3_proj = plane.projection(p3) # Point3D(3,3,0)
triangle_proj = sp.Triangle(p1_proj, p2_proj, p3_proj,)
area_proj = triangle_proj.area # 3/2
现在我不再出错了,因为投影点的所有 z 分量都为零,但三角形现在显然也扭曲了,因此它的面积发生了变化:
area_original = 0.5 * np.linalg.norm( np.cross((p2-p1),(p3-p1),) ) # 2.96
有谁知道如何变换我的三角形的点,以便所有的 z 坐标都变为零?甚至可能使用 SymPy(但这不是必需的)。
非常感谢,空间想象力不是我的强项之一!
最好的祝福
马丁
Triangle
可以通过指示三角形每条边的长度来构造,因此无需寻找变换,您只需计算平面中定义的每条边的长度即可:
>>> a,b,c=map(Point,([1,1,1],[3,2,2],[2,3,4]))
>>> Triangle(sss=(a.distance(b),b.distance(c),c.distance(a)))
Triangle(Point2D(0, 0), Point2D(sqrt(6), 0), Point2D(7*sqrt(6)/6, sqrt(210)/6))
>>> _.area
sqrt(35)/2
>>> _.n()
2.95803989154981
讨论了平面到 xy 平面的变换here。