python實現DDA演算法

2021-10-25 09:11:18 字數 1208 閱讀 9592

@python實現dda演算法

dda 演算法,即數值微分法(digital differential analyzer),是一種基於直線的微分方程

線段的光柵化過程可以迴圈的讓 x方向變化乙個畫素或者讓 y方向變化乙個畫素,相應的另乙個方向變化0 個畫素或者1 個畫素得到。這樣計算直線段上的每個畫素的座標只需執行一次浮點數加法即可。此外,為了使得生成的直線段盡量連續均勻,相鄰兩個畫素之間 ,x或y 的座標最多相差 1 個畫素。

生成直線的方法。

先上原始碼:

import matplotlib.pyplot as plt

def ddaline(x1, y1, x2, y2, color):

dx = x2 - x1

dy = y2 - y1

steps = 0

# 斜率判斷

if abs(dx) > abs(dy):

steps = abs(dx)

else:

steps = abs(dy)

# 必有乙個等於1,乙個小於1

delta_x = float(dx / steps)

delta_y = float(dy / steps)

# 四捨五入,保證x和y的增量小於等於1,讓生成的直線盡量均勻

x = x1 + 0.5

y = y1 + 0.5

for i in range(0, int(steps + 1)):

# 繪製畫素點

plt.plot(int(x), int(y), color)

x += delta_x

y += delta_y

plt.show()

def main():

x = 0

y = 0

xend = 5

yend = 2

color = "r."

ddaline(x, y, xend, yend, color)

if __name__ == '__main__':

main()

效果展示:

演算法特點:

dda 演算法中, 必須用浮點數表示,而且每乙個畫素的繪製都必須對 x 和 y 座標進行捨入取整,這使得該演算法不利於硬體實現。

cpp實現直線的DDA演算法

給定起始點,輸出直線在兩點之內所經過的畫素點的位置。比如輸入 輸出起點x值 0 輸出起點y值 0 輸出終點x值 5 輸出終點y值 2 輸出結果 0,0 1,0 2,1 3,1 4,2 5,2 如下 include using namespace std 直線的dda演算法 typedef struc...

DDA畫線演算法

假設給定兩個點 a x1,y1 b x2,y2 用dda實現畫直線ab的演算法如下 dx x2 x1 dy y2 y1 斜率k x,y 為需要畫的點座標,初始時 x,y x1,y1 1 dx 0 dy 0 即ab為斜線 1.1 abs dx abs dy 此時以x方向為步長 for i 0 ik d...

DDA演算法和Bresenham演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!dda演算法和bresenham演算法是計算機圖形學中繪製直線的兩種常用演算法。本文具體介紹一下dda演算法和bresenham演算法實現的具體思路。dda演算法主要是根據直線公式y kx b來推導出來的,其關鍵之處在於如何設定單位步進,即乙個方向...