这些东西都建议通过电脑端查看,手机端鬼知道这个知乎的数字会变成什么鬼样子
好久没有写点东西了。做笔记就是疯狂的抄,所以我寻思写blog会好一点,不过知乎估计会慢慢不使用,但是也不知道去哪里再找大家了。。。
为什么要有这些画直线的算法?
答:因为像素都是一个个整点的像素格,但是数学坐标上不是所有的值都为整数,所以为了保证靠近,就产生了这些个算法
那么我们首先回顾一下怎么判断一个点是否在直线上
直线方程为:(此时我们用k>1举例
y=kx+b
那么如果点在直线上方,此时在y相同的时候,x就会比在线上的点小,在x相同时,就会出现y比线上的大,反正我初高中知识忘光,就这么想的,所以当我们设置一个函数
F(x,y)=y-kx+b
若y大则这个函数就会大于0,若x小这个函数就会大于0,
反之同理。
那么讲这些小学生都理解的了的东西有什么用呢
我们知道,在直线交一条x=n的垂线,而此时他们交点的y值并不为整数,那么,我们的电脑是显示不出来的!所以为了使他显示出来,我们要让他向上靠,或者向下靠。
那么我们用什么做比较呢?那自然是 中点!
所以在x左移一个像素格的时候,我们就来比较他的y值和这个像素格里的中点,如果这个中点在它的上面,那么就取这个像素格下面的点。
等我插张excel的截图
那么我们就可以围绕这个移动一个像素再判断来构造一个新的函数或者叫做判别式
我们假设一下,这个起始的点为
而在他右移一个像素后,我们可以得到一个新的 中点 可以看作,这个图里的中点,拿这个中点,去和线比较,看他是在线的哪个方位。
那么这里是第一个移动,我们可以针对是在上方还是下方进行判断。
如果在上方,则这个
并且我们移动到
如果在下方,则这个
并且我们移动到
而我们到这里只移动了第一个像素格,那么我们要继续往后移动,
即获取新的中点来判断判别式:
即为
而此时的
当
所以
当
所以
那么我们再看一下
而x2和y2的值又必然绕不开d2,所以d3的值绕不开d2
而这个当我们在画图的时候我们会更加轻易的发现,这个绕不开的原因是因为之前的移动,而造成的不同,所以我们是判断移动方向,然后移动再判断下一个点。而此处笔者单纯的使用数学运算,是因为水平有限,在单纯的数学运算之中陷入了不全观的判断。希望有人能够进行帮助修正
所以我们知道,想要判断一个点的这个d(i)值,是需要看d(i-1)的大小来进行判断的。
所以我们继续向后找到通用的逻辑
当我们判断
当
当
所以算法逻辑为
先计算初值
然后判断下一个点的移动方向
如果当
如果当
再进行后续的判断
当
当
伪代码什么的就留作作业吧,我要去写这个东西的作业了(抠鼻
等后面我贴openGL的代码
就这样啦!