@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來推導出來的,其關鍵之處在於如何設定單位步進,即乙個方向...