我在3D空间中有4个点定义的网格。我需要一种算法,将该网格细分为任意水平和垂直大小的细分。如果细分尺寸不是网格尺寸的精确除数,则边缘部分将更小。
我发现的所有细分算法都只将网格细分为2的精确幂。有没有人知道可以做我想做的事情?
如果做不到这一点,我对可能实现的想法是旋转网格,使其在Z轴上平坦,细分为2D,然后转换回3D。那是因为我的头脑很难找到3D;)有什么更好的建议吗?
如果有任何不同,请使用C#。
答案 0 :(得分:2)
如果你只需要处理3D中的矩形,那么你只需要获得两个边缘矢量,然后就可以生成细分矩形的所有内部点。例如,假设您的四边形由(x0,y0),...,(x3,y3)
定义,以绕过四边形。相对于点(x0,y0)
的边矢量是u = (x1-x0,y1-y0)
和v = (x3-x0,y3-y0)
。
现在,您可以生成所有内部点。假设您希望第一条边沿有M条边,第二条边需要N条,那么内部点只是
(x0,y0) + i/(M -1)* u + j/(N-1) * v
其中i
和j
分别来自0 .. M-1
和0 .. N-1
。您可以通过在纸上进行处理来确定哪些顶点需要连接在一起。
这种均匀细分也适用于三角网格,但每条边必须具有相同数量的细分边。
如果要细分一般网格,可以对每个单独的三角形/四边形进行细分。由于所有原始平面保持平坦,因此这种均匀细分导致质量差的网格。如果你想要更复杂的东西,你可以看看Loop subidivision,Catmull-Clark等。这些通常被限制在两个级别的力量,但如果你研究原始的配方,我认为你可以得到非细分模板两个部门的权力。这背后的理论比我在这里可以合理描述的更为复杂。
答案 1 :(得分:0)
现在你已经更清楚地解释了一些事情,我没有看到你的问题:你有一个矩形,你想把它分成矩形瓷砖。因此,您想要的网格点在两个正交方向上有规律地间隔开。在2D中,这肯定是微不足道的?在3D中,尽管数学有点棘手,但它也是微不足道的。
在我的脑海中,我猜想从3D转换为2D(并同时将矩形与坐标轴对齐)然后计算网格点,然后转换回3D可能就是这么简单(和耗费CPU时间)首先在3D中完成全部工作。
是的,使用C#意味着我无法提出代码来帮助您。
如果我错过了这一点,请评论或编辑您的问题。