1. 程式人生 > >【計算機圖形】畫直線與畫圓

【計算機圖形】畫直線與畫圓

由於計算機的解析度有限,計算機圖形只是看起來平滑,放大後就能看到階梯狀的鋸齒。(可以開啟windows畫圖檢驗)。所以畫線畫圓的本質問題就是下一個點取(x + 1, y )或(x, y + 1)還是(x + 1, y + 1)?

一、畫直線:
1. DDA(Digital Differential Analyzer)公式法:這裡寫圖片描述

這裡寫圖片描述

DDA是一種基於直線的微分方程來生成直線的方法。
如果△X>=△Y,則步進X方向;反之則步進Y方向。
2. 中點畫線法:
這裡寫圖片描述
設線段P1P2的中點M(x + 1,y + 0.5),Q是線段P1P2與直線的實際交點。將M代入直線公式則其結果d為MQ距離。
d=F(M)=F(x + 1, y + 0.5)=a(x + 1) + b(y + 0.5) + c

比較M與Q的位置d:
若d > 0,M在Q上(或右)方,則P1離直線更近,取P1;
若d < 0,M在Q下(或左)方,則P2離直線更近,取P2;
若d = 0,M與Q重合,則任取。

3.Bresenham畫線法:
這裡寫圖片描述

將下個座標點的x座標 (x + 1) 帶入直線方程,比較得到的y值與(y +( y + 1)) / 2 的大小。如果大於,則取(x + 1, y + 1);反之則取(x + 1, y)。

實際還是比較中點,即d = F(x + 1) - F(y + 0.5)
如果 d > 0, 取(x + 1, y + 1);
反之 d < 0, 取(x + 1, y);
相等則任取。

二、畫圓:由於圓具有八對稱性,所以只要畫八分之一,剩下的可由對稱性得到。

1.中點畫圓法:
這裡寫圖片描述

構造判別函式:F(x, y) = x^2 + y^2 – R^2
設線段P1P2的中點M(x + 1, y – 0.5),Q為直線與線段P1P2的交點。將M代入直線公式則其結果d為MQ的距離。
d = F(M) = F(x + 1, y – 0.5):
若d = F(x, y) = 0,表示M在圓上,取任意一點;
若d = F(x, y) > 0,表示M在圓外,取P2;
若d = F(x, y) < 0,表示M在圓內,取P1。

2.Bresenham法(改進的中點畫圓法):
從中點畫圓法可以看出,我們只關心d的正負性,不管大小,而中點畫圓法中還有浮點運算等低效算式。因此在不影響d的正負性的前提下改進即是Bresenham法,所以其本質仍是“中點畫圓法”。