Простой сценарий тестирования scipy.spatial.transform.Rotation.align_vectors не возвращает правильное вращение ⇐ Python
Простой сценарий тестирования scipy.spatial.transform.Rotation.align_vectors не возвращает правильное вращение
Поэтому я попытался добиться поворота, чтобы выровнять две плоскости друг по другу, когда центры находятся в одном и том же месте. Мне это не удалось, поэтому я придумал очень простой пример: два прямоугольника, повернутых на 90° относительно друг друга, и написал следующий короткий скрипт
ОТ
0.0 0.0 0.0 1,0 0,0 0,0 0,0 2,0 0,0 1,0 2,0 0,0 К
0.0 0.0 0.0 2,0 0,0 0,0 2,0 1,0 0,0 0,0 1,0 0,0 импортировать numpy как np импортировать файлы из scipy.spatial.transform import Вращение from = np.genfromtxt(files.FROM) to = np.genfromtxt(files.TO) среднее_из = np.mean(от, ось=0) среднее_то = np.mean(к, ось=0) centered_from = от - среднее_от centered_to = to - среднее_to rot,res = Rotation.align_vectors(centered_from,centered_to) печать (рез) соль = rot.as_quat() print("({}f, {}f, {}f, {}f)".format(sol[0],sol[1],sol[2],sol[3])) Оптимальное вращение не является однозначно или плохо определено для заданных наборов векторов. rot,res = Rotation.align_vectors(centered_from,centered_to) 2.449489742783178 (0.0f, 0.0f, 0.0f, 1.0f)
Почему на таком простом примере не получится? И даже если я использую более сложный пример с 12 точками, результат не будет правильно выравнивать точки. Точки поворачиваются на 90 ° в одном направлении, а затем на 180 ° в другом направлении.
(Сложный пример) Точки поворачиваются на 90° в одном направлении, а затем на 180° в другом направлении
ОТ
-1.061441 1.029105 0.3137982 -1,058325 0,6978046 0,3261206 -0,5160019 1,044142 0,5801408 -0,5128856 0,7128415 0,5924632 -0,5150666 1,089168 0,5781018 -0,5124189 0,733911 0,5916736 0,09491175 1,098186 0,6951484 0,09755945 0,7429286 0,7087202 -0,4337781 0,6063982 0,2094956 -0,3675401 0,5803195 0,08044138 -0,1081934 0,6057502 0,3767354 -0,04195532 0,5796715 0,2476811 К
0.6978049 -1.058325 -0.3261207 0,7128419 -0,5128859 -0,5924634 1,029105 -1,061442 -0,3137983 1,044142 -0,5160022 -0,580141 0,7339112 -0,512419 -0,5916737 0,7429286 0,09755942 -0,7087204 1,089168 -0,5150667 -0,5781019 1,098186 0,09491169 -0,6951486 0,5795034 -0,2047889 -0,1641395 0,5804876 -0,2047065 -0,1639829 0,6055822 -0,271027 -0,2931938 0,6065664 -0,2709446 -0,2930371 Это все, что я пробовал, но не понимаю, как определить проблему.
Поэтому я попытался добиться поворота, чтобы выровнять две плоскости друг по другу, когда центры находятся в одном и том же месте. Мне это не удалось, поэтому я придумал очень простой пример: два прямоугольника, повернутых на 90° относительно друг друга, и написал следующий короткий скрипт
ОТ
0.0 0.0 0.0 1,0 0,0 0,0 0,0 2,0 0,0 1,0 2,0 0,0 К
0.0 0.0 0.0 2,0 0,0 0,0 2,0 1,0 0,0 0,0 1,0 0,0 импортировать numpy как np импортировать файлы из scipy.spatial.transform import Вращение from = np.genfromtxt(files.FROM) to = np.genfromtxt(files.TO) среднее_из = np.mean(от, ось=0) среднее_то = np.mean(к, ось=0) centered_from = от - среднее_от centered_to = to - среднее_to rot,res = Rotation.align_vectors(centered_from,centered_to) печать (рез) соль = rot.as_quat() print("({}f, {}f, {}f, {}f)".format(sol[0],sol[1],sol[2],sol[3])) Оптимальное вращение не является однозначно или плохо определено для заданных наборов векторов. rot,res = Rotation.align_vectors(centered_from,centered_to) 2.449489742783178 (0.0f, 0.0f, 0.0f, 1.0f)
Почему на таком простом примере не получится? И даже если я использую более сложный пример с 12 точками, результат не будет правильно выравнивать точки. Точки поворачиваются на 90 ° в одном направлении, а затем на 180 ° в другом направлении.
(Сложный пример) Точки поворачиваются на 90° в одном направлении, а затем на 180° в другом направлении
ОТ
-1.061441 1.029105 0.3137982 -1,058325 0,6978046 0,3261206 -0,5160019 1,044142 0,5801408 -0,5128856 0,7128415 0,5924632 -0,5150666 1,089168 0,5781018 -0,5124189 0,733911 0,5916736 0,09491175 1,098186 0,6951484 0,09755945 0,7429286 0,7087202 -0,4337781 0,6063982 0,2094956 -0,3675401 0,5803195 0,08044138 -0,1081934 0,6057502 0,3767354 -0,04195532 0,5796715 0,2476811 К
0.6978049 -1.058325 -0.3261207 0,7128419 -0,5128859 -0,5924634 1,029105 -1,061442 -0,3137983 1,044142 -0,5160022 -0,580141 0,7339112 -0,512419 -0,5916737 0,7429286 0,09755942 -0,7087204 1,089168 -0,5150667 -0,5781019 1,098186 0,09491169 -0,6951486 0,5795034 -0,2047889 -0,1641395 0,5804876 -0,2047065 -0,1639829 0,6055822 -0,271027 -0,2931938 0,6065664 -0,2709446 -0,2930371 Это все, что я пробовал, но не понимаю, как определить проблему.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Vuetify: justify-position/align-position vs justify="position"/align="position"
Anonymous » » в форуме CSS - 0 Ответы
- 75 Просмотры
-
Последнее сообщение Anonymous
-