为圆柱体生成坐标

本文关键字:坐标 圆柱体 | 更新日期: 2023-09-27 17:49:40

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

如何生成三角形的坐标来组成圆柱体

为圆柱体生成坐标

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

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

将每一个对角线分成两半,形成一对三角形。

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

关键是要从选择你想在圆周上有多少开始。10绕圆周是指每一个覆盖36度的圆周;20意味着每个覆盖18度。一旦你有了这个,选择沿长度的数字,使间距等于第一个维度的弦的长度。然后沿着每一个的对角线切成三角形。

顶部和底部圆柱体由三角形平铺而成,方法是从圆心开始画线,与圆周上的第一行和最后一行矩形所形成的点相交。

根据你需要还原圆柱表面的忠实程度来选择数字

从最低的多边形圆柱体开始——想象顶部有一个三角形,底部有一个三角形,每个三角形都有顶点#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]);
}

这只是我的想法,但似乎是有道理的。这还不包括两端的圆圈,但我现在假设你能算出圆圈。

您可以通过计算几何图形来程序地绘制圆柱体。如果你想用它来渲染(大多数情况下),你应该让它支持三角形剥离,如果性能很重要,你还计算映射坐标,可能还有法线。所以从头开始需要一点思考,但如果你懂数学的话,这是可行的。

我在c#中为Unity3D创建了一个模块,它可以做到这一点,并允许你调整参数。观看视频了解它的内容,并从GitHub下载代码。