首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言打印桃心圖形:星號輸出愛心圖案完整教程

     編輯:C 語言問答

C語言打印桃心圖形:星號輸出愛心圖案完整教程

在C語言入門教學中,利用迴圈與條件判斷打印幾何圖形是經典練習。其中「桃心(愛心)圖形」因其曲線美感與邏輯挑戰性,深受初學者喜愛。本文詳細解析打印愛心圖形的數學原理、代碼實現與優化技巧。

一、數學原理:參數方程法

愛心曲線可用參數方程描述:

x = 16 * sin³(t)
y = 13 * cos(t) - 5 * cos(2t) - 2 * cos(3t) - cos(4t)

其中 t ∈ [0, 2π]。在字符終端中,我們將平面離散為字符網格,對每個坐標點(i, j)判斷是否滿足愛心隱式方程:

(x² + y² - 1)³ - x²y³ ≤ 0

經縮放平移適配終端字符比例(字符寬高比約1:2)後,核心判斷邏輯為:

float x = (j - width/2) * scaleX;
float y = (i - height/2) * scaleY;
if ((x*x + y*y - 1)*(x*x + y*y - 1)*(x*x + y*y - 1) - x*x*y*y*y <= 0)
    print("*");
else
    print(" ");

二、經典代碼實現(兼容性最佳)

#include <stdio.h>
#include <math.h>

int main() {
    // 畫布尺寸
    const int width = 60;
    const int height = 30;
    // 縮放因子,調整愛心大小與比例
    const float scaleX = 0.05f;
    const float scaleY = 0.1f;
    
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            // 將字符坐標映射到數學坐標系
            float x = (j - width/2.0f) * scaleX;
            float y = (height/2.0f - i) * scaleY; // y軸向上
            
            // 愛心隱式方程判斷
            float val = (x*x + y*y - 1);
            val = val*val*val - x*x*y*y*y;
            
            if (val <= 0.0f)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}

三、進階版:帶顏色、動畫與自定義尺寸

#include <stdio.h>
#include <math.h>
#include <windows.h> // Linux請用unistd.h的usleep

// 設置控制台文字顏色 (Windows)
void setColor(int color) {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}

// 打印愛心幀
void printHeart(float scale, int color) {
    const int width = 60, height = 30;
    setColor(color);
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            float x = (j - width/2.0f) * scale;
            float y = (height/2.0f - i) * scale * 0.5f; // 補償字符長寬比
            float val = (x*x + y*y - 1);
            val = val*val*val - x*x*y*y*y;
            printf(val <= 0 ? "*" : " ");
        }
        printf("\n");
    }
    setColor(7); // 恢復默認白色
}

int main() {
    // 1. 靜態彩色愛心
    printHeart(0.05f, 12); // 亮紅色
    
    // 2. 跳動動畫
    printf("\n按任意鍵開始跳動動畫...\n");
    getchar();
    for (int frame = 0; frame < 20; frame++) {
        system("cls"); // Linux用 system("clear")
        float scale = 0.04f + 0.01f * sin(frame * 0.5f);
        printHeart(scale, 12);
        Sleep(200); // Linux用 usleep(200000)
    }
    return 0;
}

四、常見問題與優化技巧

問題原因解決方案
愛心顯示扁平/拉長終端字符寬高比非1:1y方向縮放係數設為x方向的0.5~0.6倍
邊緣鋸齒明顯離散採樣精度不足增加畫布尺寸,或使用抗鋸齒字符(如▓▒░)
輸出閃爍頻繁清屏重繪使用雙緩衝/ANSI轉義序列移動光標而非清屏
中文系統顯示亂碼編碼不匹配源文件保存為UTF-8,終端設置對應代碼頁

五、擴展創意:字符畫進階

  • 漸變愛心:根據到中心距離輸出不同字符@%#*+=-:. 形成灰度漸變
  • 文字愛心:將判斷內部改為輸出指定字符串循環(如"LOVE")
  • 3D立體愛心:疊加多層不同縮放的愛心,配合陰影字符
  • 粒子愛心:用隨機點在愛心區域內生成,形成閃爍粒子效果

愛心圖形輸出示例

掌握愛心打印不僅是迴圈練習,更是理解坐標映射、隱式幾何建模、終端圖形學基礎的絕佳切入點。建議初學者先實現基本版,再嘗試添加顏色、動畫、交互功能,在代碼中感受數學之美。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved