Меня убеждают, что мне нужно Декартово преобразование, но я не уверен. Здесь моя проблема.
У меня есть две системы координат одна глобальная x, y, z другая локальная i, j, k, которая существует внутри x, y, z
Я знаю местоположение исходной точки локальной системы внутри глобальной. Давайте обозначим это B.
Я знаю еще две точки C и E вдоль оси i и j. Значение моей оси i может быть определено линией BC, а ось j — линией BE. Ось k будет перпендикулярна 2D плану i, j
Как мне перевести координаты одной системы в другую.
Например, скажем, я знаю D {x, y, z}, я знаю, что D существует в локальной системе координат, как мне получить D {i, j, k}? И как мне вернуться в другом направлении?
Как:
D {х, у, г} <-> D {i, j, k}
Аффинное преобразование определяется вектором трансляции 3 × 1. В и матрица вращения 3 × 3 Е. Теперь вы хотите взять локальную точку P=(i_P,j_P,k_P)
и превратить его в глобальную точку P'=(x_P,y_P,z_P)
, Это сделано
P' = B + E * P
B=(B_x, B_y, B_z)
Матрица вращения определяется как глобальные координаты единичных векторов. i
, j
а также k
как три столбца матрицы.
| i_x j_x k_x |
E = | i_y j_y k_y |
| i_z j_z k_z |
Чтобы найти эти компоненты, используйте координаты точек B=(B_x, B_y, B_z)
, C=(C_x, C_y, C_z)
а также E=(E_x, E_y, E_z)
Возьмите разницу между С а также В и сделать его единичным вектором для i
, Найдите расстояние между ними как
d_BC = sqrt( (B_x-C_x)^2 + (B_y-C_x)^2 + (B_z-C_z)^2 );
и компоненты:
i_x = (C_x-B_x)/d_BC;
i_y = (C_y-B_y)/d_BC;
i_z = (C_z-B_z)/d_BC;
Возьмите разницу между Е а также В и сделать его единичным вектором для j
, Найдите расстояние между ними как
d_BE = sqrt( (B_x-E_x)^2 + (B_y-E_x)^2 + (B_z-E_z)^2 );
и компоненты:
j_x = (E_x-B_x)/d_BE;
j_y = (E_y-B_y)/d_BE;
j_z = (E_z-B_z)/d_BE;
Компоненты k
найдены с использованием векторного перекрестного произведения k = i × j
k_x = i_y*j_z - i_z*j_y;
k_y = i_z*j_x - i_x*j_z;
k_z = i_x*j_y - i*y*j_x;
Полная трансформация сейчас
x_P = B_x + i_x*i_P + j_x*j_P + k_x*k_P;
y_P = B_y + i_y*i_P + j_y*j_P + k_y*k_P;
z_P = B_z + i_z*i_P + j_z*j_P + k_z*k_P;
Редактировать 1
Обратное преобразование
P = E'*(P'-B)
где E'
транспонирование матрицы 3 × 3 E
, В форме компонента это
i_P = i_x*(x_P-B_x) + i_y*(y_P-B_y) + i_z*(z_P-B_z);
j_P = j_x*(x_P-B_x) + j_y*(y_P-B_y) + j_z*(z_P-B_z);
k_P = k_x*(x_P-B_x) + k_y*(y_P-B_y) + k_z*(z_P-B_z);