中點(diǎn)畫(huà)線法采用直線的一般式來(lái)描繪直線诵次。
這條直線將平面區(qū)域的點(diǎn)分為三個(gè)部分统诺,直線上方的點(diǎn)皮璧,直線下方的點(diǎn)以及直線上的點(diǎn)
對(duì)于直線上方的點(diǎn),F(xiàn)(x,y) >0;
直線下方的點(diǎn), F(x,y) <0;
直線上的點(diǎn) 千康,F(xiàn)(x,y) = 0.
中點(diǎn)畫(huà)線法思想:每次在最大位移方向上走一步享幽,而另一個(gè)方向是走步還是不走步需要取決中點(diǎn)誤差項(xiàng)的判斷。
假定: 0<= | k | <= 1,每次在x軸方向上加1拾弃,y方向上加1還是不變需要判斷值桩。
理想直線,當(dāng)前點(diǎn)繪制為P(xi , yi)豪椿,則下一點(diǎn)要么是Pu奔坟,要么是Pd,假設(shè)直線與 x = xi ?+1 這條直線相交于Q點(diǎn)搭盾,
則 ? 當(dāng)Q點(diǎn)在M點(diǎn)上方時(shí)咳秉,Q點(diǎn)離Pu更近,下一點(diǎn)取Pu
當(dāng)Q點(diǎn)在M點(diǎn)下方時(shí)鸯隅,Q點(diǎn)離Pd點(diǎn)更近澜建,下一點(diǎn)取Pd
當(dāng)Q = M時(shí),則取Pu 或者 Pd都可以蝌以。炕舵。
如何判斷M點(diǎn)在Q的上方還是下方?饼灿?
因此將M點(diǎn)代入直線方程幕侠,
所求結(jié)果若是小于0,M在Q即直線的下方碍彭,取Pu晤硕,
若是大于0,M在Q上方庇忌,取Pd 舞箍,
等于0,取Pu或者Pd都可以皆疹。
當(dāng)d<0,取Pu時(shí)疏橄,下一個(gè)中點(diǎn)M1的情況:
當(dāng) d >= 0時(shí),取Pd略就,下一個(gè)中點(diǎn)M1的情況:
又因?yàn)閐只關(guān)心符號(hào)捎迫,所以可以用2d來(lái)代替d來(lái)拜托浮點(diǎn)運(yùn)算。寫(xiě)出僅包含整數(shù)運(yùn)算的算法表牢。