matlab - 如何在 Matlab 中的 z 轴和 y 轴上旋转平面?
问题描述
给定 3d 平面上的一个点(x0,y0,z0)
,首先我想绘制一个x=x0
通过给定点的平面,(x0,y0,z0)
然后alpha
在 y 轴上旋转该平面度数,beta
在 z 轴上旋转度数。最终平面也应该通过点point (x0,y0,z0)
。
这是一个示例,当给定点为(4,5,6)
,alpha=30
和beta=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)
您能帮我同时x=x0
在 y 轴和 z 轴上旋转原始平面,以便最终平面通过(x0,y0,z0)
吗?
解决方案
您的初始点是:
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
和p3
。
应用两个旋转矩阵 Ry
和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''
:z = -(a*x +b*y + d)/c
推荐阅读
- java - 如何使用 ECC 点和哈希值执行异或运算
- c# - 将 C# 8 可空引用类型标记为“这不能为空”
- node.js - 从 Azure Devops 获取所有机密到 Node.JS 进程中
- sql - 使用 SQL 提取仅绑定到客户端的最新 ID
- javascript - 无法在 Reactjs 中关闭 iframe 引用
- python - 如何将ROI重叠到python中的原始扫描图像中?
- javascript - 整合particle.js和bootstrap
- azure-data-factory - 如何根据接收器中的参数设置文件名?
- c++ - 在排序算法中计算执行时间
- bash - BASH中的命令查找如何更改它