国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Bresenham高效畫線算法

2019-11-17 05:44:58
字體:
來源:轉載
供稿:網友

  畫線的算法不少,但要作到高速、簡單并不輕易。斜率相乘法是最簡單的方法之一,但計算每個點均要花費不少時間用于乘、除法運算;下面介紹的是Bresenham's高效畫線算法,對每個點的坐標計算只要加、減法就能完成。
簡化算法用偽Pascal語言描述如下:
PRocedure DrawLine(x1, y1, x2, y2: Integer);
var
x, y, DeltaX, DeltaY, HalfX, ErrorTerm, i: Integer;
begin
DeltaX := x2 - x1;
DeltaY := y2 - y1;
HalfX := (x2 - x1) shr 1;
ErrorTerm := 0;
x := x1;
y := y1;
for i:=0 to DeltaX do
begin
Plot(X, Y);
Inc(x);
ErrorTerm := ErrorTerm + DeltaY;
if ErrorTerm>HalfX then
begin
ErrorTerm := ErrorTerm - DeltaX;
Inc(y);
end;
end;
end;
為方便閱讀,上述程序作了簡化。實際程序應略作修正,以分別處理DeltaX與DeltaY比較大小, 必要時交換起始、結束點等。
修正后的的偽Pascal算法如下:
procedure DrawLine(x1, y1, x2, y2: Integer);
var
x, y, DeltaX, DeltaY, HalfCount, ErrorTerm, i, Flag: Integer;
begin
DeltaX := x2 - x1;
DeltaY := y2 - y1; if Abs(DeltaY)<Abs(DeltaX) then
begin
if DeltaX<0 then
begin
i := x1; x1 := x2; x2 := i;
i := y1; y1 := y2; y2 := i;
DeltaX := x2 - x1;
DeltaY := y2 - y1;
end;
if DeltaY<0 then Flag := -1
else Flag := 1;
DeltaY := Abs(DeltaY);
HalfCount := DeltaX shr 1;
ErrorTerm := 0;
x := x1;
y := y1;
for i:=0 to DeltaX do
begin
Plot(X, Y);
Inc(x);
ErrorTerm := ErrorTerm + DeltaY;
if ErrorTerm>HalfCount then
begin
ErrorTerm := ErrorTerm - DeltaX;
y := y + Flag;
end;
end;
end
else
begin
if DeltaY<0 then
begin
i := x1; x1 := x2; x2 := i;
i := y1; y1 := y2; y2 := i;
DeltaX := x2 - x1;
DeltaY := y2 - y1;
end;
if DeltaX<0 then Flag := -1
else Flag := 1;
DeltaX := Abs(DeltaX);
HalfCount := DeltaY shr 1;
ErrorTerm := 0;
x := x1;
y := y1;
for i:=0 to DeltaY do
begin
Plot(X, Y);
Inc(y);
ErrorTerm := ErrorTerm + DeltaX;
if ErrorTerm>HalfCount then
begin
ErrorTerm := ErrorTerm - DeltaY;
x := x + Flag;
end;
end;
end;
end;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 车险| 江油市| 兖州市| 和顺县| 锦屏县| 叶城县| 同德县| 富蕴县| 博罗县| 江安县| 澄迈县| 长顺县| 治多县| 嘉祥县| 阜康市| 蓬安县| 安新县| 买车| 民县| 塔城市| 高安市| 垦利县| 乌兰浩特市| 巴彦县| 比如县| 宁陵县| 岗巴县| 民和| 上思县| 曲靖市| 类乌齐县| 含山县| 四平市| 深圳市| 会泽县| 岳池县| 左贡县| 任丘市| 邛崃市| 阜城县| 翼城县|