C# 如何计算三维多段线拉伸的顶点?

C# 如何计算三维多段线拉伸的顶点?,c#,3d,mesh,polyline,C#,3d,Mesh,Polyline,我有一条由多条线段组成的多段线。这条线非常复杂,在3D中到处都是曲线,所以为了简单起见,让我们假设它看起来像这样 我想用3D渲染它。目前,我做了一个非常简单的过程,我只为每个线段生成一个圆柱体: 这是不错的,但在线路改变方向的地方看起来很糟糕。这也是一种浪费——每个方向的改变都需要两倍于严格必要数量的顶点。如果有一种方法可以生成这样的形状,我会更高兴: 起初我并不认为这会太难,但我越是努力,我就越发现它令人惊讶地不平凡。我在C#中工作,如果这是在2D中,我只会使用它,但我找不到任何库或资源

我有一条由多条线段组成的多段线。这条线非常复杂,在3D中到处都是曲线,所以为了简单起见,让我们假设它看起来像这样

我想用3D渲染它。目前,我做了一个非常简单的过程,我只为每个线段生成一个圆柱体:

这是不错的,但在线路改变方向的地方看起来很糟糕。这也是一种浪费——每个方向的改变都需要两倍于严格必要数量的顶点。如果有一种方法可以生成这样的形状,我会更高兴:


起初我并不认为这会太难,但我越是努力,我就越发现它令人惊讶地不平凡。我在C#中工作,如果这是在2D中,我只会使用它,但我找不到任何库或资源来说明如何在3D中解决这个问题。如果解决方案并不总是完美的,或者有时会导致自我交叉或类似的事情,那也没关系。有人有任何指引吗?

所以从数学意义上讲,两个圆柱体的交点是一个椭圆。如果我给你椭圆上的半长轴点和半短轴的位置,你可以计算椭圆上任意数量的节点(比如
numsides

取连接位于点p的两段的节点,并定义椭圆的两个向量,如下所示a是半长轴,b是半短轴

每个连接线段具有单位方向向量e_1e_2,圆柱体具有半径R

然后根据向量ab定义相交椭圆:

然后在椭圆周围找到一个点c,使用以下参数化
t=0..1

下面是一些计算椭圆周围点的
C 35;
代码

// Vectors p, a, b defined
for(int i=0; i<numsides; i++)
{
    double t = (1.0*i)/numsides
    Vector c = p + a*Math.Cos(2*Math.PI*t) + b*Math.Sin(2*Math.PI*t)
    // use/store c as needed for the mesh generation
}
//定义了向量p、a、b
对于(int i=0;i我找到了一个很好的解决方案。从构成多段线的第一条线段周围的一些点开始,计算平行于通过每个点的当前线段的直线与两条当前线段相交形成的平面的交点


可能是这样吗?你能展示一些关于如何定义线段以及如何计算每个圆柱体的几何体的代码吗。@AndréPopovitch这是一个非常聪明的代码,尽管生成的圆柱体是一个内接在圆柱体上的拉伸n边形网格。下一步将是一个额外的循环,扩展/修剪网格,以便o段共享节点。这里的复杂之处在于n边形的方向是随机的(参见
法线
向量),因此两个连续的“圆柱体”将以任意角度彼此相交,使两个n角的交点变得更加复杂。哇,谢谢!自从发布此问题后,我遇到了以下链接:,我认为这是一种类似的方法(计算棱镜的每条线与两个圆柱体应相交的平面的交点).我认为你的解决方案会更好,不过,我现在就要尝试实施它,一旦实施,我会将它标记为已解决