圣诞节会呼吸的玫瑰爱心代码 一起浪漫吧

news2024/11/18 22:51:50

在这里插入图片描述

源码下载地址:会呼吸、带有玫瑰花的爱心告白程序-Java文档类资源-CSDN下载

粉丝可直接私信我领取。

前言

之前有部电视剧《点燃我温暖你》没火,但是其中李峋的爱心代码却在程序圈超级火,这圣诞节快到了了,给大家来一波爱心代码的教学,同时弥补一下Java语言上一波的缺失。最终希望大家能在圣诞节该浪漫的浪漫、该脱单的脱单,加油兄弟!同时我也把实现思路通过动画给大家说清楚,期望各个语言的大佬都能一起开发出来,用心浪漫2022圣诞节!(开发了可以在评论区留个言哦~)

特别说明:勇哥的粉丝,可以评论区或私信留言给我,我直接把你想写的话和名字,直接给你打包好!

解释一下,创作思路及寓意:

  • 程序以信封的方式,可以增加浪漫与惊喜的仪式感!

  • 心的形状+玫瑰花的形状,双重美丽,不怕你的她不喜欢!

  • 心跳+呼吸灯的效果,含义:你的心围她而动的深刻含义!

  • 内部心不停转动的效果,含义:你的心围她而动的深刻含义!(双重强调更具浪漫)

重点学习或必要技术

  • 对于不规则图形的绘制示例:从本文中将学习到java中GeneralPath绘制不规则图形的高级应用。

  • 对于不规则图形的填充示例:从本文中将学习到不规则图形的,特别是射线渐变填充等高级应用。

  • 对于不规则图形的动画示例:从本文中将学习到图形平移、旋转、以及多层次的平移等高级应用。

心的轮廓思路及实现

绘制好基本轮廓之后,填充的颜色、特效等才不会溢出轮廓,因此我们第一步需要画好重要的轮廓线,实现思路如下:

通过二次曲线(Java中是QuadCurve2D)来画出轮廓线,轮廓线分为以下九段:

  • 第一段为心的最上左边

  • 第二段为心的最上右边

  • 第三段心的最下,有点幅度让心看起来中心点平滑一些;注意上面线段比下面线段长,有主次感;

  • 第四段为右上角

  • 第五段为右边

  • 第六段为右下角

  • 第七段为左下角,与第六段对称

  • 第八段为左边,与第五段对称

  • 第九段为左上角,与第四段对称

PS:有人可能不明白,为什么要画这么复杂?勇哥给解释一下,这样画,有9个点和9个线段,蕴含长长久久的意思!懂了吧~

来看一下动画演示的效果吧:

9个点9个线段,蕴含长长久久

参考代码:

GeneralPath generalPath = new GeneralPath();
// 左边
g2d.setColor(bgColor);
generalPath.moveTo(getWidth()/2-6,getHeight()*3/10);
generalPath.quadTo(getWidth()/2,getHeight()*3/10+5,getWidth()/2+6,getHeight()*3/10);// 上中
generalPath.quadTo(getWidth()*5/8,getHeight()*2/10,getWidth()*3/4,getHeight()*2/10);// 右上
generalPath.quadTo(getWidth(),getHeight()*2/10+10,getWidth()-5,getHeight()*2/5);
generalPath.quadTo(getWidth(),getHeight()*3/5,getWidth()/2+5,getHeight()*4/5);
generalPath.quadTo(getWidth()/2,getHeight()*4/5+3,getWidth()/2-5,getHeight()*4/5);
generalPath.quadTo(10,getHeight()*3/5,5,getHeight()*2/5);
generalPath.quadTo(0,getHeight()*2/10,getWidth()*1/4,getHeight()*2/10);
generalPath.quadTo(getWidth()*3/8,getHeight()*2/10,getWidth()/2-6,getHeight()*3/10);

玫瑰心思路及实现

