前兩天在校內(nèi)上發(fā)了一篇bresenham畫線算法超簡單的日志,用了四句話概括了這個算法的核心思想,現(xiàn)在在這里重新敘述一遍,并加上這幾天我新理解到的幾點。
我用x(k+1)表示k+1是下標。
x(k+1) = x(k)+1時,按比例,y方向應增加△y/△x這么多。
其中,△y=|yEnd-y0|,△x=|xEnd-x0|
如果△y/△x超過了1/2,也就是位于y(k)和y(k+1)中較上的位置y(k+1),則選擇y(k+1),否則選擇y(k).
如果△y/△x超過了1/2可以轉(zhuǎn)化為p0=2△y-△x。判斷p0符號即可。
今天重新看了一下,發(fā)現(xiàn)了幾個我忽略了的細節(jié)問題。我們首先要把x0,y0點畫上,并且這個點的位置是絕對準確的。p0為什么有初值呢,是2△y-△x,是因為p0第一次用的時候就是在畫下一個點了而不是初始點。pk確定以后,pk+1-pk就有兩種情況了,繪制上面一點和下面一點的增量是不同的,最好理解的方法就是還原成用△y/△x表示的式子化簡得到pk+1再計算差值,即增量。
同樣的道理,并行畫線算法也可以寫成那樣的式子再進行轉(zhuǎn)化和推算,并不需要好幾頁紙的推導的。中點畫圓算法也是的。在中點畫圓算法的代碼中,用到了class,加入了一點面向?qū)ο蟮乃枷?,這個是我要著重學習和體會的。
關(guān)于透視投影,可算被折騰壞了,剛開始理解不了,后來理解錯了,還是在shinji的熱心幫助下才算真正明白了?,F(xiàn)實中是不存在一點透視的,所謂的一點透視只是看起來與人眼觀察比較相近。對于
一個三維笛卡爾坐標系中的
點,或者與z軸垂直的線或平面,可以理解為觀察點與滅點關(guān)于過此點的垂直于z軸的平面對稱。對于一個圖形不同深度位置的部分,滅點位置是不同的。也就是說,觀察點只有一個,滅點有無數(shù)多個。隨著物體離觀察點距離的增大,滅點以兩倍速度向遠處延伸。所以我們現(xiàn)實中觀察的鐵軌是延伸到很遠處交于一點而不是止于某處。
關(guān)于多個滅點這個問題,這是我自己的理解,也不知道是否準確,如果哪里錯了還請大家批評指正。謝謝