Пытаюсь ответить, разделив задание на 5 частей. Я буду называть x,y,z старой осью с центром в O, а X,Y,Z вашей новой осью с центром в P.
Попробуйте сохранить частичный результат в пустых ячейках с первой попытки. Я не могу дать вам единственную уникальную формулу, которая ответит на ваш вопрос за 1 шаг.
а) Родовое преобразование — это ротоперевод. Вы нашли свое новое начало в точке P (координаты у вас есть). Предполагая, что ваш «старый источник» равен O = (0,0,0), я могу просто сказать, что перевод из старого источника в новый равен d = |P-O| = |П| евклидова норма вектора P в обеих системах, и ее довольно легко вычислить в excel (я не знаю, есть ли функция, я бы использовал теорему Пифагора). Кто-то пытается создать пользовательский макрос здесь
б) Теперь, когда у вас есть вектор смещения (t1,t2,t3), вы можете установить новое начало координат для старой оси, не поворачивая их. Обратите внимание на знак, но это простая формула перевода (см. пример: если x = x' + t1, то x' = x - t1) Подумайте, что такое x' и что такое x в вашем случае, попробуйте с простой точкой (1,0,0) и посмотрите, удачен ли ваш выбор. Сделайте перевод всех ваших точек (например: PT1_t, PT2_t...) Теперь у вас есть промежуточная система отсчета между xyz и XYZ. Назовем это "pqr"
в) Теперь ваши системы отсчета pqr и XYZ отличаются только углом поворота. Вы должны решить, какая ось будет вращаться первой, прежде чем строить матрицу вращения. Лучше работать с нормализованным вектором (разделить каждый вектор на его норму). Предположим, что вращение из системы pqr и XYZ представляет собой композицию (не более) 3 вращений вокруг фиксированной оси. Например
- вы повернете pqr вокруг Z, чтобы поместить versor p в плоскость XZ. вы получите «новую» систему pqr. Это делается с помощью матрицы вращения 3x3 RX (мы этого еще не знаем)
- вы будете вращать pqr' вокруг Y, чтобы выровнять versor p' с versor X, используя RY. Теперь у вас есть pqr''
- вы выровняете ось q по Y и ось r по Z, используя вращение вокруг X и матрицу RX. pqr''' полностью выровнен по XYZ
Полный оборот равен R = RX * RY * RZ, матричному произведению. Как найти вращение? (Следование моей последовательности вращения не является обязательным! Вы можете построить свою собственную последовательность, но наиболее известны XYZ, ZYX и ZXZ).
г) Каждой матрице нужен угол. Первый угол — это угол между p и его проекцией на плоскость XZ. Второй угол - это угол между p' (=RZ * p) и X, третий угол - между q'' (=RY * q' = RY * RX * q) и Y. Он должен быть равен (с ошибками) к углу между r'' и Z. Матрица может быть построена так (если A - общий угол)
RX = [1 0 0
0 cos(A) -sin(A)
0 sin(A) cos(A)]
проверьте RY и RZ по этой ссылке, но обратите внимание: как мы уже говорили ранее, A — это угол поворота в одном направлении, поэтому вам может понадобиться -A для вашего вращения. В общем (но проверьте это) A - это угол ОТ старой оси ДО новой, а положительный A - против часовой стрелки.
Чтобы вычислить угол A, используйте простую формулу приведенную здесь. В Excel есть все гониометрические формулы (косинус, арккосинус...), которые вам нужны.
e) Как только вы нашли три матрицы RX RY RZ, играющие с вращением старой оси pqr, каждая отдельная точка PTi' в вашей новой системе XYZ получается из PTi' = R * PTi_t. Вы можете просто создать матричный продукт с помощью функции Excel MMULT, объясненной здесь
Извините за длину, но это единственная система, которую я знаю как простой студент. Я надеюсь, что это может помочь вам.
person
marcoresk
schedule
15.08.2016