做数模时,Matlab的四维表示找了我一晚上,好浪费时间,在这里做个整理。 四维是XYZ加各点颜色t=f(x,y,z) 我把三维空间离散化成三维点阵,X,Y,Z表示其中一维,都是从1到 xn,yn,zn 现在我的是一个三维矩阵 所以现在是在一个三维空间布满了点,我想用颜色来表示这些点。 会查到scatter3和plot3这两个函数 我用的是scatter3 写一下我写的函数
scatter3(X(v),Y(v),Z(v),35,'filled','cdata',t(X(v),Y(v),Z(v))) X(v):绘制点的X轴坐标 Y(v):绘制点的Y轴坐标 Z(v):绘制点的Z轴坐标 35:绘制点的大小 'filled':绘制点实心 'cdata',t(X(v),Y(v),Z(v)):将绘制的每个点根据t(x,y,z)的值填上颜色数据
(X(v),Y(v),Z(v))就是每一个点的坐标了,所以X(v),Y(v),Z(v)的数量一点要相同 X(v)=1:a:n1 Y(v)=1:b:n2 Z(v)=1:c:n3 这样写,每个轴上的数量一定要相等
但是这样写其实是有问题的 他表示(1,1,1)(1+a,1+b,1+c)...(n1,n2,n3),所以最后绘制出来应该是一条对角线 如果你要点阵的话,会比较麻烦,我是枚举的,应该有其他方法 我用数字少点做个例子比如2*2*2的三维矩阵 X(v)=[1,1,1,1,2,2,2,2] Y(v)=[1,1,2,2,1,1,2,2] Z(v)=[1,2,1,2,1,2,1,2] 这样三维矩阵里所有点就都表示出来了
接下来就是绘制
可以用一个for循环 for v=1:8 scatter3(X(v),Z(v),Y(v),35,'filled','cdata',t(X(v),Y(v),Z(v))) grid on;%网格线 box on; %坐标轴刻度线
效果图
这是一个11*11*11的三维矩阵,当时我用枚举法,可以想象我的心情吗? 1331个点*3。。。 如果有其他办法请务必留言,谢谢
对了,提醒一句,运行会很慢,所以点尽量少些。
|
|
来自: 昵称43128558 > 《工程》