Как построить 2D-плоскость заданной области, используя точку на плоскости и вектор нормали, в 3D-пространстве, используя plotly и dash? - PullRequest
2 голосов
/ 14 мая 2019

Я бы хотел построить 2-мерную плоскость заданной области (например, квадрат 10х10 или 5 диаметров) в трехмерном пространстве, используя график, чтобы я мог включить его в свое приложение-приборную панель.Я также хотел бы иметь возможность вращать и позиционировать плоскость в трехмерном пространстве, используя точку на плоскости (в центре плоскости) и вектор нормали к плоскости (т.е. линию, соединяющую точку в пространстве и точку наплоскость).

Я попытался с помощью np.meshgrid создать сетку xy, а затем использовал уравнение линейной алгебры плоскости для вычисления z точек.Затем я использовал figure.add_surface (x, y, z) для построения плоскости.

Чтобы получить сетку, я использовал точку в центре плоскости и добавил «распространение» к ее координатам x и y в положительном и отрицательном направлениях.

#Point in space
x_iso = 10
y_iso = 10
z_iso = 10

#Point in the centre of the required plane
x_pt = 50
y_pt = 50
z_pt = 50

#Components of the plane equation 
delta_x = x_pt - x_iso
delta_y = y_pt - y_iso
delta_z = z_pt - z_iso

#Spread for xy mesh
spread = 10 

#Creating x,y mesh
xx, yy = np.meshgrid(np.linspace(x_pt-spread, x_pt+spread), np.linspace(y_pt-spread, y_pt+spread))

#Calculating corresponding z of the xy mesh using linear algebra equation of a plane using a point and a normal vector
zz = ( delta_x*x_pt + delta_y*y_pt + delta_z*z_pt - delta_x*xx - delta_y*yy ) / delta_z


CT_figure.add_surface(x=xx,y=yy,z=zz,showscale=False,showlegend=False)

Этот метод работает истроит самолет в 3D.Проблема в том, что площадь плоскости зависит от сетки xy и угла ориентации плоскости относительно плоскости xy.

https://imgur.com/aGlcMfv

Для плоскости, почти параллельной оси z, даже при небольшом разбросе по x или y плоскость сильно растягивается в направлении z из-за ее угла.Также, если плоскость параллельна оси один из delta_x, y, z равен нулю, а в случае плоскости z она становится бесконечной.

Мне нужно иметь возможность установить площадь и форму плоскостиа затем поверните его в пространстве, используя точку в середине плоскости и случайную точку в пространстве, которая создает вектор нормали к плоскости при соединении с точкой на плоскости.

РЕДАКТИРОВАТЬ: я пришел кдругое решение, которое состоит в том, чтобы сгенерировать плоскость в плоскости x, y требуемой формы и разбить ее на точки (x, y, z), где z - просто высота от плоскости xy.Затем я выполняю поворот точки на требуемые углы для всех точек на этой плоскости.Кажется, работает нормально, и в настоящее время я очищаю код, а затем попытаюсь внедрить его в требуемое использование.Я опубликую обновление после завершения.Все еще открыты для других предложений!

...