如何在Matlab中在z轴和y轴上旋转平面?

时间:2021-06-29 04:59:37

标签: matlab rotation matlab-figure plane

给定 3d 平面上的一个点 (x0,y0,z0),首先我想绘制一个通过给定点 x=x0 的平面 (x0,y0,z0),然后将该平面旋转 alpha 度在 y 轴上,在 z 轴上 beta 度。最后一个平面也应该通过点(x0,y0,z0)

以下是给定点为 (4,5,6)alpha=30beta=45 的示例,并且我设法仅在 y 轴上旋转了 30 度:

x0=4;
y0=5;
z0=6;
alpha=30;
beta=45;
plot3(x0,y0,z0,'r*')
hold on
[Y1, Z1] = meshgrid(linspace(-10,10), linspace(0,10));
X1 = x0*ones(size(Y1));
surf(X1,Y1,Z1)
hold on
xlabel('X');
ylabel('Y');
zlabel('Z');
X2 = (Z1)*tand(alpha)-z0*ones(size(Z1))*tand(alpha)+X1;
surf(X2,Y1,Z1)

你能帮我在y轴和z轴上同时旋转原始平面x=x0,使最终平面通过(x0,y0,z0)吗?

1 个答案:

答案 0 :(得分:1)

您的初始观点是:

--yMax

你的初始平面方程是:

p1 = [x0,y0,z0]

基于这个等式,您可以再生成两个点 F = a*x + b*y + c*z + d == 0 % with a=1, b=0, c=0 and d=-x0 F = x == x0 p2

将两个 rotation matrix p3Ry 应用到您的分数上:

Rz

然后计算您的新平面方程 [p1',p2',p3'] = [p1,p2,p3]*Ry*Rz 拟合 F' = a*x + b*y + c*z + d == 0(带有叉积),最后调整参数 [p1',p2',p3'] 使得 d。让我们称这个新方程为 F'(p1) = 0。你有你的最终平面方程,你可以绘制你的表面。

要生成平面,您可以再次使用 F'' 并隔离 meshgrid 函数的 z 参数:F''