如何在Matlab中实现平面绕y轴z轴旋转且保持经过指定三维点
平面旋转实现方案
实现思路
- 核心解决旋转中心偏移问题:默认三维旋转矩阵是针对坐标原点设计的,直接对原平面应用原点旋转会导致目标点
(x0,y0,z0)脱离平面,因此需要先将坐标系原点平移至(x0,y0,z0),完成旋转后再平移回原坐标系 - 法向量变换:原平面
x=x0的初始法向量为(1,0,0),分别应用绕y轴旋转alpha度、绕z轴旋转beta度的旋转矩阵,得到旋转后的平面法向量 - 平面生成:使用点法式平面方程生成旋转后的平面,天然满足经过
(x0,y0,z0)的要求
完整可运行MATLAB代码
% 初始化参数 x0=4; y0=5; z0=6; alpha=30; % 绕y轴旋转角度(度) beta=45; % 绕z轴旋转角度(度) % 绘制目标点 plot3(x0,y0,z0,'r*','MarkerSize',15) hold on grid on % 绘制原始平面x=x0 [Y1, Z1] = meshgrid(linspace(-10,10), linspace(0,10)); X1 = x0*ones(size(Y1)); surf(X1,Y1,Z1,'FaceAlpha',0.5,'EdgeColor','none') % 计算旋转矩阵(先绕y轴旋转,再绕z轴旋转,角度制) Ry = [cosd(alpha), 0, sind(alpha); 0, 1, 0; -sind(alpha),0, cosd(alpha)]; Rz = [cosd(beta), -sind(beta), 0; sind(beta), cosd(beta), 0; 0, 0, 1]; R = Rz * Ry; % 计算旋转后的平面法向量 n0 = [1;0;0]; % 原平面x=x0的法向量 n = R * n0; nx = n(1); ny = n(2); nz = n(3); % 由点法式平面方程推导旋转后平面的X坐标 % 点法式方程:nx*(X-x0) + ny*(Y-y0) + nz*(Z-z0) = 0 X2 = x0 - (ny*(Y1 - y0) + nz*(Z1 - z0))/nx; % 绘制旋转后的平面 surf(X2,Y1,Z1,'FaceAlpha',0.5,'EdgeColor','none') % 坐标轴设置 xlabel('X'); ylabel('Y'); zlabel('Z'); view(3) % 开启3D视角
逻辑验证
当beta=0时,上述代码计算出的X2和原示例中仅绕y轴旋转的X2表达式完全一致,说明逻辑与原示例兼容,且任意参数下代入(x0,y0,z0)都满足平面方程,可保证点始终在旋转后的平面上。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

