绘制一个简易爱心

#include <stdio.h>
#include <Windows.h>int main()
{for (float y = 1.5f; y > -1.5f; y -= 0.1f){for (float x = -1.5f; x < 1.5f; x += 0.05f){float z = x * x + y * y - 1;float f = z * z * z - x * x * y * y * y;putchar(f <= 0.0f ? ".:-=+*#%@"[(int)(f * -8.0f)] : ' ');}putchar('\n');}system("pause");return 0;
}


绘制一个精致爱心

#include <stdio.h>
#include <Windows.h>
#include <math.h>float f(float x, float y, float z)
{float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}float h(float x, float z)
{for (float y = 1.0f; y >= 0.0f; y -= 0.001f)if (f(x, y, z) <= 0.0f)return y;return 0.0f;
}int main()
{for (float z = 1.5f; z > -1.5f; z -= 0.05f){for (float x = -1.5f; x < 1.5f; x += 0.025f){float v = f(x, 0.0f, z);if (v <= 0.0f){float y0 = h(x, z);float ny = 0.01f;float nx = h(x + ny, z) - y0;float nz = h(x, z + ny) - y0;float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);float d = (nx + ny - nz) * nd * 0.5f + 0.5f;putchar(".:-=+*#%@"[(int)(d * 5.0f)]);}elseputchar(' ');}putchar('\n');}system("pause");return 0;
}


另一个好的版本

#include<bits/stdc++.h>
#include<windows.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
double q,w,e,r,t,u,o,p,s,d,f,g,h,j,l,z,c,v,b,n,m,i;
double k,x,y;
long long a[1000][1000];
int main (int argc,char argv[])
{Sleep(1000);HWND hwnd=NULL;RECT rect;hwnd=GetForegroundWindow();GetClientRect(hwnd,&rect);if(hwnd!=NULL){MoveWindow(hwnd,0,0,0,0,true);Sleep(20); }system("mode con cols=300 lines=150");system("color f4");for(i=40;i>=-32;i--){for(j=-40;j<=40;j++){y=i/30;x=j/30;if(pow(x*x+y*y-1,3)-x*x*y*y*y<=0){cout<<"██";}else cout<<"  ";}cout<<endl;}return 0;
}

一个最花里胡哨的

#include<bits/stdc++.h>
#include<windows.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
double q,w,e,r,t,u,o,p,s,d,f,g,h,j,l,z,c,v,b,n,m,i;
double k,x,y;
long long a[1000][1000];
int main()
{system("mode con cols=100 lines=50");system("color f4");for(i=20;i>=-16;i--){for(j=-20;j<=20;j++){y=i/15;x=j/15;if(pow(x*x+y*y-1,3)-x*x*y*y*y<=0){cout<<"██";}else cout<<"  ";}cout<<endl;}Sleep(5000);system("cls");for(i=20;i>=-20;i--){for(j=-20;j<=20;j++){y=i/15;x=j/15;if(pow(x*x+y*y-1,3)-x*x*y*y*y<=0){cout<<"爱";}else cout<<"  ";}cout<<endl;}Sleep(5000); system("cls");for(i=20;i>=-20;i--){for(j=-20;j<=20;j++){y=i/15;x=j/15;if(pow(x*x+y*y-1,3)-x*x*y*y*y<=-0.8)cout<<"康";else if(pow(x*x+y*y-1,3)-x*x*y*y*y<=-0.6)cout<<"喜";else if(pow(x*x+y*y-1,3)-x*x*y*y*y<=-0.48)cout<<"吉";else if(pow(x*x+y*y-1,3)-x*x*y*y*y<=-0.32)cout<<"寿";else if(pow(x*x+y*y-1,3)-x*x*y*y*y<=-0.18)cout<<"顺";else if(pow(x*x+y*y-1,3)-x*x*y*y*y<=-0.1)cout<<"安";else if(pow(x*x+y*y-1,3)-x*x*y*y*y<=-0.06)cout<<"乐";else if(pow(x*x+y*y-1,3)-x*x*y*y*y<=-0.03)cout<<"贵";else if(pow(x*x+y*y-1,3)-x*x*y*y*y<=0)cout<<"福";else cout<<"  ";}cout<<endl;}return 0;
}

绘制红心并保存到文件

#include <stdio.h>
#include <Windows.h>
#include <math.h>float f(float x, float y, float z)
{float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}float h(float x, float z)
{for (float y = 1.0f; y >= 0.0f; y -= 0.001f)if (f(x, y, z) <= 0.0f)return y;return 0.0f;
}int main()
{FILE* fp = fopen("heart.ppm", "w");int sw = 512, sh = 512;fprintf(fp, "P3\n%d %d\n255\n", sw, sh);for (int sy = 0; sy < sh; sy++){float z = 1.5f - sy * 3.0f / sh;for (int sx = 0; sx < sw; sx++){float x = sx * 3.0f / sw - 1.5f;float v = f(x, 0.0f, z);int r = 0;if (v <= 0.0f){float y0 = h(x, z);float ny = 0.001f;float nx = h(x + ny, z) - y0;float nz = h(x, z + ny) - y0;float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);float d = (nx + ny - nz) / sqrtf(3) * nd * 0.5f + 0.5f;r = (int)(d * 255.0f);}fprintf(fp, "%d 0 0 ", r);}fputc('\n', fp);}fclose(fp);system("pause");
}

绘制跳动的心脏:注此版本只能在Windows系统下编译运行。

#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <tchar.h>float f(float x, float y, float z)
{float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}float h(float x, float z)
{for (float y = 1.0f; y >= 0.0f; y -= 0.001f)if (f(x, y, z) <= 0.0f)return y;return 0.0f;
}int main()
{HANDLE o = GetStdHandle(STD_OUTPUT_HANDLE);_TCHAR buffer[25][80] = { _T(' ') };_TCHAR ramp[] = _T(".:-=+*#%@");for (float t = 0.0f;; t += 0.1f){int sy = 0;float s = sinf(t);float a = s * s * s * s * 0.2f;for (float z = 1.3f; z > -1.2f; z -= 0.1f){_TCHAR* p = &buffer[sy++][0];float tz = z * (1.2f - a);for (float x = -1.5f; x < 1.5f; x += 0.05f){float tx = x * (1.2f + a);float v = f(tx, 0.0f, tz);if (v <= 0.0f){float y0 = h(tx, tz);float ny = 0.01f;float nx = h(tx + ny, tz) - y0;float nz = h(tx, tz + ny) - y0;float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);float d = (nx + ny - nz) * nd * 0.5f + 0.5f;*p++ = ramp[(int)(d * 5.0f)];}else*p++ = ' ';}}for (sy = 0; sy < 25; sy++){COORD coord = { 0, sy };SetConsoleCursorPosition(o, coord);WriteConsole(o, buffer[sy], 79, NULL, 0);}Sleep(33);}
}

升级版

    include <stdio.h>include <math.h>include <windows.h>include <tchar.h>float f(float x, float y, float z) {float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;}float h(float x, float z) {for (float y = 1.0f; y >= 0.0f; y -= 0.001f)if (f(x, y, z) <= 0.0f)return y;return 0.0f;}int main() {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x0C);HANDLE o = GetStdHandle(STD_OUTPUT_HANDLE);_TCHAR buffer[25][80] = { _T(' ') };_TCHAR ramp[] = _T(".:-=+*#%@");int count= 0;int count1=0;//system("color F4");for (float t = 0.0f;; t += 0.1f) {int sy = 0;float s = sinf(t);float a = s * s * s * s * 0.2f;for (float z = 1.3f; z > -1.2f; z -= 0.1f) {_TCHAR* p = &buffer[sy++][0];float tz = z * (1.2f - a);for (float x = -1.5f; x < 1.5f; x += 0.05f) {float tx = x * (1.2f + a);float v = f(tx, 0.0f, tz);if (v <= 0.0f) {float y0 = h(tx, tz);float ny = 0.01f;float nx = h(tx + ny, tz) - y0;float nz = h(tx, tz + ny) - y0;float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);float d = (nx + ny - nz) * nd * 0.5f + 0.5f;*p++ = ramp[(int)(d * 5.0f)];}else*p++ = ' ';}}for (sy = 0; sy < 25; sy++) {COORD coord = { 0, sy };SetConsoleCursorPosition(o, coord);WriteConsole(o, buffer[sy], 79, NULL, 0);}if(count <= 10){printf("I Love You ———.Mua~\n") ;//表白内容 printf("            By 编程爱我");// 表白者的名字 count++;} else{printf("You Are My Best Lover.\n");printf("            Stephen Ge");count++;if(count>=20){count =0;}}Sleep(33);}}

