|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MATLAB中的rotate旋转函数可以旋转一些3D对象,但如何才能绕任意指定轴旋转呢?
2 R2 V( l/ W8 R, _2 p: \* i. C5 a! {- v- a! k9 o; t9 C
按照官方文档rotate的使用说明,rotate(h,direction,alpha) 将图形对象 h 旋转 alpha 度。指定 h 为曲面、补片、线条、文本或图像对象。direction 是一个二元素或三元素向量,它与旋转轴原点共同确定旋转轴。旋转轴的默认原点是图框中心。该点未必是坐标区的原点。* c8 \9 L. ^& z: K
& B9 Y2 G+ ^. y" ^
) o* f! N' o t% \
文档中的一个图片:
; H' h: u; M6 R
! o2 e, j N; N3 N( ]% t
这里的P点就是那个direction? origin指图片中心?0 c) t7 c! k7 d; T7 ^8 S) ?
' j; x) H7 Z' e- |) Q9 x
" L( H. h ], F/ Q1 @写了一个小的测试程序进行测试:
# Y' [. Z' @; \9 E p' q" X! \5 i- figure;
- plot3(0,0,0,'ko','MarkeRFaceColor','k');%画出原点
- hold on;grid on;
- plot3([0,0],[0,200],[0,0],'r');%画一条轴
- xlabel('x/mm');ylabel('y/mm');zlabel('z/mm');
- x = linspace(0,300,100);
- y = linspace(0,200,100);
- z = zeros(100,100);
- plan0 = surf(x,y,z);alpha(.3);shading interp %画平面0
- plan1 = surf(x,y,z);alpha(.3);shading interp %画平面1
- plan2 = surf(x,y,z);alpha(.3);shading interp %画平面2
- direct=[0 1 0];
- rotate(plan1,direct,10);%平面1旋转10度
- rotate(plan2,direct,30);%平面2旋转30度% w0 `4 [$ y0 e9 P! B' k
8 B6 U) F! x; Q z, _
Z! O7 H: b. q! ]8 U, I4 d5 d测试效果:
* B9 N# s$ g7 E2 C
9 v* n$ |& i' `. b$ E! }) t
可以看到图像不是按照[0 1 0]即y轴进行旋转,而是绕“处在图片中心,与y轴平行的某个轴” 进行旋转。
0 E" ^2 S! ^. D2 e& y( v0 g% h; Y8 S那如何才能绕坐标中的y轴(也就是图中我画的那条红线)旋转呢?# H A' e0 X5 p$ ~$ k4 `8 I& i
或者能否绕3维空间中的任意指定轴进行旋转呢?请教大神,非常感谢!
3 g% y0 u8 ^+ [ |
|