这个“打印心脏”程序如何在C中运行?

时间:2013-09-27 04:31:07

标签: c++ c logic ascii

我在互联网上的一些博客上偶然发现了这段代码。这是一个非常有趣的程序,但我一直试图弄清楚程序实际上是如何运作一段时间的,从那时起我一直坚持下去。我只是不知道程序如何打印对称性。心脏的一半是印刷的,另一半是通过镜像来复制的吗?如果有人能帮助我找出逻辑,我会很感激。提前致谢。

//Include Headers.
#include <stdio.h>
#include <math.h>
int main()
{
    int x, y, size=20;
    for (x=0; x<size; x++)
    {
        for (y=0; y<=4*size; y++)
        {
            double dist1 = sqrt( pow(x-size,2) + pow(y-size,2) );
            double dist2 = sqrt( pow(x-size,2) + pow(y-3*size,2) );
            if (dist1 < size + 0.5 || dist2 < size + 0.5 )
                 printf("%c",97);
            else
                 printf(" ");
        }
        printf("\n");
    }
    for (x = 1; x <= 2*size; x++)
    {
        for (y=0; y<x; y++)
        printf(" ");
        for (y=0; y<4*size + 1 - 2*x; y++)
            printf("%c",86);
        printf("\n");
    }

    return 0;  
}

1 个答案:

答案 0 :(得分:1)

不,这对利用对称性没有太大作用。

据推测,你关心的部分是心脏的上半部分,因为下半部分只是一个基本的三角形。

上半部分的计算相当简单。虽然它们通常因为角色单元不是正方形而扭曲,但它基本上只是绘制两个size半径的半圆。因此,它选择每个半圆的中心点,然后计算从中心到当前点的距离(基本的毕达哥拉斯公式)。如果该距离小于从任一圆的中心选择的半径,则会打印a。否则会打印一个空格。