笛卡尔心形线

目录

一、前言

二、使用 EasyX 绘制笛卡尔心形线



一、前言

"谁能告诉我,这是什么?"

"爱心呗"

"哼,爱心,我们叫它心形线。关于心形线呢,还有一个美丽的故事,是跟笛卡尔有关。说笛卡尔和美丽的瑞典公主相爱了,因为他们之间相差了三十多岁,国王知道了呢,就极力地反对,并把笛卡尔流放了。笛卡尔在临死之前写给公主的情书当中写了这样一条公式 r = a(1 - sin\theta),公主接到这封情书的时候,笛卡尔已经死在了狱中,公主也一生未嫁,而这个公式解出来的图形,就是著名的心形线。

是不是很浪漫啊?嗯?哼,但真相远远要比童话残酷。这个故事还有另外一个版本,说是公主根本就不在乎笛卡尔,笛卡尔也不是死于疾病,而是死于背叛。所以究竟是相信真相,还是童话,是你们每个人的选择,就像用什么方式解开这道题,也是你们的选择一样。"

笛卡尔心形线_第1张图片


二、使用 EasyX 绘制笛卡尔心形线

知道极坐标后,就知道该曲线对应的参数方程,即已知曲线 \rho = \rho(\theta) = a(1 - sin\theta),则对应的参数方程为

\begin{cases} x = \rho(\theta)cos\theta = a(1-sin\theta)cos\theta \\ y = \rho(\theta)sin\theta = a(1-sin\theta)sin\theta \end{cases}

#include 
#include 
#include 
​
#define WIDTH 640
#define HEIGHT 480
#define PI 3.1415926
#define ONE_DEGREE PI / 180
​
void cardioid(int a)
{
    setorigin(WIDTH / 2, HEIGHT / 2);  // 将逻辑坐标的原点移到窗体中心
    setaspectratio(1, -1);  // 使 y 轴向上为正
    setlinecolor(RED);  // 设置画线颜色
    setlinestyle(PS_SOLID, 3);  // 设置画线样式
​
    int x1, y1, x2, y2;
    double theta = 0.0;
    while (theta <= 2 * PI)
    {
        x1 = a * (1 - sin(theta)) * cos(theta);
        y1 = a * (1 - sin(theta)) * sin(theta);
        theta += ONE_DEGREE;
        x2 = a * (1 - sin(theta)) * cos(theta);
        y2 = a * (1 - sin(theta)) * sin(theta);
        line(x1, y1, x2, y2);
    }
}
​
int main()
{
    initgraph(WIDTH, HEIGHT);
    
    cardioid(100);
​
    getchar();
    closegraph();
    return 0;
}

笛卡尔心形线_第2张图片

《隐秘的角落》推荐~

你可能感兴趣的:(C语言,学习,开发语言,c++)