生成Cylinder的坐标

时间:2011-04-09 21:58:57

标签: c# algorithm math

如何为圆柱体生成坐标,圆柱体由三角形网格组成

如何生成三角形的坐标以构成圆柱体。

4 个答案:

答案 0 :(得分:3)

如果您需要可用于数值模拟的网格,那么这是一个中等难度的问题。如果你只需要一个表面网格图形,那就很容易了。将一个顶点放在每个圆形面的中心。使用圆的参数方程计算围绕边缘的一系列节点(x = r cos t,y = r sin t)。然后你使用该中心节点和成对的边缘节点制作一堆长的三角形以覆盖末端。最后,想象一下,在圆柱体的两侧缠绕着一堆长而细的矩形,用相同的节点定义;将每一个对角线划分成一对三角形。

答案 1 :(得分:2)

如果我们假设你真的想要具有良好纵横比的三角形(所有边彼此成比例),最好的方法是遵循EF希尔的最后建议:

  

将每一个对角线划分成一对三角形。

沿着圆柱体的长度,你会有几排三角形;它不只是一组矩形。

关键是首先要选择围绕圆周的周围数量。围绕圆周的十个意味着每个圆周覆盖36度; 20将意味着每个覆盖18度。完成后,选择沿长度的数字,使间距等于第一个维度的弦长。然后沿着每个对角线切片制作三角形。

顶部和底部圆柱体通过从圆心中绘制线条来平铺三角形,以满足圆周上第一行和最后一行矩形所创建的点。

根据您如何忠实地再现圆柱面来选择数字。

答案 2 :(得分:0)

从最低多边形柱面开始 - 想象一个顶部的三角形和底部的三角形,每个都有顶点#1,2和3.调用顶部三角形A和底部三角形B.创建以下多边形:

  • A1,A2,B1
  • B1,B2,A2
  • A2,A3,B2
  • B2,B3,A2
  • A3,A1,B3
  • B3,B1,A1

换句话说:

for(int i = 0; i < vertices; i++)
{
   polyList.add(circleVertices1[i], circleVertices1[(i+1) % vertices], circleVertices2[i]);
   polyList.add(circleVertices2[i], circleVertices2[(i+1) % vertices], circleVertices1[(i+1) % vertices]);
}

这只是我的头脑,但似乎有道理。这并没有涵盖两端的圆圈,但我现在假设你可以找出圆圈。

答案 3 :(得分:0)

您可以通过计算几何图形以程序方式绘制圆柱。如果你想用它来渲染(大多数情况下)你应该使它支持triangle stripping如果性能很重要,你也可以计算映射坐标和法线。所以从头开始需要做一些思考,但如果你理解数学就可以了。

我在C#中为Unity3D创建了一个模块,它可以完成这个并允许您调整参数。观看video以查看其内容并从GitHub下载代码。