Бог*_*пир 2 python 3d polygon line segment
网络上的一切都太复杂了。
所以,我有一个由三个点的数组定义的三角形,和由两个点定义的线段。点 = 3 个浮点数。我想知道它们是否相交。交叉点也会有帮助,但没有那么多。
每个案例有 5 个坐标(15 个浮点数)。我只需要 python 代码或数学公式,希望能提供一些入门信息。
请,关于 python:以这样的方式开始代码:
plane = [[float(input('plane coord1 x:'), float(input('plane coord1 y:'), float(input('plane coord1 z:')], [float(input('plane coord2 x:'), float(input('plane coord2 y:'), float(input('plane coord2 z:')], [float(input('plane coord3 x:'), float(input('plane coord3 y:'), float(input('plane coord3 z:')]]
line = [[float(input('line coord1 x:'), float(input('line coord1 y:'), float(input('line coord1 z:')], [float(input('line coord2 x:'), float(input('line coord2 y:'), float(input('line coord2 z:')]]
Run Code Online (Sandbox Code Playgroud)
或这个:
plane = [[x1,y1,z1], [x2,y2,z2], [x3,y3,z3]]
line = [[X1,Y1,Z1], [X2,Y2,Z2]]
Run Code Online (Sandbox Code Playgroud)
我给你一个数学公式:
\n\n所有三角形都必须有一个方向。方向由三角形顶点的顺序或等价的三角形法线给出。我假设三角形顶点按逆时针顺序 (CCW) 为 p1、p2 和 p3。
\n\n三角形法线 N 为:
\n\nN = (p2 - p1) \xc3\x97 (p3 - p1)\nRun Code Online (Sandbox Code Playgroud)\n\n其中 \xc3\x97 表示“叉积”。然后为每个三角形边创建一个法向量:
\n\nN12 = (p2 - p1) \xc3\x97 N\nN23 = (p3 - p2) \xc3\x97 N\nN31 = (p1 - p3) \xc3\x97 N\nRun Code Online (Sandbox Code Playgroud)\n\n边法线是三角形平面中的向量,但与三角形边正交。侧面法线对于计算点和线之间的距离很有用。
\n\n例如,给定一个位于三角形平面上的点“p”,从 p 到经过点 p1 和 p2 的直线的最小距离为:
\n\nDist = ((p - p1) \xe2\x80\xa2 N12) / |N12|\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa2 表示“点积”,|N12| 是边法线的范数。
\n\n边法线指向三角形之外。距离 Dist = ((p - p1) \xe2\x80\xa2 N12) / |N12| 如果该点在三角形之外,则为正。如果从 p 到三角形边的三个距离均为负,则该点位于三角形内部。
\n\n位于三角形平面内的点 p 是直线与三角形平面的交点。具有点 s1 和 s2 的线段可以用如下函数表示:
\n\nR(t) = s1 + t (s2 - s1)\nRun Code Online (Sandbox Code Playgroud)\n\n其中 t 是从 0 到 1 的实数。
\n\n三角形的平面由单位法线 N 和到原点的距离 D 定义。因此平面方程为:
\n\nN \xe2\x80\xa2 x + D = 0\nRun Code Online (Sandbox Code Playgroud)\n\n其中 x 是满足方程的任意 3D 点。可以使用三角形的任意点计算到原点 D 的距离,例如:
\n\nD = -(N \xe2\x80\xa2 p1)\nRun Code Online (Sandbox Code Playgroud)\n\n当 t 具有以下值时,线段 R(t) 与平面相交:
\n\nt = - (D + N \xe2\x80\xa2 s1) / (N \xe2\x80\xa2 (s2 - s1))\nRun Code Online (Sandbox Code Playgroud)\n\n利用该 t,您可以计算直线和平面的交点。有了该点并使用侧面法线,您就可以知道交点是否在三角形内部。
\n| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |