畫直線的演算法之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();
}
結果如下:
相關文章
- 圖形學 畫直線 DDA掃描法與中點畫線法
- 【十天自制軟渲染器】DAY 02:畫一條直線(DDA 演算法 & Bresenham’s 演算法)演算法
- 實現SLIC演算法生成畫素畫演算法
- 演算法之陣列——共直線的最多點數演算法陣列
- 感知機演算法(PLA)程式碼實現演算法
- 圖解Dijkstra演算法+程式碼實現圖解演算法
- 十大經典排序演算法動畫解析和 Java 程式碼實現排序演算法動畫Java
- 手寫演算法-python程式碼實現Kmeans演算法Python
- C++演算法之線性結構處理的程式碼C++演算法
- 量子圖形加密演算法的MATLAB程式碼實現加密演算法Matlab
- 線性表演算法實現演算法
- 負載均衡的幾種演算法Java實現程式碼負載演算法Java
- VUE diff 演算法:為了直觀展示,畫了一張圖來直觀展示Vue演算法
- 排序演算法之快速排序的實現排序演算法
- verilog的RR輪詢排程演算法的程式碼實現演算法
- AQS:JAVA經典之鎖實現演算法(一)AQSJava演算法
- php演算法實現(一)PHP演算法
- 流程圖——正交連線的演算法的一種簡單實現流程圖演算法
- 常見排序演算法原理及JS程式碼實現排序演算法JS
- Python-遺傳演算法君主交叉程式碼實現Python演算法
- 圖解KMP字串匹配演算法+程式碼實現圖解KMP字串匹配演算法
- 40行程式碼實現React核心Diff演算法行程React演算法
- 一遍記住Java常用的八種排序演算法與程式碼實現Java排序演算法
- 畫江湖之演算法篇【排序演算法】快速排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 快速排序演算法排序
- 【演算法與資料結構專場】BitMap演算法基本操作程式碼實現演算法資料結構
- 幾百行程式碼實現一個指令碼直譯器行程指令碼
- 常用演算法之回溯法演算法
- 線性表及其演算法(java實現)演算法Java
- 資料結構和演算法(一)線性表實現資料結構演算法
- JavaScript:十大排序的演算法思路和程式碼實現JavaScript排序演算法
- 小頂堆與topK的具體程式碼實現《演算法很美》TopK演算法
- 演算法專題 | 10行程式碼實現的最短路演算法——Bellman-ford與SPFA演算法行程
- 幾行程式碼實現負載均衡輪詢演算法行程負載演算法
- K-近鄰演算法介紹與程式碼實現演算法
- 全面瞭解歸併排序演算法及程式碼實現排序演算法
- 畫江湖之演算法篇【排序演算法】氣泡排序演算法排序
- 畫江湖之演算法篇【排序演算法】選擇排序演算法排序