Я пытаюсь найти ограничительную рамку облака 3D-точек с использованием PCA. Я использую JAMA «Java Matrix Package» для выполнения SVD.Find Bounding Box 3d-облака точек с использованием PCA
Я выборки 1000 из моего облака точек и выполнения SVD:
Matrix pointsMatrix = new Matrix(nThPoints); SingularValueDecomposition svd = new SingularValueDecomposition(pointsMatrix);
Я добывающие 3 PCA векторы из результата и добавление их негативы:
двойной [] Vector1 = {svd.getU(). получим (0, 0), svd.getU(). получить (1, 0), svd.getU(). получаем (2, 0) }; double [] vector1N = Vec.Mult (vector1, -1); double [] vector2 = {svd.getU(). Get (0, 1), svd.getU(). Get (1, 1), svd.getU(). Get (2, 1)}; double [] vector2N = Vec.Mult (vector2, -1); double [] vector3 = {svd.getU(). Get (0, 2), svd.getU(). Get (1, 2), svd.getU(). Get (2, 2)}; double [] vector3N = Vec.Mult (vector3, -1);
Я увеличительным каждый вектор в соответствии с размерами данных (проходящих через каждую из 1000 точек и проверка того, что является самым большим проекция):
Vector1 = Vec.projectData (Vector1, nThPoints);
vector1N = Vec.projectData(vector1N, nThPoints); vector2 = Vec.projectData(vector2, nThPoints); vector2N = Vec.projectData(vector2N, nThPoints); vector3 = Vec.projectData(vector3, nThPoints); vector3N = Vec.projectData(vector3N, nThPoints);
Теперь, что у меня есть 6 новых векторов мне нужно как-то вычислить 8 углов (в то время как помня центр образца), и я просто не знаю, как сделать это.
Как я могу это сделать?