Я бы хотел построить 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.Затем я выполняю поворот точки на требуемые углы для всех точек на этой плоскости.Кажется, работает нормально, и в настоящее время я очищаю код, а затем попытаюсь внедрить его в требуемое использование.Я опубликую обновление после завершения.Все еще открыты для других предложений!