博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL研究2.0 计算圆
阅读量:7222 次
发布时间:2019-06-29

本文共 958 字,大约阅读时间需要 3 分钟。

OpenGL研究2.0 计算圆

DionysosLai2014-06-18

         在游戏中。常常有些地方涉及到一些圆的轨迹计算,例如一些转轴类的游戏,人物一般在角色转轴上面运动。这时,我们就要时刻计算角色的位置。

分析一下。圆位置的一般算法。

         首先。例如以下图的一个圆:

图1

         依据对称性原理,我们仅仅须要计算黑色区域的点集合就可以。同一时候,因为黑色区域的圆的切线斜率明显在-1到0,这点就能够和前面一节线段的计算方法相结合了。

         圆的点计算方法:

1.      直接计算方法

          1). 离散点计算法

          利用隐函数公式方法:

          2). 三角函数方法

          这两个方法。明显都涉及到了三角函数、开根号等一些比較复杂的计算方法,运算量比較大。

2.      中点运算方法

         思想:圆的正负性划分:,将点(x,y)带入F(x,y)中。则:

          F(x,y)>0---->圆外面的点。F(x,y)=0---->圆上的点,F(x,y)<0---->圆里面的点。

          运算:

          在图1中,黑色区域的x值变化率大于y,切线斜率在-1到0之间,取x递增1。则

           和的关系例如以下图所看到的:

        对于点。要么在点E或者在点SE。

        基本原理:

        对于点的下一个点间的线段中点M=(xi+1,yi-0.5),将点M带入F(x,y)方程中,假设F(M)<=0, 说明点M在圆内,则点取点E,反之取点SE。

    

        数学计算:

       如果di=F(M),那么下一个点的d值例如以下所看到的:

      1)  假设di<=0,则取E点,即。因此

      2)  假设di>0,则取SE点,即,因此

      3)   那么对于d0,值为多少呢?有计算式可知:

      4)  综上。我们有例如以下关系:

      代码例如以下:

void midCircle(int x0, int y0, int R){	/*仅仅画1/8圆*/	int d0, d1, d2,x,y,xEnd;	d0 = 1.25-R;	x = x0;	y = y0-R;	xEnd = x0+sqrt(2)/2.f*R;	SetPixel(x,y);	while(x

3.      正内多边形迫近法

         基本原理:通过内接多边形不断的逼近一个圆:

         计算公式:

 

           一般。仅仅要你内接多边形边数越大。就越接近圆了。我努力了100多边形,在同一轮的需求线。

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
Spring Boot(1)
查看>>
Winodws 10 美化与调优
查看>>
apache安装及多域名解析及域名代理
查看>>
什么是自动化运维 ? 自动化运维的设计思路以及实战
查看>>
Python练习实例100例(持续更新中)
查看>>
非父组件通信
查看>>
Electron系列文章-主进程与渲染进程
查看>>
高性能缓存服务器 nuster v1.8.8.2 和 v1.7.11.2 发布
查看>>
教你快速入门ES6
查看>>
Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery
查看>>
宜昌a货翡翠,包头a货翡翠
查看>>
【微信事业群】趣味面试算法题
查看>>
保守的国美再一次进击社交电商,前途未卜?
查看>>
git
查看>>
Python学习教程(Python学习路线):Python 3—手动创建迭代器
查看>>
说说如何在 Virtual Box 中新建 CentOS 虚拟机
查看>>
Cordova + Vue 实现点击两次退出应用
查看>>
JAVA 多用户商城系统b2b2c-Spring Cloud Stream 介绍
查看>>
spring cloud构建互联网分布式微服务云平台-SpringCloud集成项目简介
查看>>
基于房源的画像分析
查看>>