matlab如何画五星红旗
- 格式:docx
- 大小:593.73 KB
- 文档页数:12
#include <GL/glut.h>#include <math.h>void init (void){glClearColor(1.0,1.0,1.0,1.0); //窗口背景设置为白色 glMatrixMode(GL_PROJECTION); //设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0);}void TRIANGLE(float i,float j,int r){ float PI = 3.14;f loat ax,ay,bx,by,cx,cy,dx,dy,ex,ey;ax=0;ay=r;bx=r*cos(18*PI/180);by=r*sin(18*PI/180);ex=-bx;ey=by;cx=r*sin(36*PI/180);cy=-r*cos(36*PI/180);dx=-cx;dy=cy;glColor3f(1.0,1.0,0.0);glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+ax,j+ay);glVertex2i(i+dx,j+dy);glEnd();glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+ax,j+ay);glVertex2i(i+cx,j+cy);glEnd();glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+bx,j+by);glVertex2i(i+ex,j+ey);glEnd();glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+bx,j+by);glVertex2i(i+dx,j+dy);glEnd();glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+cx,j+cy);glVertex2i(i+ex,j+ey);glEnd();}void flagSegment(void){ glMatrixMode(GL_MODELVIEW);glLoadIdentity();glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glColor3f(1.0,0.0,0.0); //颜色为红色glBegin(GL_QUADS);glVertex2i(13,140);glVertex2i(100,140);glVertex2i(100,80);glVertex2i(13,80);glEnd();TRIANGLE(28,123,9);glTranslatef(40.0f,135.0f,0.0f);glPushMatrix();glRotatef(-30.0f,0.0f,0.0f,1.0f);TRIANGLE(0,0,4);glPopMatrix();glTranslatef(7.0f,-7.0f,0.0f);glPushMatrix();glRotatef(30.0f,0.0f,0.0f,1.0f);TRIANGLE(0,0,4);glPopMatrix();glTranslatef(0.0f,-10.0f,0.0f);TRIANGLE(0,0,4);glTranslatef(-7.0f,-6.0f,0.0f);glPushMatrix();glRotatef(-30.0f,0.0f,0.0f,1.0f);TRIANGLE(0,0,4);glPopMatrix();glFlush(); //渲染}void main (int argc,char** argv)glutInit(&argc,argv); //初始化GLUTglutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //设置显示模式glutInitWindowPosition(100,100); //设置显示窗口的左上角位置 glutInitWindowSize(800,600); //设置窗口的长和高glutCreateWindow("An Example OpenGL Program" ); //创造显示窗口init(); //开始初始化过程glutDisplayFunc(flagSegment); //发送图形到显示窗口//glutReshapeFunc(reshape);glutMainLoop(); //显示所有并等候}。
Python使⽤Turtle模块绘制五星红旗代码⽰例在Udacity上课时学到了python的turtle⽅法,这是⼀个很经典的⽤来教⼩孩⼉编程的图形模块,最早起源于logo语⾔。
python 本⾝内置了这个模块,其可视化的⽅法可以帮助⼩孩⼉对编程的⼀些基本理念有所理解。
在作业提交的论坛⾥看到很多turtle画出来的精美图形,想不出什么要画的东西,于是决定拿五星红旗来练练⼿。
前期准备五星红旗绘制参数Turtle官⽅⽂档turtle的基本操作# 初始化屏幕window = turtle.Screen()# 新建turtle对象实例import turtleaTurtle = turtle.Turtle()# 海龟设置aTurtle.hideturtle() # 隐藏箭头aTurtle.speed(10) # 设置速度# 前进后退,左转右转aTurtle.fd(100) # 前进100像素aTurtle.right(90) # 右转90°aTurtle.back(100)aTurtle.left(90)# 填充颜⾊aTurtle.begin_fill()aTurtle.fillcolor('yellow')DoSomethinghere()aTurtle.end_fill()# 抬起笔和放下笔,这样进⾏的操作不会留下痕迹aTurtle.penup()aTurtle.goto(start_pos)aTurtle.fd(radius)aTurtle.pendown()绘制五星红旗代码#!/usr/bin/env python# -*- coding: utf-8 –*-''' 对于turtle类的⼀些封装⽅法,包括画正多边形,正多⾓形和五星红旗。
'''__author__ = 'Hu Wenchao'import turtleimport mathdef draw_polygon(aTurtle, size=50, n=3):''' 绘制正多边形args:aTurtle: turtle对象实例size: int类型,正多边形的边长n: int类型,是⼏边形'''for i in xrange(n):aTurtle.forward(size)aTurtle.left(360.0/n)def draw_n_angle(aTurtle, size=50, num=5, color=None):''' 绘制正n⾓形,默认为黄⾊args:aTurtle: turtle对象实例size: int类型,正多⾓形的边长n: int类型,是⼏⾓形color: str,图形颜⾊,默认不填⾊'''if color:aTurtle.begin_fill()aTurtle.fillcolor(color)for i in xrange(num):aTurtle.forward(size)aTurtle.left(360.0/num)aTurtle.forward(size)aTurtle.right(2*360.0/num)if color:aTurtle.end_fill()def draw_5_angle(aTurtle=None, start_pos=(0,0), end_pos=(0,10), radius=100, color=None):''' 根据起始位置、结束位置和外接圆半径画五⾓星args:aTurtle: turtle对象实例start_pos: int的⼆元tuple,要画的五⾓星的外接圆圆⼼end_pos: int的⼆元tuple,圆⼼指向的位置坐标点radius: 五⾓星外接圆半径color: str,图形颜⾊,默认不填⾊'''aTurtle = aTurtle or turtle.Turtle()size = radius * math.sin(math.pi/5)/math.sin(math.pi*2/5)aTurtle.left(math.degrees(math.atan2(end_pos[1]-start_pos[1], end_pos[0]-start_pos[0])))aTurtle.penup()aTurtle.goto(start_pos)aTurtle.fd(radius)aTurtle.pendown()aTurtle.right(math.degrees(math.pi*9/10))draw_n_angle(aTurtle, size, 5, color)def draw_5_star_flag(times=20.0):''' 绘制五星红旗args:times: 五星红旗的规格为30*20, times为倍数,默认⼤⼩为10倍,即300*200'''width, height = 30*times, 20*times# 初始化屏幕和海龟window = turtle.Screen()aTurtle = turtle.Turtle()aTurtle.hideturtle()aTurtle.speed(10)# 画红旗aTurtle.penup()aTurtle.goto(-width/2, height/2)aTurtle.pendown()aTurtle.begin_fill()aTurtle.fillcolor('red')aTurtle.fd(width)aTurtle.right(90)aTurtle.fd(height)aTurtle.right(90)aTurtle.fd(width)aTurtle.right(90)aTurtle.fd(height)aTurtle.right(90)aTurtle.end_fill()# 画⼤星星draw_5_angle(aTurtle, start_pos=(-10*times, 5*times), end_pos=(-10*times, 8*times), radius=3*times, color='yellow')# 画四个⼩星星stars_start_pos = [(-5, 8), (-3, 6), (-3, 3), (-5, 1)]for pos in stars_start_pos:draw_5_angle(aTurtle, start_pos=(pos[0]*times, pos[1]*times), end_pos=(-10*times, 5*times), radius=1*times, color='yellow') # 点击关闭窗⼝window.exitonclick()if __name__ == '__main__':draw_5_star_flag()结果:总结以上就是本⽂关于Python使⽤Turtle模块绘制五星红旗代码⽰例的全部内容,希望对⼤家有所帮助。
实验2 Matlab 绘图操作实验目的:1、 掌握绘制二维图形的常用函数;2、 掌握绘制三维图形的常用函数;3、 掌握绘制图形的辅助操作。
实验内容:1. 设sin .cos x y x x ⎡⎤=+⎢⎥+⎣⎦23051,在x=0~2π区间取101点,绘制函数的曲线。
2. 已知: y x =21,cos()y x =22,y y y =⨯312,完成下列操作:(1) 在同一坐标系下用不同的颜色和线性绘制三条曲线; (2) 以子图形式绘制三条曲线;(3) 分别用条形图、阶梯图、杆图和填充图绘制三条曲线。
3.已知:ln(x x e y x x ⎧+≤⎪⎪=⎨⎪+>⎪⎩20102,在x -≤≤55区间绘制函数曲线。
4. 绘制极坐标曲线sin()a b n ρθ=+,并分析参数a 、b 、n 对曲线形状的影响。
5.在xy 平面内选择区域[][],,-⨯-8888,绘制函数z =6. 用plot 函数绘制下面分段函数的曲线。
,(),,x x f x x x x ⎧++>⎪==⎨⎪+<⎩235000507. 某工厂2005年度各季度产值(单位:万元)分别为:450.6、395.9、410.2、450.9,试绘制柱形图和饼图,并说明图形的实际意义。
8. 在同一坐标轴中绘制下列两条曲线并标注两曲线交叉点。
(1).y x =-205(2)sin()cos ,sin()sin x t tt y t tπ=⎧≤≤⎨=⎩303详细实验内容:1.设sin .cos x y x x ⎡⎤=+⎢⎥+⎣⎦23051,在x=0~2π区间取101点,绘制函数的曲线。
>> x=(0:2*pi/100:2*pi);>> y=(0.5+3*sin(x)/(1+x.^2))*cos(x); >> plot(x,y)2.已知: y x =21,cos()y x =22,y y y =⨯312,完成下列操作: (1)在同一坐标系下用不同的颜色和线性绘制三条曲线; >> x= linspace(0, 2*pi, 101);>> y1=x.*x; >> y2=cos(2x); >> y3=y1.*y2;plot(x,y1,'r:',x,y2,'b',x,y3, 'ko')(2)以子图形式绘制三条曲线;>> subplot(2,2,1),plot(x,y1)subplot(2,2,2),plot(x,y2)subplot(2,2,3),plot(x,y3)(3)分别用条形图、阶梯图、杆图和填充图绘制三条曲线。
本程序模拟画了一面五星红旗,纯属学习MATLAB之作。
本程序由realghost编写,如有转载请保留此信息。
如要交流请与 slqinyi@ 联系。
function nationflag()axis equalaxis([0 5 0 3.09])axis offhold onfill([0 5 5 0],[0 0 3.09 3.09],'r')drawfive(1,2,pi/10,0.5,'y')drawfive(1+cos(2*pi/10),2+sin(2*pi/10),0,0.15,'y')drawfive(1+cos(2*pi/30),2+sin(2*pi/30),pi/5,0.15,'y')drawfive(1+cos(-2*pi/30),2+sin(-2*pi/30),pi/10,0.15,'y')drawfive(1+cos(-2*pi/10),2+sin(-2*pi/10),-pi/15,0.15,'y')function drawfive(x,y,theta,r,color)axis equalt = linspace(0+theta,2*pi+theta,6);xr = x+r*cos(t);yr = y+r*sin(t);xk = zeros(1,10);yk = zeros(1,10);xk(1) = xr(1);yk(1) = yr(1);[xk(2) yk(2)] = linepoint([xr(1) yr(1)],[xr(3) yr(3)],[xr(2) yr(2)],[xr(5) yr(5)]);xk(3) = xr(2);yk(3) = yr(2);[xk(4) yk(4)] = linepoint([xr(2) yr(2)],[xr(4) yr(4)],[xr(1) yr(1)],[xr(3) yr(3)]);xk(5) = xr(3);yk(5) = yr(3);[xk(6) yk(6)] = linepoint([xr(2) yr(2)],[xr(4) yr(4)],[xr(3) yr(3)],[xr(5) yr(5)]);xk(7) = xr(4);yk(7) = yr(4);[xk(8) yk(8)] = linepoint([xr(3) yr(3)],[xr(5) yr(5)],[xr(1) yr(1)],[xr(4) yr(4)]);xk(9) = xr(5);yk(9) = yr(5);[xk(10) yk(10)] = linepoint([xr(1) yr(1)],[xr(4) yr(4)],[xr(2) yr(2)],[xr(5) yr(5)]);fill(xk,yk,color)axis equalfunction [x,y]=linepoint(p1,p2,p3,p4)%ÇóÒÔp1,p1Ϊ¶ËµãµÄÖ±ÏßÓëÒÔp3,p4Ϊ¶ËµãµÄÖ±ÏߵĽ»Õ½×ø±êx1 = p1(1);y1 = p1(2);x2 = p2(1);y2 = p2(2);x3 = p3(1);y3 = p3(2);x4 = p4(1);y4 = p4(2);if x1==x2%µÚÒ»ÌõÖ±Ïß´¹Ö±ÓÚxÖáx = x1;k2 = (y4-y3)/(x4-x3);y = k2*(x-x3)+y3;elseif x3==x4x = x3;k1 = (y2-y1)/(x2-x1);y = k1*(x-x1)+y1;elsek1 = (y2-y1)/(x2-x1);k2 = (y4-y3)/(x4-x3);sol = [-k1 1;-k2 1]\[y1-k1*x1;y3-k2*x3]; x = sol(1);y = sol(2);endend效果图:。
Matlab画图命令介绍默认分类2009-07-17 21:08:09 阅读4151 评论0 字号:大中小这是matlab里最基本的命令,帮助那些没有学过matlab,只是用它来画画图的人。
登录|注册搜索| 帮助背着老板英语巧充电on my way...档案微博日志相册视频分享on my way...∙首页2010-01-25 | matlab画图subplot(3,2,3)plot(x)set(gca,'xtick',[1 3 6 8]);set(gca,'xticklabel',sprintf('%03.4f|',get(gca,'xtick'))) set(gca,'ytick',[2 4 5 7]);set(gca,'yticklabel',{'Two','Four','Five','Seven'});title('XY自定义间隔、精度及显示方式')subplot(3,2,4)plot(x)set(gca,'xminortick','on');%style 5set(gca,'ticklength',[0.05 0.025]);set(gca,'tickdir','out');title('XY坐标刻度显示方式')subplot(3,2,5)plot(x)set(gca,'xtick',[min(x) (max(x)+min(x))/2 max(x)]); set(gca,'ytick',[min(x) (max(x)+min(x))/2 max(x)]); title('论文中常用的标准3点式显示')x=20:10:20000;y=rand(size(x));subplot(3,2,6)semilogx(x,y);set(gca,'XLim',[20 20000]);set(gca,'XMinorTick','off');set(gca,'XTick',[20 31.5 63 125 250 500 1000 2000 4000 8000 16000]); set(gca,'XGrid','on');set(gca,'XMinorGrid','off');title('自定义网格显示')plot 建立向量或矩阵各队队向量的图形字元颜色字元图线型态loglog x、y轴都取对数标度建立图形y 黄色 . 点semilogx x轴用于对数标度,y轴线性标度绘制图形k 黑色o 圆semilogy y轴用于对数标度,x轴线性标度绘制图形w 白色x xtitle 给图形加标题b 蓝色+ +xlabel 给x轴加标记g 绿色* *ylabel 给y轴加标记r 红色- 实线text 在图形指定的位置上加文本字符串c 亮青色: 点线gtext 在鼠标的位置上加文本字符串m 锰紫色-. 点虚线grid 打开网格线-- 虚线hold on 命令用于在已画好的图形上添加新的图形1 x=0:0.001:10; % 0到10的1000个点(每隔0.001画一个点)的x座标y=sin(x); % 对应的y座标plot(x,y); % 绘图注:matlab画图实际上就是描点连线,因此如果点取得不密,画出来就成了折线图,请试验之2 Y=sin(10*x);plot(x,y,'r:',x,Y,'b') % 同时画两个函数3 若要改变颜色,在座标对后面加上相关字串即可:x=0:0.01:10;plot(x,sin(x),'r')4 若要同时改变颜色及图线型态(Line style),也是在坐标对后面加上相关字串即可:plot(x,sin(x),'r*')5 用axis([xmin,xmax,ymin,ymax])函数来调整图轴的范围axis([0,6,-1.5,1])6 MATLAB也可对图形加上各种注解与处理:(见上表)xlabel('x轴'); % x轴注解ylabel('y轴'); % y轴注解title('余弦函数'); % 图形标题legend('y = cos(x)'); % 图形注解gtext('y = cos(x)'); % 图形注解,用鼠标定位注解位置grid on; % 显示格线7画椭圆a = [0:pi/50:2*pi]'; %角度X = cos(a)*3; %参数方程Y = sin(a)*2;plot(X,Y);xlabel('x'), ylabel('y');title('椭圆')8 绘制函数在0 ≤ x ≤ 1时的曲线。
学院目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 ................................................ 错误!未定义书签。
1.4应用平台 ................................................ 错误!未定义书签。
2 详细设计 ....................................................... 错误!未定义书签。
2.1程序结构 ................................................ 错误!未定义书签。
2.2主要功能 (6)2.3函数实现 (6)2.4开发日志 (6)3 程序调试及运行 (7)3.1程序运行结果......................................... 错误!未定义书签。
3.2程序使用说明 (8)3.3程序开发总结 (8)4 附件(源程序) (9)1 摘要1.1 设计题目利用Opengl的知识,绘制一面五星红旗。
1.2 设计内容编写此程序实现绘制五星红旗。
2.1函数结构1.init 函数此函数实现了窗口背景和投影参数的初始设置void init (void){glClearColor(1.0,1.0,1.0,1.0); //窗口背景设置为白色glMatrixMode(GL_PROJECTION); //设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0);}2.TRIANGLE 函数此函数实现了图形中各个关键点的坐标输入,使图像有基本框架void TRIANGLE(float i,float j,int r){ float PI = 3.14;f loat ax,ay,bx,by,cx,cy,dx,dy,ex,ey;ax=0;ay=r;bx=r*cos(18*PI/180);by=r*sin(18*PI/180);ex=-bx;ey=by;cx=r*sin(36*PI/180);cy=-r*cos(36*PI/180);dx=-cx;dy=cy;glColor3f(1.0,1.0,0.0);glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+ax,j+ay);glVertex2i(i+dx,j+dy);glEnd();glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+ax,j+ay);glVertex2i(i+cx,j+cy);glEnd();glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+bx,j+by);glVertex2i(i+ex,j+ey);glEnd();glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+bx,j+by);glVertex2i(i+dx,j+dy);glEnd();glBegin(GL_TRIANGLES);glVertex2i(i,j);glVertex2i(i+cx,j+cy);glVertex2i(i+ex,j+ey);glEnd();}3. flagSegment 函数此函数实现了对图形颜色的渲染,函数如下:void flagSegment(void){ glMatrixMode(GL_MODELVIEW);glLoadIdentity();glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glColor3f(1.0,0.0,0.0); //颜色为红色glBegin(GL_QUADS);glVertex2i(13,140);glVertex2i(100,140);glVertex2i(100,80);glVertex2i(13,80);glEnd();TRIANGLE(28,123,9);glTranslatef(40.0f,135.0f,0.0f);glPushMatrix();glRotatef(-30.0f,0.0f,0.0f,1.0f);TRIANGLE(0,0,4);glPopMatrix();glTranslatef(7.0f,-7.0f,0.0f);glPushMatrix();glRotatef(30.0f,0.0f,0.0f,1.0f);TRIANGLE(0,0,4);glPopMatrix();glTranslatef(0.0f,-10.0f,0.0f);TRIANGLE(0,0,4);glTranslatef(-7.0f,-6.0f,0.0f);glPushMatrix();glRotatef(-30.0f,0.0f,0.0f,1.0f);TRIANGLE(0,0,4);glPopMatrix();glFlush(); //渲染}4.main函数这个函数是此程序的主函数, glutInit完成初始化GLUT,glutInitDisplayMode完成显示模式设置,glut InitDisplayMode完成左上角位置设置,glut IntWindowSize 完成窗口的长和高。
生成五角星顶点的子函数(GetPentagramVertices.m)function [x y] = GetPentagramVertices(centerPos, radius, orientation)% 子函数:获得五角星的十个顶点%orientation 定位Rad_ext = radius .* ones(1,5);%ones生成1行五列的矩阵,所有参数为1Ori_ext = ([0:72:359] + 90 +orientation).* pi/ 180;%[0:72:359]以72度为间隔产生五个数Rad_int = radius .* sind(18)./sind(126) .* ones(1,5);% sind(30)=0.5Ori_int = ([0:72:359] - 90 +orientation).* pi/ 180;Ori_int = Ori_int([4 5 1 2 3]);%强制换序Rad_all = zeros(1,10);Ori_all = zeros(1,10);Rad_all([1:2:10 2:2:10]) = [Rad_ext Rad_int];Ori_all([1:2:10 2:2:10]) = [Ori_ext Ori_int];[x y] = pol2cart(Ori_all, Rad_all);%pol2cart在MATLAB中,该函数用于把极坐标(柱坐标)转换为笛卡尔坐标(指平面直角坐标或空间直角坐标);把柱坐标(THETA,RHO,Z)转换为对应的三维笛卡尔坐标(X,Y,Z)。
x = x + centerPos(1);y = y + centerPos(2);程序是画静态的五星红旗,并将图像以'FiveStarRedFlag.png'保存在当前目录下。
这个五星红旗的比例是按照《中华人民共和国国旗制法说明》绘制的第一行是调整国旗分辨率的,可以自行修改,但是要保持3:2的比例。
flag_dimension_in_pixel = [600 400];figure_leftbottom_pos = [100 100];bkg_color = [1 0 0];star_color = [1 1 0];flag_horiz_units_num = 30;flag_verti_units_num = 20;star_vertices_x = zeros(10, 5);star_vertices_y = zeros(10, 5);stars(5).center_pos = [];stars(1).center_pos = [5 15];stars(1).radius = 3;stars(1).orientation = 0;stars(2).center_pos = [10 18];stars(2).radius = 1;stars(2).orientation = 0;stars(3).center_pos = [12 16];stars(3).radius = 1;stars(3).orientation = 0;stars(4).center_pos = [12 13];stars(4).radius = 1;stars(4).orientation = 0;stars(5).center_pos = [10 11];stars(5).radius = 1;stars(5).orientation = 0;%类似于c#的自定义函数调用?for i = 2:5dists = deal(stars(i).center_pos - stars(1).center_pos);stars(i).orientation = atan(dists(2)/dists(1)).*180/pi + 90;end%% Prepare the backgroundflag_figure = figure('Units', 'pixels', ...'Position', [figure_leftbottom_pos, flag_dimension_in_pixel]);flag_axes = axes('Parent', flag_figure, 'Units','pixels', ...'Position', [1 1 flag_dimension_in_pixel], 'Color', [1 0 0]);set(flag_axes, 'XLim', [0 flag_horiz_units_num], 'YLim', [0 flag_verti_units_num]);rectangle('Position', [0 0 flag_horiz_units_num flag_verti_units_num], ...'FaceColor', bkg_color ,'EdgeColor' ,bkg_color);set(flag_axes, 'Visible','off');%% Get the Star's Verticesfor i = 1:5[star_vertices_x(:,i) star_vertices_y(:, i)] = ...GetPentagramVertices(stars(i).center_pos, ...stars(i).radius,stars(i).orientation);endstar_handles = patch(star_vertices_x, star_vertices_y, star_color);set(star_handles, 'EdgeColor', star_color);flag_image = frame2im(getframe(flag_figure));imwrite(flag_image, 'FiveStarRedFlag.png');% 如装有Image Processing Toolbox的话,解注下面几行可以保存图形文件%% [filename, pathname, filterindex] = ...% uiputfile('*','Save the Nation Flag as...')%% imwrite(flag_image, [pathname filename]);主程序程序是飘扬的五星红旗,效果是3D实时渲染出来的,所以速度有点慢,机器够牛的同学可以试着将第一行的分辨率改大flag_size = [600 400]; % Change as you see fitflag_dimension_in_pixel = flag_size; %[600 400];figure_leftbottom_pos = [100 100];bkg_color = [1 0 0];star_color = [1 1 0];flag_horiz_units_num = 30;flag_verti_units_num = 20;star_vertices_x = zeros(10, 5);star_vertices_y = zeros(10, 5);stars(5).center_pos = [];stars(1).center_pos = [5 15];stars(1).radius = 3;stars(1).orientation = 0;stars(2).center_pos = [10 18];stars(2).radius = 1;stars(2).orientation = 0;stars(3).center_pos = [12 16];stars(3).radius = 1;stars(3).orientation = 0;stars(4).center_pos = [12 13];stars(4).radius = 1;stars(4).orientation = 0;stars(5).center_pos = [10 11];stars(5).radius = 1;stars(5).orientation = 0;for i = 2:5dists = deal(stars(i).center_pos - stars(1).center_pos);stars(i).orientation = atan(dists(2)/dists(1)).*180/pi + 90;end%% Prepare the backgroundflag_figure = figure('Units', 'pixels', ...'Position', [figure_leftbottom_pos, flag_dimension_in_pixel]);flag_axes = axes('Parent', flag_figure, 'Units','pixels', ...'Position', [1 1 flag_dimension_in_pixel], 'Color', [1 0 0]);set(flag_axes, 'XLim', [0 flag_horiz_units_num], 'YLim', [0 flag_verti_units_num]);rectangle('Position', [0 0 flag_horiz_units_num flag_verti_units_num], ...'FaceColor', bkg_color ,'EdgeColor' ,bkg_color);set(flag_axes, 'Visible','off');%% Get the Star's Verticesfor i = 1:5[star_vertices_x(:,i) star_vertices_y(:, i)] = ...GetPentagramVertices(stars(i).center_pos, ...stars(i).radius,stars(i).orientation);endstar_handles = patch(star_vertices_x, star_vertices_y, star_color);set(star_handles, 'EdgeColor', star_color);flag_texture = double(frame2im(getframe(flag_figure)))./255;%% Constantscycle = 2;cycle2 = 3;frames = 20;wave_length = flag_size(1)./cycle;wave_length2 = flag_size(2)./cycle2;rot_angle = 15.*pi/180;rot_angle2 = 5.*pi/180;amp1 = 1;amp2 = 0.5;flying_FSRF_RGBimages = uint8(zeros(flag_size(2), flag_size(1), 3, frames)); flying_FSRF_INDimages = uint8(zeros(flag_size(2), flag_size(1), 1, frames)); flying_FSRF_INDmap = zeros(256, 3, frames);GIF_filename = 'Flying_FSRF.gif';PNG_filename = 'Flying_FSRF.png';%% Main Program% flag_texture = paintFiveStarRedFlag(flag_size);flag_figure_handle = gcf;flag_size = size(flag_texture);[flag_xflag_y] = meshgrid(1:flag_size(2), 1:flag_size(1));for i = 1:framescla;flag_z = amp1.*sin((cos(rot_angle).*flag_x - sin(rot_angle).*flag_y).*2*pi./wave_length ...- 2*pi*(i-1)/frames) + ...amp2.*sin((cos(rot_angle2).*flag_x-sin(rot_angle2).*flag_y).*2*pi./wave_length2 ...- 2*pi*(i-1)/frames) + ...sin((cosd(20).*flag_x-sind(20).*flag_y).*2*pi./600 - 2*pi*(i-1)/frames);flag_surf_handle = warp(flag_x,flag_y,flag_z,flag_texture);view(2);set(flag_surf_handle, 'FaceLighting', 'phong','AmbientStrength', 0.7);set(gca, 'Visible', 'off', 'XLim', [1 600], 'YLim', [1 400], 'ZLim', [-3 3]);camproj('perspective')material dull% light_handle = camlight('right');l1 = light('Position', [600 200 1], 'Color', [1 1 1]);l2 = light('Position', [0, 0, 4], 'Color', [1 1 1]);flying_FSRF_frames(i) = getframe(flag_figure_handle);flying_FSRF_RGBimages(:,:,:,i) = flying_FSRF_frames(i).cdata;[current_INDimage currentMap] = rgb2ind(flying_FSRF_RGBimages(:,:,:,i), 256);if i==1imwrite(current_INDimage, currentMap,GIF_filename,...'GIF', 'LoopCount', inf, 'DelayTime', 0.05);imwrite(flying_FSRF_RGBimages(:,:,:,i),PNG_filename ,'PNG');elseimwrite(current_INDimage, currentMap,GIF_filename,...'GIF', 'WriteMode', 'Append', 'DelayTime', 0.05);endend主程序flag_size = [600 400]; % Change as you see fit flag_dimension_in_pixel = flag_size; %[600 400]; figure_leftbottom_pos = [100 100];bkg_color = [1 0 0];star_color = [1 1 0];flag_horiz_units_num = 30;flag_verti_units_num = 20;star_vertices_x = zeros(10, 5);star_vertices_y = zeros(10, 5);stars(5).center_pos = [];stars(1).center_pos = [5 15];stars(1).radius = 3;stars(1).orientation = 0;stars(2).center_pos = [10 18];stars(2).radius = 1;stars(2).orientation = 0;stars(3).center_pos = [12 16];stars(3).radius = 1;stars(3).orientation = 0;stars(4).center_pos = [12 13];stars(4).radius = 1;stars(4).orientation = 0;stars(5).center_pos = [10 11];stars(5).radius = 1;stars(5).orientation = 0;for i = 2:5dists = deal(stars(i).center_pos - stars(1).center_pos);stars(i).orientation = atan(dists(2)/dists(1)).*180/pi + 90;end%% Prepare the backgroundflag_figure = figure('Units', 'pixels', ...'Position', [figure_leftbottom_pos, flag_dimension_in_pixel]);flag_axes = axes('Parent', flag_figure, 'Units','pixels', ...'Position', [1 1 flag_dimension_in_pixel], 'Color', [1 0 0]);set(flag_axes, 'XLim', [0 flag_horiz_units_num], 'YLim', [0 flag_verti_units_num]);rectangle('Position', [0 0 flag_horiz_units_num flag_verti_units_num], ...'FaceColor', bkg_color ,'EdgeColor' ,bkg_color);set(flag_axes, 'Visible','off');%% Get the Star's Verticesfor i = 1:5[star_vertices_x(:,i) star_vertices_y(:, i)] = ...GetPentagramVertices(stars(i).center_pos, ...stars(i).radius,stars(i).orientation);endstar_handles = patch(star_vertices_x, star_vertices_y, star_color);set(star_handles, 'EdgeColor', star_color);flag_texture = double(frame2im(getframe(flag_figure)))./255;%% Constantscycle = 2;cycle2 = 3;frames = 20;wave_length = flag_size(1)./cycle;wave_length2 = flag_size(2)./cycle2;rot_angle = 15.*pi/180;rot_angle2 = 5.*pi/180;amp1 = 1;amp2 = 0.5;flying_FSRF_RGBimages = uint8(zeros(flag_size(2), flag_size(1), 3, frames)); flying_FSRF_INDimages = uint8(zeros(flag_size(2), flag_size(1), 1, frames)); flying_FSRF_INDmap = zeros(256, 3, frames);GIF_filename = 'Flying_FSRF.gif';PNG_filename = 'Flying_FSRF.png';%% Main Program% flag_texture = paintFiveStarRedFlag(flag_size);flag_figure_handle = gcf;flag_size = size(flag_texture);[flag_xflag_y] = meshgrid(1:flag_size(2), 1:flag_size(1));for i = 1:framescla;flag_z = amp1.*sin((cos(rot_angle).*flag_x - sin(rot_angle).*flag_y).*2*pi./wave_length ...- 2*pi*(i-1)/frames) + ...amp2.*sin((cos(rot_angle2).*flag_x-sin(rot_angle2).*flag_y).*2*pi./wave_length2 ...- 2*pi*(i-1)/frames) + ...sin((cosd(20).*flag_x-sind(20).*flag_y).*2*pi./600 - 2*pi*(i-1)/frames);flag_surf_handle = warp(flag_x,flag_y,flag_z,flag_texture);%warp函数来实现纹理映射view(2);set(flag_surf_handle, 'FaceLighting', 'phong','AmbientStrength', 0.7);set(gca, 'Visible', 'off', 'XLim', [1 600], 'YLim', [1 400], 'ZLim', [-3 3]);camproj('perspective')material dull% light_handle = camlight('right');l1 = light('Position', [600 200 1], 'Color', [1 1 1]);l2 = light('Position', [0, 0, 4], 'Color', [1 1 1]);flying_FSRF_frames(i) = getframe(flag_figure_handle);flying_FSRF_RGBimages(:,:,:,i) = flying_FSRF_frames(i).cdata;[current_INDimage currentMap] = rgb2ind(flying_FSRF_RGBimages(:,:,:,i), 256);if i==1imwrite(current_INDimage, currentMap,GIF_filename,...'GIF', 'LoopCount', inf, 'DelayTime', 0.05);imwrite(flying_FSRF_RGBimages(:,:,:,i),PNG_filename ,'PNG');elseimwrite(current_INDimage, currentMap,GIF_filename,...'GIF', 'WriteMode', 'Append', 'DelayTime', 0.05);endend参考文献用MATLAB绘制五星红旗【带飘动效果】/thread-185600-1-1.html。