完整代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>//用于system设置控制台颜色
int main(int argc,char*argv[])
{
float x,y,a;
system("color 0c");//0=黑色背景,c=红色文字,windows专属
//外层循环y控制行,从上往下扫描画布
for(y=1.5;y>–1.5;y-=0.1){
//内层循环x控制列,一行从左到右扫描每个坐标点
for(x=–1.5;x<1.5;x+=0.05){
a=x*x+y*y–1;
putchar(a*a*a–x*x*y*y*y<=0?'*':' ');
}
putchar('\\n');//一行绘制完成换行
}
// 爱心下方空几行,好看一点
printf("\\n");
printf("\\n");
printf("\\n");
return 0;
}
核心原理
1.数学公试:笛卡尔心形曲线
公式:(x^2 +y^2-1) ^3- x^2 y^3<=0
把每一个坐标(x,y)代入公式
计算结果<=0:这个坐标属于爱心区域打印*
计算结果>0:不在爱心区域打印空格
2.双层for循环=扫描画布
想象控制台是一张网格画布:
外层y:代表行,y从1.5逐步减到-1.5从上到下一行一行画
内层x:代表列,x从-1.5走到1.5,遍历当前行每一个横向坐标
0.1和0.05是步长:每次移动一点点,步长越小爱心边缘越平滑
3.三元运算符
条件?A:B
putchar(条件?'*':' ');
等价于下面的if-else,只是压缩成一行,代码更短更酷
if(条件成立){
putchar('*');
}else{
putchar(' ');
}
4.红色怎末来的
system(“color 0c”);
第一个数字0:背景颜色(0=黑色)
第二个字母c:文字颜色(c=红色)
注意:这个功能只支持windows系统
拓展小玩法
1.换颜色:system("color 0a);绿色字
system(color 0b);淡蓝色
2.调整y,x范围,放大或缩小爱心
3.在爱心下方printf输出一句话


