Как выполнить декартово преобразование

Меня убеждают, что мне нужно Декартово преобразование, но я не уверен. Здесь моя проблема.

У меня есть две системы координат одна глобальная 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}

0

Решение

Аффинное преобразование определяется вектором трансляции 3 × 1. В и матрица вращения 3 × 3 Е. Теперь вы хотите взять локальную точку P=(i_P,j_P,k_P) и превратить его в глобальную точку P'=(x_P,y_P,z_P), Это сделано

    P' = B + E * P
  1. Перевод прост, B=(B_x, B_y, B_z)
  2. Матрица вращения определяется как глобальные координаты единичных векторов. 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)

  1. Возьмите разницу между С а также В и сделать его единичным вектором для 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;
    
  2. Возьмите разницу между Е а также В и сделать его единичным вектором для 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;
    
  3. Компоненты 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);
2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector