心形线

心形线,是一个圆上的固定一点在它绕着与其相切且半径相同的另外一个圆周滚动时所形成的轨迹,因其形状像心形而得名。

心脏线亦为蚶线的一种。在曼德博集合正中间的图形便是一个心脏线。心脏线的英文名称“Cardioid”是 de Castillon 在1741年的《Philosophical Transactions of the Royal Society》发表的;意为“像心脏的”。

极坐标方程

水平方向: ρ=a(1-cosθ) 或 ρ=a(1+cosθ) (a>0)
垂直方向: ρ=a(1-sinθ) 或 ρ=a(1+sinθ) (a>0)

直角坐标方程

心形线的平面直角坐标系方程表达式分别为 x^2+y^2+a*x=a*sqrt(x^2+y^2) 和 x^2+y^2-a*x=a*sqrt(x^2+y^2)

参数方程

x=a*(2*cos(t)-cos(2*t))
y=a*(2*sin(t)-sin(2*t))
所围面积为3/2*PI*a^2,形成的弧长为8a

通过不同变换可以有如下样式





解题思路

  • 在直角坐标系中x、y轴的正方向分别是右侧和上方,原点在中间;而在命令行中正方向分别是右方和下方,原点在左上角。因此就需要进行坐标轴变换。
  • 由于直角坐标系中的心形线是横着的,因此需要x<->y轴的变换。
  • 由于在命令行具有行高这一固定参数,因此同样字符数的行和列长度是不同的(行会比列短很多),因此又需要进行控制台x轴的拉伸操作。

C++代码

#include <iostream>
#include <math.h>using namespace std;#define X_DIVIDED_BY_Y 0.5
#define MAX_X (35.0 / X_DIVIDED_BY_Y)
#define MAX_Y 35.0
#define THRESHOLD 0.5
#define A 13char getSentenceChar(const char *sentence, int &index) {while(true) {if (index >= strlen(sentence)) {index = 0;}char c = sentence[index++];if(' ' == c) {index++;} else {return c;}}
}inline float getX(float x) {return (x - MAX_X / 2) * X_DIVIDED_BY_Y;
}inline float getY(float y) {return MAX_Y / 7.0 - y;
}bool func(float x, float y) {return (pow(x, 2) + pow(y, 2) + A * x - A * sqrt(pow(x, 2) + pow(y, 2))) < THRESHOLD;
}void main(int argc, char** argv) {const char *LOVE_SENTENCE = "No rose, no diamond ring, that is the simple and romantic love stories in college. The graduates have to face the approaching of June, a time to farewell their beloved. When their future is confronted with love, which one is more important? What will the lovers do in June?";int sentenceIndex = 0;for (int y = 0; y <= MAX_Y; y++) {for (int x = 0; x <= MAX_X; x++) {cout<<(func(getY(y), getX(x)) ? getSentenceChar(LOVE_SENTENCE, sentenceIndex) : '.');}cout<<endl;}}

Java代码

package com.example.demo;public class BenevolenceDemo {private static final float X_DIVIDED_BY_Y = 0.5f;private static final float MAX_X = 35f / X_DIVIDED_BY_Y;private static final float MAX_Y = 35f;private static final float THRESHOLD = 0.5f;private static final float A = 13;private static final String LOVE_SENTENCE = "No rose, no diamond ring, that is the simple and romantic love stories in college. The graduates have to face the approaching of June, a time to farewell their beloved. When their future is confronted with love, which one is more important? What will the lovers do in June?";private static int sentenceIndex = 0;private static char getSentenceChar() {while(true) {if (sentenceIndex >= LOVE_SENTENCE.length()) {sentenceIndex = 0;}char c = LOVE_SENTENCE.charAt(sentenceIndex++);if(' ' == c) {sentenceIndex++;} else {return c;}}}public static void main(String[] args) {for (int y = 0; y <= MAX_Y; y++) {for (int x = 0; x <= MAX_X; x++) {System.out.print(func(getY(y), getX(x)) ? getSentenceChar() : '=');}System.out.println();}}public static final float getX(float x) {return (x - MAX_X / 2) * X_DIVIDED_BY_Y;}public static final float getY(float y) {return MAX_Y / 7f - y;}public static boolean func(float x, float y) {return (Math.pow(x, 2) + Math.pow(y, 2) + A * x - A * Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))) < THRESHOLD;}
}

