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

C++ 繪製函數圖形入門:從笛卡爾愛心曲線到通用繪圖庫選型

     編輯:程式設計疑難解答

需求拆解

在屏幕上繪製 y = x²、笛卡爾愛心線 r = a(1 - sinθ) 等數學曲線,本質上是將數學坐標映射到屏幕像素坐標並連線。

核心步驟

  1. 建立坐標映射:數學原點 (0,0) → 屏幕中心 (w/2, h/2);Y 軸方向相反(屏幕向下為正)。
  2. 參數方程采樣:對自變量(x 或 θ)在定義域內等距采樣,計算因變量。
  3. 像素繪製:調用圖形庫畫點或畫線連接相鄰采樣點。

推薦圖形庫(按學習曲線排序)

庫平台特點示例:畫 y=x²
EasyXWindows極簡 C 風格,適合教學/競賽initgraph(640,480); for(x=-10;x<=10;x+=0.1) putpixel(320+x*20, 240-y*20, RED);
SFML跨平台現代 C++,面向對象,支持 2D/音頻/網絡用 VertexArray 畫線條
SDL2跨平台C 底層,手動管理渲染器,性能極高SDL_RenderDrawPoint(renderer, x, y);
Qt Charts / QCustomPlot跨平台集成在 Qt Widgets,適合 GUI 應用直接用 QLineSeries 添加點
OpenGL / Vulkan跨平台GPU 加速,學翆曲線陡峭,適合高性能/3D頂點著色器計算曲線

愛心線參數方程實現(以 EasyX 為例)

#include <graphics.h>
#include <math.h>

int main() {
    initgraph(600, 600);
    setorigin(300, 300);          // 設定邏輯原點
    setaspectratio(1, -1);        // Y軸向上

    double a = 100;
    for (double t = 0; t <= 2*M_PI; t += 0.01) {
        double r = a * (1 - sin(t));
        double x = r * cos(t);
        double y = r * sin(t);
        putpixel((int)x, (int)y, RED);
    }
    getch();
    closegraph();
    return 0;
}

深度學習資源

知乎大神 Milo Yip 的經典回答,系統講解了從軟件光柵化到現代 GPU 渲染管線的繪圖原理:
如何用代碼畫出函數圖像?

避坑指南

  • 采樣步長過大 → 曲線呈鋸齒狀;過小 → 性能浪費。自適應采樣(根據曲率調整步長)是進階優化方向。
  • 坐標變換順序:先縮放、再平移、最後翻轉 Y 軸。
  • 控制台程序無法直接畫圖,必須鏈接圖形庫或調用系統 API(如 Windows GDI)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved