#include<iostream>
#include <math.h>
//旧版本 固定管线
#include<Windows.h>
#include <GL/glut.h> using namespace std; const GLdouble twoPi = 6.283185; struct screenPt {
GLint x, y;
}; typedef enum{ limacon =, cardioid, threeLeaf, fourLeaf, spiral} curveName; GLsizei winWidth = , winHeight = ; void init()
{
//窗口背景为白色
glClearColor(, , , );
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
} void lineSegment(screenPt pt1, screenPt pt2)
{
glBegin(GL_LINES);
glVertex2i(pt1.x, pt1.y);
glVertex2i(pt2.x, pt2.y);
glEnd();
} void drawCurve(GLint curveNum)
{
const GLdouble twoPi = 6.283185;
const GLint a = , b = ; GLfloat r, theta, dtheta = 1.0 / float(a);
GLint x0 = , y0 = ;
screenPt curvePt[]; glColor3f(0.0, 0.0, 0.0);
curvePt[].x = x0;
curvePt[].y = y0; switch (curveNum) {
case limacon:
curvePt[].x += a + b;
break;
case cardioid:
curvePt[].x += a + a;
break;
case threeLeaf:
curvePt[].x += a;
break;
case fourLeaf:
curvePt[].x += a;
break;
case spiral:
break;
default:
break;
} theta = dtheta; while (theta < twoPi) {
switch (curveNum) {
case limacon:
r = a * cos(theta) + b;
break;
case cardioid:
r = a * ( + cos(theta));
break;
case threeLeaf:
r = a * cos(theta * );
break;
case fourLeaf:
r = a * cos(theta * );
break;
case spiral:
r = (a / 4.0) * theta;
break;
default:
break;
}
curvePt[].x = x0 + r * cos(theta);
curvePt[].y = y0 + r * sin(theta);
lineSegment(curvePt[], curvePt[]); curvePt[].x = curvePt[].x;
curvePt[].y = curvePt[].y;
theta += dtheta;
}
} void displayFcn()
{
GLint curveNum; glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 1.0);
cout << "选择下列任意图形进行绘制\n";
cout << "1-limacon, 2-cardioid, 3-threeLeaf, 4-fourLeaf, 5-spiral\n"; if (curveNum == || curveNum == || curveNum == || curveNum == || curveNum == ) {
drawCurve(curveNum);
}
else {
exit();
}
glFlush(); } void winReshapeFcn(GLint newWidth, GLint newHeight)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight));
glClear(GL_COLOR_BUFFER_BIT); winWidth = newWidth;
winHeight = newHeight;
} int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(, );
glutInitWindowSize(winWidth, winHeight);
glutCreateWindow("Curves");
init(); glutDisplayFunc(displayFcn);
glutReshapeFunc(winReshapeFcn);
glutMainLoop(); system("pause");
return ; }

OpenGL——圆公式相关变化的绘制的更多相关文章

  1. OpenGL入门程序五:三维绘制

    1.现实世界观察一个物体的时候,可能涉及到的三维变化: 1>视图变化------从不同的角度观察. 2>模型变化------移动.旋转物体,计算机中当然还可以对物体进行缩放. 3>投 ...

  2. [转]OpenGL通过VBO实现顶点数组绘制顶点

    #include "stdlib.h" #include <OpenGL/glext.h> #include <GLUT/GLUT.h> #define B ...

  3. OpenGL三角形的双面不同颜色的绘制

    对于一个三角形,我要给它正反面不同的颜色.然后通过旋转,看出它的效果. 我只想到了2种方法,下面我来写一下这两种方法. 第一种方法,通过角度的判断重设glColor3f的参数(这种方法局限性很大,不推 ...

  4. 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实

    2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  5. 1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程

    1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  6. 用OpenGL进行曲线、曲面的绘制

    实验目的 理解Bezier曲线.曲面绘制的基本原理:理解OpenGL中一维.二维插值求值器的用法. 掌握OpenGL中曲线.曲面绘图的方法,对比不同参数下的绘图效果差异: 代码1:用四个控制点绘制一条 ...

  7. opengl基础学习专题 (三) 多边形绘制的几种样式

    题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向 ...

  8. OpenGL基本框架与三维对象绘制

    上次我们介绍了OpenGL的环境构建和二维对象的绘制,这次我们来讲讲三维对象的绘制: 绘制代码如下: Github代码仓库 // opengltest2.cpp : Defines the entry ...

  9. OpenGL: 环境配置和图元的绘制

    前言 距离上一篇博客已经过去一个半月了,这段时间过得确实充实,虽然一大段时间泡在图书馆复习,但至少也能学到点东西.跨年晚和元旦一整天,全身心投入图形学小课设的编程,终于实现了老师要求的所有功能,回想起 ...

随机推荐

  1. Delphi发布ActiveX控件 制作CAB包 数字签名相关

    文件: SignTool.rar 大小: 84KB 下载: 下载 最近我正在研究ActiveX技术.我使用Delphi 7创建了一个具有ActiveForm的ActiveX控件应用程序.这个控件产生一 ...

  2. iptables设置端口转发

    转自:https://blog.csdn.net/sigangjun/article/details/17412821 一 从一台机到另一台机端口转发 启用网卡转发功能 #echo 1 > /p ...

  3. Git -- 本地 一个相同的新的分支 并 推送到远程仓库

    (一).创建本地分支 git checkout -b 新分支名 执行该指令后,会在本地创建一个新分支,该分支是从当前分支上检出的,所以所有文件内容都和当前分支一模一样,这是正常的.创建成功后,将自动切 ...

  4. jconsole工具使用

    Jconsole,Java Monitoring and Management Console. Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远 ...

  5. 奇怪吸引子---LorenzStenflo

    奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...

  6. 学习Spring-Session+Redis实现session共享

    1.添加依赖 <dependency> <groupId>org.springframework.session</groupId> <artifactId& ...

  7. webservice接口测试,使用SoapUI工具进行接口测试

    首先,接口使用cxf编写接口,测试工具使用SoapUI 5.2.1 安装之后是这样的图标: 测试操作步骤如下: (1)首先找到cxf-webservice.xml配置信息中地址,在浏览器中出入:htt ...

  8. .net跨平台分析软件

    https://marketplace.visualstudio.com/items?itemName=ConnieYau.NETPortabilityAnalyzer

  9. Json解析包FastJson使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser. ...

  10. 《Unix&Linux大学教程》学习笔记5 :正则表达式

    1:Unix下正则表达式规则