有了轮廓就可以实现玫瑰花的效果了,思路就两步如下:

  • 纯色填充不好看,使用射线填充,纯色(#ffffff)到红色(#ff0000)的射线渐变

  • 复制9个渐变好的心,按照中心点重叠起来玫瑰花的效果

PS:这个地方又是9,看得出勇哥的用心设计了吧~

动画演示一番,希望得的点赞:

9个心,蕴含长长久久

参考实现代码:

for (int i = 0; i < 9; i++) {
    AffineTransform transform = g2d.getTransform();
    transform.scale(0.6d, 0.6d);
    transform.translate(getWidth() *0.34, getHeight()*0.34);
    if(i>3) {
        transform.rotate(theta % 360, getWidth() / 2, getHeight() / 2);
    }
    g2d.setTransform(transform);
    g2d.draw(generalPath);
    g2d.setColor(Color.RED);
    Color[] colors = { Color.RED, Color.WHITE, Color.RED };
    float[] dist = {0.13f, 0.55f, 1.0f };
    Point2D center = new Point2D.Float(0.5f * getWidth(), 0.5f * getHeight()-10);

    RadialGradientPaint p = new RadialGradientPaint(center, 0.5f * getWidth()*per, dist, colors);
    g2d.setPaint(p);
    g2d.fill(generalPath);
}

呼吸效果&内部心旋转思路及实现

呼吸效果,可以通过控制射线的大小比例来控制:

  • 定义per变量,等于1时,表示上一步的渐变效果,1.4时表示白色圆圈扩大1.4倍,反正缩小

  • 通过线程每100ms修改一下缩放比例,步长为0.1

内部心旋转思路:

  • 定义theta变量,表示内部心旋转的角度

  • 通过线程每100ms修改一下角度值,步长为2度

double theta = 0;// 选择的角度
float per = 1;// 镜像的大小比例
boolean isAdd = true;// 镜像大小是+计算还是-计算

@Override
public void run() {
    while (true){
        try {
            theta += 2;
            if (isAdd) {
                per += 0.1;
                if (per > 1.3) {
                    isAdd = false;
                }
            } else {
                per -= 0.1;
                if (per < 0.6) {
                    isAdd = true;
                }
            }
            repaint();
            Thread.sleep(100);
        } catch (InterruptedException e) {
        }
    }
}

再次欣赏一下吧~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CH36X系列芯片Windows系统使用教程

概述 CH365是一个连接PCI总线的通用接口芯片&#xff0c;CH367/CH368是连接PCI-Express总线的通用接口芯片。支持I/O端口映射、存储器映射、扩展ROM以及中断&#xff0c;提供主动并口、SPI、I2C、GPIO等硬件接口。基于如上芯片可将PCI/PCIe总线转换为简便易用的类似于ISA总线的…

【车载开发系列】UDS诊断---例程控制($0x31)

【车载开发系列】UDS诊断—例程控制&#xff08;$0x31&#xff09; UDS诊断---例程控制&#xff08;$0x31&#xff09;【车载开发系列】UDS诊断---例程控制&#xff08;$0x31&#xff09;一.概念定义1&#xff09;RoutineControl服务2&#xff09;例程的概念3&#xff09;例程的…

如何使用腾讯云轻量应用服务器搭建免费开源企业CMS?

1.背景概述 腾讯云轻量应用服务器是新一代面向中小企业及开发者的云服务器产品&#xff0c;简单易用&#xff0c;一站式融合多款云服务&#xff0c;能帮助用户在云端快速构建网站、博客、电商、论坛等各类应用以及各类开发测试环境。 PbootCMS是一款针对企业网站开发的国产CM…

Docker+Node-exporter+Prometheus+Grafana

载docker-compose容器编排并授权x curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose && chmod x /usr/local/bin/docker-compose所有客户端服务器node-exporter的dock…

[附源码]JAVA毕业设计婴幼儿玩具共享租售平台(系统+LW)

[附源码]JAVA毕业设计婴幼儿玩具共享租售平台&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

C中的auto、static、register、extern、const和volitate

C语言中的每一个变量和函数有两个属性&#xff1a;数据类型和数据的存储类别。数据类型&#xff08;整形、字符型等&#xff09;&#xff0c;存储类别是指数据在内存中存储的方法&#xff0c;存储方法有两大类&#xff1a;静态存储类和动态存储类。具体包括四种&#xff1a;自动…

TensorRT 高级用法

1&#xff0c;插件支持-转化TensorRT模型时不支持的算子 我们在做模型结构设计时&#xff0c;有时候自己会设计一些layer来满足任务需求&#xff0c;但是这些layer在使用Tensorrt优化时&#xff0c;TensorRT可能并不支持&#xff0c;如ROI Align&#xff0c;这时候就需要通过Pl…

vue源码分析-v-model的本质

双向数据绑定这个概念或者大家并不陌生&#xff0c;视图影响数据&#xff0c;数据同样影响视图&#xff0c;两者间有双向依赖的关系。在响应式系统构建的上&#xff0c;中&#xff0c;下篇我已经对数据影响视图的原理详细阐述清楚了。而如何完成视图影响数据这一关联&#xff1…

连接WiFi需要短信验证怎么做?

公共场所提供公共的无线wifi上网服务&#xff0c;需对用户进行实名认证。手机短信实名认证以其用户体验、综合成本等优势&#xff0c;成为公共无线上网认证的首选方案。 一、公共wifi需要短信验证怎么做 要实现访客无线上网短信认证功能&#xff0c;需要借助上网行为管理设备搭…

响应式开发基础知识以及大屏解决方案

1.响应式开发基础知识 1.1-媒体查询media: css中设置条件&#xff0c;基于media 媒体设备&#xff1a; all所有设备、print打印设备/screen屏幕设备媒体条件&#xff0c;符合某个条件&#xff0c;写对应的样式max-width、min-width、max-height、min-heigth 1.2-视口viewpo…

基于java+springboot+mybatis+vue+mysql的沁园健身房预约管理系统

项目介绍 现在无论是在PC上还是在手机上&#xff0c;相信全国所有地方都在进行网上健身房预约管理。随着经济的不断发展&#xff0c;系统管理也在不断增多&#xff0c;健身房预约平台就是其中一种。 本次的毕业设计主要就是在基于Java语言平台下设计并开发一个健身房预约平台…

k8s部署fabric 2.4

test-network的部署现状 dockerdocker-compose ip端口号&#xff1a;ip不可变&#xff0c;人工维护&#xff0c;不可冲突脚本化&#xff1a;程度低&#xff0c;部分流程需要登陆到容器中执行日志收集&#xff1a;无监控告警&#xff1a;无容器管理&#xff1a;无部署流程&…

4.1什么叫作PCB封装?它的分类一般有哪些? Cadence Allegro软件制作PCB封装的一般流程是什么?

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

Java中的5个代码性能提升技巧,学会之后立马提升近10倍性能

文章目录预先分配 HashMap 的大小优化 HashMap 的 key不使用 Enum.values() 遍历使用 Enum 代替 String 常量使用高版本 JDK这篇文章介绍几个 Java 开发中可以进行 性能优化的小技巧&#xff0c;虽然大多数情况下极致优化代码是没有必要的&#xff0c;但是作为一名技术开发者&a…

如何通过nodejs快速搭建一个服务器

在前端开发过程中&#xff0c;可能某些时候需要自己搭建一台服务器用于一些文件图片请求或者进行后端相关知识的学习。本文主要讲解如何通过nodejs进行一个基础服务器的搭建&#xff0c;包括如何将文件布置的服务器&#xff0c;以及基础接口的开发。后面可能会更新关于通过node…

C# SuperSocket 手把手教你入门 傻瓜教程---9(CountSpliterReceiveFilter - 固定数量分隔符协议)使用COMMAND

C# SuperSocket 手把手教你入门 傻瓜教程系列教程 C# SuperSocket 手把手教你入门 傻瓜教程---1&#xff08;服务器单向接收客户端发送数据&#xff09; C# SuperSocket 手把手教你入门 傻瓜教程---2&#xff08;服务器和客户端双向通信&#xff09; C# SuperSocket 手把手教…

【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用

文章目录一、本地存储1.概念2.接口3.实际操作二、自定义事件绑定1.自定义事件使用过程2.绑定自定义事件的语法3.其他注意事项三、全局事件总线1.全局事件总线概念2.全局事件总线的使用方式3.原理剖析四、$nextTick小技巧一、本地存储 1.概念 可以将数据临时存储到本地浏览器&…

基于适应度-距离平衡的人工生态系统优化求解暂态稳定约束最优潮流问题附matlab代码

​✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法…

数字时代,企业应该如何看待商业智能BI

新一代数字化相关技术的应用&#xff0c;使得数字化产品和服务覆盖了社会的方方面面&#xff0c;也让数据成为了构建现代化社会的核心元素&#xff0c;让人们明白数据不只是人类活动产生的附加品&#xff0c;还能够在应用过程中促进人类活动发展、优化和改变&#xff0c;真正成…

Python时间模块之datetime模块

目录 简介 函数介绍及运用 date&#xff1a;日期类 1.获取当前时间 2.日期对象的属性 3.date类中时间和时间戳的转换&#xff1a; 4.修改日期使用replace方法 time&#xff1a;时间类 time类操作 datetime&#xff1a;日期时间类 timedelta&#xff1a;时间间隔&…