gpt4 book ai didi

c# - 二维三边测量问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:33:39 25 4
gpt4 key购买 nike

我一直在阅读 Trilateration via its page on Wikipedia我已经尝试制作自己的 2D 版本。但是,我遇到了一些问题,希望有更好的数学知识的人可以帮助我。

我正在使用 C# 在 Unity 中执行此操作。

我的场景由屏幕中央的 3 个球体组成。球体 1 始终位于标记 0,0,0。在这些球体旁边,我有一个立方体,我想将其移动到 3 个球体的交点。

到目前为止,这是我的代码:

public GameObject sphere1, sphere2, sphere3;
float x, y;
float P1, P2, P3;
public GameObject cube;

// Update is called once per frame
void Update ()
{
P1 = ( sphere1.transform.position.x * sphere1.transform.position.x) + ( sphere1.transform.position.y * sphere1.transform.position.y);

P2 = ((sphere1.transform.position.x - sphere2.transform.position.x) *(sphere1.transform.position.x - sphere2.transform.position.x)) + sphere1.transform.position.y;

P3 = ((sphere1.transform.position.x - sphere3.transform.position.x) *(sphere1.transform.position.x - sphere3.transform.position.x)) +
((sphere1.transform.position.y - sphere3.transform.position.y) *(sphere1.transform.position.y - sphere3.transform.position.y));

x = (P1 * P1) - (P2 * P2);
y = ((P1 * P1) - (P3 * P3)) + (sphere3.transform.position.x * sphere3.transform.position.x) + ((sphere3.transform.position.y * sphere3.transform.position.y) / 2 * sphere3.transform.position.y);

cube.transform.position = new Vector3(x, y, 0);

}

P1、P2 和 P3 是我对维基页面中以下数学公式的解释:

enter image description here

enter image description here

enter image description here

我的 X 和 Y 公式如下:

enter image description here

enter image description here

当我连接所有这些时,我得到以下调试日志:

P1: 0
P2: 0.0989904
P3: 0.4478847
X is: -0.0097991Y is: 0.247284 // X and Y of cube

但是,当我运行我的代码时,立方体并没有进入交点,它只是移动到球体 1 的中心。当我移动球体 1 和球体 2 时,我的立方体确实移动了,但通常在完全不同的轴。当我移动球体 3 时,它似乎对程序没有任何影响。

我是否正确设置了三角测量?我错过了什么吗?

最佳答案

你没看懂wiki的公式。第一组方程用于导出您在此处显示的第二组方程从中,而不是用于导出 r1、r2 和 r3 的值,然后将它们放入第二组方程式,就像你一样。

您计算 r1、r2 和 r3 的方式有误。根据您的代码,r1 始终等于 0,此时它应该等于球体 1 的半径,而不是其坐标的平方和。 r2 - 球体 2 的半径和 r3 - 球体 3 的半径也是如此。

此外,根据 Wiki,sphere1 的中心始终为 (0,0,0),sphere2 的中心位于 x 轴上的某个位置 - 坐标为 (d,0,0),其中 d 是某个值。所以,你的代码应该看起来像这样:

public GameObject sphere1, sphere2, sphere3;
float x, y;
float r1, r2, r3;
public GameObject cube;

void Update ()
{
r1 = sphere1.transform.localscale.x * sphere1.GetComponent<SphereCollider>().radius;

r2 = sphere2.transform.localscale.x * sphere2.GetComponent<SphereCollider>().radius;

r3 = sphere3.transform.localscale.x * sphere3.GetComponent<SphereCollider>().radius;

x = (r1 * r1 - r2 * r2 + sphere2.transform.position.x * sphere2.transform.position.x)/(2*sphere2.transform.position.x);
y = ((r1 * r1 - r3 * r3 + sphere3.transform.position.x * sphere3.transform.position.x + sphere3.transform.position.y * sphere3.transform.position.y) /( 2 * sphere3.transform.position.y)) - (x * sphere3.transform.position.x)/sphere3.transform.position.y;

cube.transform.position = new Vector3(x, y, 0);

}

关于c# - 二维三边测量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22718635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com