Как определить, когда точки на 3D-графике лежат на плоскости или на кривой?

#python #r #geometry #data-science

#python #r #геометрия #наука о данных

Вопрос:

У меня есть трехмерный точечный график некоторых данных, сгенерированных с использованием matploblib Axes 3D. Мне нужно решить, лежит ли он на плоскости или на кривой. Я пытаюсь понять визуальные различия, которые указывают на плоскость или кривую. Я предполагаю, что если есть точки в широком диапазоне значений z, то они лежат на кривой, потому что, если бы она лежала на плоскости, это означало бы, что точки распределены только по плоской поверхности. Даже если моя догадка верна, я прав только в силу исключения единственной другой возможности, так как я могу конкретно определить, лежат ли данные на кривой?

Ответ №1:

Если плоскость наклонена, вы также найдете широкий диапазон значений z.

Предполагая, что у вас есть 3D points в массиве nx3, вы можете вычислить плоскость, которая им подходит, используя это:

 centroid = np.mean(points, axis=0)
_, eigenvalues, eigenvectors = np.linalg.svd(points - centroid, full_matrices=False)
normal = eigenvectors[2]
dispersion = eigenvalues[2]
  

Плоскость, которая наилучшим образом аппроксимирует разбросанные точки, определяется point ( centroid ) и его normal вектором.

Затем, в соответствии со dispersion значением вдоль нормальной оси, вы можете решить, достаточно ли оно низкое (точки лежат на плоскости) или слишком высокое (они не лежат на плоскости).