以下是用Java打印心形图案的详细教程,通过数学公式(心形线)和字符控制台实现,代码简单易懂,适合初学者学习,同时确保在常见控制台中输出美观的心形。
public class PrintHeart { public static void main(String[] args) { // 设置画布大小(60列×30行) int width = 60; int height = 30; // 定义坐标范围:x为[-2.0, 2.0],y为[1.5, -1.5] double xStart = -2.0; double xEnd = 2.0; double yStart = 1.5; double yEnd = -1.5; // 遍历每一行 for (int row = 0; row < height; row++) { // 计算当前行对应的y坐标(从顶部到底部) double y = yStart + (yEnd - yStart) * row / (height - 1.0); // 遍历每一列 for (int col = 0; col < width; col++) { // 计算当前列对应的x坐标(从左到右) double x = xStart + (xEnd - xStart) * col / (width - 1.0); // 判断(x, y)是否在心形区域内 if (isInHeart(x, y)) { System.out.print("*"); // 在心形内打印星号 } else { System.out.print(" "); // 在心形外打印空格 } } System.out.println(); // 换行 } } /** * 使用心形线公式判断点(x, y)是否在心形区域内 * 公式: (x² + y² - 1)³ - x²y³ ≤ 0 * 调整y轴比例(*0.7)适配控制台字符高度 */ public static boolean isInHeart(double x, double y) { // 调整y坐标比例(控制台字符高度>宽度) double adjustedY = y * 0.7; double temp = x * x + adjustedY * adjustedY - 1; return temp * temp * temp - x * x * adjustedY * adjustedY * adjustedY <= 0; } }
代码详解
-
画布设置
width=60
:控制台输出宽度(字符数)height=30
:控制台输出高度(行数)- 通过调整这两个值可缩放心形大小
-
坐标映射
x
: 横坐标范围[-2.0, 2.0]
(从左到右)y
: 纵坐标范围[1.5, -1.5]
(从顶部到底部)- 遍历每个像素点:
(col, row) → (x, y)
-
心形判断逻辑
- 核心公式:
(x² + y² - 1)³ - x²y³ ≤ 0
- 关键调整:
y * 0.7
补偿控制台字符高度(避免图形拉伸) - 满足条件时打印 ,否则打印空格
- 核心公式:
-
运行结果
执行代码后,控制台将输出对称饱满的心形:
自定义调整建议
-
缩放心形
- 增大
width
和height
:扩大心形(需同步扩大坐标范围) - 示例:
width=120, height=60
并调整xStart=-2.5, xEnd=2.5
- 增大
-
修改形状
- 调整公式中的
7
:值越大心形越窄,值越小心形越宽 - 示例:
y * 0.5
生成更宽的心形
- 调整公式中的
-
增强视觉效果
- 添加颜色:使用
System.out.print("u001B[31m*u001B[0m")
打印红色星号 - 填充内部:用不同字符(如 、)替换星号
- 添加颜色:使用
数学原理
心形线是笛卡尔坐标系中的经典曲线,其隐式方程源于:
(x^2 + y^2 - 1)^3 - x^2 y^3 = 0
代码通过坐标映射和比例调整,将数学曲线转化为控制台字符图形。
引用说明:心形线公式来源于Wolfram MathWorld,坐标映射方法参考计算机图形学中的视口变换原理。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/14525.html