其他做法html

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"></head><body><canvas width="400" height="400"></canvas><script>var canvas = document.querySelector('canvas');var context = canvas.getContext('2d');  context.lineWidth = 3;// 将画布的原点(0,0),移动到(200,200)// 移动原点是为了能让整个心形显示出来context.translate(200,200); // t 代表弧度var t=0;// maxt 代表 t 的最大值var maxt = 2*Math.PI;// vt 代表 t 的增量var vt = 0.01;// 需要循环的次数var maxi = Math.ceil(maxt/vt);// 保存所有点的坐标的数组var pointArr=[];// x 用来暂时保存每次循环得到的 x 坐标var x=0;// y 用来暂时保存每次循环得到的 y 坐标var y=0;// 根据方程得到所有点的坐标for(var i=0;i<=maxi;i++){// x=a*(2*sin(t)+sin(2*t))x=50*(2*Math.sin(t)+Math.sin(2*t));// y=a*(2*cos(t)+cos(2*t))y=50*(2*Math.cos(t)+Math.cos(2*t));t+=vt;pointArr.push([x,y]); }// 根据点的坐标,画出心形线context.moveTo(pointArr[0][0],pointArr[0][1]);draw();function draw(){context.fillStyle='#c00';// 把每个点连接起来for(var i=1;i<pointArr.length;i++){x = pointArr[i][0];y = pointArr[i][1];context.lineTo(x,y);}context.fill();}</script></body>
</html>

<!doctype html>
<html lang="en"><head><meta charset="UTF-8">
</head><body><canvas width="400" height="400"></canvas><script>var canvas = document.querySelector('canvas');var context = canvas.getContext('2d');// 将画布的原点(0,0),移动到(200,100)// 移动原点是为了能让整个心形显示出来context.translate(200, 100);// 画心形draw();function draw() {// 画圆弧时,圆的半径var r = 0;//  start 代表画弧线时的 起始角var start = 0;//  end 代表画弧线时的 结束角var end = 0;//  一个常数,用来控制心形的大小var a = 100;context.fillStyle = '#e21f27';//连续的画圆弧for (var q = 0; q < 500; q++) {start += Math.PI * 2 / 500;// 当 结束角 是 Math.PI * 2 时也就是已经画了一圈了,心形就出来了end = start + Math.PI * 2 / 500;// 根据极坐标方程 r=a(1+sinθ),得到 r(半径)r = a * (1 + Math.sin(start)); // 画弧线context.arc(0, 0, r, start, end, false);}context.fill();}</script>
</body>
</html>

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"></head><body><canvas width="400" height="400"></canvas><script>var canvas = document.querySelector('canvas');var context = canvas.getContext('2d');  context.lineWidth = 3;// 将画布的原点(0,0),移动到(200,200)// 移动原点是为了能让整个心形显示出来context.translate(200,200); // t 代表弧度var t=0;// vt 代表 t 的增量var vt = 0.01;// maxt 代表 t 的最大值var maxt = 2*Math.PI;// 需要循环的次数var maxi = Math.ceil(maxt/vt);// 保存所有点的坐标的数组var pointArr=[];// 控制心形大小var size = 10;// x 用来暂时保存每次循环得到的 x 坐标var x=0;// y 用来暂时保存每次循环得到的 y 坐标var y=0;// 根据方程得到所有点的坐标for(var i=0;i<=maxi;i++){// x=16 * (sin(t)) ^ 3;var x = 16 * Math.pow(Math.sin(t),3);// y=13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t)var y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) -2 * Math.cos(3 * t)- Math.cos(4 * t);t+=vt;pointArr.push([x*size,-y*size]); }// 根据点的坐标,画出心形线context.moveTo(pointArr[0][0],pointArr[0][1]);draw();function draw(){context.fillStyle='#c00';// 把每个点连接起来for(var i=1;i<pointArr.length;i++){x = pointArr[i][0];y = pointArr[i][1];context.lineTo(x,y);}context.fill();}</script></body>
</html>

也许我们还可以再做点什么,比如加点动画,看看下面这个吧。

点这里下载源码,里面已经加了很详细的注释了。

