Java跳动爱心代码
1.计算爱心曲线上的点的公式
计算爱心曲线上的点的公式通常基于参数方程。以下是两种常见的参数方程表示方法,用于绘制爱心曲线:
1.1基于 (x, y) 坐标的参数方程
-
x = a * (2 * cos(θ) - sin(θ))^3
-
y = a * (2 * sin(θ) - cos(θ))^3
其中,a 是一个常数,用于控制爱心的大小;θ 是参数,从 0 到 2π 取值。这个公式通过改变 θ 的值,可以计算出爱心曲线上不同位置的点 (x, y)。
1.2基于三角函数组合的参数方程
-
x = 16 * sin^3(t)
-
y = 13 * cos(t) - 5 * cos(2t) - 2 * cos(3t) - cos(4t)
其中,t 是参数,同样用于计算爱心曲线上不同位置的点 (x, y)。这个公式通过正弦和余弦函数的组合来绘制爱心形状。通过改变 t 的取值范围,可以调整爱心的大小和形状。
1.3归纳
-
无论是哪种参数方程,都是通过改变参数(θ 或 t)的取值来遍历爱心曲线上的点。
-
a 常数用于控制爱心的大小。
-
这些参数方程可以在 Java Swing 或其他图形库中使用,通过绘制一系列的点来模拟连续的爱心曲线。
-
我们可以根据实际需要选择适合的参数方程,并调整参数以得到期望的爱心形状和大小。
2. Java跳动爱心代码的实现
在Java中创建一个简单的控制台应用来显示跳动的爱心通常涉及到使用ASCII字符来绘制爱心,并使用循环和延迟来模拟跳动的效果。以下是一个简单的示例代码,它使用System.out.print
和Thread.sleep
来在控制台中打印并更新跳动的爱心图案。
在这个实例中,我们使用一个简单的ASCII爱心图案,并通过在其旁边添加一些空格来模拟跳动的效果。
public class BouncingHeart { private static final String HEART = "♥"; // 使用Unicode爱心字符 private static final int MAX_WIDTH = 80; // 控制台的最大宽度,用于确定爱心的位置 private static int currentPosition = 0; // 当前爱心的位置 public static void main(String[] args) { try { while (true) { // 无限循环来模拟跳动 clearConsole(); // 清除控制台内容(在某些系统中可能不支持) drawHeart(); // 绘制爱心 Thread.sleep(200); // 等待一段时间以模拟跳动效果 currentPosition = (currentPosition + 1) % MAX_WIDTH; // 更新位置 } } catch (InterruptedException e) { e.printStackTrace(); } } private static void drawHeart() { // 在当前位置打印爱心,其余位置用空格填充 for (int i = 0; i < MAX_WIDTH; i++) { if (i == currentPosition) { System.out.print(HEART); } else { System.out.print(" "); } } System.out.println(); // 换行以开始新的一行 } // 清除控制台内容的方法(注意:这在某些操作系统或IDE中可能不起作用) private static void clearConsole() { final String os = System.getProperty("os.name"); try { final String command; if (os.contains("Windows")) { command = "cls"; } else { command = "clear"; } final Process process = Runtime.getRuntime().exec(new String[]{command}); // 等待命令执行完成 process.waitFor(); } catch (final Exception e) { e.printStackTrace(); } }
}
重要说明:
(1)控制台清除:clearConsole()
方法试图清除控制台的内容,但这在某些操作系统或IDE(如IntelliJ IDEA或Eclipse的控制台视图)中可能不起作用。在某些情况下,我们可能需要关闭并重新打开控制台窗口或使用外部工具(如PowerShell、Terminal等)来查看效果。
(2)Unicode字符:在上面的代码中,我使用了Unicode的爱心字符♥
。如果我们的控制台或IDE不支持此字符,我们可能需要将其替换为其他ASCII字符或图案。
(3)无限循环:main
方法中的while(true)
循环是一个无限循环,用于持续模拟跳动效果。我们可以通过中断程序(如使用Ctrl+C)来停止它。
(3)延迟和跳动:通过Thread.sleep(200);
,我们在每次打印之间等待200毫秒来模拟跳动效果。我们可以根据需要调整此值。
(4)位置更新:currentPosition
变量用于跟踪爱心在控制台中的当前位置。每次循环时,我们都会更新此位置以模拟跳动效果。
3.如何在Java中绘制爱心图片
在Java中绘制一个完整的爱心图片,我们通常不会使用控制台输出ASCII字符,而是使用图形用户界面(GUI)库,如Java Swing或JavaFX。以下是一个使用Java Swing绘制爱心图片的简单示例:
首先,我们需要一个方法来计算爱心曲线上的点。这里我们使用参数方程来定义爱心的形状。然后,我们使用java.awt.Graphics
或java.awt.Graphics2D
来绘制这些点。
import javax.swing.*;
import java.awt.*; public class HeartDrawer extends JPanel { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 设置抗锯齿以改善图形质量 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int centerX = getWidth() / 2; int centerY = getHeight() / 2; int size = Math.min(centerX, centerY) - 50; // 根据窗口大小调整爱心大小 // 绘制爱心 drawHeart(g2d, centerX, centerY, size); } private void drawHeart(Graphics2D g2d, int centerX, int centerY, int size) { int x = 0, y = -size; float t; for (t = 0.0f; t <= 2 * Math.PI; t += 0.01f) { x = (int) (size * (16 * Math.pow(Math.sin(t), 3))); y = (int) (-size * (13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t))); // 将心形居中并适应窗口大小 x += centerX; y += centerY; // 如果点在窗口内,则绘制它 if (x > 0 && x < getWidth() && y > 0 && y < getHeight()) { g2d.fillOval(x, y, 2, 2); // 使用小圆点来绘制爱心,以模拟线条 } } } public static void main(String[] args) { JFrame frame = new JFrame("Heart Drawer"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); // 设置窗口大小 frame.add(new HeartDrawer()); frame.setVisible(true); }
}
在这个示例中,HeartDrawer
类继承自JPanel
,并重写了paintComponent
方法来绘制爱心。我们使用参数方程来计算爱心上的点,并用小圆点(通过fillOval
方法)来绘制它们,以模拟线条。我们可以通过调整参数方程的参数和循环的步长来改变爱心的形状和精度。
运行这个程序将打开一个窗口,并在其中绘制一个爱心。注意,由于我们使用了小圆点来绘制线条,所以爱心看起来可能像是由点组成的,而不是连续的线条。我们可以通过增加每个点的大小或改变绘制方法来改善这一点。
相关文章:
Java跳动爱心代码
1.计算爱心曲线上的点的公式 计算爱心曲线上的点的公式通常基于参数方程。以下是两种常见的参数方程表示方法,用于绘制爱心曲线: 1.1基于 (x, y) 坐标的参数方程 x a * (2 * cos(θ) - sin(θ))^3 y a * (2 * sin(θ) - cos(θ))^3 其中ÿ…...
Swift Combine — Operators(常用Filtering类操作符介绍)
目录 filter(_: )tryFilter(_: )compactMap(_: )tryCompactMap(_: )removeDuplicates()first(where:)last(where:) Combine中对 Publisher的值进行操作的方法称为 Operator(操作符)。 Combine中的 Operator通常会生成一个 Publisher,该 …...

Windows11+CUDA12.0+RTX4090如何配置安装Tensorflow2-GPU环境?
1 引言 电脑配置 Windows 11 cuda 12.0 RTX4090 由于tensorflow2官网已经不支持cuda11以上的版本了,配置cuda和tensorflow可以通过以下步骤配置实现。 2 步骤 (1)创建conda环境并安装cuda和cudnn,以及安装tensorflow2.10 con…...

韩顺平0基础学Java——第27天
p548-568 明天开始坦克大战 Entry 昨天没搞明白的Map、Entry、EntrySet://GPT教的 Map 和 Entry 的关系 1.Map 接口:它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。 2. Entry接口:Entry 是 Map 接口的一个嵌…...

YesPMP探索Python在生活中的应用,助力提升开发效率
Python是一种简单易学、高效强大的编程语言,正变成越来越多人选择的热门技能。学习Python不仅可以提供更多就业机会,还能让自己在职场更加有竞争力,那可以去哪里拓展自己的技能呢? YesPMP平台 为熟练掌握Python语言的程序员提供了…...

TikTok账号运营:静态住宅IP为什么可以防封?
静态住宅IP代理服务是一种提供稳定、静态IP地址并可隐藏用户真实IP地址的网络代理服务。此类代理服务通常使用高速光纤网络来提供稳定、高速的互联网体验。与动态IP代理相比,静态住宅IP代理的IP地址更稳定,被封的可能性更小,因此更受用户欢迎…...

linux系统宝塔服务器temp文件夹里总是被上传病毒php脚本
目录 简介 上传过程 修复上传漏洞 tmp文件夹总是被上传病毒文件如下图: 简介 服务器时不时的会发送短信说你服务器有病毒, 找到了这个tmp文件, 删除了之后又有了。 确实是有很多人就这么无聊, 每天都攻击你的服务器。 找了很久的原因, 网上也提供了一大堆方法,…...

