四叶图-openGL 例子,第四章。计算机图形学 中例子 代码有点瑕疵

news2025/2/28 15:32:01

第四版 计算机图形学 中例子 代码有点瑕疵,见下图,本道长保证这个程序没有运行过。

可运行代码如下。

#include "stdafx.h"
#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;

struct screenPt
{
	GLint x;
	GLint y;
};

typedef enum {
	limacon = 1,
	cardioid,
	threeLeaf,
	fourLeaf,
	spiral
} curveName;

GLsizei winWidth = 600, winHeight = 500;
void init(void) {
	glClearColor(1.0,1.0,1.0,1.0);
	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 = 175, b = 60;
	GLfloat r, theta, dtheta = 1.0 / float(a);
	GLint x0 = 200, y0 = 250;
	screenPt curvePt[2];

	glColor3f(0.0,0.0,0.0);

	curvePt[0].x = x0;
	curvePt[0].y = y0;

	switch (curveNum) {
		case limacon: curvePt[0].x += a + b; break;
		case cardioid:curvePt[0].x += a + a; break;
		case threeLeaf: curvePt[0].x += a; break;
		case fourLeaf: curvePt[0].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 * (1 + cos(theta)); break;
		case threeLeaf:
			r = a * cos(3 * theta); break;
		case fourLeaf:
			r = a * cos(2 * theta); break;
		case spiral:
			r = (a / 4.0) * theta; break;
		 default: break;
		}
		curvePt[1].x = x0 + r * cos(theta);
		curvePt[1].y = y0 + r * sin(theta);
		lineSegment(curvePt[0],curvePt[1]);

		curvePt[0].x = curvePt[1].x;
		curvePt[0].y = curvePt[1].y;
		theta += dtheta;

	}
}

void displayFcn(void) {
	GLint curveNum;
	glClear(GL_COLOR_BUFFER_BIT);

	cout << "\nEnter the integr value corresponding to \n";
	cout << "one of the folloing curve names .\n";
	cout << "Press any other key to exit. \n";
	cout << "\n1-limacon. 2-cardioid,3-threeLeaf,4-fourLea,5-spira1:";
	cin >> curveNum;

	if (curveNum == 1 || curveNum == 2 || curveNum == 3 || curveNum == 4 || curveNum == 5) {
		drawCurve(curveNum);
	}
	else
	{
		exit(0);
	}
	glFlush();
}

void winReshapFcn(GLint newWidth, GLint newHeight) {
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0,(GLdouble) newWidth,0.0,(GLdouble) newHeight);

	glClear(GL_COLOR_BUFFER_BIT);
}
void main(int argc,char ** argv) {

	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(winWidth,winHeight);
	glutCreateWindow("Draw Curves");

	init();
	glutDisplayFunc(displayFcn);
	glutReshapeFunc(winReshapFcn);
	glutMainLoop();
}




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/998451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UG\NX二次开发 计算uv参数的最小值最大值 UF_MODL_ask_face_uv_minmax

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 计算uv参数的最小值最大值 UF_MODL_ask_face_uv_minmax 效果: 代码: #include "me.hpp"void ufusr(char* param, int* ret…

探索如何将html和svg导出为图片

笔者开源了一个Web思维导图&#xff0c;在做导出为图片的功能时走了挺多弯路&#xff0c;所以通过本文来记录一下。 思维导图的节点和连线都是通过 svg 渲染的&#xff0c;作为一个纯 js 库&#xff0c;我们不考虑通过后端来实现&#xff0c;所以只能思考如何通过纯前端的方式…

d3dx9_43.dll丢失如何修复?四种快速修复d3dx9_43.dll丢失的方法分享

在我们日常使用电脑的过程中&#xff0c;有时候会遇到一些问题&#xff0c;其中比较常见的一种就是电脑提示 d3dx9_43.dll 丢失。对于这种情况&#xff0c;我们该如何解决呢&#xff1f;本文将详细介绍 d3dx9_43.dll 文件的相关信息&#xff0c;以及解决 d3dx9_43.dll 丢失的四…

[hello,world]这个如何将[ ] 去掉

[hello,world]这个如何将[ ] 去掉&#xff1f; 你可以使用编程语言中的字符串处理函数来去掉方括号。以下是一个示例代码&#xff0c;使用Python的strip()函数去掉方括号&#xff1a; text "[hello,world]" text text.strip("[]") print(text)输出为&a…

CVPR:使用完全交叉Transformer的小样本目标检测

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 论文地址&#xff1a; https://openaccess.thecvf.com/content/CVPR2022/papers/Han_Few-Shot_Object_Detection_With_Fully_Cross-Transformer_CVPR…

多元共进|支持多元梦想,创造包容文化环境

谷歌致力于推动多元、平等、共融 鼓励每个人赞扬自己取得的成就 了解自我展示的重要性 一起了解 2023 Google 开发者大会上 谷歌如何支持企业创造多元共融的文化 打造包容性的工作场所 为每个人创造更加温暖的环境 多元、平等、共融 (DEI)&#xff0c;三个板块之间互相联系&…

[H5动画制作系列] Sprite及Text Demo