C++ 实现命令行画心形代码,有多个爱心代码,简单可调数据和字符,可装X,也可用于浪漫的表白,可实现跳动、保存等功能相关推荐

  1. C/C++ 实现命令行画心形代码

    绘制一个简易心形 #include <stdio.h> #include <Windows.h>int main() {for (float y = 1.5f; y > ...

  2. Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果

    Python命令行解析:IDE内点击Run运行代码直接得出结果.基于TF flags(或argparse.sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果 目录 命令行解析 T1.采 ...

  3. CSS画心形的三种方法,超级简单

    CSS画心形的三种方法,超级简单 一.一颗div一颗心 用一个div画出一个心,核心的方法就是使用伪元素 首先,我们在页面上先写出一个div 使用CSS,将这个div变为一个橘红色的正方形: 接着我们 ...

  4. 通过命令行方式批量设置保留IP地址的代码

    前段时间看到一个提问关于如何批量设置DHCP保留地址的贴子,后来经作实验测试,现将解决方法分享给大家,供互相学习讨论 前段时间看到一个提问关于如何批量设置DHCP保留地址的贴子,后来经作实验测试,现将 ...

  5. python多任务、面向对象、命令行启动动态绑定端口号静态web服务器代码实现

    一.静态web服务器-多任务 多任务web服务器:使用多线程,比进程更节省资源,支持多用户同时访问,可以同时处理多个客户端请求 实现步骤 若客户端与服务端建立连接,则创建子线程,使用子线程处理客户端请 ...

  6. 《Linux命令行与shell脚本编程大全》第十五章 呈现数据

    15.1 理解输入和输出 现在知道两种显示脚本输出的方法 1)在显示器屏幕上显示 2)将输出文件重定向到文件中 15.1.1 标准文件描述符 Linux系统将每个对象当做文件处理.这包括输入和数出进程 ...

  7. linux环境下命令行bypy、BaiduPCS 从百度网盘上传、下载数据

    1.安装: linux系统中已安装有python环境,安装bypy库和requests库 安装方法如下: pip install requests -i https://pypi.doubanio.c ...

  8. python怎么画心形图案_python怎么画爱心

    Python可以使用turtle库来画爱心. Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指 ...

  9. python爱心代码制作_Python之——爱心代码参与情人节

    一行代码实现输出爱心图,参考https://zhuanlan.zhihu.com/p/23321351 原理: 1.借助数学函数--((x * 0.05) ** 2 + (y * 0.1) ** 2 ...

最新文章

  1. vue - 减少打包后的体积
  2. bat比较有意思的代码_腾讯开源的 Unity全系列 代码逻辑热修复方案--InjectFix
  3. SAP ABAP Platform 1909最新版的 docker 镜像
  4. std::ostream_iterator、std::cout、std:copy实现输出
  5. 使用 Scrum开发太阳能汽车
  6. oracle添加两个约束,Oracle添加表约束的2种方法
  7. 单片机ADC分压电阻测量直流电压
  8. 阿里云历时13年,站上世界现代计算架构之巅
  9. bat 批量修改文件名后缀
  10. P5514 [MtOI2019]永夜的报应
  11. 送你一个目录,一站式学习生信!众多干货,有趣有料!
  12. 本项目基于paddlex实现目标检测
  13. PyTorch中FLOPs计算问题
  14. iOS-音频 + 视频
  15. 国际宏观变化20221204
  16. GICv3软件overview手册之GICv3基本功能(2)
  17. hive 的like与rlike,not like,linke not,coalesce函数使用
  18. 好用又免费的办公软件
  19. matlab车牌匹配时读取,基于Matlab的车牌识别(完整版)详解.doc
  20. 命令行与shell编程系列之什么是命令行

热门文章

  1. 使用font-awesome小图标
  2. 快消小程序分析报告——金典、永璞咖啡
  3. PPT模版网站 免费
  4. 掐住命门的禁运 中兴艰难17天
  5. 我们不得不面对的职场危机 - 我们真的能60岁退休吗?
  6. 那些开发过程中需要遵守的开发规范
  7. 面向物联网强化的全新英特尔 至强D 处理器满足关键边缘需求
  8. 读优化阵列信号处理------窄带部分读书笔记
  9. opencv播放视频失败,提示can‘t open camera by index
  10. 速腾聚创将募资24亿:筹备IPO 前汽车之家CFO邹钧已加盟