在xy平面上绘制与(x,y)坐标法线的垂直线?

Ploting perpendicular line to normal of (x,y) coordinates on xy plane?

我想绘制位于 xy 平面上的点。问题是这些点具有给定的 x、y 和 z 坐标。我想要一架飞机,而不是 3d 物体。所以平面将是 xy、xz、yz。但其他的可以从xy平面举例说明。我问的是xy平面案例。

示例点及其对应的法线

 point A=(10600, 26.662,-0.420), (Normal) N_A = [0.91, 0.36, 0.21]
 point B=(9600, -30.532,-6.208), (Normal) N_B = [0.81, 0.50, -0.30]
 point C=(1000,  10.5, -3.72), (Normal) N_C = [-0.83, -0.54, 0.11]

从这些x、y、z坐标中获取x和y值,如何绘制xy平面上的点及其法线和法线的垂线? enter image description here

如果你想投影到xy平面上,你只需要使用点的前两个坐标:

A_xy = [A[0], A[1]]

在xz平面上的投影是

A_xz = [A[0], A[2]]

等等。投影可以绘制为平面上的箭头或点。

如果您在平面中有一个矢量 N = [nx, ny],则垂直于该矢量并通过点 N 的线由下式给出:

y(x) = -nx/ny*(x - nx) + ny

您可以将其绘制为变量 x 中的函数。或者,使用此函数计算起点和终点,并在计算出的起点和终点之间绘制一条直线。

示例:

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np

fig, ax = plt.subplots()

arrow_scale = 100

A = [10600, 26.662,-0.420]
N_A = np.array([0.91, 0.36, 0.21])*arrow_scale

B = [9600, -30.532,-6.208]
N_B = np.array([0.81, 0.50, -0.30])*arrow_scale

xmin = min(A[0], B[0]) - 2*arrow_scale
xmax = max(A[0], B[0]) + 2*arrow_scale
ymin = min(A[1], B[1]) - 2*arrow_scale
ymax = max(A[1], B[1]) + 2*arrow_scale

arrow_A = mpatches.FancyArrowPatch((A[0], A[1]), (A[0] + N_A[0], A[1] + N_A[1]), mutation_scale=10)
ax.add_patch(arrow_A)

arrow_B = mpatches.FancyArrowPatch((B[0], B[1]), (B[0] + N_B[0], B[1] + N_B[1]), mutation_scale=10)
ax.add_patch(arrow_B)

x = np.linspace(xmin, xmax, 3)
line_A = -N_A[0]/N_A[1]*(x - A[0]) + A[1]
ax.plot(x, line_A)
line_B = -N_B[0]/N_B[1]*(x - B[0]) + B[1]
ax.plot(x, line_B)

ax.set(xlim=(xmin, xmax), ylim=(ymin, ymax))
ax.set(aspect=1)
plt.show()