畫直線的演算法之DDA演算法+程式碼實現(法一)
DDA(數值微分法)基於直線微分方程生成直線。
點xi,yi滿足直線方程yi=kxi+b,
若xi增加一個單位,則下一步點的位置(xi + 1,yi+1)滿足yi+1=k(xi + 1)+ b。
即yi+1=yi+k。
yi同理,不再贅述。
演算法基本思想:
選擇平緩的一端(即x2-x1和y2-y1的較大者)作為自變數,每次增加一個單位,計算因變數的值。
具體程式碼如下:
void DDA_Line(int x1,int y1,int x2,int y2) {
float increx, increy, x, y, length;//變數定義
int i;
if (abs(x2 - x1) > abs(y2 - y1))//判斷以哪個作增量
length = abs(x2 - x1);
else
length = abs(y2 - y1);
increx = (x2 - x1) / length;//設定增量,一個為1,一個為k
increy = (y2 - y1) / length;
x = x1, y = y1;//起點
for (i = 1; i <= length; i++) {
putpixel(int(x + 0.5), int(y + 0.5), RED);//因為沒有半個畫素點,所以需要強制轉換為整型
x += increx;//x+增量
y += increy;//y+增量
}
}
下面我們進行呼叫:
int main()
{
initgraph(640, 480);
DDA_Line(0, 0, 640, 480);
getchar();
closegraph();
}
結果如下:
相關文章
- 【十天自制軟渲染器】DAY 02:畫一條直線(DDA 演算法 & Bresenham’s 演算法)演算法
- 計算機圖形學----DDA、Bresenham直線演算法計算機演算法
- OpenGL應用——實現DDA演算法演算法
- 實現SLIC演算法生成畫素畫演算法
- 漫畫演算法:最小棧的實現演算法
- 演算法之陣列——共直線的最多點數演算法陣列
- VUE diff 演算法:為了直觀展示,畫了一張圖來直觀展示Vue演算法
- 感知機演算法(PLA)程式碼實現演算法
- 一個實用的寶塔線的畫法
- Bresenham畫線演算法C++演算法C++
- Bresenham高效畫線演算法 (轉)演算法
- 線性表演算法實現演算法
- C++演算法之線性結構處理的程式碼C++演算法
- 改進的二值影像畫素標記演算法及程式實現演算法
- 圖解Dijkstra演算法+程式碼實現圖解演算法
- js實現的圖片相似度演算法程式碼JS演算法
- PHP 四種基本排序演算法的程式碼實現PHP排序演算法
- K-Means演算法的程式碼實現(Java)演算法Java
- c# winform之繪畫及畫直曲線相關C#ORM
- 實驗一演算法描述及其程式實現演算法
- DES演算法C++程式碼實現-密碼學演算法C++密碼學
- 畫江湖之演算法篇【排序演算法】快速排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 快速排序演算法排序
- 排序演算法之快速排序的實現排序演算法
- AQS:JAVA經典之鎖實現演算法(一)AQSJava演算法
- C#實現無法破解的軟體註冊碼演算法C#演算法
- php演算法實現(一)PHP演算法
- 負載均衡的幾種演算法Java實現程式碼負載演算法Java
- 量子圖形加密演算法的MATLAB程式碼實現加密演算法Matlab
- 流程圖——正交連線的演算法的一種簡單實現流程圖演算法
- 【策略】一致性Hash演算法(Hash環)的java程式碼實現演算法Java
- 十三種基於直方圖的影象全域性二值化演算法原理、實現、程式碼及效果。直方圖演算法
- 畫江湖之演算法篇【排序演算法】氣泡排序演算法排序
- 畫江湖之演算法篇【排序演算法】選擇排序演算法排序
- 畫江湖之演算法篇【排序演算法】插入排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 氣泡排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 選擇排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 插入排序演算法排序