请输入您要查询的百科知识:

 

词条 Xiaolin Wu's line algorithm
释义

  1. Antialiasing technique

  2. Algorithm

  3. References

  4. External links

{{multiple|{{third-party|date=April 2018}}{{no footnotes|date=January 2013}}
}}

Xiaolin Wu's line algorithm is an algorithm for line antialiasing.

Antialiasing technique

Xiaolin Wu's line algorithm was presented in the article "An Efficient Antialiasing Technique" in the July 1991 issue of Computer Graphics, as well as in the article "Fast Antialiasing" in the June 1992 issue of Dr. Dobb's Journal.

Bresenham's algorithm draws lines extremely quickly, but it does not perform anti-aliasing. In addition, it cannot handle any cases where the line endpoints do not lie exactly on integer points of the pixel grid. A naive approach to anti-aliasing the line would take an extremely long time. Wu's algorithm is comparatively fast, but is still slower than Bresenham's algorithm. The algorithm consists of drawing pairs of pixels straddling the line, each coloured according to its distance from the line. Pixels at the line ends are handled separately. Lines less than one pixel long are handled as a special case.

An extension to the algorithm for circle drawing was presented by Xiaolin Wu in the book Graphics Gems II. Just as the line drawing algorithm is a replacement for Bresenham's line drawing algorithm, the circle drawing algorithm is a replacement for Bresenham's circle drawing algorithm.

Algorithm

function plot(x, y, c) is

// integer part of x

function ipart(x) is

function round(x) is

// fractional part of x

function fpart(x) is

function rfpart(x) is

function drawLine(x0,y0,x1,y1) is

    boolean steep := abs(y1 - y0) > abs(x1 - x0)        if steep then        swap(x0, y0)        swap(x1, y1)    end if    if x0 > x1 then        swap(x0, x1)        swap(y0, y1)    end if        dx := x1 - x0    dy := y1 - y0    gradient := dy / dx    if dx == 0.0 then        gradient := 1.0    end if
    // handle first endpoint    xend := round(x0)    yend := y0 + gradient * (xend - x0)    xgap := rfpart(x0 + 0.5)    xpxl1 := xend // this will be used in the main loop    ypxl1 := ipart(yend)    if steep then        plot(ypxl1,   xpxl1, rfpart(yend) * xgap)        plot(ypxl1+1, xpxl1,  fpart(yend) * xgap)    else        plot(xpxl1, ypxl1  , rfpart(yend) * xgap)        plot(xpxl1, ypxl1+1,  fpart(yend) * xgap)    end if    intery := yend + gradient // first y-intersection for the main loop        // handle second endpoint    xend := round(x1)    yend := y1 + gradient * (xend - x1)    xgap := fpart(x1 + 0.5)    xpxl2 := xend //this will be used in the main loop    ypxl2 := ipart(yend)    if steep then        plot(ypxl2  , xpxl2, rfpart(yend) * xgap)        plot(ypxl2+1, xpxl2,  fpart(yend) * xgap)    else        plot(xpxl2, ypxl2,  rfpart(yend) * xgap)        plot(xpxl2, ypxl2+1, fpart(yend) * xgap)    end if        // main loop    if steep then        for x from xpxl1 + 1 to xpxl2 - 1 do           begin                plot(ipart(intery)  , x, rfpart(intery))                plot(ipart(intery)+1, x,  fpart(intery))                intery := intery + gradient           end    else        for x from xpxl1 + 1 to xpxl2 - 1 do           begin                plot(x, ipart(intery),  rfpart(intery))                plot(x, ipart(intery)+1, fpart(intery))                intery := intery + gradient           end    end if

end function

References

  • {{cite journal

| author=Abrash, Michael
| url = http://archive.gamedev.net/archive/reference/articles/article382.html
| title = Fast Antialiasing (Column)
| journal=Dr. Dobb's Journal
| date=June 1992 | volume=17 | issue=6 | pages=139(7)
  • {{cite journal

| author=Wu, Xiaolin
| url = http://portal.acm.org/citation.cfm?id=122734
| title = An efficient antialiasing technique
| journal=Computer Graphics (publication)
| date=July 1991 | volume=25 | issue=4 | pages=143–152
| doi = 10.1145/127719.122734
| isbn=0-89791-436-8
  • {{cite book

| author = Wu, Xiaolin
| year = 1991
| chapter = Fast Anti-Aliased Circle Generation
| editor = James Arvo
| title = Graphics Gems II
| pages = 446–450
| location = San Francisco
| publisher = Morgan Kaufmann
| isbn = 0-12-064480-0

External links

  • Xiaolin Wu's homepage
{{DEFAULTSORT:Xiaolin Wu's Line Algorithm}}

2 : Anti-aliasing algorithms|Articles with example pseudocode

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/17 7:00:13