我想使用我从3点计算的向量绘制一个平面,其中:
pointA = [0,0,0];
pointB = [-10,-20,10];
pointC = [10,20,10];
plane1 = cross(pointA-pointB, pointA-pointC)
Run Code Online (Sandbox Code Playgroud)
如何在3D中绘制'plane1'?
bla*_*bla 30
这是使用以下方法绘制平面的简单方法fill3
:
points=[pointA' pointB' pointC']; % using the data given in the question
fill3(points(1,:),points(2,:),points(3,:),'r')
grid on
alpha(0.3)
Run Code Online (Sandbox Code Playgroud)
And*_*ein 16
您已经计算了法向量.现在你应该决定你的飞机的极限是什么x
,z
并创建一个矩形补丁.
解释:每个平面可以用其法向量(A,B,C)
和另一个系数来表征D
.飞机的方程是AX+BY+CZ+D=0
.点之间的两个差异之间的交叉产物,cross(P3-P1,P2-P1)
允许查找(A,B,C)
.为了找到D
,只需将任何一点放入上面提到的等式中:
D = -Ax-By-Cz;
Run Code Online (Sandbox Code Playgroud)
获得平面方程后,可以取4个位于此平面上的点,并在它们之间绘制补丁.
normal = cross(pointA-pointB, pointA-pointC); %# Calculate plane normal
%# Transform points to x,y,z
x = [pointA(1) pointB(1) pointC(1)];
y = [pointA(2) pointB(2) pointC(2)];
z = [pointA(3) pointB(3) pointC(3)];
%Find all coefficients of plane equation
A = normal(1); B = normal(2); C = normal(3);
D = -dot(normal,pointA);
%Decide on a suitable showing range
xLim = [min(x) max(x)];
zLim = [min(z) max(z)];
[X,Z] = meshgrid(xLim,zLim);
Y = (A * X + C * Z + D)/ (-B);
reOrder = [1 2 4 3];
figure();patch(X(reOrder),Y(reOrder),Z(reOrder),'b');
grid on;
alpha(0.3);
Run Code Online (Sandbox Code Playgroud)