как преобразовать одну декартову систему в другую? - PullRequest
1 голос
/ 10 июля 2010

2D проблема: я измеряю положение 3 концов треугольника в декартовой системе.Теперь я перемещаю систему (треугольник) в другую декартову систему и измеряю положение только двух концов.Как я могу определить местоположение 3-го конца на основе этих данных?

спасибо!(и извините за плохой английский как второй угол)

Ответы [ 2 ]

1 голос
/ 03 сентября 2018

Этот вопрос задан 8 лет назад, но, хотя он и немного расплывчатый, я думаю, что на него можно ответить довольно кратко, и если я столкнулся с ним, то, возможно, кто-то еще столкнется с ним и получит некоторую выгоду отфактический реальный ответ, а не тот, который был принят.(Я прошу прощения за то, что случайно проголосовал за принятый «ответ». Сначала я проголосовал за него, но понял, что вопрос был на самом деле немного расплывчатым, и попытался отменить мое отрицательное голосование. К сожалению, из-за моего представителя noob, который, кажется, перешел вфактическое повышение. Оно не заслуживало снижения, но также не заслуживало повышения.)

Lead-Up

Итак, допустим, у вас есть простая декартова сетка, или система отсчета :

A 10x10 cartesian reference frame

И в этой системе отсчета 10x10 имеется треугольный объект:

A isosceles triangle in a cartesian reference frame with one point at origin

Мне не удалось обозначить изображения, но (a, b, c) координаты этого треугольника, очевидно, a = (0,0), b = (0,4) и c = (4,0).

Теперь предположим, что мы перемещаем этот треугольник в нашей декартовой системе отсчета (сетке):

Triangle object translated from origin on a cartesian grid

Мы переместили треугольник x = x + 1 и y = y + 1, поэтому, учитывая, что новые координаты "b" и "c" равны b = (1,5) ис = (5,1), что«а»?

Совершенно очевидно, что «а» будет (1,1), но, глядя на математику, мы можем видеть, что

Δb = b2-b1

Δb = (x2, y2) - (x1, y1)

Δb = (1,5) - (0,4)

Δb = (1-0, 5-4)

∴Δb = (1,1) или (+ 1, + 1)

Если мы сделаем то же самое для двух координат "c", мы получим один и тот же ответ, Δcтакже равен (1,1), поэтому это перемещение (линейное движение), а не вращение, что означает, что Δa также (1,1)!Итак:

a2 = a1 + Δa

a2 = (0,0) + (+ 1, + 1)

a2 = (0 + 1,0 + 1) ∴

∴a2 = (1,1)

И если вы посмотрите на изображение, вы можете ясно увидеть, что новая позиция "a" находится в (1,1).

Перевод

Но это только начало.Ваш вопрос был в преобразовании из одной декартовой системы отсчета в другую.Учтите, что ваша система отсчета 10x10 находится в пределах большей системы отсчета:

A

Мы можем назвать вашу сетку 10x10 «локальной» системой отсчета, и она существуетможет быть, в «глобальной» системе отсчета.На самом деле в этой глобальной системе отсчета может существовать ряд других «локальных» систем отсчета:

Multiple

Но для простоты, конечно, мы 'мы просто рассмотрим одну декартову систему отсчета в другой:

A

Теперь нам нужно перевести эту "локальную" систему отсчета в "глобальную" ссылкуframe:

A

Таким образом, "локально", координаты (a, b, c) нашего треугольника по-прежнему {(0,0), (0,4), (4,0)}, но origin нашей локальной системы отсчета не выровнено с источником глобальной системы отсчета!Наша локальная система отсчета сместилась (+ 3,5, + 1,5)!

Теперь Каково положение нашего треугольника?!

Вы в основном подходите к нему так же.Относительная позиция нашей «локальной» системы отсчета равна (+ 3,5, + 1,5), которую мы будем называть Δf для разницы в кадрах, поэтому треугольник относительно глобального происхождения будет ag = al + Δf, bg = bl + Δfи cg = cl + Δf, где (ag, bg, cg) - координаты в глобальной системе координат, а (al, bl, cl) - координаты в локальной системе координат.

Трехмерная декартова система

Это то же самое, вы просто добавляете третью координату "z" к положению треугольника.

Вращение

Один изИсходя из вашего первоначального вопроса, я предполагаю, что вы действительно спрашивали о переводе и не интересовались ротацией в то время, когда вы задавали этот вопрос 8 лет назад.

Очень быстротем не менее, вам нужно использовать trig, чтобы вращать ваш 2d объект в пределах вашей системы отсчета, поэтому вам нужно сначала определить, откуда вы вращаете ваш объект, который мы называем осью вращения.Затем, когда вы решите, где находится ось вращения, пересчитайте (x, y) для каждой из трех точек вашего треугольника:

x = r · cos θ

y = r ·sinθ

где θ - угол, под которым мы вращаем объект, «r» - это расстояние этой точки от оси вращения, а «·» означает умножение.

Итак, если бы мы повернули наш треугольник на 30 ° против часовой стрелки вокруг пионта «а», это могло бы выглядеть примерно так:

An isosceles triangle rotated 30° counter clockwise within a cartesian reference frame

Но, опять жеэто был не твой вопрос.Ваши вопросы звучали так: «Учитывая расположение двух точек, определите положение третьей».

Без каких-либо объяснений, только потому, что я не думаю, что вы спрашивали о ротации, то, что вы делаете, этовы работаете в обратном направлении:

если x = r · cos θ, то θ = arccos (x / r)

Теперь у вас есть угол поворота, который теперь можно применить к исходному положениюотсутствует точка, чтобы найти ее (x, y) и, как и в нашем первоначальном переводческом примере, также работает от одной декартовой системы отсчета к другой.Это означает, что если ваша «локальная» система отсчёта вращается в глобальной системе отсчета, даже если кажется, что в вашей локальной рамке ничего не изменилось, вы можете отобразить расположение точек ваших объектов в этой рамке.

И, опять же, это также работает для трехмерных систем отсчета.

И, наконец, если ваша декартова локальная система отсчета и переведены и повернуты,это почти наверняка, тогда вы применили бы оба метода для построения своих точек на другой (глобальной?) декартовой системе отсчета.

Реальное приложение

О, так много!Наш мозг делает это так интуитивно каждый день, когда мы едем или идем по улице, что я не знаю, с чего начать!

Перевод прост, но вращение становится немного волосатым при пересечении осей.Одна хитрость, чтобы упростить задачу, - это перевести объект из одной системы координат в другую, чтобы сделать триггер более прямым.

Рассказывать историю в картинках:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

И это только начало ...

Надеюсь, это поможет.

1 голос
/ 10 июля 2010

Это довольно расплывчатый вопрос, но если я правильно его читаю, вам понадобится еще меньше информации, чем эта.Если у вас есть преобразование первой системы координат во вторую, примените ее к каждой из трех точек, чтобы найти каждую из 3 эквивалентных точек.

В противном случае, если у вас нет преобразования, яподумал бы, что это невозможно.В конце концов, бесконечное число возможных преобразований системы координат может привести к одним и тем же двум местоположениям двух точек, но различным местоположениям третьей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...