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绘制随机的山脉轮廓相关推荐

  1. 如何用 OpenGL 绘制雪花?

    作者 | 许向武 责编 | 张红月 出品 | CSDN博客 看冬奥才知道,阿勒泰不但是中国的"雪都",还是"人类滑雪起源地".这个说法是否成立,姑且不论,阿勒泰 ...

  2. 【Matplotlib】【Python】如何使用matplotlib绘制绘制随机生成的点--随机漫步详解

    目录 1.绘制随机漫步 2.模拟多次随机漫步 3.给点着色 4.重新绘制起点和终点 5.隐藏坐标轴 随机漫步是指每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的. 为模拟随机漫步, ...

  3. 计算机图形学:实验二——OpenGL绘制基本图形

    1. 实验目的 练习OpenGL基础编程,实现OpenGL的颜色混合和渐变效果. 2. 实验内容和要求 按要求完成以下两个绘图,提交纸质实验报告,同时提交实验报告和代码的电子版. I). 利用Open ...

  4. 深圳大学计算机图形学实验一——OpenGL绘制布布头像

    尝试利用OpenGL绘制一些可爱的表情包. 一二布布是较为流行的一套萌系表情包.我选择绘制一二布布系列的一张表情包.这张表情包描绘了趴在窗户上的一只小棕熊布布. 表情包印在手机壳的样例如下: 头的绘制 ...

  5. OpenGL: 绘制漂亮的围棋子

    作为一个围棋爱好者兼程序员,多年以来开发过很多与围棋有关的软件,诸如围棋打谱软件.棋谱管理软件.围棋棋谱下载软件.围棋网站下载软件--而其中,围棋打谱软件开发的次数最多,读书的时候就编写过一个简易的围 ...

  6. 绘制大西洋中脊剖面轮廓

    绘制大西洋中脊剖面轮廓 700 任务要求 参考答案 评论162 作者:周竞文(jwzhou@nudt.edu.cn).李暾 来源:国防科技大学期末考试试题(2017 秋) 领域:海洋.地理 难度:★★ ...

  7. cvDrawContours:在图像上绘制外部和内部轮廓

    转自:http://www.aiseminar.cn/html/18/t-618.html?action-uchimage 函数cvDrawContours用于在图像上绘制外部和内部轮廓.当thick ...

  8. 使用OpenGL绘制圆环体(Torus)

    本篇介绍一下使用OpenGL绘制圆环体的方法.程序是在C#和OpenTK环境下编译的. 代码: /// <summary> /// 绘制圆环体 /// </summary> / ...

  9. 【OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )

    文章目录 一.绘制三角形 二.三角形绘制顺序 1.绘制正面 2.三个点逆时针方向排列 3.三个点顺时针方向排列 4.设置点的正面方向 三.绘制多个三角形 四.相关资源 一.绘制三角形 三角形绘制即绘制 ...

最新文章

  1. WCF4.0新特性体验(3):标准终结点(Standard Endpoints)
  2. Opengl-基本概念-转换矩阵坐标系(最难理解的两章)
  3. 通过销售订单领用到成本中心,FI替代实现不同成本中心记账科目不同
  4. [网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及防御机理
  5. 在Java 8 Lambda上使用Apache Commons Functor功能接口
  6. linux 禁止账户远程登录
  7. 达摩院里的女Leader,一面温柔似水一面灿烂如阳
  8. 索引的使用规则和设计考虑
  9. 微信程序短视频去水印源码 开源产品未加密未授权相关文章
  10. (26) CSS3 2D转换transform
  11. 【Level 08】U07 Mixed Feelings L4 Learning by heart
  12. 剑指offer——跳台阶变态跳台阶矩形覆盖
  13. bc8android汽车中控屛功能有哪些,安卓大屏功能强大 卡仕达顺车机一机全能
  14. apollocaffe编译问题
  15. 2022年除了深度学习,人工智能算法有可能突破的10个方向
  16. 小度wifi当无线网卡
  17. 12v电量显示制作方法_12V电池电量指示电路
  18. 通过UDP解析域名 DNS解析
  19. uniapp的button按钮使用boder:none依然无法去掉黑色边框的解决。
  20. 人工智能最全学习路线

热门文章

  1. Improving the Robustness of Question Answering Systems to Question Paraphrasing
  2. Android仿微信地图定位和位置选择(下)
  3. 物流快递查询单号自动识别接口-快递鸟API
  4. CRM 2013 系统设置新功能一:界面自动保存 及 SDK 中 Xrm.Page.data.entity.save
  5. 【181】Java8实现单线程外部排序
  6. 神经网络和深度学习(4)--符号约定
  7. android 点9图片,安卓UI设计基础教程: 什么是点九图,怎么切点九图
  8. makedepend 安装
  9. 锤子手机 运行 linux,锤子手机将UniApp 内置到应用里面启动白屏
  10. linux打的war包在linux上无法运行(一个奇葩事件,spring无法读取Properties)