关于生成(N-1)维空间中等距分布的N个单纯形顶点坐标的技术问询
关于生成(N-1)维空间中等距分布的N个单纯形顶点坐标的技术问询
嘿,这个问题挺有意思的——咱们先把已知的例子理清楚,再一步步推通用解法,顺便聊聊你说的递推思路怎么优化。
首先先明确你给出的低维等距点集(都是正则单纯形的顶点):
- 1维空间(N=2)的2个等距点:
(1), (-1),对应线段 - 2维空间(N=3)的3个等距点:
(0, 2), (1.732, -1), (-1.732, -1)(注:1.732是√3的近似值),对应等边三角形 - 3维空间(N=4)的4个等距点:
(1,1,1), (1,-1,-1), (-1,1,-1), (-1,-1,1),对应正四面体
先解决你的第一个小问题:4维空间的5个等距点
用递推思路从3维的点集扩展的话,我们可以这么做:
- 把3维的4个点都加一个0分量,变成4维点:
(1,1,1,0), (1,-1,-1,0), (-1,1,-1,0), (-1,-1,1,0) - 找一个新点,让它到这4个点的距离都等于原来的两两距离(也就是2√2)。计算后得到这个点可以是
(0,0,0,√5)(或者(0,0,0,-√5))
现在这5个点两两之间的距离都是2√2,完全符合要求。
通用生成方法(一步到位,无需递推)
如果要生成任意N≥2时,(N-1)维空间里的N个等距点,有个直接的公式可以一步构造,效率很高:
我们可以构造中心在原点的正则单纯形顶点,步骤如下:
- 第1个点:
(1, 0, 0, ..., 0)(共N-1个分量) - 第k个点(2≤k≤N):第1个分量为
-1/(N-1),第k-1个分量为√(N/(N-1)),其余分量为0
这个构造出来的点两两距离相等,你可以验证低维情况:
- N=3时,点是
(1,0), (-1/2, √(3/2)), (-1/2, -√(3/2)),两两距离都是√3,和用户的例子只是缩放和平移的区别,本质一致。
关于你提到的递推思路:其实并不慢
你说的从低维到高维逐步找下一个点的思路是可行的,而且可以写成代码快速实现,根本不“慢”。核心优化后的步骤是:
- 假设已经有了m维空间中的m+1个等距点(中心在原点),把每个点都加一个0分量,扩展到m+1维空间。
- 新增点的坐标是
(0, 0, ..., 0, c),其中c是常数,满足c² = d² - R²——这里d是原来点的两两距离,R是原来点的模长。 - 因为原来的点是中心在原点的正则单纯形,所以
R² = (m * d²) / (2*(m+1)),代入后就能算出c的值。
比如从3维到4维的例子,d=2√2,R=√3,所以c² = 8 - 3 =5,c=√5,和之前的结果一致。
这种递推方式每一步只需要计算一个常数,然后扩展坐标,代码实现起来非常高效,完全不用担心速度问题。
备注:内容来源于stack exchange,提问作者porente




