matlab如何画三维向量场

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab如何画三维向量场相关的知识,希望对你有一定的参考价值。

希望整个场都画出来,
在线等

用matlab绘制三维向量场,可以使用quiver3函数来完成。如z = y^2 - x^2的三维向量场

x =-3:0.5:3;

y =-3:0.5:3;

[X,Y] = meshgrid(x, y);

Z = Y.^2 - X.^2;

[U,V,W] = surfnorm(Z);

figure(1)

quiver3(Z,U,V,W)

view(-35,45)

xlabel('x'),ylabel('y'),zlabel('z')

追问

谢谢您的及时回答,
在MATLAB里面,
如果是一个二维网格,确实可以用quiver3命令画函数算出来的表面法向。但是我的数据是离散的。

但是我的三维矢量U(i,j,k),V(i,j,k),W(i,j,k)按照i,j,k下标存在r(i,jk)数组里面. 如何画出矢量场的图形?

maple里面能不能把plot3d,或者vectorplot命令直接转换成为MATLAB命令?
我调试程序经常需要来回转换

追答

如果数据是离散的,可以先考虑用拟合的方法求出其三维数学函数,然后再做矢量场的图形。

maple里面能不能把plot3d,或者vectorplot命令直接转换成为MATLAB命令?这个手上没有maple这个软件,所以不能确定。

追问

三维空间点子太多,拟合不方便,有没有直接画的命令

追答

这个要看你的数据结构是怎样的?如果是表式结果的话,是可以用quiver3函数的。
x =-3:1:3;
y =-3:1:3;
Z =[ 0 5 8 9 8 5 0

-5 0 3 4 3 0 -5
-8 -3 0 1 0 -3 -8
-9 -4 -1 0 -1 -4 -9
-8 -3 0 1 0 -3 -8
-5 0 3 4 3 0 -5
0 5 8 9 8 5 0];
[U,V,W] = surfnorm(Z);
figure(1)
quiver3(Z,U,V,W);
view(-35,45)
xlabel('x'),ylabel('y'),zlabel('z')

追问

field := plot::VectorField3d([1, sin(x) + cos(y), sin(z)], x = 0..6, y = 0..2.5, z = 0..5, Mesh = [7, 7, 7]):plot(field):
运行2014-a
出错信息:未定义与 'char' 类型的输入参数相对应的函数 'field'。

参考技术A quiver3本来就可以画三维的啊
n=20;
[x,y,z]=meshgrid(linspace(-1,1,n));
r=x.^2+y.^2+z.^2;
[vx,vy,vz]=gradient(r);
quiver3(x(r<1),y(r<1),z(r<1),vx(r<1),vy(r<1),vz(r<1))

matlab 在图像上画矢量

用matlab读入一幅图像,并知道某点的方向向量是(nx,ny),我想把这个矢量画在图像上,请问如何实现?

你还得知道这点的坐标x,y
用函数quiver(x,y,nx,ny)

就可以在点 x,y 位置根据矢量 nx,ny 画上一个箭头

实际上函数的输入还可以是矩阵,x,y,nx,ny可以是大小相同的矩阵
在一些列坐标点x,y的位上画上对应的向量,完成矢量场的画图追问

我这样试过呀 画不出来啊 我想画在一幅图像上。

追答

你先把之前的图画好了
然后

hold on;
quiver(x,y,nx,ny);

hold off;

只有加了hold on,在画新的图的时候就不会删掉旧的图
那样可以把多幅图同时画在一个画面内

追问

ImageData =rgb2gray(imread('t3.bmp'));% 读取图像
figure(1);
imshow(ImageData);
hold on;

%求法向量
nx= -0.1527;
ny=0.9883;
quiver(1,1,nx,ny);
hold off
真的无法实现啊 亲 着急

追答

你的那个坐标(1,1)怎么来的

图像给出来了,(1,1)就是图像左上角的点

而你的矢量这么小
就在图像的左上角画个很小的线,怎么看得到

追问

我知道我的错误之处了。quiver(x,y,nx,ny);
函数中,x y必须是矩阵,就可以画出来了。

追答

x,y 不一定是矩阵,一个数也可以
只是你的1,1代表第一行第一列,就是图像的左上角,
而你的nx,ny又很小,在左上角画一个很短的线,基本上就看不到

参考技术A 用quiver命令:quiver(x,y,nx,ny)追问

我这样试过呀 画不出来啊 我想画在一幅图像上。

追答

[x,y] = meshgrid(-2:.2:2,-1:.15:1);
z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.15);
contour(x,y,z), hold on
quiver(x,y,px,py), hold off, axis image
按上面的试试

以上是关于matlab如何画三维向量场的主要内容,如果未能解决你的问题,请参考以下文章

matlab怎么用三维矩阵画三维图

用matlab实现以下的问题:已知一个具体的平面方程,如何画出三维点的图形

如何在Mathematica 软件中画出一个三维向量的3D 图像,是否用这个函数ListVectorFieldPlot3D ,怎么画的

matlab 如何画三维立体图?正方体

MATLAB画三维空间小球沿给定轨迹曲线运动~

如何用matlab绘制三维地形图