Algorithm 将向量从球体(二十面体)上的栅格捕捉到点

Algorithm 将向量从球体(二十面体)上的栅格捕捉到点,algorithm,unity3d,vector,3d,Algorithm,Unity3d,Vector,3d,这里有一个问题会让你的大脑翻个底朝天,我已经花了相当长的时间来处理它了 假设球体位于三维空间的原点。球体被分割成等距点的网格。形成网格的过程并不重要,但对我来说似乎很简单的是使用常规的3d计算机图形球体生成过程(形成球体的算法如下图所述) 现在,在我有了这样的球体(即某种程度的二十面体)之后,我需要一个计算简单的过程,能够将随机单位向量的(角度)捕捉到最近的二十面体边缘点。如果向量将捕捉到向量相交的三角形的中心点,也可以接受 我想强调的是,这个过程在计算上应该是琐碎的,这一点很重要。这意味着,实

这里有一个问题会让你的大脑翻个底朝天,我已经花了相当长的时间来处理它了

假设球体位于三维空间的原点。球体被分割成等距点的网格。形成网格的过程并不重要,但对我来说似乎很简单的是使用常规的3d计算机图形球体生成过程(形成球体的算法如下图所述)

现在,在我有了这样的球体(即某种程度的二十面体)之后,我需要一个计算简单的过程,能够将随机单位向量的(角度)捕捉到最近的二十面体边缘点。如果向量将捕捉到向量相交的三角形的中心点,也可以接受

我想强调的是,这个过程在计算上应该是琐碎的,这一点很重要。这意味着,实际上在内存中创建一个球体,然后在球体中的每个三角形之间进行搜索的过程不是一个好主意,因为这样的搜索需要访问全局堆和ram,这很慢,因为我需要在低端移动硬件上执行此过程数百万次

程序应通过一组仅基于两个值的数学方程得出结果,即向量和二十面体(即球体)的度数

有什么想法吗?提前谢谢你

============

编辑

我刚刚想到的另一个想法是,在步骤3下面的图中(即,将每个新顶点投影到单位球体上)似乎一点都不重要,因为在对分之后,将每个顶点投影到球体将保留我们试图捕捉到的对分形状的所有角度特征。因此,该任务简化为识别向量穿透的等分次三角形坐标


创建一个包含20个顶级二十面体面坐标项的表格-例如,从中构建它们)

以原点为中心的二十面体的顶点 边长为2,外切球面半径为2sin(2π/5)为 通过以下循环排列进行描述:

并计算相应的中心向量C[](每个面顶点的三个向量之和)

使用向量p和所有C[]的点积最大值(DP)查找最近的中心向量。也许,可以减少计数P成分的检查次数(例如,如果P和一些V[i]的点积是负的,那么没有考虑到面部是V [i]的邻居)。不要确定这种消除比直接将DP与中心进行完全比较所需的时间更短

当确定大三角形面时,确定该面的坐标,并获得u-v中p'的坐标(将AP'分解为AB和AC,其中A、B、C是面顶点)

将u,v乘以2^N(细分度)


u'的整数部分是小三角形的“行”,v'的整数部分是“列”。分数部分是小三角形面内的三线坐标,因此我们可以选择
fu,fv,1-fu-fv的最小值来获得最近的垂直度。计算这个最近的顶点,并根据需要对向量进行规格化。

它不是等距的,您可以查看您是否研究了以下版本:

这是一个问题,有些人花时间研究所有已知的方法来做几何:,看那个家伙是一个自标记测地仪:)

有一页告诉我这个过程是这样的:2+10·4N(12,42162…)

您可以将其简化为一个简单的平面分形三角形,其中每个三角形分成4个较小的三角形,并且每次细分都围绕球体旋转12次

从逻辑上讲,它只是一个旋转了12次的三角形,如果你在那一边求解代码,那么你就得到了测地线球体的最低计算版本

如果您不想将12条边保留为一系列数组,并且希望使用内存较低的版本,那么您可以阅读有关中点细分代码的内容,中点细分有很多版本


我可能完全错过了什么。只是不存在真正的等距测地圆顶,因为三角形不映射到球体,仅用于ICO。

Re,最后一点注意:我认为,如果要对算法进行多次迭代,您仍然需要投影每个顶点,不是吗?否则,在非投影等轴面上的连续拆分似乎会引入较小但明显的错误。另请注意:您是否有实际的球体模型要处理,或者此问题完全是通过数据解决的?如果您的点是通过连续二等分(四等分)创建的您可以按照生成的结构查找点所在的三角形。尝试原始二十面体的每个面,以查看点所在的面。现在那张脸被分成了四张。查看点所在的四个子三角形中的哪一个。这个三角形又被分成四个部分。查看点所在的四个子三角形中的哪一个,依此类推,直到你得到最小子划分的答案。“某种程度上的二十面体”-不确定这意味着什么,你所包含的图表表明你的多面体实际上不是二十面体。你是指二十面体(只有一个多面体叫做二十面体),还是其他东西之一?它不是等距的,因为三角形的中心点和边缘中间的点有不同的比例。点数由2+10·4N表示。。。我不会想得太多,因为这是一项不规则的任务,有例外等等,我会使用3D模型。否则,将球体视为其自身的十二分之一,作为ICOS的一个侧面,计算出球体上的三角形,然后旋转12次。Hi@com.purlinesible当您说“它不是eq”时,您指的是“它”
 V[] = (0, ±1, ±ϕ)
 where ϕ = (1 + √5)/2
 is the golden ratio (also written τ).
 u' = u * 2^N
 v' = v * 2^N
 iu = Floor(u')
 iv = Floor(v')
 fu = Frac(u')
 fv = Frac(v')