OpenGL绘制随机的山脉轮廓
OpenGL绘制随机的山脉轮廓
- 详细代码
三维图形程序设计作业: 使用递归的方式生成随机的山脉轮廓
运行结果:
详细代码
// An highlighted block
#include <GL/glut.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>#define random(x) (rand()%x)//N取奇数,设置数组大小即最大用于描绘山的点的数目
#define N 1001float a[N][2];
int b[N];//底两点坐标
float d[2][2] = {{-0.5,-0.5}, {0.5,-0.5} };
float t[2] = {0,0.5};int randomp(int t1, int t2) {//取t1-t2之间的随机数float t = rand() % 101;int t3 = (int)((t / 100)*(t2 - t1) + t1);return t3;}
void randomd(int t1, int t2,int t3) {//满足条件能进入函数体的t3做标识,表示将定义此点和进行绘制b[t3] = 1;float t = rand() % 101;//随机取正负int sign = random(2);if (sign == 0) sign = -1;printf("%d\n", sign);//随机的移动距离,与原两点距离成比例float d = sign*(t / 600);//给t3点一个新的坐标a[t3][0] = (a[t2][0] - a[t1][0])*(float)(t3 - t1) / (float)(t2 - t1) + a[t1][0]+d * (a[t2][1] - a[t1][1]) ;a[t3][1] = (a[t2][1] - a[t1][1])*(t3 - t1) / (t2 - t1) + a[t1][1]+d * (a[t2][0] - a[t1][0]);printf("t1,%f,%f\n", a[t1][0], a[t1][1]);printf("t2,%f,%f\n", a[t2][0], a[t2][1]);printf("t3,%f,%f\n", a[t3][0], a[t3][1]);//递归定义int t4=randomp(t1, t3);if (!(b[t4]==1||t4==t1||t4==t3||t1==t3))randomd(t1, t3, t4);int t5 = randomp(t3, t2);if (!(b[t5] == 1 || t5 == t3|| t5 == t2 || t2 == t3 ))randomd(t3, t2,t5);
}void display()
{glClear(GL_COLOR_BUFFER_BIT);//设置随机数种子srand((int)time(0));//对标签数组b进行初始化for(int i=0;i<N;i++)b[i]=0;//底两点设置a[0][0] = d[0][0];a[0][1] = d[0][1];a[N-1][0]= d[1][0];a[N - 1][1] = d[1][1];//顶点设置a[(N - 1) / 2][0] = t[0];a[(N - 1) / 2][1] = t[1];//对已定的坐标点做标志b[0] = 1;b[N - 1] = 1;b[(N - 1) / 2] = 1;//在线段上随机取点,输入参数为两点序号,小的在前,大的在后int l=randomp(0, (N - 1) / 2);randomd(0, (N - 1) / 2, l);int r = randomp( (N - 1) / 2,N-1);randomd((N - 1) / 2, N-1, r);//递归在函数体randomd中已定义,故不用在此定义//绘制山峰glBegin(GL_LINE_LOOP);//glBegin(GL_POLYGON);for (int i = 0; i < N; i++) {if (b[i] == 1) {glVertex2f(a[i][0], a[i][1]);printf("%d:%f,%f\n", i,a[i][0], a[i][1]);}}glEnd();glFlush();
}void init()
{glClearColor(0.0, 0.0, 0.0, 0.0);glColor3f(1.0, 1.0, 1.0);
}int main(int argc, char* argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow("Simple");glutDisplayFunc(display);init();glutMainLoop();return 0;
}
有帮助点一下赞哦~
OpenGL绘制随机的山脉轮廓相关推荐
- 如何用 OpenGL 绘制雪花?
作者 | 许向武 责编 | 张红月 出品 | CSDN博客 看冬奥才知道,阿勒泰不但是中国的"雪都",还是"人类滑雪起源地".这个说法是否成立,姑且不论,阿勒泰 ...
- 【Matplotlib】【Python】如何使用matplotlib绘制绘制随机生成的点--随机漫步详解
目录 1.绘制随机漫步 2.模拟多次随机漫步 3.给点着色 4.重新绘制起点和终点 5.隐藏坐标轴 随机漫步是指每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的. 为模拟随机漫步, ...
- 计算机图形学:实验二——OpenGL绘制基本图形
1. 实验目的 练习OpenGL基础编程,实现OpenGL的颜色混合和渐变效果. 2. 实验内容和要求 按要求完成以下两个绘图,提交纸质实验报告,同时提交实验报告和代码的电子版. I). 利用Open ...
- 深圳大学计算机图形学实验一——OpenGL绘制布布头像
尝试利用OpenGL绘制一些可爱的表情包. 一二布布是较为流行的一套萌系表情包.我选择绘制一二布布系列的一张表情包.这张表情包描绘了趴在窗户上的一只小棕熊布布. 表情包印在手机壳的样例如下: 头的绘制 ...
- OpenGL: 绘制漂亮的围棋子
作为一个围棋爱好者兼程序员,多年以来开发过很多与围棋有关的软件,诸如围棋打谱软件.棋谱管理软件.围棋棋谱下载软件.围棋网站下载软件--而其中,围棋打谱软件开发的次数最多,读书的时候就编写过一个简易的围 ...
- 绘制大西洋中脊剖面轮廓
绘制大西洋中脊剖面轮廓 700 任务要求 参考答案 评论162 作者:周竞文(jwzhou@nudt.edu.cn).李暾 来源:国防科技大学期末考试试题(2017 秋) 领域:海洋.地理 难度:★★ ...
- cvDrawContours:在图像上绘制外部和内部轮廓
转自:http://www.aiseminar.cn/html/18/t-618.html?action-uchimage 函数cvDrawContours用于在图像上绘制外部和内部轮廓.当thick ...
- 使用OpenGL绘制圆环体(Torus)
本篇介绍一下使用OpenGL绘制圆环体的方法.程序是在C#和OpenTK环境下编译的. 代码: /// <summary> /// 绘制圆环体 /// </summary> / ...
- 【OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )
文章目录 一.绘制三角形 二.三角形绘制顺序 1.绘制正面 2.三个点逆时针方向排列 3.三个点顺时针方向排列 4.设置点的正面方向 三.绘制多个三角形 四.相关资源 一.绘制三角形 三角形绘制即绘制 ...
最新文章
- WCF4.0新特性体验(3):标准终结点(Standard Endpoints)
- Opengl-基本概念-转换矩阵坐标系(最难理解的两章)
- 通过销售订单领用到成本中心,FI替代实现不同成本中心记账科目不同
- [网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及防御机理
- 在Java 8 Lambda上使用Apache Commons Functor功能接口
- linux 禁止账户远程登录
- 达摩院里的女Leader,一面温柔似水一面灿烂如阳
- 索引的使用规则和设计考虑
- 微信程序短视频去水印源码 开源产品未加密未授权相关文章
- (26) CSS3 2D转换transform
- 【Level 08】U07 Mixed Feelings L4 Learning by heart
- 剑指offer——跳台阶变态跳台阶矩形覆盖
- bc8android汽车中控屛功能有哪些,安卓大屏功能强大 卡仕达顺车机一机全能
- apollocaffe编译问题
- 2022年除了深度学习,人工智能算法有可能突破的10个方向
- 小度wifi当无线网卡
- 12v电量显示制作方法_12V电池电量指示电路
- 通过UDP解析域名 DNS解析
- uniapp的button按钮使用boder:none依然无法去掉黑色边框的解决。
- 人工智能最全学习路线
热门文章
- Improving the Robustness of Question Answering Systems to Question Paraphrasing
- Android仿微信地图定位和位置选择(下)
- 物流快递查询单号自动识别接口-快递鸟API
- CRM 2013 系统设置新功能一:界面自动保存 及 SDK 中 Xrm.Page.data.entity.save
- 【181】Java8实现单线程外部排序
- 神经网络和深度学习(4)--符号约定
- android 点9图片,安卓UI设计基础教程: 什么是点九图,怎么切点九图
- makedepend 安装
- 锤子手机 运行 linux,锤子手机将UniApp 内置到应用里面启动白屏
- linux打的war包在linux上无法运行(一个奇葩事件,spring无法读取Properties)