2013-09-27 30 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。否則它會打印一個空格。