MATLAB画图surf函数颜色控制参数c用法

专业今年开了MATLAB的课程(土木工程学MATLAB?),老师给出了保过题,为了不挂科也是苦逼百度+谷歌了半天,加上自己的琢磨,总算是明白些surf颜色控制方法了,在这里分享记录一下~初学matlab,理解的不是太深,望海涵。

题目

从excel中读取粒子,这些粒子具有三维的坐标,xyz,并且具有三维的速度,excel中的每一页内存储一个时间点的例子信息,x,y,z,vx,vy,vz,页的命名为sheet+i,希望能够先读取粒子信息到向量当中,然后粒子的位置进行图像显示,粒子采用球体进行显示,球体的颜色和合速度的大小有关,采用从绿色到红色的渐变关系,然后粒子在三维空间中,根据时间的变化运动起来。

说明:我希望时间步数是作为函数的输入参数的,也就是显示多少个时间点是可控的,起始的时间点是可控的

从我多年编程的角度,嗯,逻辑非常简单,但是动画这块就比较蛋疼了,毕竟完全没接触过matlab动画~于是开始在网上搜相关的教程,这些东西还是挺多的。然后就做成了生成一个球并使其运动的代码,然后hold on绘制多个球。

然后就是颜色控制,第一想法就是使用colormap,用了之后就发现后面设置的会覆盖之前的,就是所有球都是同一颜色,,,。

之后继续搜,发现surf(x,y,z,c)的第四个参数就是颜色控制,,,但是搜了好多都说是颜色控制,就是不说到底怎么控制,,这就比较尴尬了。

于是在调试中和搜索中,发现错误提示 cDATA必须是M*N矩阵或者M*N*3数组,而c的默认值为z,,,那么不得不去联想,surf函数是使用网格绘制,c对应每一个网格的颜色,那也就是每个网格可以使用rgb进行颜色设置。那么设置一个和z同大小的矩阵,然后升级为三维数组,第三维(列)对应rgb三色,传给surf函数,那么正好实现了颜色控制。于是测试(以下为代码片段,无上下文)

[x,y,z] = sphere(n);

c=zeros(size(x));%获得o阵大小和x相同

for i=1:1:length(c(1,:))
  for j=1:1:length(c(:,1))
    c(i,j,1)=1;
    c(i,j,2)=0;
    c(i,j,3)=0;%红色
  end
end

没问题,所有球都是红的

那么题目就迎刃而解了

function anim=ani2(numb,start)
dian=[];
v=[];
i=1;
vmax=0;
vmin=100;
while 1
  lsp=xlsread(‘dian.xlsx‘,i);
  if length(lsp)==0
    break;
  end
  lsp(1)=lsp(1)+lsp(4)*start;
  lsp(2)=lsp(2)+lsp(5)*start;
  lsp(3)=lsp(3)+lsp(6)*start;
  dian=[dian;lsp(1),lsp(2),lsp(3)];
  v=[v;lsp(4),lsp(5),lsp(6)];
  lsv=sqrt(lsp(4)*lsp(4)+lsp(5)*lsp(5)+lsp(6)*lsp(6));
  if lsv>vmax
    vmax=lsv;
  end
  if lsv<vmin
    vmin=lsv;
  end
  i=i+1;
end

k = 5;
n = 2^k-1;
[x,y,z] = sphere(n);
for i=1:1:length(dian(:,1))
  surf(x+dian(i,1),y+dian(i,2),z+dian(i,3));
  hold on;
end
axis equal
axis tight
set(gcf,‘renderer‘,‘zbuffer‘);
set(gca,‘nextplot‘,‘replacechildren‘);
title(‘球体动画‘);
j_color=vmax-vmin;
for j=1:1:numb
  k = 5;
  n = 2^k-1;
  [x,y,z] = sphere(n);
  set(gca,‘nextplot‘,‘replacechildren‘);
  for i=1:1:length(dian(:,1))
    dian(i,1)=dian(i,1)+v(i,1);
    dian(i,2)=dian(i,2)+v(i,2);
    dian(i,3)=dian(i,3)+v(i,3);
    g=1-(sqrt(v(i,1)*v(i,1)+v(i,2)*v(i,2)+v(i,3)*v(i,3))-vmin)/j_color;
    r=1-g;
    c=zeros(size(z));
    for ll=1:1:length(c(1,:))
      for j=1:1:length(c(:,1))
        c(ll,j,1)=r;
        c(ll,j,2)=g;
        c(ll,j,3)=0;
      end
    end
    surf(x+dian(i,1),y+dian(i,2),z+dian(i,3),c);
    hold on;
  end
  axis equal
  F(j)=getframe;
