#代码表心意!!!!
你是否还在用简单地for循环写个程序打印心形给你的女朋友带来惊喜?那有点捞哦。本篇文章将为大家带来逼格更高的更好看的 更完美的 心形图案。废话不多说,直接上干货。由数学知识我们可以知道,心形公式有好多,例如:
*(1)(x^2 + y^2 - 1) - x^2 y^3 = 0
参数范围:x [-1.2 , 1.2 ] ,y [-1.1 , 1.3 ]
(2)x^2 +(5.0 * y / 4.0 -sqrt(|x|))^2=1
参数范围:x [-1.1 , 1.1 ] ,y [-1.1 , 1.3 ]
1.空白心形
效果图:
代码如下:
void main(){
float x,y,a;
for(y=1.3f;y>-1.1f;y-=0.06f){ //这里的参数皆可以调,条件就是看着顺眼txtx
for(x=-1.2f;x<=1.2f;x+=0.025f){
a=x*x+y*y-1;
putchar(a*a*a-x*x*y*y*y<=0.0f?' ':'$');
}
putchar('\n');
}
}
2. 外围留白心型,中间为字母样式
样例图:
代码如下:
void main(){
float x,y,a;
char s[11]={'I',' ','l','o','v','e',' ','y','o','u','!'}; //也可以用字符串之类的
int index=0;
for(y=1.3f;y>-1.1f;y-=0.06f){
index=0;
for(x=-1.1f;x<=1.1f;x+=0.025f){
float result=x*x+pow((5.0*y/4.0-sqrt(abs(x))),2);
if(result<=1){
putchar(s[index]);
index=(index+1)%11;
}
else{
putchar(' ');
}
}
putchar('\n');
}
}
3.立体感心形
样例图:
代码如下:
#include <iostream>
#include <cmath>
float cal(float x, float y, float z) {
float a;
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) {
float y;
for (y=1.0f;y>=0.0f;y-=0.001f){
if(cal(x,y,z)<= 0.0f)
return y;
}
return 0.0f;
}
int main() {
float z,x,v,y0,ny,nx,nz,nd,d;
for (z=1.3f;z>-1.3f;z-=0.06f) {
for(x=-1.3f;x<1.3f;x+=0.025f) {
v=cal(x,0.0f,z);
if (v<=0.0f) {
y0=h(x,z);
ny=0.01f;
nx=h(x+ny,z)-y0;
nz=h(x,z+ny)-y0;
nd=1.0f/sqrtf(nx*nx+ny*ny+nz*nz);
d =(nx+ny-nz)*nd*0.5f+0.5f;
putchar(".:-=+*#%@"[(int)(d*5.0f)]);
}
else
putchar(' ');
}
putchar('\n');
}
return 0;
}