提问人:user3384674 提问时间:6/18/2023 更新时间:6/19/2023 访问量:130
在一系列圆柱体/圆锥体上找到两点之间的最短连接并找到连接上的特定点的算法
Algorithm to find the shortest connection between two points on a series of cylinder/cone segements & find a specific point on the connection
问:
我有一系列圆柱形段和圆形锥形段(锥形视锥体)。圆柱体和圆锥段的中心轴与 Z 轴相同。给出了所有线段尺寸(半径、高度、z 轴上的位置)。
此外,给出了两个点 P1(x1,y1,z1) 和 P2(x2,y2,z2)。这些点位于不同圆柱体/圆锥段的表面上。
让我们用字母 C 命名一系列圆柱体/圆锥段表面上的曲线,它是两点 P1 和 P2 之间的最短连接。
还给出了长度 L。L 总是小于曲线 C 的总长度。
我正在寻找一种算法来计算位于 C 上、距离 P1 L 的新点 V 的 (x,y,z) 坐标,即 P1 和 V 之间的曲线长度应该是 L。
我的计划是首先计算 C 从一个圆柱体/圆锥段到下一个圆柱体/圆锥体段的交叉点。然后,我将获得每个圆柱体/圆锥体段中的单独曲线及其长度。然后,我可以找出 V 位于哪个圆柱体/圆锥段中,并计算 V 的 (x,y,z) 坐标。
问题是我如何找到过境点?
(还是我的计划不理想,太复杂了?有没有更简单、更优雅的整体方法?
我将不胜感激对这个问题的任何指导。
答:
我有这样的想法。
此问题与 3D 几何图形有关。 更详细,平面和圆锥体、圆柱体的交点。 Z 轴上的最后一个点是 Q(0,0,h)。 Z轴上的中点为M(0,0,h/2)
计算具有 P1、P2 和 M 等 3 个点的平面的函数。 计算圆锥体和圆柱体的每个边的交点。
该交点是 C 系列,交点是从 P1 到 P2 的最短路径。
在给定条件下,可以计算平面、圆锥和圆柱体的函数。
评论
我的直觉告诉我曲线将位于平面上(与线位于平面上相同),因此:C
P1,P2
找到飞机
where lies where 是(无限)线上的点 穿过中心轴 (z) 的 S 点 所以:
P1,P2,P3
P3'
P1,P2
y=0
x=0
P3 = vec3(0,0,P3'.z)
平面可以由点(任意自)和法线定义:
P1,P2,P3
N
N = cross(P2-P1,P3-P2)
对于每个圆锥边(圆),计算与平面
Vc[]
的交点仅使用靠近线的点,这应该为您提供交叉点。
P1,P2
Vc[]
计算每个交叉点的
C
长度lc[]
它只是将线段长度相加。
线性或二进制搜索
lc[]
选择所需V
所在的 segmen对于少量段,使用线性,对于许多段,使用二叉搜索。只需找到以下位置:
i
(lc[i]<=l) AND (lc[i+1]>=l)
线性插值你的
V
V0 = Vc[i] V1 = Vc[i+1] l0 = lc[i] l1 = lc[i+1] l = wanted length V = V0+(V1-V0)*(l-l0)/(l1-l0)
评论