У меня есть набор точек данных в трехмерном пространстве, которые, очевидно, все падают на определенную плоскость. Я использую PCA для вычисления параметров самолета. 3-й компонент PCA дает мне нормальный вектор плоскости (самый слабый компонент).
Далее я хочу преобразовать все точки в указанную плоскость и посмотреть на нее в 2D.
Моя идея заключалась в следующем:
- Найти центральную точку (среднюю точку) на плоскости
- Вычтите это из всех точек данных, чтобы расположить их вокруг начала координат
- Поверните нормаль так, чтобы она стала (0,0, -1)
- Применить это вращение ко всем точкам данных
- Использовать ортогональную проекцию (в основном, пропустить ось z)
Теперь я застрял в поиске правильной операции вращения. Я попытался работать с acos или atan и настроить две матрицы вращения. Кажется, оба метода (используя acos, используя atan) дают мне неправильный результат. Возможно, вы можете помочь мне здесь!
Код Matlab следует:
b = atan(n(1) / n(2));
rotb = [cos(b) -sin(b) 0; sin(b) cos(b) 0; 0 0 1];
n2 = n * rotb;
a = atan(n(1) / n(3));
rota = [cos(a) 0 sin(a); 0 1 0; -sin(a) 0 cos(a)];
n3 = n2 * rotaows:
Я ожидаю, что n2
будет иметь компоненту ноль. Однако это уже не работает для вектора (-0,6367, 0,7697, 0,0467).