文章出处:情人节,用C++画一个心

情人节到啦,作为程序员开发者,应该送给男女朋友什么礼物呢?我们这次一起用C++语言画个心作为礼物吧!(被罚跪搓衣板儿什么的概不负责= =)

在网上稍微查一查心形的曲线方程,会发现很多,最流行的曲线方程应该就是这个了:

嗯,方程看着复杂,我们不管这是怎么推导出来的(我真的不会啊= =,不过我会一个更丑的心形曲线的推导过程,大家有兴趣的话有时间给大家上一堂数学课:)),让我们使用拿来主义,直接使用吧!我们回忆一下圆的方程,比如:  ,那么所有的点 ,若使得  ,则这个点在这个圆的边界线上;若使得  ,则这个点在圆内;若使得  ,则这个点在圆外。

好了,同理,对于这个方程,若点  让方程左边等于0,则这个点在这个心形曲线上;若让方程左边小于0,则这个点在这个心形线内;若让方程左边大于0,则这个点在这个心形线外。

嗯,我们要做的就是写一个双重循环,遍历x和y的值,将心形线以内的地方,涂上某一个字符,比如‘*’。

那么我们首先要确定我们双重循环的边界。我们打印输出,肯定是要逐行输出,从上到下。所以我们的第一层循环要对y值做循环。观察一下,可以看到y的上界大概是1.3;下界大概是-1.1;所以,我们可以从1.3逐渐减少到-1.1,初始我们可以选取步长为0.1。同理,对于x,可以看出他的左右边界大概为-1.2和+1.2,我们就从-1.2遍历到1.2,步长也选择0.1。

我们的第一个代码就是这样的:

#include <iostream>
#include <cmath>
using namespace std;int main() {for( float y = 1.3 ; y >= -1.1 ; y -= 0.1 ){for( float x = -1.2 ; x <= 1.2 ; x += 0.1)if( pow((x*x+y*y-1.0),3) - x*x*y*y*y <= 0.0 )cout<<'*';elsecout<<' ';cout<<endl;}return 0;
}

是不是清晰易懂?运行一下,结果是这样的:

咦?为什么这么瘦?看来x方向要拉伸一下。怎么拉伸?其实,我们让我们的步长稍微小一点儿就好了。因为第一层循环(y值)走了多少次,决定了图像的高度(每走一次,打印一个回车);而第二层循环(x值)走了多少次,则决定了图像的宽度(每走一次,打印一个字符)。所以,我们把x的步长缩小,x的循环就会多走几次,相应的,整个图形就会宽一些。我们将x的步长改为0.05,代码是这样的:

#include <iostream>
#include <cmath>
using namespace std;int main() {for( float y = 1.3 ; y >= -1.1 ; y -= 0.1 ){for( float x = -1.2 ; x <= 1.2 ; x += 0.05)if( pow((x*x+y*y-1.0),3) - x*x*y*y*y <= 0.0 )cout<<'*';elsecout<<' ';cout<<endl;}return 0;
}

结果就变成这样啦:

是不是好看了许多?

一旦我们掌握了这个技巧,就可以随易变换我们的这个心形的宽和高啦。比如,我让这个心形,宽和高更多一些,同时再稍微扁一点儿。y值的步长为0.06,x值的步长为0.025,就是这样的:

#include <iostream>
#include <cmath>
using namespace std;int main() {for( float y = 1.3 ; y >= -1.1 ; y -= 0.06 ){for( float x = -1.2 ; x <= 1.2 ; x += 0.025)if( pow((x*x+y*y-1.0),3) - x*x*y*y*y <= 0.0 )cout<<'*';elsecout<<' ';cout<<endl;}return 0;
}

是不是很酷?

当然啦,如果我们填入不同的字符,可能有不同的视觉效果哦~

我们也很容易做出类似的镂空效果哦~

不过,你以为心形曲线只有一个方程可以描述吗?在网上多做做功课,发现相关的方程多得很:)比如这个:

我们用同样的思路,就可以编出这样的代码:

#include <iostream>
#include <cmath>
using namespace std;int main() {for( float y = 1.3 ; y >= -1.1 ; y -= 0.06 ){for( float x = -1.1 ; x <= 1.1 ; x += 0.025 )if( x*x + pow(5.0*y/4.0-sqrt(fabs(x)),2) - 1 <= 0.0 )cout<<'*';elsecout<<' ';cout<<endl;}return 0;
}

得到的心形是这样的,是不是曲线很不一样:)

大家可以再在网上多搜索一下,看看有没有更符合你意的心形曲线:)

熟悉其他语言,尤其是前端语言的同学,也可以利用这些方程,做出更绚丽的效果哦。尤其是使用canvas,大家不妨自己试试看,期待同学们更好的创意:)

愿天下有情人终成眷属,大家加油!

本篇文章的所有代码可以参见这个github repo: heart-curve-cplusplus

