用C语言画个心

其实图形学这么高深的玩意对于我这种玩不起显卡,智商又继续充值的人来说的确是消费不起的浪漫。

早就在知乎上看到了这问题:如何用C语言画一个心形.自己也写了一个做法,就是用循环解决的,把代码和效果让大家看一下。真的很丑= =

[cpp]
#include <stdio.h>

int main()
{
char ch=3;
int i,j,k,l,m;
for(i=1;i<=4;i++){
for(j=12-i*2;j>0;j–) printf(" ");
for(k=1;k<=i*4+1;k++) printf("%c",ch);
for(l=4*(4-i)+1;l>0;l–) printf(" ");
for(m=1;m<=i*4+1;m++) printf("%c",ch);
printf("n");
}
for(i=1;i<=3;i++){
for(k=1;k<=2;k++) printf(" ");
for(j=1;j<=39;j++){

printf("%c",ch);
}
printf("n");
}
for(i=1;i<=9;i++){
for(k=1;k<=4+(i-1)*2;k++) printf(" ");
for(j=39-i*4;j>0;j–) printf("%c",ch);
printf("n");
}

return 0;
}
[/cpp]

效果图:

QQ图片20160213110606

近看根本不是一个心好吧,只可远观不可亵玩焉。因为自己采用的双重for循环的方法还是把一个心分为了梯形,长方形以及三角形近似处理的。

后来看别人的答案,看到了很多大神的思路,在这里就粘贴Milo Yip大神的最简单实现方法的一个思路:

[cpp]
#include <stdio.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 a = x * x + y * y – 1;
putchar(a * a * a – x * x * y * y * y <= 0.0f ? ‘*’ : ‘ ‘);
}
putchar(‘n’);
}
}
[/cpp]

效果图:

QQ图片20160213111410

orz…

当然在他的博客上有很多高级版本的实现方法,可惜我已经看不懂了= =。他的这段代码的主要核心是有一个心形线的公式,然后进行处理的。可惜我不会证明那个公式,所以还是不搞图形学= =

附上大神的blog链接:如何用 C 语言画一个心形

这篇博客我也不知道把它放在哪里好了,我是不会把博文放到未分类里的,但是WordPress不允许我删除那个分类,左思右想后还是扔到了技术谈里= =但感觉这也不算是技术更不是算法,只不过是我YY的一篇无聊之作。

发表评论

电子邮件地址不会被公开。 必填项已用*标注