end

希望对大家使用surf时有所帮助~

时间: 2024-10-23 03:28:30

MATLAB画图surf函数颜色控制参数c用法的相关文章

为什么需要main函数,及其参数的用法

首先,需要明确main函数是什么? 答:main函数是C语言约定的入口函数 C99标准里面是这样描述的: Program startup The function called at program startup is named main.The implementation declares no prototype for this function. It shall be de?ned with a return type of int and with no parameters:

jquery ajax error函数和及其参数详细说明 (转)

引用地址:https://blog.csdn.net/u014756827/article/details/52950514 使用jquery的ajax方法向服务器发送请求的时候,常常需要使用到error函数进行错误信息的处理,本文详细的说明了ajax中error函数和函数中各个参数的用法. 一般error函数返回的参数有三个: function(jqXHR jqXHR, String textStatus, String errorThrown).常见调用代码如下: $.ajax({ url:

matlab中subplot函数的功能 类似python

原文:http://blog.163.com/my_it_dream_pwj/blog/static/17841430520112294342649/ 和python 中类似 subplot 功能 分割figure,创建子坐标系 语法 h = subplot(m,n,p) or subplot(mnp)       subplot(m,n,p,'replace')       subplot(m,n,P)       subplot(h)       subplot('Position',[le

Matlab画图-非常具体,非常全面

Matlab画图 强大的画图功能是Matlab的特点之中的一个,Matlab提供了一系列的画图函数,用户不须要过多的考虑画图的细节,仅仅须要给出一些基本參数就能得到所需图形,这类函数称为高层画图函数.此外,Matlab还提供了直接对图形句柄进行操作的低层画图操作.这类操作将图形的每一个图形元素(如坐标轴.曲线.文字等)看做一个独立的对象,系统给每一个对象分配一个句柄,能够通过句柄对该图形元素进行操作,而不影响其它部分. 本章介绍绘制二维和三维图形的高层画图函数以及其它图形控制函数的用法,在此基础

matlab 的plot 函数

基本形式 >> y=[0 0.58 0.70 0.95 0.83 0.25]; >> plot(y) 生成的图形是以序号为横坐标.数组y的数值为纵坐标画出的折线. >> x=linspace(0,2*pi,30); % 生成一组线性等距的数值 >> y=sin(x); >> plot(x,y) 生成的图形是上30个点连成的光滑的正弦曲线. 多重线 在同一个画面上可以画许多条曲线,只需多给出几个数组,例如 >> x=0:pi/15:2*

matlab画图形函数 semilogx

matlab画图形函数 semilogx loglog 主要是学习semilogx函数,其中常用的是semilogy函数,即后标为x的是在x轴取对数,为y的是y轴坐标取对数.loglog是x y轴都取对数. 例子, clc;clear;close all;x = 0:.1:10;y = 2*x+3;subplot(211);plot(x,y);grid onsubplot(212);semilogy(x,y);grid on 结果 —————————复习各种matlab图形函数—————————

Matlab中plot函数全功能解析

Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName',PropertyValue,...)plot(axes_handle,...)h = plot(...)hlines = plot('v6',...) 描述 plot(Y)如果Y是m×n的数组,以1:m为X横坐标,Y中的每一列元素为Y坐标,绘制n条曲线:如果Y是n×1或者1×n的向量,则以1:n

【Matlab编程】matlab 画图

1.  不用截图工具就可以将图保存成图像格式,并且没有背景颜色:saveas(gcf ,'outputname','png/jpg'),第三项省略时默认为fig.m文件 2.  计算形如(-1)^2/3,应该是默认先算(-1)^(1/3),plot的时候命令窗会警告略去了虚部, 为了避免不必要的麻烦((-1)^2)^1/3这样写,例子如下:这个是代码 clear clc subplot(1,2,1); ezplot('x^2+(y-(x^2)^(1/3))^2-1',[-2,2]); subpl

Matlab画图实现数据可视化

介绍: Matlab作为一种科学计算工具,在对大量数据进行处理运算方面,存在较大的优势:对于大量的数据,很难发现里面的规律,所以在这里特意介绍使用Matlab画图的各个命令,实现数据的可视化: 命令简单介绍: 二维绘图的基本命令由plot.loglog.semilogx.semilogy.polar.它们的使用方法基本是相同的,其不同点是在不同的坐标中绘制图形.plot命令使用线性坐标空间绘制图形:loglog命令在两个对数坐标空间中绘制图形:而semilogx.semilogy命令使用x轴(或