2

我在做什么

我有一个场景,它通过算法绘制一个prism具有六边形横截面的 a 和围绕中心一个的 n 层这样的棱镜,这样所有的棱镜一起形成一个更大的六边形形状。

现在,每一排棱镜与下一排棱镜的位移是 sqrt(3)/2 的倍数(因为一个棱镜的尺寸是 <1,sqrt(3)>,因为 sin(120/2°) = sqrt(3 )/2)。

我想,与棱镜尺寸相关的结果位置的浮点值并不总是以在物体之间产生零间隙的方式完全一致。因此,当我将整个东西包裹在 a 中merge并为其分配透明的玻璃材料时,我不会得到平滑、统一的形状。根据 n 的值,我会在合并对象内部的边缘或某些表面的阴影处或两者兼而有之处得到抖动的怪异。

这是我的代码开头的注释块中的一个片段,它解释了 ASCII 艺术中的场景:

       __
    __/  \__
 __/  \ 1/  \__
/  \13/  \ 6/  \
\17/  \ 2/  \10/
/  \14/  \ 7/  \      #3 is at <0,0,0>
\18/  \ 3/  \11/
/  \15/  \ 8/  \
\19/  \ 4/  \12/
   \16/  \ 9/
      \ 5/

整个代码太长,无法在此处粘贴,但可在此处找到。读起来可能也很痛苦,因为我是个糟糕的编码员,而且 POVray 没有#for循环。

我的问题

  • 在合并仅接触表面但不重叠的数学定位对象时,如何考虑浮点值的不可预测性和不精确性?
  • 这甚至应该按照我在 POVray 中想要的方式工作吗?
  • 我在这里做一些非常愚蠢的事情吗?
4

2 回答 2

0

我很确定标准方法是让你的形状重叠更多,或者根本不接触。对于您的具体情况,您可以使您的棱镜稍微大一点或非常小一点。

Povray 还有一个“联合”操作,它与“合并”非常相似,但看起来有点不同。您可能还想尝试一下,看看它是否能给您带来更好的结果。

在图形中,尝试几种方法来查看看起来更好的方法并不少见。:-)

于 2010-01-29T18:45:06.023 回答
0

在我们公司,我们在重合表面上遇到了同样的问题。我们对此的解决方案是生成一个非常小的正随机值的宏。这保证了 (1) 表面永远不会重合 (2) 即使您向两个表面都添加了那么小的值。

于 2011-03-08T09:29:57.573 回答