打字猴:1.701007206e+09
1701007206 我和数学有约:趣味数学及算法解析 [:1701004217]
1701007207 我和数学有约:趣味数学及算法解析 5.8 五星红旗随风飘
1701007208
1701007209 中华人民共和国国旗,即五星红旗,旗面为红色,象征革命,国旗中的大五角星代表中国共产党,四颗小五角星分别代表工人、农民、小资产阶级和民族资产阶级四个阶级,四颗小星各有一尖正对着大星的中心点,其间的位置关系象征着中国共产党领导下的革命人民大团结。
1701007210
1701007211 五星红旗,长宽比例为3:2。左上方缀黄色五角星五颗,四颗小星环拱在一颗大星的右面,并各有一个角尖正对大星的中心点。1、4颗黄星对齐,2、3颗黄星对齐。
1701007212
1701007213 每逢看见五星红旗,都会热血澎湃;五星红旗,颜色鲜艳,五颗红星更是相映益彰。以下通过MATLAB程序进行五星红旗绘制如下:
1701007214
1701007215     function ysw5_8    clc,clear,close all                   %清屏和清除变量    warning off                           %消除警告    flag_size = [600 400];                %窗口大小    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);       %初始化红心x坐标    star_vertices_y = zeros(10, 5);       %初始化红心y坐标    stars(5).center_pos = [];             %5个红星的坐标属性设置,初始化空置    stars(1).center_pos = [5 15];         %红星1中心点位置    stars(1).radius = 3;                     %红星内接圆半径    stars(1).orientation = 0;             %方向,相切    stars(2).center_pos = [10 18];        %红星2中心点位置    stars(2).radius = 1;                  %红星内接圆半径    stars(2).orientation = 0;             %方向,相切    stars(3).center_pos = [12 16];        %红星3中心点位置    stars(3).radius = 1;                  %红星内接圆半径    stars(3).orientation = 0;             %方向,相切    stars(4).center_pos = [12 13];        %红星4中心点位置    stars(4).radius = 1;                  %红星内接圆半径    stars(4).orientation = 0;             %方向,相切    stars(5).center_pos = [10 11];        %红星5中心点位置    stars(5).radius = 1;                  %红星内接圆半径    stars(5).orientation = 0;             %方向,相切    for i = 2:5            dists = deal(stars(i).center_pos - stars(1).center_pos);            stars(i).orientation = atan(dists(2)/dists(1)).*180/pi+90;     end     %%绘制红色背景    flag_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’);         %%绘制5个红星     for i = 1:5            [star_vertices_x(:, i) star_vertices_y(:, i)] = …            GetPentagramVertices(stars(i).center_pos, …            stars(i).radius,stars(i).orientation);                                   end     star_handles = patch(star_vertices_x, star_vertices_y, star_color);     set(star_handles, ‘EdgeColor’, star_color);     flag_texture = double(frame2im(getframe(flag_figure)))./255;   %double类型图像        imwrite(flag_texture, ‘FiveStarRedFlag.png’);          %写为一幅图像        end        function [x y] = GetPentagramVertices(centerPos, radius, orientation)     %子函数:获得五角星的十个顶点     Rad_ext = radius .* ones(1,5);     Ori_ext = ([0:72:359]+90 +orientation).* pi/ 180;         Rad_int = radius .* sind(18)./sind(126) .* ones(1,5);     Ori_int = ([0:72:359] - 90 +orientation).* pi/ 180;     %红星5条线倾角    Ori_int = Ori_int([4 5 1 2 3]);                         %红星5条线标号        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);         x = x+centerPos(1);     y = y+centerPos(2);     end
1701007216
1701007217 运行程序输出图形如图5-53所示。
1701007218
1701007219
1701007220
1701007221
1701007222 图5-53 静态的五星红旗
1701007223
1701007224 该红旗是一面静态的图像,那么当五星红旗随风飘扬,红旗是一种波浪状的不断飘扬。采用MATLAB程序进行飞扬的五星红旗模拟,直观的一睹五星红旗飘扬的神态,具体程序如下:
1701007225
1701007226     clc,clear,close all                                   %清屏和清除变量    warning off                                           %消除警告    flag_size = [400 600];                                %窗口大小    flag_texture = imread(‘FiveStarRedFlag.png’);         %加载图像    flag_texture = double(flag_texture);                  %双精度    %%Constants    cycle = 2;    cycle2 = 3;    frames = 10;                                          %动画,10帧    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;    %%Main Program    flag_figure_handle = gcf;    [flag_x flag_y] = meshgrid(1:flag_size(2), 1:flag_size(1));  %栅格化    for i = 1:frames             cla;           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);     end    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
1701007227
1701007228 运行程序输出图形如图5-54所示。
1701007229
1701007230
1701007231
1701007232
1701007233 图5-54 飞扬的五星红旗
1701007234
1701007235 五星红旗随风飘扬,其波动情况和实际运动情况相符合,从程序角度来看实际,我们可以坐观风云,这就是程序下的几何图形之美,让我们开动思维,用我们的智慧筑起智能化设计的桥梁。
1701007236
1701007237
1701007238
1701007239
1701007240 我和数学有约:趣味数学及算法解析 [:1701004218]
1701007241 我和数学有约:趣味数学及算法解析 5.9 一颗红心永流传
1701007242
1701007243 一颗红心永流传,顾名思义,我肯定将描述一颗红心。红心就是我们眼中看到的像“心”一样的“类模型”,我们当中的很多人都喜欢它,一方面它精致,另一方面更是勿忘心安。一颗红心既然这么惹人喜欢,拥有一颗我们自己的红心,就显得那么理所当然了。
1701007244
1701007245 采用程序设计,我们可以设计一颗完美的红心,为我们所欣赏、所拥有,要想绘制三维的红心,首先来看看二维的心形图如何绘制。
1701007246
1701007247 二维红心的平面方程如下:
1701007248
1701007249
1701007250
1701007251
1701007252 采用程序进行数值解模拟如下:
1701007253
1701007254     figure(1)    ezplot(‘(x^2-1+y^2)^3-x^2*y^3’)    axis([-2.5 2.5 -2 2])
1701007255
[ 上一页 ]  [ :1.701007206e+09 ]  [ 下一页 ]