用c++写 爱心图案

发布时间 2024-01-09 18:07:28作者: 第九区猿工

绘制爱心曲线

现代数学的一个有趣的证明是 Georg Cantor 证明了有理数是可枚举的。在这篇博客中,我们将通过编程绘制一个简单而美丽的数学图形:爱心曲线。

爱心曲线代码

//爱心曲线  (x^2 + y^2 -a)^3 - x^2 * y^3 = 0
#include <iostream>
#include <cmath>
using namespace std;
int main(){
    //画板大小
    double a=1;
    
    //绘图边界
    double bound=1.3 * sqrt(a);
    
    //变化步长
    double step=0.05;
    
    //逐层扫描
    for(double y=bound;y>-bound;y-=step){
        for(double x=-bound;x<bound;x+=0.5*step){
            double rs=pow(pow(x,2)+pow(y,2)-a,3)-pow(x,2)*pow(y,3);
            if(rs<=0){
                cout << "*";
            }
            else{
                cout << " ";
            }
        }
        cout << endl;
    }
    return 0;
}

解释

爱心曲线的方程是 [ (x^2 + y^2 - a)^3 - x^2 \cdot y^3 = 0 ]。这个方程描述了一个在二维平面上的爱心形状。

这段代码是用来绘制爱心曲线的,下面是对其中的参数和逻辑的解释:

  1. double a=1;: 这是爱心曲线方程中的参数,表示控制爱心的大小。你可以尝试改变这个值,看看对曲线形状有什么影响。比如,将 a 设置为不同的正数或零,观察爱心曲线的形状。

  2. double bound=1.3 * sqrt(a);: 这是绘图边界,用于确定绘图范围。它取决于参数 a 的值,以确保整个爱心曲线都在绘图范围内。你可以调整 1.3 这个系数来改变绘图边界的大小。

  3. double step=0.05;: 这是变化步长,表示在绘图时在 x 和 y 方向上每次变化的步长。较小的步长会产生更精细的曲线,但也会增加计算量。你可以尝试调整这个值,看看对曲线的细节有什么影响。

  4. for(double y=bound;y>-bound;y-=step): 外层循环是在 y 方向上进行扫描,从绘图边界的正上方开始,逐步向下扫描。

  5. for(double x=-bound;x<bound;x+=0.5*step): 内层循环是在 x 方向上进行扫描,从绘图边界的最左侧开始,逐步向右扫描。

  6. double rs=pow(pow(x,2)+pow(y,2)-a,3)-pow(x,2)*pow(y,3);: 这是计算爱心曲线方程的值,根据结果判断当前点是否在爱心曲线上。如果 rs 的值小于等于 0,则当前点在爱心曲线上。

  7. cout << "*";: 如果当前点在爱心曲线上,输出 *,表示该点在爱心的形状内;否则输出空格。

你可以通过调整这些参数,观察绘图结果的变化,以更好地理解这个爱心曲线的生成过程。

输出结果