x^2 + (y-(x^2)(1/3))^2 = 1 心形方程 5.20无聊之作

2017.5.12 一个无聊的周六,只能看别人秀恩爱.偶然间在网上看到一个有意思的方程 x^2 + (y-(x^2)(1/3))^2 = 1,据说这个方程可以绘制出一个爱心的形状.既然很无聊,就随便动手实现了.

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

// x^2 + (y-(x^2)(1/3))^2 = 1
// y = (+/-)sqrt(1-x^2) + (x^2)(1/3)
void love_fun(float x, float &y1, float &y2)
{
    if (x > 1.0)
    {
        return;
    }
    float a = pow(x, 2.0f);
    float b = sqrt(1 - a);
    float c1 = b;
    float c2 = -b;
    float d = pow(a, 0.333333f);
    y1 = c1 + d;
    y2 = c2 + d;
}

void coordinate()
{
    glColor3f(1.0, 1.0, 1.0);
    glBegin(GL_LINES);
    glVertex3f(-2.0, 0.0f, 0.0);
    glVertex3f(2.0, 0.0f, 0.0);
    glVertex3f(0.0, -2.0f, 0.0);
    glVertex3f(0.0, 2.0f, 0.0);
    glEnd();
}

void love()
{
    float step = 0.0005f;
    glColor3f(1.0, 0.0, 0.0);
    glBegin(GL_POLYGON);
    for (float x = -1.0; x <= 1.0; x += step)
    {
        float y1 = 0, y2 = 0;
        love_fun(x, y1, y2);
        // printf("(%f %f) (%f %f)\n", x, y1, x, y2);
        glVertex3f(x, y1, 0.0);
        glVertex3f(x, y2, 0.0);
    }
    glEnd();
}

void display_love()
{
    glClear(GL_COLOR_BUFFER_BIT);
    love();
    coordinate();
    glutSwapBuffers();
}

void init(void)
{

    glClearColor(0.4, 0.4, 0.8, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, -1.0f, 1.0f);
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowPosition(500, 100);
    glutInitWindowSize(600, 500);
    glutCreateWindow("love : x^2 + (y-(x^2)(1/3))^2 = 1");
    init();
    glutDisplayFunc(display_love);
    glutMainLoop();
    return 0;
}
时间: 2024-10-05 04:55:24

x^2 + (y-(x^2)(1/3))^2 = 1 心形方程 5.20无聊之作的相关文章

数学图形之心形

明天是七夕,中国的情人节,为了应节,这一篇提供几个心形曲面的算法. 说到心形,我想到一个笑话,有个女老师在黑板上画了个心形图案,问学生加:"这是什么?"学生们回答:"屁股."老师气哭了,去找校长理论.校长来了就批评学生:"你们怎么又的把老师给气哭了呢?"然后看到了黑板上的图案继续说道:"你们也太调皮了,怎么还在黑板上画了个屁股呢!"好笑吧,其实我也有类似的经历,有人曾对我说:"你怎么拿个屁股做博客园的头像呢?&quo

c++打印心形

用c++打印一个心形的图案: 1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 int main() 5 { 6     float x, y; 7     for (y = 1.5f; y >-1.5f; y -= 0.1f) 8     { 9         for (x = -1.5f; x <1.5f; x += 0.05f)10         {11             fl

MATLAB之心形图绘制

一.静态心形图绘制 (1)效果展示 (2)静态心形原始代码 1 clc; 2 clear all; 3 const=0; 4 % 均布三位坐标 5 x=-5:0.05:5; 6 y=-5:0.05:5; 7 z=-5:0.05:5; 8 [x,y,z]=meshgrid(x,y,z); % 绘制三位坐标点 9 % 心形函数 10 f=(x.^2 + (9/4)*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (9/80)*y.^2.*z.^3-const; 11 p=pat

9.28 csp-s模拟测试54 x+y+z

T1 x 求出每个数的质因数,并查集维护因子相同的数,最后看一共有多少个联通块,$ans=2^{cnt}-2$ 但是直接分解会$T$,埃筛是个很好的选择,或者利用每个数最多只会有1个大于$\sqrt{n}$的质因子,线筛$1e6$内的素数,每次只需枚举$1e3$的质因数就行,复杂度也可以过去 #include<iostream> #include<cstdio> #include<bitset> #include<cmath> #include<cst

利用MATLAB进行曲线拟合

软件环境:MATLAB2013a 一.多项式拟合 多项式拟合是利用多项式最佳地拟合观测数据,使得在观测数据点处的误差平方和最小. 在MATLAB中,利用函数ployfit和ployval进行多项式拟合. 函数ployfit根据观测数据及用户指定的多项式阶数得到光滑曲线的多项式表示,polyfit的一般调用格式为:P = polyfit(x,y,n).其中x为自变量,y为因变量,n为多项式阶数. polyval的输入可以是标量或矩阵,调用格式为 pv = polyval(p,a) pv = pol

PHP知识点总结2

PHP5数据类型 String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值). 字符串 你可以将任何文本放在单引号和双引号中: <?php $x = "Hello world!"; echo $x; echo "<br>"; $x = 'Hello world!'; //单引号 包括字符串字面量 双引号包含的字符串 可包含变量 echo $x

南阳OJ 61 传纸条(一)

传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者

Codeforces Round #420 (Div. 2) A-E

本来打算划划水洗洗睡了,突然听到这次的主人公是冈部伦太郎 石头门(<steins;gate>)主题的比赛,岂有不打之理! 石头门真的很棒啊!人设也好剧情也赞曲子也特别好听. 推荐http://music.163.com/#/m/song?id=26259014&userid=115264555 (强行跑题) Okabe and Future Gadget Laboratory O(n^4)暴力妥妥的 1 #include<iostream> 2 #include<al

poj 1088 滑雪 DP(dfs的记忆化搜索)

题目地址:http://poj.org/problem?id=1088 题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路径 求最大的下滑路径 分析:因为只能从高峰滑到低峰,无后效性,所以每个点都可以找到自己的最长下滑距离(只与自己高度有关).记忆每个点的最长下滑距离,当有另一个点的下滑路径遇到这个点的时候,直接加上这个点的最长下滑距离. dp递推式是,dp[x][y] = max(dp[x][y],dp[x+1][y]+

Qt之QAbstractItemView视图项拖拽(二)

一.需求说明 上一篇文章Qt之QAbstractItemView视图项拖拽(一)讲述了实现QAbstractItemView视图项拖拽的一种方式,是基于QDrag实现的,这个类是qt自己封装好了的,所以可定制性也就没有了那么强,最明显的是,这个类在执行exec方法后,mouse系列的回调接口就被阻塞了,随之而来的问题就是拖拽时item项没有了hover特性,为了解决这个问题,我们就不能使用QDrag类来实现拖拽了,这也是这篇文章我要讲述的内容. 二.效果展示 如图1是demo的效果展示,比较丑,