日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机图形学 dda,计算机图形DDA算法

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机图形学 dda,计算机图形DDA算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文概述

DDA代表數字差分分析儀。它是行掃描轉換的增量方法。在這種方法中, 計算是在每個步驟中執行的, 但要使用先前步驟的結果。

假設在步驟i, 像素為(xi, yi)

步驟i的方程式yi = mxi + b ………………….方程1

Next value will be yi+1=mxi+1+b……………..equation 2 m = yi+1-yi=?y…………………..equation 3 yi+1-xi=?x………………….equation 4 yi+1=yi+?y ?y=m?x yi+1=yi+m?x ?x=?y/m xi+1=xi+?x xi+1=xi+?y/m

情況1:當| M | <1時(假設x12)x = x1, y = y1設置?x = 1 yi + 1 = y1 + m, x = x + 1直到x = x2

情況2:當| M | <1時(假設y12)x = x1, y = y1設置?y = 1 xi + 1 =, y = y + 1直到y→y2

優點:

比直接使用線性方程式的方法要快。

此方法不使用乘法定理。

它使我們能夠檢測x和y值的變化, 因此不可能兩次繪制相同的點。

重新定位點時, 此方法會給出溢出指示。

這是一種簡單的方法, 因為每個步驟僅涉及兩個附加步驟。

壞處:

它涉及浮點加法四舍五入。舍入誤差的累積導致誤差的累積。

四舍五入操作和浮點操作會消耗大量時間。

更適合使用該軟件生成線。但是它不太適合硬件實現。

DDA算法

步驟1:開始算法

步驟2:將x1, y1, x2, y2, dx, dy, x, y聲明為整數變量。

步驟3:輸入x1, y1, x2, y2的值。

步驟4:計算dx = x2-x1

步驟5:計算dy = y2-y1

步驟6:如果ABS(dx)> ABS(dy), 則step = abs(dx)否則

第7步:xinc = dx / step yinc = dy / step分配x = x1分配y = y1

步驟8:設定像素(x, y)

第9步:x = x + xinc y = y + yinc設置像素(圓形(x), 圓形(y))

步驟10:重復步驟9, 直到x = x2

步驟11:結束算法

示例:如果使用DDA從(2, 3)到(6, 15)畫了一條線。生成該線需要多少點?

解決方案:P1(2, 3)P11(6, 15)

x1 = 2 y1 = 3 x2 = 6 y2 = 15 dx = 6-2 = 4 dy = 15-3 = 12 m =

為了計算x的下一個值, 需要x = x +

實現DDA線描算法的程序:

#include

#include

#include

void main()

{

intgd = DETECT , gm, i;

float x, y, dx, dy, steps;

int x0, x1, y0, y1;

initgraph(&gd, &gm, "C:\\TC\\BGI");

setbkcolor(WHITE);

x0 = 100 , y0 = 200, x1 = 500, y1 = 300;

dx = (float)(x1 - x0);

dy = (float)(y1 - y0);

if(dx>=dy)

{

steps = dx;

}

else

{

steps = dy;

}

dx = dx/steps;

dy = dy/steps;

x = x0;

y = y0;

i = 1;

while(i<= steps)

{

putpixel(x, y, RED);

x += dx;

y += dy;

i=i+1;

}

getch();

closegraph();

}

輸出:

對稱DDA

數字差分分析儀(DDA)根據其微分方程生成線。直線方程為

DDA的工作原理是, 我們以與x和y的一階導數成比例的小步長同時增加x和y。在直線的情況下, 一階導數是常數, 并且與?x和?y成比例。因此, 我們可以通過將x和y分別增加? ?x和? ?y來生成一條線, 其中?的數量很小。有兩種生成點的方法

1.在每個增量步長后四舍五入到最接近的整數, 四舍五入后, 我們在所得的x和y處顯示點。

2.舍入使用算術溢出的一種替代方法:x和y保留在具有整數和小數兩部分的寄存器中。都小于1的遞增值被重復加到小數部分, 每當結果溢出時, 相應的整數部分就會遞增。 x和y寄存器的整數部分用于繪制線。在對稱DDA的情況下, 我們選擇ε= 2-n, 其中2n-1≤max(| ?x |, | ?y |)<2π

用對稱DDA繪制的線如圖所示:

示例:如果使用對稱DDA從(0, 0)到(10, 5)繪制了一條線

1.執行多少次迭代?

2.將產生多少個不同的點?

解決方案:給定:P1(0, 0)P2(10, 5)x1 = 0 y1 = 0 x2 = 10 y2 = 5 dx = 10-0 = 10 dy = 5-0 = 0

P1(0, 0)將被視為起點P3(1, 0.5)點未繪制P4(2, 1)點已繪制P5(3, 1.5)點未繪制P6(4, 2)點已繪制P7(5, 2.5) )點未標繪P8(6, 3)點已標繪P9(7, 3.5)點未標繪P10(8, 4)點已標繪P11(9, 4.5)點未標繪P12(10, 5)點標繪

下圖顯示了使用這些點繪制的線。

總結

以上是生活随笔為你收集整理的计算机图形学 dda,计算机图形DDA算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。