位置: 编程技术 - 正文
推荐整理分享bresenham直线,画圆算法(附OpenGL代码)(直线画画),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:画出直线bc,bresenham画线法,bresenham算法画直线代码open gl,直线b怎么画,bresenham直线,画圆算法,直线cb怎么画,bresenham直线,画圆算法,bresenham直线算法,内容如对您有帮助,希望把文章链接给更多的朋友!
Bresenham算法画直线:
我们在电脑上看到的图像时由一个个像素点拼接而成,当你放大图像就可以观察到这点。以下是一条直线:
它是由这些像素点一个一个拼接而成,那么问题来了,怎样选取这些点,使我们看到的更像是一条直线呢?
我们的主要思路就是,谁靠近直线我们就选谁,近水楼台先得月。如下图,因为,所以我们选择直线下面的黄点作为画直线的点。
依照这个原则,直到终点。这样一条线就出来了。所以我们得比较这两个的大小。我们只考虑0-度的情况:
假设直线为
这里的,而用计算机计算除法是比较耗时的,我们需要改进公式,使其运行更快。这里我们在这个等式前乘以,这样也不会改变等式符号,而我们最终的目的是判断正负,所以是对结果是无影响的。得到如下公式。
其中:
此时
对于pi还可以化简,就是将y= mxb代入
化简得
如果你认为这里就足够简洁了,那么接下来还有更好的。
对pi的迭代:它的好处就是减少计算吧(个人认为,如有高见可探讨),只要判断前一个点的p的得正负,就可推出下一个点的坐标。然后对进行赋,再进行下一轮判断以此循环。
bresenham算法画圆:
对于画圆算法,主要思路就是取可选点之间的中点,如下图的M:
然后判断这个点是在圆内还是在圆外,据此判断所选取的点是E还是SE。然后通过迭代画出1/8个圆,根据八分法,就可以画出整个圆了。
类直线,推导出的结果就是:
if(di<0) then
else
迭代至完成1/8圆。
八分法画圆:
关于推导,类于直线,我觉得这两篇有关圆的算法推导写的很详细了,我就不再累赘。
参考文档:
八分法画圆:
正负法画圆:
完整代码:
openGL读取obj文件 《代码转自网上》1.最简单的obj文件的读取,没有采用结构体来储存信息,不过比较有参考意义用int**a;来定义二维数组之后需要在使用之前初始化如:a=
OpenGL--shader入门 理论基础着色器:opengl渲染管线分为固定管线和可编程管线,3.1版本后固定管线已经废除了。可编程管线主要是包括顶点着色器和片段着色器,而我们
Java版WorldWind中加入会运动模型 在worldwindsdk中的gov.nasa.worldwind.geom,这个包是存放一些几何模型的。我使用的是球类Sphere,它是使用OpenGL画出来的。参考这个类进行了一定的修改成为Pla
标签: 直线画画
本文链接地址:https://www.jiuchutong.com/biancheng/369615.html 转载请保留说明!友情链接: 武汉网站建设