好的,你有4个点A,B,C和D彼此分开,这样每对点之间的距离长度是AB = 7,AC = 5,BC = 6,AD = 9,BD = 5,CD = 7。 Axyz =(0,0,0),Bxyz =(7,0,0),Cxyz =(2.7,4.2,0),Dxyz =(7.5,1.9,4.6)(舍入到第一个小数)。
如果在每组50个点之间有成对距离,则可能需要多达49个维度才能获得所有点的坐标。如果A,B,C,D和E都彼此相隔10个长度单位,那么你需要4个空间维度 - 如果你引入另一个点(F),它与所有其他点也是等距的,那么你将需要5个维度。无论需要多少维度,算法的工作方式都相同(事实上,当需要最大维数时,它的效果最好)。当距离违反三角形规则时,算法也有效 - 例如AB = 3,AC = 4,BC = 13 - 坐标为A = 0,0; B = 3,0;和C = -24,23.66i。如果违反了三角形规则,那么一些坐标将只是虚构的。没什么大不了。
通常对于点G,可以找到坐标(x1st,x2nd,x3rd,x4th,x5th和x6th):
- G1st =((AB ^ 2 + AG ^ 2-BG ^ 2)/ 2)/(第B1)
- G2nd =(((AC ^ 2 + AG ^ 2-CG ^ 2)/ 2) - (C1st * G1st))/(C2nd)
- G3rd =(((AD ^ 2 + AG ^ 2-DG ^ 2)/ 2) - (D1st G1st) - (D2nd G2nd))/(D3rd)
- G4th =(((AE ^ 2 + AG ^ 2-EG ^ 2)/ 2) - (E1st G1st) - (E2nd G2nd) - (E3rd * G3rd))/(E4th )
- G5th =(((AF ^ 2 + AG ^ 2-FG ^ 2)/ 2) - (F1ST G1st) - (F2nd G2nd) - (F3rd G3rd) - ( F4th G4th))/(F5th)
- G6th = SQRT(AG ^ 2-G1st ^ 2-G2nd ^ 2-G3rd ^ 2-G4th ^ 2-G5th ^ 2)
对于第5点,您可以找到使用lawofcosine计算的前三个坐标,并且您可以通过毕达索算法计算找到第四个坐标。对于第6个点,您可以找到前4个坐标和4个lawofcosine计算,然后通过毕达索算法计算得到最终坐标。对于第50个点,您可以找到前48个坐标和48个律法计算,第49个坐标是通过毕达索算法计算得到的。因此,对于50个点,将共计48个毕达哥拉斯定理计算加上1128个律法计算。
- 算法相当简单:
- A始终设置在原点,B设置为x = AB(或者更确切地说是B1st = AB)
- 使用余弦定律((AB ^ 2 + AC ^ 2-BC ^ 2)/ 2)/(B1st)找到C1st
- 然后用毕达哥拉斯定理找到C2nd(sqrt(AC ^ 2-C1st ^ 2))
- 但是如果C2nd = 0?这不一定是个问题,但它可能成为查找D2nd,D3rd,E2nd,E3rd,E4th等的问题。
- 如果AB = 4,AC = 8,BC = 4,那么我们将得到A(0,0),B(4,0)和C(8,0)。如果AD = 4,BD = 8,并且CD = 12,那么找到D的坐标将是没有问题的,这将是D(-4,0)。
- 但是,如果CD不等于12,那么我们就会遇到问题。例如,如果CD = 5,那么我们可能会发现我们应该返回并以不同的顺序计算点的坐标,例如ACDB,这样我们就可以得到A =(0,0,0); C =(8 ,0,0); d =(3.44,2.04,0);和B =(4,-14.55,14.55i)。这是一个相当直观的解决方案,但它会中断算法的流程,因为我们必须倒退并以不同的顺序重新开始。
- 不需要中断计算流程的问题的另一个解决方案是,每当毕康数算术计算给出零时,故意引入错误。 - 而不是零,将0.1或0.01作为C2nd坐标。这将允许人们继续计算剩余点的坐标而不会中断,并且最终结果的准确性将仅受到一点影响(事实上,无论如何,算法都会受到累积舍入误差的影响,所以这没什么大不了的)。在某些情况下,故意引入错误是获得解决方案的唯一方法:
- 再次考虑4点A,B,C和D,距离如AB = 4,AC = 8,BC = 4,AD = 4,BD = 8,CD = 4(我们以前有过CD在12,CD在5)。当CD = 4时,无论您计算点数的顺序如何,都没有确切的解。来吧试试吧。
- A =(0,0,0),B =(4,0,0),C =(8,0,0)......如果你在C2nd引入一个错误,那么你就把它放到0.1而不是零如果C =(8,0.1,0),则可以得到点D的坐标D =( - 4,640,640i)的解。如果你为C2nd引入一个较小的错误,使C =(8,0.01,0),那么得到D =( - 4,6400,6400i)。随着C2nd越来越接近零,D2nd和D3rd沿着同一方向越走越远。当两点之间的距离接近零时,有时会出现类似的结果。如果AB = 5,AC = 8,BC = 0,那么该算法将不会与实际等于零的距离一起工作。但它适用于BC = 0.000001。
- 无论如何,我认为这回答了你一年前提出的问题。