Я читал Trilateration на ее странице в Википедии и попытался сделать моя собственная 2D-версия. Однако я столкнулся с некоторыми проблемами, с которыми я надеялся, что кто-то, разбирающийся в математике, сможет мне помочь.
Я делаю это в Unity с C #.
Моя сцена состоит из 3 сфер в центре экрана. Сфера 1 всегда находится на отметке 0,0,0. Рядом с этими сферами у меня есть куб, для которого я хочу переместиться в точку пересечения трех сфер.
Вот мой код:
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 - это моя интерпретация следующих математических формул с вики-страницы:
И мои формулы X и Y следуют этим:
Когда я подключаю все это, я получаю следующие журналы отладки:
P1: 0
P2: 0.0989904
P3: 0.4478847
X is: -0.0097991Y is: 0.247284 // X and Y of cube
Однако, когда я запускаю свой код, куб не входит в точку пересечения, он просто перемещается в центр сферы 1. Когда я перемещаю сферу 1 и сферу 2, мой куб действительно движется, но часто по совершенно другой оси. . Когда я перемещаю сферу 3, кажется, что это никак не влияет на программу.
Правильно ли я настроил триангуляцию? Я что-то упускаю?
P2
формула содержитy
термин, а неy^2
? У вас+ sphere1.transform.position.y
, а не+ (sphere1.transform.position.y * sphere1.transform.position.y)
. - person Jim Mischel   schedule 28.03.2014x
должна быть(P1 - P2 + d^2)/2d
. Вы используете(P1^2 - P2^2)
, что кажется совершенно неправильным, учитывая обозначение. - person Jim Mischel   schedule 28.03.2014