情人节,用C++画一个心:)相关推荐

  1. 如何用 css 画一个心形

    如何用 css 画一个心形 (How to draw hearts using CSS) 用两个长方形切圆角倾斜位移并合并为一个心形 第一步 画一个长方形 (Draw a rectangle) 这个长 ...

  2. css画心形原理,如何用 css 画一个心形

    如何用 css 画一个心形 (How to draw hearts using CSS) 用两个长方形切圆角倾斜位移并合并为一个心形 第一步 画一个长方形 (Draw a rectangle) 这个长 ...

  3. inventor如何画心_Illustrator | 如何画一个心型图案

    心型图案是日常生活中一个非常常见的标志.至于如何简单明了地在 Ai 里画出来,也许你在找一个更好的方法.今天我介绍一个自己的小技巧,希望能对你有所启发,也欢迎在留言里交流你的看法. 1.要想办法用规则 ...

  4. 用C语言制作爱心,如何用C语言画一个“心形”

    程序yuan眼中的浪漫如何用C语言画一个"心形"? 在你们的世界里,是不是觉得程序员一点浪漫都不懂?其实不是的,程序yuan的世界也是很浪漫滴. 看 这个图片是不是很浪漫,有木有很 ...

  5. 怎么用css画一个心形_如何用CSS创建心形

    CSS3增强了我们仅使用HTML和CSS就能在网站上构建内容的可行性. 您可以找到我们以前精选的出色示例 . 但是,不要让自己过分领先,复杂的设计将需要可能使您头疼的代码. 取而代之的是,我们将创建一 ...

  6. python画一个心形照片墙怎么摆_心形照片墙怎么摆

    在家庭装修中,心形照片墙效果图不单能使家更加具有艺术气息,并且还能也营造出了不一样的家居装饰效果.照片墙属于工程量小,可美观效果又十分强的设计,下面小编就来介绍下心形照片墙怎么做,以供大家参考! 一. ...

  7. python画一个心形照片墙_Python 告诉你,情人节该送什么礼物?

    原标题:Python 告诉你,情人节该送什么礼物? 作者 | 丁彦军 责编 | 伍杏玲 掐指一算 明天就是情人节了! 还没来得及准备的人 要么被打断腿,要么注孤生 不过目测已经有一大批直男 已经为送什 ...

  8. 用python画一个心形_python怎么画爱心

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

  9. python画一个心形照片墙_表白神器!如何使用 Python 绘制爱心墙!

    一.爱心墙 通过爬虫搜集到粉丝的头像,然后利用 PIL 库拼接出爱心墙的形状 二.代码分析 1.头像爬取 在个人中心点击我的粉丝便可以看到自己的粉丝 通过抓包可知对应的接口为:url = 'https ...

最新文章

  1. C#中用ILMerge将所有引用的DLL和exe文件打成一个exe文件
  2. 从哲学角度分析,框架的[无用之用]效果
  3. [GYM 100492A] Average Convex Hull 凸包好题
  4. Jupyter-进阶教程
  5. vue3 echarts5 graph关系图谱 点击图例节点消失线不消失重复生成问题
  6. RDB和AOF速度测试
  7. 针对提高48V 配电性能的诸多思考!
  8. html video显示进度条_使用 tqdm 在 Python 应用中显示进度 | Linux 中国
  9. node静态服务器优缺点_使用 Node.js 的优势和劣势都有哪些?
  10. 学会这两招,快速突出图表重点,让老板眼前一亮
  11. sqlplus登录缓慢的问题分析过程及解决小记
  12. 数据:近24小时以太坊2.0存款合约新增2.06万ETH
  13. 【计算机技术】我用两句话在电脑课上解除了老师的控制
  14. 国家海洋局事业单位公开招聘考试大纲2016
  15. android随机抽奖代码_Android 中从一个集合或者数组中随机抽取几个不同的值
  16. 计算机找不到ac97前面板怎么办,计算机Win7系统前面板上的耳机插孔没有声音。解决方法(音频设置+前面板插入方法)...
  17. Burg法求解AR(p)模型参数(一)自回归模型
  18. js实现微信禁止h5网页下拉,禁止微信h5页面默认下拉
  19. 新能源车动力总成技术探讨:混动和纯电之争、电驱动未来发展趋势
  20. shopee跨境店铺怎么申请入驻-跨境知道

热门文章

  1. 手把手教你怎么搭建自己的AI数字人直播间?帮你24小时不间断直播卖货
  2. EventLoop和EventLoopGroup
  3. AI 视觉的应用|ZegoAvatar ⾯部表情随动技术解析
  4. formatter java_Java学习笔记之Formatter的用法详解(输出格式化)
  5. 今日头条街拍爬虫(2019.7.30更)
  6. 马尔科夫系列——一、隐马尔可夫模型 - 马尔可夫链、HMM参数和性质
  7. 【vue】前端通过腾讯接口获取用户ip
  8. MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.问题解决
  9. 学习python的第二天
  10. 无线充电原理介绍 之 RT1650产品介绍【强烈推荐】