MATLAB|不给糖果就捣蛋

目录

扫一扫关注公众号

效果图

代码

绘制南瓜

绘制无脸男小鬼

其中绘制风车代码:

其中 EllipsePlotter类函数代码如下

属性 (properties)

方法 (methods)


扫一扫关注公众号

效果图

图片

图片

代码

绘制南瓜

clc;clear;close all;
[X,Y,Z]=sphere(200);
R=1+(-(1-mod(0:.1:20,2)).^2)/15;
surf(R.*X,R.*Y,(.8+(0-(1:-.01:-1)'.^4)*.2).*Z.*R,'FaceC',[ 1 0.4588 0.0941],'EdgeC','n')
axis('equal','off')
material([ .6, .9, .3, 2, .5 ])
lighting g
camlight

图片

绘制无脸男小鬼

clc;clear;close all
fig=figure('Position',[476 224 672 642]);
ax=gca;
ax.Color='none';
ax.YLim=[0,15];
ax.XLim=[-3,14];
ax.Box='off';
ax.XColor='none';
ax.YColor='none';
axis equal;
hold on
pause(0.1)
[X, Y] = meshgrid(linspace(1, 0, 200));
image([-3, 14], [0, 15], Y*255);
colormap(gray)
pause(0.1)
ellipse = EllipsePlotter('a', 4, 'b', 6, 'x', 5.4, 'y', 6.2, ...
    'plotType', 'fill', 'fillColor', [.4,.4,.4], 'rotation', 0, ...
    'angleRange',[-25,205],'alpha',1,'lineWidth',6,'lineColor',[1,1,1]*0.9);
ellipse.plotEllipse();
d=[0 -0.3 -0.4 -0.6 -0.4 -0.3 0];
for i=1:7
    ellipse = EllipsePlotter('a',1.2, 'b', 3.3, 'x', 2.7+(i-1)*0.9, 'y', 5.5+d(i), ...
        'plotType', 'fill', 'fillColor',[.4,.4,.4], 'rotation', 0, ...
        'angleRange',[-200,20],'alpha',1,'lineWidth',6,'lineColor','none');
    ellipse.plotEllipse();
end
% 脸
pause(0.3)
FaceColor=[1.0 0.9627 0.9235];
ellipse = EllipsePlotter('a',3, 'b', 2.8, 'x',5.4, 'y',9, ...
    'plotType', 'fill', 'fillColor',FaceColor, 'rotation', 0, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
% 眉毛、腮红、嘴
pause(0.3)
ellipse = EllipsePlotter('a',0.3, 'b',1, 'x',3.9, 'y',10.2, ...
    'plotType', 'fill', 'fillColor',[1.0 0.65 0.63], 'rotation', 15, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();

ellipse = EllipsePlotter('a',0.3, 'b',1, 'x',6.8, 'y',10.4, ...
    'plotType', 'fill', 'fillColor',[1.0 0.65 0.63], 'rotation', 160, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
ellipse = EllipsePlotter('a',0.3, 'b',1, 'x',7, 'y',7.8, ...
    'plotType', 'fill', 'fillColor',[1.0 0.65 0.63], 'rotation', 0, ...
    'angleRange',[-200,20],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
ellipse = EllipsePlotter('a',0.3, 'b',1, 'x',4, 'y',7.6, ...
    'plotType', 'fill', 'fillColor',[1.0 0.65 0.63], 'rotation', -10, ...
    'angleRange',[-200,20],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
pause(0.3)
ellipse = EllipsePlotter('a',.84, 'b',1.1, 'x',3.9, 'y',8.9, ...
    'plotType', 'fill', 'fillColor',FaceColor, 'rotation', 0, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
ellipse = EllipsePlotter('a',.84, 'b',1.2, 'x',7, 'y',9, ...
    'plotType', 'fill', 'fillColor',FaceColor, 'rotation', 0, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
%嘴巴
pause(0.3)
ellipse = EllipsePlotter('a',.3, 'b',.5, 'x',5.3, 'y',7.9, ...
    'plotType', 'fill', 'fillColor',[0.9 0 0], 'rotation', 0, ...
    'angleRange',[-180,0],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();

ellipse = EllipsePlotter('a',.5, 'b',.25, 'x',5.3, 'y',8, ...
    'plotType', 'fill', 'fillColor',FaceColor, 'rotation', 0, ...
    'angleRange',[-180,0],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
%眼袋
pause(0.2)
ellipse = EllipsePlotter('a',0.3, 'b',0.1, 'x',3.9, 'y',8.2, ...
    'plotType', 'fill', 'fillColor',[1 1 1]*0.8, 'rotation', 0, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
ellipse = EllipsePlotter('a',0.3, 'b',0.11, 'x',7, 'y',8.2, ...
    'plotType', 'fill', 'fillColor',[1 1 1]*0.8, 'rotation', 0, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
% 眼睛
pause(0.3)
ellipse = EllipsePlotter('a',0.7, 'b',0.6, 'x',3.9, 'y',9.1, ...
    'plotType', 'fill', 'fillColor',[0 0 0], 'rotation', 0, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
ellipse = EllipsePlotter('a',0.7, 'b',0.6, 'x',7, 'y',9.1, ...
    'plotType', 'fill', 'fillColor',[0 0 0], 'rotation', 0, ...
    'angleRange',[0,360],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
% 心
pause(0.3)
t=0:0.025:2*pi;
x=(16*sin(t).^3)/10+5.5;
y=(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t))/10+4.8;
fill(x,y,'r','edgecolor','r');
%风车
pause(0.3)
hold on
plot([0 0.2],[9.5 7],'LineWidth',3,'Color',[0,0,1,0.5])
 colors = {'r', 'g', 'b', 'y';'c', 'm', 'g','c'};
L = 0.8;
center = [0,9.5]; % 定义风车的圆心
T=[0 pi/3];
for j = 1:4
    for i=1:2
        theta1 = (j-1) * pi/2+T(i);
        theta2 = theta1 + pi/2;
        P0 = center;
        P1 = center + L * [cos(theta1), sin(theta1)];
        P2 = center + L * [cos(theta2), sin(theta2)];
        Psharp = (P1 + P2) / 2;
        fill([P0(1), P1(1), Psharp(1)], [P0(2), P1(2), Psharp(2)], colors{i,j},'EdgeColor','none','FaceAlpha',0.8);
    end
end
%手
pause(0.3)
ellipse = EllipsePlotter('a',3, 'b',0.8, 'x',8.5, 'y',6, ...
    'plotType', 'fill', 'fillColor',[.4 .4 .4], 'rotation', -30, ...
    'angleRange',[100,250],'alpha',1,'lineWidth',2,'lineColor',[1,1,1]*0.6);
ellipse.plotEllipse();
ellipse = EllipsePlotter('a',3, 'b',0.8, 'x',8.7, 'y',6.1, ...
    'plotType', 'fill', 'fillColor',[.4 .4 .4], 'rotation', -30, ...
    'angleRange',[100,250],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
pause(0.3)
ellipse = EllipsePlotter('a',3, 'b',0.8, 'x',2.6, 'y',6, ...
    'plotType', 'fill', 'fillColor',[.4 .4 .4], 'rotation',20, ...
    'angleRange',[100,270],'alpha',1,'lineWidth',2,'lineColor',[1,1,1]*0.6);
ellipse.plotEllipse();
ellipse = EllipsePlotter('a',3, 'b',0.8, 'x',2.7, 'y',5.95, ...
    'plotType', 'fill', 'fillColor',[.4 .4 .4], 'rotation',20, ...
    'angleRange',[100,270],'alpha',1,'lineWidth',2,'lineColor','none');
ellipse.plotEllipse();
pause(0.3)
tex=sprintf('不给糖果\n  就捣蛋');
text(8,13,tex,'FontSize',30,'FontWeight','bold','Color','w');

图片

其中绘制风车代码:

hold on
plot([0 0.2],[9.5 7],'LineWidth',3,'Color',[0,0,1,0.5])
 colors = {'r', 'g', 'b', 'y';'c', 'm', 'g','c'};
L = 0.8;
center = [0,9.5]; % 定义风车的圆心
T=[0 pi/3];
for j = 1:4
    for i=1:2
        theta1 = (j-1) * pi/2+T(i);
        theta2 = theta1 + pi/2;
        P0 = center;
        P1 = center + L * [cos(theta1), sin(theta1)];
        P2 = center + L * [cos(theta2), sin(theta2)];
        Psharp = (P1 + P2) / 2;
        fill([P0(1), P1(1), Psharp(1)], [P0(2), P1(2), Psharp(2)], colors{i,j},'EdgeColor','none','FaceAlpha',0.8);
    end
end

图片

其中爱心代码:

t=0:0.025:2*pi;
x=(16*sin(t).^3)/10+5.5;
y=(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t))/10+4.8;
fill(x,y,'r','edgecolor','r');

图片

其中 EllipsePlotter类函数代码如下

classdef EllipsePlotter
    properties
        a = 1;
        b = 1;
        x = 0;
        y = 0;
        angleRange = [0 2*pi];
        rotation = 0;
        lineColor = 'b';
        lineWidth = 1;
        plotType = 'plot';
        fillColor = 'r';
        alpha = 1;
    end
    methods
        function obj = EllipsePlotter(varargin)
            % Constructor
            if nargin > 0
                for i = 1:2:nargin
                    obj.(varargin{i}) = varargin{i+1};
                end
            end
            startRadian = obj.angleRange(1) * pi / 180;
            endRadian = obj.angleRange(2) * pi / 180;
            theta = startRadian:pi/100:endRadian;
        end
        function plotEllipse(obj)
            startRadian = obj.angleRange(1) * pi / 180;
            endRadian = obj.angleRange(2) * pi / 180;
            theta = startRadian:pi/100:endRadian;
            X = obj.a * cos(theta);
            Y = obj.b * sin(theta);
            % 旋转坐标
            rotationMatrix = [cosd(obj.rotation), -sind(obj.rotation); sind(obj.rotation), cosd(obj.rotation)];
            xyRotated = [X; Y]' * rotationMatrix;
            % 将旋转后的椭圆平移到指定的位置
            XY(:,1) = xyRotated(:,1) + obj.x;
            XY(:,2) = xyRotated(:,2) + obj.y;
            % 根据 plotType 来绘制椭圆
            if strcmp(obj.plotType, 'plot')
                plot(XY(:,1), XY(:,2), '-', 'Color', obj.lineColor, 'LineWidth', obj.lineWidth);
                hold on; axis equal
            elseif strcmp(obj.plotType, 'fill')
                fill(XY(:,1), XY(:,2), obj.fillColor, 'EdgeColor', obj.lineColor, 'FaceAlpha', obj.alpha, 'LineWidth', obj.lineWidth);
                hold on; axis equal
            else
                error('无效的 plotType 参数!');
            end
        end
    end
end

属性 (properties)

这些属性定义了椭圆的参数和绘图样式。

  • a, b: 椭圆的主轴和次轴的长度。

  • x, y: 椭圆的中心位置。

  • angleRange: 绘制椭圆的角度范围。

  • rotation: 椭圆的旋转角度。

  • lineColor: 椭圆边界的颜色。

  • lineWidth: 椭圆边界的线宽。

  • plotType: 绘图类型,可以是 'plot' 或 'fill'。

  • fillColor: 如果 plotType 是 'fill',则此属性定义填充颜色。

  • alpha: 填充的透明度。

方法 (methods)

这些方法定义了类的功能。

  1. 构造函数 (EllipsePlotter):

    • 当创建这个类的对象时,它会被调用。

    • 它接受一系列的名称-值对参数,允许在创建对象时设置属性。

    • 它目前只计算了一个角度范围,但并没有使用这个范围做任何其他事情。

  2. plotEllipse:

    • 该方法根据对象的属性值绘制一个椭圆。

    • 它首先计算了椭圆上的点的坐标。

    • 然后根据 rotation 属性旋转这些点。

    • 接着将旋转后的点平移到 x 和 y 属性指定的位置。

    • 最后,根据 plotType 属性选择绘制方式:'plot' 会绘制椭圆的轮廓,而 'fill' 会填充椭圆。

这个类可以使用户轻松地创建和定制椭圆的绘图,而不必每次都重复相同的计算和绘图代码。例如,用户可以轻松地更改椭圆的大小、位置、颜色和旋转,并立即看到结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/124472.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

centos 7.9系统安装老版本jenkins,并解决插件问题

1.初衷 因为jenkins随着时间推移,其版本也越来越新,支持它运行的JDK也越来越新。基于不折腾的目标,我们安装一个老的固定版本就行。以前安装新版本,经常碰到的问题就是插件安装不兼容的问题。现在这个问题,可以把以前…

MySQL的默认引擎为什么是InnoDB

MySQL支持InnoDB、MyISAM、MEMORY、CSV等多个存储引擎,那为什么选InnoDB作为默认引擎呢? 主要原因有几点: 事务 事务主要用于保持数据一致性,是一组操作的集合,要么全部成功,要么全部失败。InnoDB引擎提供…

Kubernetes平台部署Grafana Loki Promtail系统

部署结构图: Loki 是主服务,负责存储日志和处理查询promtail 是代理,负责收集日志并将其发送给 lokiGrafana 用于 UI 展示 只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Lok…

通过docker快速部署RabbitMq

查询镜像: docker search rabbitmq拉去RabbitMq镜像: docker pull rabbitmq:management创建数据卷: docker volume create rabbitmq-home运行容器: docker run -id --namerabbitmq -v rabbitmq-home:/var/lib/rabbitmq -p 156…

解决docker tag打标签时报错:Error response from daemon: no such id

现象: 原因: docker tag时不仅仅要Repository仓库名,也需要原有的tag作为版本号 解决办法: docker tag 原有仓库名: 原有tag值 新的打标名称 问题解决!

【LeetCode百道热题】1.两数之和

一,题目描述 给定一个整数数组nums和一个整数目标值target,请你在改数组中找出和为目标值target的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案,但是,数组中同一个元素在答案里不能重复出现…

陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

11月4日,以“技术筑生态,智联赢未来”为主题的第二届OpenHarmony技术大会在北京隆重举办。本次大会由OpenAtom OpenHarmony(简称“OpenHarmony")项目群技术指导委员会(TSC)主办,由华为技术…

【STM32-DSP库的使用】基于Keil5 + STM32CubeMX 手动添加、库添加方式

STM32-DSP库的使用 一.CMSIS-DSP1.1 DSP库简介1.2 支持的函数类别1.3 宏定义 二、操作2.1 STM32CubeMX 配置基本工程2.2 Lib库的方式实现(推荐)2.3 手动添加DSP文件(可以下载官方最新库,功能齐全) 三、MFCC测试DSP加速效果 为验证语音识别MFC…

搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板

STM32F407-GCC-Template Arm-none-eabi-gcc MakefileOpenOCDCMSIS-DAPVscode工程模板 一、本次环境搭建所用的软硬件 1)Windows or Linux (本文以Windows为主) 2)JLink、Daplink、Wch-Link烧录器 3)GNU Arm Embedded Toolchain交叉编译…

C++模板元模板实战书籍讲解第一章题目讲解

目录 第一题 C代码示例 第二题 C代码示例 第三题 3.1 使用std::integral_constant模板类 3.2 使用std::conditional结合std::is_same判断 总结 第四题 C代码示例 第五题 C代码示例 第六题 C代码示例 第七题 C代码示例 总结 第一题 对于元函数来说,…

贺天下功夫酱酒闪耀亮相2023佛山秋色系列活动

11月1日至5日,2023年广东非遗周暨佛山秋色巡游系列活动在佛山举行,以“品味佛山 秋醉岭南”为主题,好戏连台。贵州贺天下酒业独家赞助佛山祖庙秋祭、乡饮酒礼,还全面参与佛山秋色巡游、佛山非遗美食展、佛山非遗音乐会等多个活动&…

centos k8s安装dapr

文章目录 安装helm更新helm库初始化dapr高可用方式安装 卸载dapr验证k8s的dapr安装rocketmq总结 安装helm 三个包放到一个目录下 chmod x get ./get helm version更新helm库 helm repo add dapr https://dapr.github.io/helm-charts/ helm repo update helm search repo dapr …

2023年腾讯云双11活动入口在哪里?

2023年双11腾讯云推出了11.11大促优惠活动,下面给大家分享腾讯云双11活动入口、活动时间、活动详情,希望可以助力大家轻松上云! 一、腾讯云双11活动入口 活动地址:点此直达 二、腾讯云双11活动时间 腾讯云双11活动时间跨度很长…

el-form添加自定义校验规则校验el-input只能输入数字

0 效果 1 代码 {1,5}是用来限制小数点后几位的 addFormRules: {investAmount: [{ validator: checkInvestAmount, trigger: blur }], }, const checkInvestAmount (rule, value, callback) > {if (value ! && value ! null && value ! undefined) {if (/…

css进阶知识点速览

0前言 零基础部分的博客 1选择器进阶 1.1后代选择器 作用:根据html标签的嵌套关系,选择父元素后代中满足条件的元素 选择器语法:选择器1 选择器2 {css} 结果: 在选择器1所找到标签的后代中 注意: 后代包括&#xf…

osg之黑夜背景地月系显示

目录 效果 代码 效果 代码 /** * Lights test. This application is for testing the LightSource support in osgEarth. * 灯光测试。此应用程序用于测试osgEarth中的光源支持。 */ #include "stdafx.h" #include <osgViewer/Viewer> #include <osgEarth/N…

Vite创建React项目,另外一种更加简单的方法

在上一篇blog中一个一个安装依赖dependencies&#xff0c;有没有一步到位的方法呢&#xff0c;有! 参考《React 18 Design Patterns and Best Practices Design, build, and deploy production-ready web applications with React》4th 第一章倒数第二节Vite as a solution有个…

Mysql数据库 12.SQL语言 触发器

一、触发器&#xff08;操作日志表&#xff09; 1.介绍 不需要主动调用的一种储存过程&#xff0c;是一个能够完成特定过程&#xff0c;存储在数据库服务器上的SQL片段。 对当前表中数据增删改查的一种记录<日志表>&#xff0c;根据触发器自动执行&#xff0c;记录当前…

在mac上使用jmap -heap命令报错:Attaching to process ID 96530, please wait...

在mac上执行命令jmap -heap 96530 报错&#xff1a; Attaching to process ID 96530, please wait... ERROR: attach: task_for_pid(96530) failed: (os/kern) failure (5) Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Cant attach to the proc…

OpenHarmony 社区运营报告(2023 年 10 月)

● 截至 2023 年 10 月&#xff0c;OpenHarmony 社区共有 51 家共建单位&#xff0c;累计超过 6200 名贡献者产生 24.2 万多个 PR&#xff0c;2.3 万多个 Star&#xff0c;6.1 万多个 Fork&#xff0c;59 个 SIG。 ● OpenHarmony 4.0 版本如期而至&#xff0c;开发套件同步升级…