如何在隐含的曲面上分布点,以将其更密集地集中在曲率较高的区域?

我已经考虑过随机添加点,并拒绝基于曲率不需要的点,但是我想我想知道是否有更好的方法可以在类似曲率的区域上提供更均匀的分布,同时仍可以提供高曲率区域所需的更高密度。

我正在专门研究将这些点用于表面的三角剖分,我不想创建比我相对平坦的零件更多的三角形。


这将应用于具有已知导数的形状,因此曲率为可以计算给定的点。

这不必是实时方法。

评论

您是否在寻找一种更准确的方式从分布中进行抽样,而无需进行蒙特卡洛检验?如果您不太在意计算方法(即您正在寻找一种准确的方法,而不是计算工作),那么我可以提供一种解决方案,但是可以对其进行优化。

您知道分析功能还是只能采样?您知道它的分析导数吗?

@JulienGuertault我的编辑是否明确?

@Lukkio我先要准确性,然后在该方法可行后再进行优化。

您可能想看看有限元方法,这些方法也使用三角剖分(或更笼统地说:单纯形),并且经常面临在选定区域需要更高采样密度的问题。他们一定会为此开发算法。

#1 楼

我将尝试应用的想法如下:我以曲线为例,但是对于曲面的应用应该很简单。

假设我们有一条曲线$ \ gamma $统一参数化。假设曲线的参数为$ s $。您的目标是对与$ s $的值相对应的点进行采样,以使曲率高。

如果获得曲率$ c $的大小,那么这也是$ s $的函数。因此,如果对函数$ | c | $进行归一化,则将获得概率分布。如果获得这种分布的积分,则将具有累积分布。我们将此累积函数称为$ C(s)$。

已知该累积函数给出的分布中的采样问题,因此,基本上,一旦对一组值$ s_0,s_1进行采样, \ dots,s_n $,该值将与兴趣点有关。

此方法在表面情况下的应用应该是笔直的,因为基本上您具有二维累积分布函数,但是采样问题是完全一样的。

只提供一些细节,它基本上是从分布中采样,因为累积函数涉及两个步骤:


在$ [0,1] $区间取一个随机值,例如说$ k $
求解方程$ C(s)= k $。

这种方法是精确的当然这很昂贵,但是如果您喜欢这种方法,就可以进行优化。

评论


$ \ begingroup $
尚无乳胶支持。
$ \ endgroup $
– joojaa
15年8月5日在19:13

$ \ begingroup $
我一直在寻找可以与隐式表面一起使用的东西,即使它没有参数化也是如此。如果导数已知,是否总是可以参数化隐式曲面?
$ \ endgroup $
–trichoplax
15年8月5日在21:10

$ \ begingroup $
任何可以从MathJax公式中受益的问题都可以添加到该元答案中,以增加获得MathJax的机会。 (已经添加了这个。)
$ \ endgroup $
–trichoplax
2015年8月5日在21:12



$ \ begingroup $
请记住,您需要的是从曲率导出的分布函数,您说可以导出所有内容(通过哪种方式获得的表面?即方程式)。无论如何...“衍生产品已知”是什么意思?您知道导数的显式吗?还是隐式的? (即通过微分方程描述)?
$ \ endgroup $
–user8469759
15年8月5日在21:27

$ \ begingroup $
顺便说一句...如果曲线/曲面是代数的(我的意思是用多项式或有理乘数表示),则有一些基于bspline / nurbs的计算方法可以解释如何对这些曲线进行参数化。我在docs.lib.purdue.edu/cgi/…处浏览了一下,可以在我最喜欢的一本有关Nurbs的书(蒂勒的NURBS书)中找到更多的方法(甚至是高级方法)。
$ \ endgroup $
–user8469759
15年8月5日在21:37

#2 楼

很好的起点是SIGGRAPH 1994中发表的经典论文《使用粒子采样并控制隐式曲面》。

论文中描述了一种简单的粒子模拟,使用基于物理的粒子系统采样隐式对象
(Computers&Graphics,1996)曲线也适用于曲面;有关示例,请参见动态纹理。

有关最新示例,请参见对隐式表面的形状和色调描述(Computers&Graphics,2011)。

#3 楼

以下朴素的方法可能不会产生Lhf给出的分布均匀的点,但是它应该更容易实现并且计算速度更快:

对于两个点,$ x $和$ y $让$ d(x,y)$表示您希望点具有$ x $和$ y $平均曲率的平均距离,例如,某个常数乘以$ x $和$ y $平均曲率的倒数。

现在依次建立点$ A $的集合:


选择一个随机点$ x $并添加两个点,这样所有三个点形成边长为$ d(x,x)$的等边三角形。
将所有点添加到$ A $并将它们标记为相邻点。

重复以下操作,直到没有邻接在$ A $中不再存在:


从$ A $中选择两个相邻的点$ x $和$ y $。将它们标记为不相邻。
考虑点$ z $与这两个点的距离为$ d(x,y)$。在这两个可能的点中,选择一个指向$ A $的点(这需要一些工作,但应该很简单)。

检查$ z $是否比$ d(x,y)更近$到$ A $中仍与另一个点相邻的任何点。


如果是,则将其丢弃。
如果否,则将$ x $和$ z $标记为以及相邻的$ y $和$ z $并将$ z $添加到$ A $。






最后,$ A $应该是符合您条件的点的集合。您刚刚创建了一个三角剖分,但它可能是病理性的,因此您应该重新对这些点进行三角剖分。