【OpenGL】中点法画椭圆

这篇博客介绍了如何使用OpenGL的中点法实现椭圆的绘制,这种方法基于Bresenham算法,通过求解曲线方程的递推式,根据斜率判断下一个像素点的选择,以确保精度。椭圆的绘制比直线更复杂,需要处理更复杂的方程和增量计算。
摘要由CSDN通过智能技术生成

仍然可以看成是Bresenham算法的一个应用,书上叫它“中点法”(原因是当我们不能确定取哪个坐标的时候,就用两个待定的坐标的中点代入方程来帮助判断)。

Bresenham算法归根到底要解决的就是“下一个点怎么选更精确”这个问题,解决的套路是:

1)先给出一个判别函数,这个函数就是所要画的曲线的方程式;

2)求解这个判别函数的递推式;

2)总是从像素点更密集的方向开始选点(方便起见从x开始,每次加1);

3)判断下一个点x+1对应的理论坐标和实际坐标的差距,选差距小的作为y坐标;

4)不断重复3),直到达到临界条件(通常是斜率,一般只需要考虑斜率小于1的情形,其他对称解决)

椭圆的思路是一样的,只是方程更复杂,所以推导过程更繁琐一点:


注意这里是用斜率来确定临界点,隐函数求导可以得到k=-2x^2Ry/2y^2Rx。每次的分子分母也可以用增量的方式来计算。

最终的代码:


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值