2013-09-27 27 views
-1

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

//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; 
} 
+0

对你的问题的一个相当简单的回答就在你的代码中。打印星号,而不是打印星号“dist1”和“dist2”,每行一对。 – WhozCraig

+1

任何图片说明都会有帮助。 – Legolas

+0

对于如此深切感兴趣的人来说,你看起来没有看过代码或者通过调试器运行它。关于对称性的问题的答案在于'printf(“\ n”);'在x循环中...... – kfsone

回答

1

不,这不利用对称性。

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

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