Anti-Aliased Line - Xiaolin Wu's Algorithm - GeeksforGeeks PDF
Anti-Aliased Line - Xiaolin Wu's Algorithm - GeeksforGeeks PDF
Anti-Aliased Line - Xiaolin Wu's Algorithm - GeeksforGeeks PDF
es
Anti-aliased Line | Xiaolin Wu’s algorithm
Anti-Aliased Line Drawing
Custom Search
Below is the image showing line drawn with Bresenham’s line algorithm (left) and Xiaolin Wu’s line
in algorithm (right) which smooths the line. Which one looks better to you ?
⇣
https://www.geeksforgeeks.org/anti-aliased-line-xiaolin-wus-algorithm/ 1/9
12/28/2019 Anti-aliased Line | Xiaolin Wu's algorithm - GeeksforGeeks
To overcome these drawbacks and produce a much smoother looking line we use Xiaolin Wu’s line
algorithm
In the picture the red and green color shows the distance to the two adjacent pixels. To calculate the error,
you can use oating point and take the error value of the fractional part.
https://www.geeksforgeeks.org/anti-aliased-line-xiaolin-wus-algorithm/ 2/9
12/28/2019 Anti-aliased Line | Xiaolin Wu's algorithm - GeeksforGeeks
NOTE:The following implementation uses SDL library to draw pixels on screen . If you are on debian
system like ubuntu just run following command to install SDL library.
To build use
Recommended: Please try your approach on {IDE} rst, before moving on to the solution.
Note:If the projection of the segment on the x-axis is less than the projection on the y-axis, or the
beginning and end of the segment are swapped, then the algorithm will not work. To avoid this, you need
to check the direction of the vector and its slope, and then swap the coordinates of the line , ultimately to
reduce everything to some one or at least two cases.
Following algorithm assumes that only integer co-ordinates will be given as inputs since pixel value
cannot be oating point.
// SDL stuff
SDL_Window* pWindow = 0;
SDL_Renderer* pRenderer = 0;
https://www.geeksforgeeks.org/anti-aliased-line-xiaolin-wus-algorithm/ 4/9
12/28/2019 Anti-aliased Line | Xiaolin Wu's algorithm - GeeksforGeeks
// main loop
if (steep)
{
int x;
for (x = xpxl1 ; x <=xpxl2 ; x++)
{
// pixel coverage is determined by fractional
// part of y co-ordinate
drawPixel(iPartOfNumber(intersectY), x,
rfPartOfNumber(intersectY));
drawPixel(iPartOfNumber(intersectY)-1, x,
fPartOfNumber(intersectY));
intersectY += gradient;
}
}
else
{
int x;
for (x = xpxl1 ; x <=xpxl2 ; x++)
{
// pixel coverage is determined by fractional
// part of y co-ordinate
drawPixel(x, iPartOfNumber(intersectY),
rfPartOfNumber(intersectY));
drawPixel(x, iPartOfNumber(intersectY)-1,
fPartOfNumber(intersectY));
intersectY += gradient;
}
}
// Driver code
int main(int argc, char* args[])
{
SDL_Event event;
// initialize SDL
if (SDL_Init(SDL_INIT_EVERYTHING) >= 0)
{
// if succeeded create our window
pWindow = SDL_CreateWindow("Anti-Aliased Line ", ▲
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
640, 480,
SDL_WINDOW_SHOWN);
https://www.geeksforgeeks.org/anti-aliased-line-xiaolin-wus-algorithm/ 5/9
12/28/2019 Anti-aliased Line | Xiaolin Wu's algorithm - GeeksforGeeks
while (1)
{
if (SDL_PollEvent(&event) && event.type == SDL_QUIT)
break;
⇣
// clean up SDL
SDL_Quit();
return 0;
}
Output:
References:
https://courses.engr.illinois.edu/ece390/archive/archive-f2000/mp/mp4/anti.html
https://unionassets.com/blog/algorithm-brezenhema-and-wu-s-line-299
https://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm
This article is contributed by Lokesh Sharma. If you like GeeksforGeeks and would like to contribute, you
can also write an article using contribute.geeksforgeeks.org or mail your article to ▲
https://www.geeksforgeeks.org/anti-aliased-line-xiaolin-wus-algorithm/ 6/9
12/28/2019 Anti-aliased Line | Xiaolin Wu's algorithm - GeeksforGeeks
contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help
other Geeks.
Please write comments if you nd anything incorrect, or you want to share more information about the
topic discussed above.
Recommended Posts:
Bresenham’s Line Generation Algorithm
Bresenham's Algorithm for 3-D Line Drawing
Mid-Point Line Generation Algorithm
Comparions between DDA and Bresenham Line Drawing algorithm
Line Clipping | Set 2 (Cyrus Beck Algorithm)
DDA Line generation Algorithm in Computer Graphics
Line Clipping | Set 1 (Cohen–Sutherland Algorithm)
Klee's Algorithm (Length Of Union Of Segments of a line)
Chain Code for 2D Line
Draw a line in C++ graphics
Program to nd line passing through 2 Points
Scan-line Polygon lling using OPENGL in C
Find X and Y intercepts of a line passing through the given points
Find Partition Line such that sum of values on left and right is equal
Color all boxes in line such that every M consecutive boxes are unique
▲
https://www.geeksforgeeks.org/anti-aliased-line-xiaolin-wus-algorithm/ 7/9
12/28/2019 Anti-aliased Line | Xiaolin Wu's algorithm - GeeksforGeeks
Be the First to upvote.
3
To-do Done
Based on 1 vote(s)
Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.
https://www.geeksforgeeks.org/anti-aliased-line-xiaolin-wus-algorithm/ 8/9
12/28/2019 Anti-aliased Line | Xiaolin Wu's algorithm - GeeksforGeeks
2 Comments GeeksforGeeks
1 Login
LOG IN WITH
Name
COMPANY LEARN
About Us Algorithms
Careers Data Structures
Privacy Policy Languages
Contact Us CS Subjects
Video Tutorials
PRACTICE CONTRIBUTE
Courses Write an Article
Company-wise Write Interview Experience
Topic-wise Internships
How to begin? Videos
https://www.geeksforgeeks.org/anti-aliased-line-xiaolin-wus-algorithm/ 9/9