HTML+CSS+PHP实现网页留言板功能(需要创建数据库)
话说前头,我这方面很菜滴。这是我网页作业的一部分。 1.body部分效果展示(不包括footer) 2、代码 2.1 leaving.php(看到的网页) <!DOCTYPE html> <html lang"en"> <head> <met…...
【谷歌】实用的搜索技巧
1、使用正确的谷歌网址 我们知道https://www.google.com是谷歌的网址。但根据国家,用户可能会被重定向到 google.fr(法国)或google.co.in(印度)。 最主要的URL——google.com是为美国用户准备的(或是针对全世界所有用户的唯一URL))。当你在谷歌上搜索时,了解这一点是相…...

打造完美启动页:关键策略与设计技巧
启动页(Splash Screen)设计是指在应用程序启动时,首先展示给用户的界面设计。这个界面通常在应用加载或初始化期间显示,其主要目的是为用户提供一个视觉缓冲,展示品牌标识,并减少用户在等待过程中的焦虑感。…...

电子书(chm)-加载JS--CS上线
免责声明: 本文仅做技术交流与学习... 目录 cs--web投递 html(js)代码 html生成chm工具--EasyCHM 1-选择powershell 模式 生成 2-选择bitsadmin模式生成 chm反编译成html cs--web投递 cs配置监听器--->攻击---->web投递---> 端口选择没占用的, URL路径到时候会在…...

理解HTTP请求格式
HTTP概念 HTTP全称HyperTextTransfer Protocol(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议;HTTP是一个客户端(用户)和服务端(网站)之间请求和响应的标准。 HTTP 协议是以 ASCII 码传输&…...

差分数组汇总
本文涉及知识点 算法与数据结构汇总 差分数组 令 a[i] ∑ j : 0 i v D i f f [ i ] \sum_{j:0}^{i}vDiff[i] ∑j:0ivDiff[i] 如果 vDiff[i1],则a[i1…]全部 如果vDiff[i2]–,则a[i2…]全部–。 令11 < i2 ,则: { a [ i ] 不变&…...

SpringBoot | 实现邮件发送
运行环境: IntelliJ IDEA 2022.2.5 (Ultimate Edition) (注意:idea必须在2021版本以上)JDK17 项目目录: 该项目分为pojo,service,controller,utils四个部分, 在pojo层里面写实体内容(发邮件需要的发件人邮…...

spring boot接入nacos 配置中心
再接入nacos配置中心时,需要确认几点: 1. spring boot 版本 (spring boot 2.x ) 2. nacos 配置中心 服务端 版本 (1.1.4) 3. nacos client 客户端版本 (1.1.4) 方式一 1. 启动 nacos 服务端,这里不做解释 在配置中心中加入几个配置 2. 在…...

产品应用 | 小盒子跑大模型!英码科技基于算能BM1684X平台实现大模型私有化部署
当前,在人工智能领域,大模型在丰富人工智能应用场景中扮演着重要的角色,经过不断的探索,大模型进入到落地的阶段。而大模型在落地过程中面临两大关键难题:对庞大计算资源的需求和对数据隐私与安全的考量。为应对这些挑…...

uniapp中u-input点击事件失效
当给u-input设置了disabled/readonly属性后,pc浏览器中点击事件失效,但是app/移动端h5中却仍有效 解决办法 给外边包上一个盒子设置点击事件,给input加上css属性:pointer-events:none pointer-events CSS 属性指定在什…...
[机器学习] 监督学习和无监督学习
监督学习和无监督学习是机器学习的两种主要方法,它们之间有几个关键区别: 1. 定义 监督学习(Supervised Learning): 使用带标签的数据进行训练。数据集包括输入特征和对应的输出标签。目标是学习从输入特征到输出标签…...
使用Python进行自然语言处理:从基础到实战
使用Python进行自然语言处理:从基础到实战 自然语言处理(Natural Language Processing, NLP)是人工智能的重要领域,旨在处理和分析自然语言数据。Python凭借其丰富的库和社区支持,成为NLP的首选编程语言。本文将介绍自然语言处理的基础概念、常用的Python库以及一个实战项…...
Hadoop面试题总结
一 、介绍一下hadoop 综述:hadoop是一个适合海量数据的分布式存储和分布式计算的平台 分述:hadoop包含三大组件,分别是HDFS、MapReduce和YARN --HDFS(分布式文件系统) HDFS集群由NameNode,DataNode,SecondaryNameNode构成NameNode:主要负责接受用户请求…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...