Bresenham畫線K 1時的遞迴公式

2021-09-09 06:23:47 字數 1678 閱讀 3409

此時y增加1,x增加小於1,所以以y為主。

假設直線上相鄰兩點s1,s2 ,s1.x < s2.x, s1在螢幕上逼近p1,s2應該逼近哪個點呢?

假設p2.x = p1.x + 1

因為s2.x = s1.x + ∆x

因為p1.x < s1.x < p1.x + 0.5

所以p1.x + ∆x < s1.x + ∆x所以p1.x + ∆x < s2.x因為 0<∆x<1,所以s2最小逼近p1,最大逼近p2.

假設直線上相鄰兩點s1,s2 ,s1.x < s2.x, s1在螢幕上逼近p1,s2應該逼近哪個點呢?

假設p2.x = p1.x + 1

因為s2.x = s1.x + ∆x

因為p1.x -0.5 < s1.x < p1.x

所以p1.x + 0.5 + ∆x < s1.x + ∆x < p1.x +∆x

所以p1.x + 0.5 + ∆x < s2.x因為 0<∆x<1,所以s2最小逼近p1,最大逼近p2.

假設直線上相鄰兩點s1,s2 ,s1.x < s2.x, s1在螢幕上逼近p1,s2應該逼近哪個點呢?

假設p2.x = p1.x + 1

因為s2.x = s1.x + ∆x

因為s1.x = p1.x,所以

s2.x = p1.x + ∆x

因為 0<∆x<1,所以s2最小逼近p1,最大逼近p2.

通過前面的論證,我們可以得知:

給定一條直線y=kx+b,k>1時,假設直線上前面逼近螢幕的點為p1,那麼下乙個逼近點p2,

滿足:p2.x = p1.x 或者 p2.x = p1.x + 1

p2.y = p1.y + 1

設dl = 1/k * (p1.y+1) -b/k - p1.x

dr = p1.x + 1 - (1/k * (p1.y+1) -b/k)

dl - dr = 1/k * (p1.y+1) -b/k - p1.x - p1.x - 1 + (1/k * (p1.y+1) -b/k) = 2/k*(p1.y+1) - 2b/k - 2p1.x - 1

∆y(dl-dr) = 2∆x*(p1.y+1) - 2b∆x - (2p1.x-1)*∆y

因為b = p1.y - k*p1.x,所以

2b∆x = 2∆xp1.y - 2p1.x∆y

所以:∆y(dl-dr) = 2∆x + ∆y,因此初始值d=2∆x + ∆y

下面推導d的遞推關係:

設dk = 2∆x*(pk.y+1) - 2b∆x - (2pk.x-1)*∆y

dk+1 - dk = 2∆x*(pk+1.y+1) - 2b∆x - (2pk+1.x-1)*∆y -  2∆x*(pk.y+1) + 2b∆x + (2pk.x-1)*∆y

=2∆x -∆y*(2pk+1.x - 2pk.x)

= 2∆x - 2∆y(pk+1.x - pk.x)

所以:dk+1 = dk + 2∆x - 2∆y(pk+1.x - pk.x)

所以當dk > 0 ,dk+1 = dk + 2∆x - 2∆y

當dk <= 0,dk+1 = dk + 2∆x

給定一條直線y=kx+b,k>1,直線上兩點s,e,公式如下:

設d初 = 2∆x + ∆y

dk+1 = dk + 2∆x - 2∆y (dk > 0)

dk+1 = dk + 2∆x (dk <= 0)

K 1 棋盤問題

在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個空格隔開,表示了將...

筆記 Bresenham畫線演算法的推導

基本上bresenham畫線演算法的思路如下 假設該線段位於第一象限內且斜率大於0小於1,設起點為 x1,y1 終點為 x2,y2 根據對稱性,可推導至全象限內的線段.1.畫起點 x1,y1 2.準備畫下個點。x座標增1,判斷如果達到終點,則完成。否則,由圖中可知,下個要畫的點要麼為當前點的右鄰接點...

關於對Bresenham畫線演算法的理解

最近一段時間想理解一下bresenham演算法,總結出以下心得.假設線性方程 ax by c 0 x 1 x x 2,y 1 y y 2 dx x 2 x 1dy y 2 y 1當x x 1 1 ax1 by 1 c 0 1 1 a x1 1 by c 0 1 2 從1 1和1 2可以得出,y c ...