While algorithms such as Wu's algorithm are also frequently used in modern computer graphics because they can support antialiasing, Bresenham's line algorithm is still important because of its speed and simplicity. The algorithm is used in hardware such as plotters and in the graphics chips of modern graphics cards. It can also be found in many softwaregraphics libraries. Because the algorithm is very simple, it is often implemented in either the firmware or the graphics hardware of modern graphics cards.
The label "Bresenham" is used today for a family of algorithms extending or modifying Bresenham's original algorithm.
History
Bresenham's line algorithm is named after Jack Elton Bresenham who developed it in 1962 at IBM. In 2001 Bresenham wrote:[1]
I was working in the computation lab at IBM's San Jose development lab. A Calcomp plotter had been attached to an IBM 1401 via the 1407 typewriter console. [The algorithm] was in production use by summer 1962, possibly a month or so earlier. Programs in those days were freely exchanged among corporations so Calcomp (Jim Newland and Calvin Hefte) had copies. When I returned to Stanford in Fall 1962, I put a copy in the Stanford comp center library.
A description of the line drawing routine was accepted for presentation at the 1963 ACM national convention in Denver, Colorado. It was a year in which no proceedings were published, only the agenda of speakers and topics in an issue of Communications of the ACM. A person from the IBM Systems Journal asked me after I made my presentation if they could publish the paper. I happily agreed, and they printed it in 1965.
Method
The following conventions will be applied:
the top-left is (0,0) such that pixel coordinates increase in the right and down directions (e.g. that the pixel at (7,4) is directly above the pixel at (7,5)), and
the pixel centers have integer coordinates.
The endpoints of the line are the pixels at and , where the first coordinate of the pair is the column and the second is the row.
The algorithm will be initially presented only for the octant in which the segment goes down and to the right ( and ), and its horizontal projection is longer than the vertical projection (the line has a positive slope less than 1).
In this octant, for each column x between and , there is exactly one row y (computed by the algorithm) containing a pixel of the line, while each row between and may contain multiple rasterized pixels.
Bresenham's algorithm chooses the integer y corresponding to the pixel center that is closest to the ideal (fractional) y for the same x; on successive columns y can remain the same or increase by 1.
The general equation of the line through the endpoints is given by:
.
Since we know the column, x, the pixel's row, y, is given by rounding this quantity to the nearest integer:
.
The slope depends on the endpoint coordinates only and can be precomputed, and the ideal y for successive integer values of x can be computed starting from and repeatedly adding the slope.
In practice, the algorithm does not keep track of the y coordinate, which increases by m = ∆y/∆x each time the x increases by one; it keeps an error bound at each
stage, which represents the negative of the distance from (a) the point where the line exits the pixel to (b) the top edge of the pixel.
This value is first set to (due to using the pixel's center coordinates), and is incremented by m each time the x coordinate is incremented by one. If the error becomes greater than 0.5, we know that the line has moved upwards
one pixel, and that we must increment our y coordinate and readjust the error to represent the distance from the top of the new pixel – which is done by subtracting one from error.[2]
Derivation
To derive Bresenham's algorithm, two steps must be taken. The first step is transforming the equation of a line from the typical slope-intercept form into something different; and then using this new equation to draw a line based on the idea of accumulation of error.
Line equation
The slope-intercept form of a line is written as
where is the slope and is the y-intercept. Because this is a function of only , it can't represent a vertical line. Therefore, it would be useful to make this equation written as a function of both and, to be able to draw lines at any angle. The angle (or slope) of a line can be stated as "rise over run", or . Then, using algebraic manipulation,
Letting this last equation be a function of and , it can be written as
where the constants are
The line is then defined for some constants , , and anywhere . That is, for any not on the line, . This form involves only integers if and are integers, since the constants , , and are defined as integers.
As an example, the line then this could be written as . The point (2,2) is on the line
and the point (2,3) is not on the line
and neither is the point (2,1)
Notice that the points (2,1) and (2,3) are on opposite sides of the line and evaluates to positive or negative. A line splits a plane into halves and the half-plane that has a negative can be called the negative half-plane, and the other half can be called the positive half-plane. This observation is very important in the remainder of the derivation.
Algorithm
The starting point is on the line
only because the line is defined to start and end on integer coordinates (though it is entirely reasonable to want to draw a line with non-integer end points).
Keeping in mind that the slope is at most , the problem now presents itself as to whether the next point should be at or . Perhaps intuitively, the point should be chosen based upon which is closer to the line at . If it is closer to the former then include the former point on the line, if the latter then the latter. To answer this, evaluate the line function at the midpoint between these two points:
If the value of this is positive then the ideal line is below the midpoint and closer to the candidate point ; i.e. the y coordinate should increase. Otherwise, the ideal line passes through or above the midpoint, and the y coordinate should stay the same; in which case the point is chosen. The value of the line function at this midpoint is the sole determinant of which point should be chosen.
The adjacent image shows the blue point (2,2) chosen to be on the line with two candidate points in green (3,2) and (3,3). The black point (3, 2.5) is the midpoint between the two candidate points.
Algorithm for integer arithmetic
Alternatively, the difference between points can be used instead of evaluating f(x,y) at midpoints. This alternative method allows for integer-only arithmetic, which is generally faster than using floating-point arithmetic. To derive the other method, define the difference to be as follows:
For the first decision, this formulation is equivalent to the midpoint method since at the starting point. Simplifying this expression yields:
Just as with the midpoint method, if is positive, then choose , otherwise choose .
If is chosen, the change in will be:
If is chosen the change in will be:
If the new D is positive then is chosen, otherwise . This decision can be generalized by accumulating the error on each subsequent point.
All of the derivation for the algorithm is done. One performance issue is the 1/2 factor in the initial value of D. Since all of this is about the sign of the accumulated difference, then everything can be multiplied by 2 with no consequence.
This results in an algorithm that uses only integer arithmetic.
plotLine(x0, y0, x1, y1)
dx = x1 - x0
dy = y1 - y0
D = 2*dy - dx
y = y0
for x from x0 to x1
plot(x, y)
if D > 0
y = y + 1
D = D - 2*dx
end if
D = D + 2*dy
Running this algorithm for from (0,1) to (6,4) yields the following differences with dx=6 and dy=3:
The result of this plot is shown to the right. The plotting can be viewed by plotting at the intersection of lines (blue circles) or filling in pixel boxes (yellow squares). Regardless, the plotting is the same.
All cases
However, as mentioned above this only works for octant zero, that is lines starting at the origin with a slope between 0 and 1 where x increases by exactly 1 per iteration and y increases by 0 or 1.
The algorithm can be extended to cover slopes between 0 and -1 by checking whether y needs to increase or decrease (i.e. dy < 0)
plotLineLow(x0, y0, x1, y1)
dx = x1 - x0
dy = y1 - y0
yi = 1
if dy < 0
yi = -1
dy = -dy
end if
D = (2 * dy) - dx
y = y0
for x from x0 to x1
plot(x, y)
if D > 0
y = y + yi
D = D + (2 * (dy - dx))
else
D = D + 2*dy
end if
By switching the x and y axis an implementation for positive or negative steep slopes can be written as
plotLineHigh(x0, y0, x1, y1)
dx = x1 - x0
dy = y1 - y0
xi = 1
if dx < 0
xi = -1
dx = -dx
end if
D = (2 * dx) - dy
x = x0
for y from y0 to y1
plot(x, y)
if D > 0
x = x + xi
D = D + (2 * (dx - dy))
else
D = D + 2*dx
end if
A complete solution would need to detect whether x1 > x0 or y1 > y0 and reverse the input coordinates before drawing, thus
plotLine(x0, y0, x1, y1)
if abs(y1 - y0) < abs(x1 - x0)
if x0 > x1
plotLineLow(x1, y1, x0, y0)
else
plotLineLow(x0, y0, x1, y1)
end ifelseif y0 > y1
plotLineHigh(x1, y1, x0, y0)
else
plotLineHigh(x0, y0, x1, y1)
end ifend if
In low level implementations which access the video memory directly, it would be typical for the special cases of vertical and horizontal lines to be handled separately as they can be highly optimized.
Some versions use Bresenham's principles of integer incremental error to perform all octant line draws, balancing the positive and negative error between the x and y coordinates.[3]
plotLine(x0, y0, x1, y1)
dx = abs(x1 - x0)
sx = x0 < x1 ? 1 : -1
dy = -abs(y1 - y0)
sy = y0 < y1 ? 1 : -1
error = dx + dy
while true
plot(x0, y0)
if x0 == x1 && y0 == y1 break
e2 = 2 * error
if e2 >= dy
error = error + dy
x0 = x0 + sx
end ifif e2 <= dx
error = error + dx
y0 = y0 + sy
end ifend while
Similar algorithms
The Bresenham algorithm can be interpreted as slightly modified digital differential analyzer (using 0.5 as error threshold instead of 0, which is required for non-overlapping polygon rasterizing).
The principle of using an incremental error in place of division operations has other applications in graphics. It is possible to use this technique to calculate the U,V co-ordinates during raster scan of texture mapped polygons.[4] The voxel heightmap software-rendering engines seen in some PC games also used this principle.
Bresenham also published a Run-Slice computational algorithm: while the above described Run-Length algorithm runs the loop on the major axis, the Run-Slice variation loops the other way.[5] This method has been represented in a number of US patents:
5,815,163
Method and apparatus to draw line slices during calculation
5,740,345
Method and apparatus for displaying computer graphics data stored in a compressed format with an efficient color indexing system
5,657,435
Run slice line draw engine with non-linear scaling capabilities
5,627,957
Run slice line draw engine with enhanced processing capabilities
5,627,956
Run slice line draw engine with stretching capabilities
5,617,524
Run slice line draw engine with shading capabilities
5,611,029
Run slice line draw engine with non-linear shading capabilities
5,604,852
Method and apparatus for displaying a parametric curve on a video display
5,600,769
Run slice line draw engine with enhanced clipping techniques
The algorithm has been extended to:
Draw lines of arbitrary thickness, an algorithm created by Alan Murphy at IBM.[6]
Draw multiple kinds curves (circles, ellipses, cubic, quadratic, and rational Bézier curves) and antialiased lines and curves; a set of algorithms by Alois Zingl.[3]
^Joy, Kenneth. "Bresenham's Algorithm"(PDF). Visualization and Graphics Research Group, Department of Computer Science, University of California, Davis. Retrieved 20 December 2016.
^US 5739818, Spackman, John Neil, "Apparatus and method for performing perspectively correct interpolation in computer graphics", published 1998-04-14, assigned to Canon KK
^"Murphy's Modified Bresenham Line Algorithm". homepages.enterprise.net. Retrieved 2018-06-09. ('Line Thickening by Modification to Bresenham's Algorithm' in the IBM Technical Disclosure Bulletin Vol. 20 No. 12 May 1978 pages 5358-5366.)
Bresenham, Jack (February 1977). "A linear algorithm for incremental digital display of circular arcs". Communications of the ACM. 20 (2): 100–106. doi:10.1145/359423.359432. – also Technical Report 1964 Jan-27 -11- Circle Algorithm TR-02-286 IBM San Jose Lab
Ukraina memiliki kesamaan budaya dan sejarah dengan negara-negara tetangganya, yang bisa dilacak hingga abad ke-9 dan Rus. Kesamaan adat-istiadat dapat ditemukan di budaya Rusia, Ukraina, Polandia, Belarus, Kazaki, dan orang-orang Turk dari Asia Tengah. Adat-istiadat Ukraina sangat dipengaruhi oleh Gereja Ortodoks dan tradisi dari mitologi Slavia. Era Soviet menyatukan budaya-budaya dari bangsa-bangsa yang tak berhubungan dengan bahasa yang serupa. Adat-istiadat Liburan dan perayaan Ikon Nata...
2014 single by Kylie Minogue Into the BlueSingle by Kylie Minoguefrom the album Kiss Me Once B-sideSparksReleased27 January 2014 (2014-01-27)Recorded28 May 2013[1] (London, England)GenreEDMpower popLength4:08LabelParlophoneSongwriter(s) Kelly Sheehan Mike Del Rio Jacob Kasher Producer(s)Mike Del RioKylie Minogue singles chronology Limpido (2013) Into the Blue (2014) I Was Gonna Cancel (2014) Music videoInto the Blue on YouTube Into the Blue is a song by Australian r...
Republik Islam Afganistanجمهوری اسلامی افغانستان (Dari) Jomhūri-ye Eslāmi-ye Afghānestānد افغانستان اسلامي جمهوريت (Pashtun)Də Afġānistān Islāmī Jumhūriyat2004–2021 Bendera Lambang Semboyan: لا إله إلا الله، محمد رسول اللهLā ʾilāha ʾillā llāh, Muhammadun rasūlu llāhLagu kebangsaan: Qal’a-ye Islām, qalb-e Āsiyāقلعه اسلام قلب اسیا(Benteng Islam, Jantung Asia)(2004–2006)Mill...
Municipality in Agder, Norway This article is about the municipality in Agder, Norway. For the urban area (village) of Vennesla, Norway, see Vennesla (village). Municipality in Agder, NorwayVennesla Municipality Vennesla kommuneMunicipalityView of the Setesdal Line railway museum in Vennesla municipality Coat of armsAgder within NorwayVennesla within AgderCoordinates: 58°18′38″N 7°51′25″E / 58.31056°N 7.85694°E / 58.31056; 7.85694CountryNorwayCountyAgderDis...
Age of Empires II: Definitive EditionNhà phát triểnForgotten Empires[a]Nhà phát hànhXbox Game StudiosGiám đốcAdam IsgreenThiết kếBert Beeckman Dòng trò chơiAge of EmpiresNền tảngMicrosoft Windows, Xbox One, Xbox Series X/SPhát hành14 tháng 11 năm 2019 (Micrrosoft Windows), 2 tháng 1 năm 2023 (Xbox One, Xbox Series S/X)Thể loạiChiến lược thời gian thựcChế độ chơiChơi đơn, Chơi mạng Age of Empires II: Definitive Edition là một...
Professional soccer league season Football league seasonCanadian Soccer LeagueFirst DivisionSeason2017DatesMay 26 – September 10 (regular season) September 15 – September 30 (playoffs)ChampionsFC Vorkuta (First Division regular season)York Region Shooters (First Division playoffs, 3rd title)Matches played56Goals scored241 (4.3 per match)Top goalscorerAleksandar Stojiljković (17)Biggest home winSerbian White Eagles 8–1 Milton SC(August 18)Biggest away winMilton SC 1–7 York Region...
Canadian Cinéma chain Rainbow and Magic Lantern CinemasIndustryMovie theatresFounded1984; 39 years ago (1984) in Edmonton, AlbertaHeadquartersCanadaWebsiteOfficial Website Roxy Theatre located in Saskatoon Magic Lantern Theatres is a chain of 11 movie theatres in Canada. Three of these locations are Rainbow Cinemas discount theatres. Magic Lantern Theatres was founded in 1984 in Edmonton, Alberta, while Rainbow Cinemas was founded in the early 1990s in Saskatoon, Saskatchew...
World War II Japanese-American internment camp in California This article is about the World War II internment camp. For the former community in Owens Valley, California, see Manzanar, California. For other uses, see Manzanar (disambiguation). United States historic placeManzanar War Relocation CenterU.S. National Register of Historic PlacesU.S. National Historic LandmarkU.S. National Historic SiteCalifornia Historical Landmark No. 850Los Angeles Historic-Cultural Monument No.&...
American politician John HersheyMember of the Pennsylvania House of Representativesfrom the 82nd districtIn officeDecember 1, 2018 – January 3, 2023Preceded byAdam HarrisSucceeded byPaul Takac (Redistricting) Personal detailsBornJohnathan HersheyMifflintown, Pennsylvania, U.S.Political partyRepublicanEducationMessiah University (BA) Johnathan D. Hershey is an American politician who served as a member of the Pennsylvania House of Representatives from the 82nd district. ...
Pour les articles homonymes, voir Église Notre-Dame et Notre-Dame des Dunes. Église Notre-Dame des DunesL'édifice vu depuis la Kerkplein (place de l'Église).PrésentationType ÉgliseDiocèse Diocèse de BrugesDédicataire Vierge MarieArchitecte Jozef Lantsoght (d)Construction 1956-1962Religion CatholicismePatrimonialité Bien classé (2005)LocalisationAdresse Kerkplein Coxyde, Flandre-Occidentale BelgiqueCoordonnées 51° 06′ 48″ N, 2° 38′ 02″...
Timothy HopkinsBornTimothy Nolan1859 (1859)Augusta, Maine, USDiedJanuary 1, 1936(1936-01-01) (aged 76–77)San Francisco, California, USNationalityAmerican Timothy Hopkins (1859 – 1 January 1936) was the adopted son of Central Pacific Railroad co-owner Mark Hopkins' widow, Mary Hopkins, and friend of another co-owner Leland Stanford and his wife, Jane. He was one of the founders of Palo Alto and a trustee of Stanford University for over 50 years. His estate is now the site of ...
1968 single by James BrownSay It Loud – I'm Black and I'm Proud (Part 1)The Say It Loud – I'm Black and I'm Proud albumSingle by James Brownfrom the album A Soulful Christmas and Say It Loud – I'm Black and I'm Proud B-sideSay It Loud – I'm Black and I'm Proud (Part 2)ReleasedAugust 1968 (1968-08)RecordedAugust 7, 1968, Vox Studios, Los AngelesGenreFunkLength 2:45 (Part 1) 2:30 (Part 2) LabelKing6187Songwriter(s) James Brown Alfred Ellis Producer(s)James BrownJames Brown cha...
Flyover Agartala flyoverRoute informationLength2.26 km (1.40 mi)Major junctionsEast endUmakanta Academy, MelarmathSouth endBardowali LocationCountryIndiaStatesTripuraMajor citiesAgartala Highway system Roads in India Expressways National State Asian Agartala Flyover The Agartala flyover is a flyover in the Indian state of Tripura. The flyover, the first in the state, is 2.26 km long, stretching from the police line (Drop Gate) in southern Agartala to Fire Brigade...
This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources. Find sources: Kerala Bhasha Institute – news · newspapers · books · scholar · JSTOR (April 2009) (Learn how and when to remove this template message) Kerala Bhasha InstituteEstablished1968 September 23DirectorDr. Sathian M [1]LocationThiruvananthapuram, Kerala, IndiaWebsitehttps://www.keralabhashainstitute.org T...
Danish politician (born 1947) Pia KjærsgaardSpeaker of the Danish ParliamentIn office3 July 2015 – 21 June 2019Preceded byMogens LykketoftSucceeded byHenrik Dam KristensenLeader of the Danish People's PartyIn office6 October 1995 – 12 September 2012Succeeded byKristian Thulesen DahlLeader of the Progress PartyIn office1985–1995Preceded byMogens GlistrupSucceeded byKirsten JacobsenMember of the FolketingIncumbentAssumed office 10 January 1984ConstituencyGreater Cop...
Protest against alleged sexual harassment of BJP MP Indian Wrestler's protestsWrestlers addressing people during the protestDate18 January 2023 – 15 June 2023(4 months, 4 weeks and 1 day)LocationJantar Mantar, New Delhi, IndiaCaused byAllegations of sexual harassment of female wrestlers by the BJP MP Brij Bhushan Sharan SinghGoalsArrest of the accusedOversight committee's report be made publicDissolution of current Executive Committee of WFIMethodsDharna (sit-in), Candlelight...
This article does not cite any sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Satcha Sip Prakan – news · newspapers · books · scholar · JSTOR (October 2017) (Learn how and when to remove this template message) 1992 studio album by Carabaoสัจจะ ๑๐ ประการ (Satcha Sip Prakan)Studio album by CarabaoReleased1992Recorded1992Gen...
جائزة اليابان الكبرى 1998 (بالإنجليزية: XXIV Fuji Television Japanese Grand Prix) السباق 16 من أصل 16 في بطولة العالم لسباقات الفورمولا واحد موسم 1998 السلسلة بطولة العالم لسباقات فورمولا 1 موسم 1998 البلد اليابان التاريخ 1 نوفمبر 1998 مكان التنظيم ميه، اليابان طول المسار 5.864[1] كيلوم...
Turkish freestyle wrestler Erhan YaylacıPersonal informationFull nameErhan YaylacıBorn (1998-08-29) August 29, 1998 (age 25)TokatAlma materNiğde Ömer Halisdemir UniversityHeight1.85 m (6 ft 1 in)Weight92 kg (203 lb; 14.5 st)SportCountryTürkiyeSportAmateur wrestlingWeight class92 kgEventFreestyleClubIstanbul BB SK Medal record Men's freestyle wrestling Representing Turkey Individual World Cup 2020 Belgrade 92 kg Islamic Solidarity Ga...