代码之家  ›  专栏  ›  技术社区  ›  user3384674

求一系列圆柱体/圆锥体分段上两点之间最短连接的算法&求连接上的特定点

  •  0
  • user3384674  · 技术社区  · 2 年前

    我有一系列的圆柱段和圆锥段(圆锥台)。圆柱体段和圆锥体段的中心轴与Z轴相同。给出了所有线段尺寸(半径、高度、z轴上的位置)。

    enter image description here

    此外还有两点 P1(x1,y1,z1) P2(x2,y2,z2) 给出了。这些点位于不同圆柱体/圆锥体段的表面上。

    让我们命名一系列圆柱体/圆锥体段的曲面上的曲线,它是两点之间最短的连接 P1 第2页 带着信 c

    还给出了一个长度 l l 总是小于曲线的总长度 c

    我正在寻找一种算法来计算 (x,y,z) 新点的坐标 五、 它位于 c 在远处 l P1 即之间的曲线长度 P1 五、 应该是 l

    我的计划是首先计算 c 从一个圆柱体/圆锥体分段交叉到下一个。然后我会得到每个圆柱体/圆锥体段中的各个曲线以及它们的长度。然后我可以找出哪个圆柱体/圆锥体段 五、 撒谎并计算 (x,y,z) 的坐标 五、

    问题是如何找到交叉点?

    (或者我的计划不理想,太复杂了?有没有更简单、更优雅的整体方法?)

    我非常感谢对这个问题的任何指导。

    0 回复  |  直到 2 年前
        1
  •  0
  •   Spektre    2 年前

    我的直觉告诉我曲线 C 将躺在飞机上(与 P1,P2 线位于),因此:

    1. 找到飞机

      哪里 P1,P2,P3 在哪里 P3' 是(无限)线上的点 P1、P2 哪里 y=0 x=0 该点与中心轴(z)相交,因此:

      P3 = vec3(0,0,P3'.z)
      

      平面可以由点(任意 P1、P2、P3 )和正常 N :

      N = cross(P2-P1,P3-P2)
      
    2. 对于每个圆锥体边(圆),计算与平面的交点 Vc[]

      仅使用更接近的点 P1、P2 这条线应该给你交叉点 Vc[]

    3. 计算 c lc[] 在每个交叉点

      它只是将线段长度相加。

    4. 线性或二进制搜索 lc[] 在需要的地方选择segmen V 谎言

      对于少量段使用线性搜索,而对于许多段使用二进制搜索。只要找到 i 其中:

      (lc[i]<=l) AND (lc[i+1]>=l)
      
    5. 线性插值 五、

      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)
      
        2
  •  -1
  •   Ali Ali    2 年前

    我有这样的想法。

    这个问题与三维几何有关。 更详细地说,平面与圆锥体、圆柱体的交点。 Z轴上的最后一个点是Q(0,0,h)。 Z轴上的中点为M(0,0,h/2)

    计算具有三个点的平面的函数,如P1、P2和M。 计算圆锥体和圆柱体每条边的交点。

    该交点是C级数,交线是从P1到P2的最短路径。

    在给定的条件下,可以计算平面、圆锥体和圆柱体的函数。

    推荐文章