在快艇上,需要在一组边缘上建立一个锥。
边被认为是次单纯形,去掉了一个顶点。这是必要的,添加一个顶点到一个边缘将形成一个单纯形,就好像这个顶点刚刚被替换。
例如,当以顶点{p0、p1、p2}定义三角形时,将简单存储为顶点列表:{p1、p2}、{p2、p0}、{p0、p1} -按此索引顺序排列。现在,当在边顶点列表的末尾添加新的顶点p时,新的三角形是:{p1,p2,p},{p2,p0,p},{p0,p1,p},它们的方向与原始三角形倾斜的方向相同。
对于三角形,与p1相对的边与剩余顶点的顺序相反。对于四面体,则是p0和p2。
什么是正确的存储边的方式,或正确的方法来找出什么时候反向顶点的顺序?
好吧。一般来说,存储顶点集不足以表示一个单纯形,如果它的方向很重要的话。同一集合可以表示具有不同体积符号的等效简单数。列表可以保留方向,但从顺序派生它并不简单。因此,集合和列表本身都不是很好的解决方案(既表示单纯形,又表示它们的边)。
发布于 2011-01-16 23:29:09
最好使用一个列表或顶点元组来表示一个单纯形;问题是如何确定顶点的顺序。(由于我不完全确定任意尺寸的快艇的确切要求,我将在下面一般性地说明.)
如果您轮流用一个新的点v[i]替换每个顶点p,那么最简单的一致操作就是替换它所替换的点。因此,对于三角形{v0,v1,v2},您将得到新的三角形{p,v1,v2}、{v0,p,v1}和{v0,v1,p}。
如果您想重新排序顶点(例如,使p位于末尾),那么您应该记住,交换任何两个顶点都会逆转单纯形的方向。所以,为了保持这个方向,你必须做一个偶数的掉期。
在上面的例子中,将p与最终顶点交换将反转方向,除非p已经是最后的顶点。在这种情况下,您可以通过交换前两个顶点来解决这个问题。(请注意,这是一个唯一的解,只适用于3-顶点单纯形--它不适用于2-单纯形,以及N>3-单纯形的多解之一)。
你也可以把它看作是旋转最初的3-单纯形的顶点列表的问题。不幸的是,这只适用于奇点单纯形。对于大小为N的顶点列表,旋转涉及N-1交换,因此对于具有偶数顶点的单纯形,旋转将改变方向。
发布于 2011-01-17 19:40:46
而单纯形的边缘本身并没有方向。
只有N维中的N-单纯形定义了定向.它是由N个向量π-P0(符号体积)的交叉积决定的。对于高维空间中的较低维数,不能建立这样的交叉积。
对于这个任务(用另一个边构建新的简单元素),一个边可以用一个(有序的)顶点列表和一个索引来表示,在那里添加新的点,使其与删除的顶点位于同一边。考虑到列表的循环顺序(不确定它是否普遍有效),可以对其进行旋转,以便索引为0或1。
https://stackoverflow.com/questions/4708542
复制相似问题