参考代码: sprite.js: var canvas, stage, container; canvas document.getElementById("mainView"); function init() {stage new createjs.Stage(canvas);createjs.Touch.enable(stage);var loader new createjs.LoadQueue(false);loader.addEventListener(&q…

2023年深度测评对比两款大热SaaS平台,国内SaaS是否已经跑出独角兽?

什么是SaaS平台&#xff1f;SaaS平台是否已经形成了自己的核心竞争力&#xff1f;SaaS平台是否在国内跑出独角兽&#xff1f;本篇&#xff0c;我们将为大家测评国内最热的两款SaaS平台&#xff0c;全文干货&#xff0c;请大家安心食用。 一、SaaS平台是什么&#xff1f; SaaS…

青创智通亮相上海GAF 2023全球数字化智能装配工程与装备技术大会

​​​​​​FMEA软件-智能扭矩系统-智能测量系统-青创智通 9月13日-15日由螺丝君主办的“聚焦技术、引领创新”为主题的GAF2023数字化智能装配工程与装备技术大会&#xff0c;将在上海汽车会展中心开幕&#xff0c;北京青创智通携带SunTorque智能扭矩系统、智能扭矩小车亮相此…

MPLAB X IPE安装新版本之后打不开了,提示:Warning - could not install some modules:

FAE的踩坑之路——4、MPLAB X IPE 打不开&#xff0c;提示&#xff1a;Warning - could not install some modules: - 大大通(简体站) (wpgdadatong.com.cn) 我是怎么出现这个问题的呢&#xff1f;以前一直使用的老版本v5.45开发环境&#xff0c;然后想体验一下新版本 v6.10&am…

SuperMap iClient3D 11i (2023) SP1 for Cesium之移动实体对象

作者&#xff1a;nannan 目录 前言 一、代码思路 1.1 绘制面实体对象 1.2 鼠标左键按下事件 1.3 鼠标移动事件 1.4 鼠标左键抬起事件 二、运行效果 三、注意事项 前言 SuperMap 官网三维前端范例 编辑线面&#xff0c;可以对面实体对象的节点进行增加、删除以及修改位置…

PYTHON学习-文件管理,打工人必备~

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

秒杀场景下用Redis分布式锁解决超卖问题

前言 超卖问题通常出现在多用户并发操作的情况下&#xff0c;即多个用户尝试购买同一件商品&#xff0c;导致商品库存不足或者超卖。解决超卖问题的方法有很多&#xff1a;乐观锁、Redis分布式锁、消息队列等。 分布式锁是一种多节点共享的同步机制&#xff0c;通过在多个节点…

《TCP/IP网络编程》阅读笔记--getsockopt和setsockopt的使用

目录 1--Socket的多种可选项 2--getsocketopt() 3--setsockopt() 4--代码实例 1--Socket的多种可选项 Socket 拥有多种可选项&#xff0c;其可分为 SOL_SOCKET 层&#xff0c;IPPROTO_IP 层和IPPROTO_TCP 层等&#xff0c;一般通过 getsocketopt() 和 setsockopt() 函数进行…

【Cpolar内网穿透】公网SSH远程连接Termux – 电脑使用安卓Termux

目录 前言 1.安装ssh 2.安装cpolar内网穿透 3.远程ssh连接配置 4.公网远程连接 5.固定远程连接地址 前言 使用安卓机跑东西的时候&#xff0c;屏幕太小&#xff0c;有时候操作不习惯。不过我们可以开启ssh&#xff0c;使用电脑PC端SSH远程连接手机termux。 本次教程主要…

C#,《小白学程序》第二十课:大数(BigInteger)的四则运算之一,加法

大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算。 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法。 重复了部分 19 课的代码。 1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary>…

软件架构设计(十一) 软件产品线

1、基本概念 软件产品线是从DSSA(特定领域架构)扩展而来的,我们从事软件开发,当您有了多年的经验之后,往往会沉淀到某一个特定领域,然后做这个领域的行业软件。 此时,您会把一些共性的东西开发出来,稳定下来。如果以后再开发同类型的系统时,做一些小修小改或者应用层…

《Python趣味工具》——自制emoji(1)绘制爱心应援牌❤️

项目目标&#xff1a; 本项目旨在学习如何自制emoji&#xff0c;学习内容主要分为3个方面&#xff0c;分3次来讲&#xff0c;根本在于了解了turtle的使用&#xff01; 1.完成一个爱心应援牌 2.完成静态的emoji 3.让emoji动起来&#xff01; 今天我们来学习第一个部分。 文章目录…

推荐一个图像生成开源项目——Fooocus

目录 什么是Fooocus&#xff1f; 项目地址 性能消耗 如何安装 效果对比 总结 什么是Fooocus&#xff1f; Fooocus是一款图像生成软件&#xff0c;但它不同寻常&#xff0c;是对稳定扩散&#xff08;Stable Diffusion&#xff09;和Midjourney的设计理念的巧妙重新思考。本…

C语言经典100例题(42)--学习使用auto定义变量的用法

目录 题目 问题分析 代码 运行结果 题目 学习使用auto定义变量的用法 问题分析 auto存储类型只对属于块的变量有效。auto变量具有自动存储期限、块作用域&#xff0c;并且无连接。auto存储类型几乎从来不用明确地指明&#xff0c;因为对于在块内部声明的变量&#xff0c;…