作业帮 > 数学 > 作业

matlab 怎么画椭球?

来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/09/25 05:25:29
matlab 怎么画椭球?
要求:椭球的中心点坐标P(3,10,8),三个轴半径3,5,7,轴半径的方向分别是e1、e2、e3,向量e1(1,0,0)e2(0,0.7071,0.7071)e3(0,-0.7071,0.7071),最好能透视.
matlab初学,请指教
matlab 怎么画椭球?
用ellipsoid函数,看一下帮助就明白了.
再问: 如果是长方体呢, 让长宽高分别在e1、e2、e3方向上怎么设置?我主要是不知道三个正交向量的方向怎么处理
再答: 通过坐标变换来完成。我上面的回答不够完善,你要画的那个椭球体也需要进行坐标变换。就你所给的方向来说,x轴不变,y和z轴需要绕着x轴旋转45度。另外,平移需要放在旋转变换之后,不能直接在ellipsoid函数的参数中指定椭球的中心点坐标。 下面写一段代码给你,供参考:[x,Y,Z] = ellipsoid(0,0,0,3,5,7);
Q = pi/4;
y = Y*cos(Q) - Z*sin(Q);
z = Y*sin(Q) + Z*cos(Q);
mesh(x+3,y+10,z+8)
axis equal
view(45, 15)
xlabel x; ylabel y; zlabel z 
再问: 哦,谢谢!如果e1、e2、e3是任意的三个正交向量,(比如e1(-0.0305 0.9697 0.2425)、e2( -0.9995 -0.0314 0)、e3(0.0076 -0.2424 0.9701),就是看不出旋转轴旋转角度,没规律可循)要怎么办,问的有点多,麻烦您帮我解答一下,非常感谢了
再答: 1、由正交向量可以反向计算出欧拉角的。
2、不过,其实不需要计算欧拉角,直接用正交向量构成正交矩阵,就可以进行坐标变换。
3、你给的这个几个向量不满足正交条件吧?例如,e1'*e2不等于0(另外两组可以看成是误差导致的,但这组的误差有点太大)。
再问: 向量位数太长,我就取了四位小数,我就随便举个例子,你可以忽略那一点,我只想知道你说的第二点怎么做?不会坐标变换,我有一组(P,e1、e2、e3),需要根据这些位置和向量画图
再答: 应该就是用列向量e1、e2、e3构造正交矩阵T=[e1 e2 e3],然后对每个点进行坐标变换    [x; y; z] = T * [X; Y; Z]其中XYZ为变换前的坐标,xyz为变换后的坐标。T作为正交矩阵,其转置应该就是它的逆矩阵。 例如,上面的代码可以改成:[X,Y,Z] = ellipsoid(0,0,0,3,5,7);
e1 = [1,0,0]';
e2 = [0, 0.7071, 0.7071]';
e3 = [0, -0.7071, 0.7071]';
T = [e1 e2 e3];
xyz = cell2mat(arrayfun(@(x,y,z){reshape(T*[x;y;z],[1 1 3])},X,Y,Z));
x = xyz(:,:,1);
y = xyz(:,:,2);
z = xyz(:,:,3);
mesh(x+3,y+10,z+8)
axis equal
view(45, 15)
xlabel x; ylabel y; zlabel z 其中xyz = cell2mat(...)的那句是为了避免使用循环,如果看不懂也不用问了,和你的问题本身没什么关系,你完全可以改用循环实现。