C/C++ 和 Java 命令行绘制心形图案相关推荐

  1. 用java画爱心图_C++和Java命令行绘制心形图案

    心形线 心形线,是一个圆上的固定一点在它绕着与其相切且半径相同的另外一个圆周滚动时所形成的轨迹,因其形状像心形而得名. 心脏线亦为蚶线的一种.在曼德博集合正中间的图形便是一个心脏线.心脏线的英文名称& ...

  2. python心脏线绘制代码_C++和Java命令行绘制心形图代码分享

    C++和Java命令行绘制心形图案 心形线 心形线,是一个圆上的固定一点在它绕着与其相切且半径相同的另外一个圆周滚动时所形成的轨迹,因其形状像心形而得名. 心脏线亦为蚶线的一种.在曼德博集合正中间的图 ...

  3. css 绘制心形图案

    CSS3 transform-origin 属性设置旋转元素的基点位置. 注释:该属性必须与 transform 属性一同使用. (1)首先,绘制背景: <!doctype html> & ...

  4. 使用Java语言打印一个心形图案

    要使用 Java 语言打印一个心形图案,你可以使用两个 for 循环和一些字符串拼接来实现.你也可以使用 ASCII 码来打印心形图案,这将更加简单. 以下是使用两个 for 循环和字符串拼接的示例代 ...

  5. 【python】如何利用 turtle 绘制心形图案

    turtle作为python内置的绘图库,正好可以用来绘制一些好玩的图形 这次,我们一起来探索如何用它绘制出一个完美的爱心图形 一.分析心形数据 观察如下一个心形图片 先测量下部这个尖端的角度是多少 ...

  6. desmos绘制心形图案

    首先打开desmos图形计算器: 输入: 点击播放.

  7. 用css3 绘制心形图案

    闲来无聊,做做CSS3 <!DOCTYPE html> <html><head><meta charset="UTF-8">< ...

  8. java命令行执行程序解决依赖外部jar包的问题

    java命令行执行程序解决依赖外部jar包的问题 参考文章: (1)java命令行执行程序解决依赖外部jar包的问题 (2)https://www.cnblogs.com/wangxiaoha/p/6 ...

  9. Java 命令行编译项目

    如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...

最新文章

  1. 关于ssh国际化的记录
  2. 1.4. Open Source and License
  3. 数据库AngularJs
  4. 超长焦夜拍定格辉煌 华为Mate40系列清晰见证天舟二号成功发射
  5. 沈志勇-百度大数据引擎与分析预测
  6. PHP array_diff_assoc
  7. [渝粤教育] 中国地质大学 微积分(二) 复习题 (2)
  8. VC Ping IP的类
  9. cass有坐标文件生成里程文件_【视频】南方cass9.0进阶教程74.3生成里程文件3
  10. html远程连接mysql_mysql允许远程连接
  11. .NET Framework发展史
  12. Scratch之猫和老鼠
  13. which的用法总结c语言,which的用法总结
  14. 网页在线PS网站源码PHP 浏览器在线P图
  15. Red Team之Empire渗透工具介绍和使用
  16. 【电路设计】AD绘制3D封装库
  17. MySQL结课体会,听课心得体会小结
  18. 计算机播放音乐无声音,笔记本电脑放歌没声音的解决方法
  19. matlab bsxfun memory,[转]matlab函数 bsxfunarrayfun
  20. 做“国潮”的花西子是如何超越完美日记的?

热门文章

  1. 大圣公众号机器人APP后台可控机器人部分源码
  2. 聊天室客户端和网页版的区别
  3. win7变成xp风格了怎么改回_【让win7变成xp】win7变成xp风格_win7界面变成xp
  4. html5ppt介绍,html5介绍.ppt
  5. Forest + IDEA = 双倍快乐,ForestX 隆重登场!
  6. maya 2015配置openCollada插件
  7. 数据库1024错误暂时性的解决办法
  8. 2021-10-10 10:10:10
  9. Win11系统无法创建pin密码的解决方法教学
  10. 收发一体超声波测距离传感器模块_Arduino传感器篇