你见过最美的C语言代码是什么?
各位,看到标题大家肯定会联想许多,到底怎样算最美的代码?先不多说,代码先上:
#include<stdio.h>
#include <graphics.h>
#include <math.h>
#include <conio.h>
#define PI 3.1415926
//绘制心形线的函数
void cardioid(int x, int y, int a)
//x: x方向上的偏移量
//y: y方向上的偏移量
//a: 缩放倍数
{
int x1, y1, x2, y2;
double angle = 0;
while (angle <= 2 * PI)
{
x1 = a * (2 * sin(angle) + sin(2 * angle)) + x;
y1 = a * (2 * cos(angle) + cos(2 * angle)) + y;
angle += (PI / 180);
x2 = a * (2 * sin(angle) + sin(2 * angle)) + x;
y2 = a * (2 * cos(angle) + cos(2 * angle)) + y;
line(x1, y1, x2, y2);
Sleep(5);
}
}
int main(void)
{
initgraph(960, 540);
setlinecolor(RGB(255, 0, 0));
cardioid(480, 270, 50);
int ret = getch();
closegraph();
return 0;
}
有人会疑问了,这怎么算最美代码?其实,今天之所以写这篇文章,要从下面的这幅图说起,我们慢慢道来。
有的人可能认出来了,没错,这就是我们喝的百岁山矿泉水电视广告截图,今儿偶然的机会跟我同事聊到了这个广告,其实我们很多人不知道广告背后隐藏的故事。讲到这里,有人说故事跟上面的C代码又有什么关系呢?不要急,听我慢慢说:
它讲的是我们熟知的大名鼎鼎的数学家笛卡尔的故事。1650年的斯德哥尔摩街头,52岁的笛卡尔邂逅了18岁瑞典公主克莉丝汀。笛卡尔落魄无比、穷困潦倒又不愿意请求别人的施舍,每天只是拿着破笔破纸研究数学题。有一天,克莉丝汀的马车路过街头发现了笛卡尔是在研究数学。公主便下车询问,最后笛卡尔发现公主很有数学天赋,道别后的几天笛卡尔收到通知,国王要求他做克莉丝汀公主的数学老师,其后几年中相差34岁的笛卡尔和克莉丝汀相爱,国王发现并处死了笛卡尔。在最后笛卡尔写给克莉丝汀的情书中出现了r=a(1-sinθ)的数学坐标方程,解出来是个心形图案,就是著名的“心形线”,学过高数的应该对此有所了解。这封情书最后被收录到欧洲笛卡尔博物馆,故事浪漫而又悲惨,令人感叹。
而我们要说的就是这个著名的“心形线”:
心形线,是一个圆上的固定一点在它绕着与其相切且半径相同的另外一个圆周滚动时所形成的轨迹,因其形状像心形而得名。下面是心形线的绘制动图:
到这儿大家应该都明白了,上面的C代码就是用来绘制r=a(1-sinθ)这个“心形线”的,这跟网上很多用大量printf得到爱心图案不一样,那些形状比较随意,而“心形线”有严格的几何要求,所以相对来说复杂一点,用到了图形化编程和数学库函数,这就是开头C代码的由来了。当然,我们这里讲的美是蕴含在代码背后的故事,而不是代码本身,因为我们一直说深层次的美才是真的美,也一直相信真的美一定是来源于生活的内在,就像笛卡尔浪漫而又悲惨的爱情故事一样,你说呢?
好了,今天就说到这里吧,感谢您的耐心阅读!
- Linux | 不懂Linux的码神,不是真正的菜鸟
- 初体验Spring Boot 2支持的HikariCP连接池
- 快来了解JDK10中引入的全新JIT编译器:Graal
- 基于Ryu打造自定义控制器
- Junit 5新特性全集
- 深入了解浏览器的重绘与重排
- 自己动手写区块链(Java版)
- 自己动手写区块链-发起一笔交易(Java版)
- 详解JavaScript跨域问题
- OpenStack Magnum及Liberty新功能简介
- JDK10要来了:下一代 Java 有哪些新特性?
- 是时候忘掉finalize方法了
- 学会一个JVM插件:使用HSDIS反汇编JIT生成的代码
- ONOS 实战分享(一):项目建立、调试到热部署
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php 使用html5 XHR2实现上传文件与进度显示功能示例
- php高性能日志系统 seaslog 的安装与使用方法分析
- PHP实现文件上传后台处理脚本
- 让whoops帮我们告别ThinkPHP6的异常页面
- PHP实现文件上传操作和封装
- gearman中任务的优先级和返回状态实例分析
- php实现文件上传基本验证
- php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
- php使用fputcsv实现大数据的导出操作详解
- php的无刷新操作实现方法分析
- PHP实现创建一个RPC服务操作示例
- php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
- gearman管理工具GearmanManager的安装与php使用方法示例
- php 的多进程操作实践案例分析
- php 输出缓冲 Output Control用法实例详解