กลับไปหน้าบทความ

อ่าน 10 นาที

อัลกอริทึมเส้นของเบรเซนแฮม

อัลกอริธึมคอมพิวเตอร์กราฟิก/เรขาคณิตดิจิทัล

อัลกอริทึม เส้นตรงของเบรเซนแฮม (Bresenham's line algorithm)เป็นอัลกอริทึมการวาดเส้นที่กำหนดจุดในแรสเตอร์nมิติที่ควรเลือกเพื่อสร้างเส้นตรงที่ใกล้เคียงที่สุดระหว่างสองจุดโดยทั่วไปแล้...

อัลกอริทึมเส้นของเบรเซนแฮม

อัลกอริทึม เส้นตรงของเบรเซนแฮม (Bresenham's line algorithm)เป็นอัลกอริทึมการวาดเส้นที่กำหนดจุดในแรสเตอร์nมิติที่ควรเลือกเพื่อสร้างเส้นตรงที่ใกล้เคียงที่สุดระหว่างสองจุดโดยทั่วไปแล้วจะใช้ในการวาดเส้นตรงพื้นฐานในภาพบิตแมป (เช่น บนหน้าจอคอมพิวเตอร์ ) เนื่องจากใช้เพียงการบวกการลบและการเลื่อนบิตซึ่งเป็นการดำเนินการที่ประหยัดมากในสถาปัตยกรรมคอมพิวเตอร์ที่ใช้กันทั่วไปในอดีต เป็นอัลกอริทึมที่มีข้อผิดพลาดเพิ่มขึ้นและเป็นหนึ่งในอัลกอริทึมแรกๆ ที่พัฒนาขึ้นในสาขากราฟิก คอมพิวเตอร์ ส่วนขยายของอัลกอริทึมดั้งเดิมที่เรียกว่าอัลกอริทึมวงกลมจุดกึ่งกลาง (midpoint circle algorithm)อาจใช้สำหรับการวาด วงกลม

แม้ว่าอัลกอริทึมต่างๆ เช่นอัลกอริทึมของ Wuจะถูกใช้บ่อยในกราฟิกคอมพิวเตอร์สมัยใหม่ เนื่องจากสามารถรองรับการลดรอยหยัก (antialiasing) ได้แต่อัลกอริทึมเส้นของ Bresenham ก็ยังคงมีความสำคัญเนื่องจากความเร็วและความเรียบง่าย อัลกอริทึมนี้ถูกใช้ในฮาร์ดแวร์ เช่นเครื่องพลอตเตอร์และในชิปกราฟิกของการ์ดกราฟิก สมัยใหม่ นอกจากนี้ยังพบได้ในไลบรารีซอฟต์แวร์กราฟิก จำนวนมาก เนื่องจากอัลกอริทึมนั้นง่ายมาก จึงมักถูกนำไปใช้ในเฟิร์มแวร์หรือฮาร์ดแวร์กราฟิกของการ์ด กราฟิก สมัยใหม่

ปัจจุบัน คำว่า "Bresenham" ถูกนำมาใช้เรียกกลุ่มอัลกอริทึมที่ต่อยอดหรือดัดแปลงมาจากอัลกอริทึมดั้งเดิมของ Bresenham

ประวัติศาสตร์

อัลกอริทึมเส้นของเบรเซนแฮมตั้งชื่อตามแจ็ค เอลตัน เบรเซนแฮมผู้พัฒนาอัลกอริทึมนี้ในปี 1962 ที่IBMในปี 2001 เบรเซนแฮมเขียนว่า: [ 1 ]

ผมทำงานอยู่ในห้องปฏิบัติการคำนวณของศูนย์พัฒนาซอฟต์แวร์ IBM ที่ซานโฮเซเครื่องพลอตเตอร์ของ Calcompถูกต่อเข้ากับเครื่องIBM 1401ผ่านทางคอนโซลเครื่องพิมพ์ดีด 1407 [อัลกอริทึม] ถูกนำไปใช้งานจริงในช่วงฤดูร้อนปี 1962 อาจจะก่อนหน้านั้นประมาณหนึ่งเดือน ในสมัยนั้นโปรแกรมต่างๆ ถูกแลกเปลี่ยนกันอย่างอิสระระหว่างบริษัทต่างๆ ดังนั้น Calcomp (จิม นิวแลนด์ และแคลวิน เฮฟเต) จึงมีสำเนาอยู่ เมื่อผมกลับไปที่สแตนฟอร์ดในฤดูใบไม้ร่วงปี 1962 ผมได้นำสำเนาไปไว้ในห้องสมุดศูนย์คอมพิวเตอร์ของสแตนฟอร์ด คำอธิบายของขั้นตอนการวาดเส้นได้รับการยอมรับให้เสนอในงาน ประชุมระดับชาติ ของ ACM ปี 1963 ที่เดนเวอร์ รัฐโคโลราโด ปีนั้นไม่มีการตีพิมพ์รายงานการประชุม มีเพียงวาระการประชุมและหัวข้อต่างๆ ในวารสาร Communications of the ACM เท่านั้น หลังจากที่ผมนำเสนอเสร็จแล้ว มีคนจาก IBM Systems Journal ถามผมว่าพวกเขาสามารถตีพิมพ์บทความได้หรือไม่ ผมยินดีตอบตกลง และพวกเขาก็ได้ตีพิมพ์ในปี 1965

วิธี

ภาพประกอบแสดงผลลัพธ์ของอัลกอริทึมเส้นของเบรเซนแฮม (0,0) อยู่ที่มุมบนซ้ายของตาราง (1,1) อยู่ที่ปลายบนซ้ายของเส้น และ (11, 5) อยู่ที่ปลายล่างขวาของเส้น

จะใช้หลักเกณฑ์ต่อไปนี้:

  • มุมบนซ้ายคือ (0,0) โดยที่พิกเซลพิกัดจะเพิ่มขึ้นในทิศทางขวาและลง (เช่น พิกเซลที่ (7,4) อยู่เหนือพิกเซลที่ (7,5) โดยตรง) และ
  • จุดศูนย์กลางของพิกเซลมีพิกัดเป็นจำนวนเต็ม

จุดปลายของเส้นตรงคือพิกเซลที่และโดยที่พิกเซลแรกของคู่คือคอลัมน์ และพิกเซลที่สองคือแถว

ในขั้นต้น อัลกอริทึมจะถูกนำเสนอเฉพาะสำหรับอ็อกแทนต์ที่ส่วนของเส้นตรงทอดลงและไปทางขวา ( และ) และการฉายภาพในแนวนอนยาวกว่าการฉายภาพในแนวตั้ง(เส้นตรงมีความชัน เป็นบวก น้อยกว่า 1) ในอ็อกแทนต์นี้ สำหรับแต่ละคอลัมน์xระหว่างและจะมีแถวy เพียงหนึ่งแถว (คำนวณโดยอัลกอริทึม) ที่มีพิกเซลของเส้นตรง ในขณะที่แต่ละแถวระหว่างและอาจมีพิกเซลที่ถูกแปลงเป็นภาพแรสเตอร์หลายพิกเซล

อัลกอริทึมของเบรเซนแฮมจะเลือกจำนวนเต็มyที่สอดคล้องกับจุดศูนย์กลางของพิกเซล ซึ่งใกล้เคียงกับค่า yในอุดมคติ (เศษส่วน) มากที่สุดสำหรับค่าx เดียวกัน ในคอลัมน์ถัดไป ค่า yอาจคงที่หรือเพิ่มขึ้นทีละ 1 สมการทั่วไปของเส้นตรงที่ลากผ่านจุดปลายมีดังนี้:

.

เนื่องจากเรารู้ค่าคอลัมน์x แล้ว ค่าแถว yของพิกเซลจึงได้มาจากการปัดเศษค่านี้ให้เป็นจำนวนเต็มที่ใกล้ที่สุด:

.

ความชันขึ้นอยู่กับพิกัดจุดปลายเท่านั้นและสามารถคำนวณล่วงหน้าได้ และสามารถคำนวณ ค่า y ที่เหมาะสม สำหรับค่าx ที่เป็นจำนวนเต็มที่ต่อเนื่องกันได้ โดยเริ่มจาก ค่า y และเพิ่มค่าความชันซ้ำๆ

ในทางปฏิบัติ อัลกอริทึมจะไม่ติดตามพิกัด y ซึ่งจะเพิ่มขึ้นm = ∆y/∆xทุกครั้งที่xเพิ่มขึ้นหนึ่งหน่วย แต่จะเก็บขอบเขตข้อผิดพลาดไว้ในแต่ละขั้นตอน ซึ่งแสดงถึงค่าลบของระยะทางจาก (a) จุดที่เส้นออกจากพิกเซลไปยัง (b) ขอบบนสุดของพิกเซล ค่านี้จะถูกกำหนดไว้ที่(เนื่องจากใช้พิกัดศูนย์กลางของพิกเซล) ก่อน และจะเพิ่มขึ้นmทุกครั้งที่ พิกัด xเพิ่มขึ้นหนึ่งหน่วย หากข้อผิดพลาดมากกว่า0.5เราจะรู้ว่าเส้นได้เคลื่อนขึ้นไปหนึ่งพิกเซล และเราต้องเพิ่ม พิกัด y ของเรา และปรับข้อผิดพลาดใหม่เพื่อแสดงระยะทางจากด้านบนของพิกเซลใหม่ ซึ่งทำได้โดยการลบหนึ่งออกจากข้อผิดพลาด[ 2 ]

อนุพันธ์

ในการสร้างอัลกอริทึมของเบรเซนแฮม ต้องดำเนินการสองขั้นตอน ขั้นตอนแรกคือการแปลงสมการเส้นตรงจากรูปแบบความชัน-จุดตัดแกน y ทั่วไป ให้เป็นสมการโดยปริยายที่มีสัมประสิทธิ์เป็นจำนวนเต็ม และขั้นตอนที่สองคือการใช้สมการใหม่นี้ในการวาดเส้นตรงโดยอาศัยแนวคิดเรื่องการสะสมของข้อผิดพลาด

สมการเส้นตรง

y=f(x)=.5x+1 หรือ f(x,y)=x-2y+2=0
ระนาบครึ่งบวกและระนาบครึ่งลบ

รูปแบบสมการเส้นตรงแบบความชัน-จุดตัดแกน y เขียนได้ดังนี้

โดยที่คือความชัน และคือจุดตัดแกน yเนื่องจากสมการนี้ขึ้นอยู่กับ เพียงอย่างเดียวจึงไม่สามารถแสดงเส้นตรงแนวตั้งได้ ดังนั้น การเขียนสมการนี้ให้เป็นฟังก์ชันของทั้งและจะช่วยให้สามารถวาดเส้นตรงที่ทำมุมใดๆ ก็ได้ มุม (หรือความชัน) ของเส้นตรงสามารถเขียนได้ว่า "ระยะเพิ่มขึ้นหารด้วยระยะวิ่ง" หรือจากนั้นใช้การจัดการทางพีชคณิต

ถ้าให้สมการสุดท้ายนี้เป็นฟังก์ชันของและก็สามารถเขียนได้ดังนี้

โดยที่ค่าคงที่คือ

เส้นตรงนั้นถูกกำหนดขึ้นสำหรับค่าคงที่, , และที่ใดก็ตามนั่นคือ สำหรับจุดใดๆที่ไม่ได้อยู่บนเส้นตรงนั้นรูปแบบนี้เกี่ยวข้องเฉพาะจำนวนเต็มก็ต่อเมื่อและเป็นจำนวนเต็มเท่านั้น เนื่องจากค่าคงที่, , และถูกกำหนดให้เป็นจำนวนเต็ม

ตัวอย่างเช่น เส้นตรงนี้สามารถเขียนได้ดังนี้จุด (2,2) อยู่บนเส้นตรงนี้

และจุด (2,3) ไม่อยู่บนเส้น

และไม่ใช่ประเด็นเช่นกัน (2,1)

โปรดสังเกตว่าจุด (2,1) และ (2,3) อยู่คนละด้านของเส้นตรงและมีค่าเป็นบวกหรือลบ เส้นตรงแบ่งระนาบออกเป็นสองส่วนเท่าๆ กัน ครึ่งระนาบที่มีค่าเป็นลบเรียกว่าครึ่งระนาบลบ และอีกครึ่งระนาบเรียกว่าครึ่งระนาบบวก ข้อสังเกตนี้มีความสำคัญมากในการพิสูจน์ส่วนที่เหลือ

อัลกอริทึม

จุดเริ่มต้นอยู่บนเส้น

เนื่องจากเส้นนั้นถูกกำหนดให้เริ่มต้นและสิ้นสุดที่พิกัดจำนวนเต็ม (ถึงแม้ว่าการต้องการวาดเส้นที่มีจุดปลายไม่ใช่จำนวนเต็มก็เป็นเรื่องที่สมเหตุสมผลเช่นกัน)

จุดผู้สมัคร (2,2) สีน้ำเงิน และจุดผู้สมัครสองจุดสีเขียว (3,2) และ (3,3)

เมื่อพิจารณาว่าความชันมีค่าสูงสุดเพียงค่าเดียวปัญหาที่เกิดขึ้นคือจุดถัดไปควรอยู่ที่หรือโดยสัญชาตญาณแล้ว จุดถัดไปควรเลือกจากจุดที่อยู่ใกล้เส้นตรงที่ มากกว่าถ้าอยู่ใกล้จุดแรกมากกว่า ก็ให้รวมจุดแรกไว้บนเส้นตรง ถ้าอยู่ใกล้จุดหลังมากกว่า ก็ให้รวมจุดหลัง เพื่อตอบคำถามนี้ ให้ประเมินฟังก์ชันเส้นตรงที่จุดกึ่งกลางระหว่างสองจุดนี้:

ถ้าค่าของฟังก์ชันเส้นตรงนี้เป็นบวก แสดงว่าเส้นตรงในอุดมคติอยู่ต่ำกว่าจุดกึ่งกลางและอยู่ใกล้กับจุดที่ต้องการเลือกมากขึ้นกล่าวคือ ค่าพิกัด y ควรเพิ่มขึ้น ในทางกลับกัน ถ้าค่าของฟังก์ชันเส้นตรงเป็นบวก แสดงว่าเส้นตรงในอุดมคติผ่านหรืออยู่เหนือจุดกึ่งกลาง และค่าพิกัด y ควรคงที่ ซึ่งในกรณีนี้จะเลือกจุดนั้น ค่าของฟังก์ชันเส้นตรง ณ จุดกึ่งกลางนี้เป็นตัวกำหนดเพียงอย่างเดียวว่าควรเลือกจุดใด

ภาพด้านข้างแสดงจุดสีน้ำเงิน (2,2) ที่ถูกเลือกให้อยู่บนเส้นเดียวกับจุดที่เป็นไปได้สองจุดในสีเขียว (3,2) และ (3,3) จุดสีดำ (3, 2.5) คือจุดกึ่งกลางระหว่างจุดที่เป็นไปได้ทั้งสองจุด

อัลกอริทึมสำหรับการคำนวณเลขจำนวนเต็ม

อีกทางเลือกหนึ่งคือ สามารถใช้ผลต่างระหว่างจุดแทนการประเมินค่า f(x,y) ที่จุดกึ่งกลาง วิธีการทางเลือกนี้อนุญาตให้ใช้การคำนวณแบบจำนวนเต็มเท่านั้น ซึ่งโดยทั่วไปจะเร็วกว่าการใช้การคำนวณแบบจุดลอยตัวเพื่อหาที่มาของวิธีการอื่น ให้กำหนดผลต่างดังนี้:

สำหรับการตัดสินใจครั้งแรก สูตรนี้เทียบเท่ากับวิธีจุดกึ่งกลาง เนื่องจากณ จุดเริ่มต้น การลดรูปนิพจน์นี้จะได้ผลลัพธ์ดังนี้:

เช่นเดียวกับวิธีจุดกึ่งกลาง ถ้าค่าเป็นบวก ให้เลือกมิฉะนั้นให้เลือก

หากเลือกตัวเลือกนี้ การเปลี่ยนแปลงในค่าจะเป็นดังนี้:

หากเลือกตัวเลือกนี้ การเปลี่ยนแปลงในค่าจะเป็นดังนี้:

ถ้าค่า D ใหม่เป็นบวกจะเลือกค่านี้ มิฉะนั้นจะเลือกค่าอื่นการตัดสินใจนี้สามารถสรุปได้โดยการสะสมข้อผิดพลาดในแต่ละจุดถัดไป

การลากเส้นจาก (0,1) ไปยัง (6,4) แสดงกราฟเส้นตารางและพิกเซล

การคำนวณหาที่มาของอัลกอริทึมทั้งหมดเสร็จสมบูรณ์แล้ว ปัญหาด้านประสิทธิภาพอย่างหนึ่งคือค่า 1/2 ในค่าเริ่มต้นของ D เนื่องจากทั้งหมดนี้เกี่ยวข้องกับเครื่องหมายของผลต่างสะสม ดังนั้นทุกอย่างจึงสามารถคูณด้วย 2 ได้โดยไม่มีผลกระทบใดๆ

ผลลัพธ์ที่ได้คืออัลกอริทึมที่ใช้เฉพาะการคำนวณเลขจำนวนเต็มเท่านั้น

plotLine(x0, y0, x1, y1) dx = x1 - x0 dy = y1 - y0 D = 2*dy - dx y = y0 สำหรับ x ตั้งแต่ x0 ถึง x1 plot(x, y) ถ้า D > 0 y = y + 1 D = D + (2 * (dy - dx)) อื่น D = D + 2*dy จบถ้า

เมื่อรันอัลกอริทึมนี้ตั้งแต่ (0,1) ถึง (6,4) จะได้ความแตกต่างดังต่อไปนี้ โดยที่ dx=6 และ dy=3:

D=2*3-6=0 วนลูปจาก 0 ถึง 6 * x=0: plot(0, 1) , D≤0: D=0+6=6 * x=1: plot(1, 1) , D>0: D=6-12=-6, y=1+1=2, D=-6+6=0 * x=2: plot(2, 2) , D≤0: D=0+6=6 * x=3: plot(3, 2) , D>0: D=6-12=-6, y=2+1=3, D=-6+6=0 * x=4: plot(4, 3) , D≤0: D=0+6=6 * x=5: plot(5, 3) , D>0: D=6-12=-6, y=3+1=4, D=-6+6=0 * x=6: plot(6, 4) , D≤0: D=0+6=6 

ผลลัพธ์ของกราฟนี้แสดงอยู่ทางด้านขวา สามารถดูกราฟได้โดยการพล็อตที่จุดตัดของเส้น (วงกลมสีน้ำเงิน) หรือเติมสีลงในช่องพิกเซล (สี่เหลี่ยมสีเหลือง) ไม่ว่าจะวิธีใด ผลลัพธ์ของกราฟก็เหมือนกัน

ทุกกรณี

อย่างไรก็ตาม ดังที่กล่าวไว้ข้างต้น วิธีนี้ใช้ได้เฉพาะกับ อ็อกแทนต์ ศูนย์เท่านั้น นั่นคือเส้นที่เริ่มต้นจากจุดกำเนิดโดยมีความชันระหว่าง 0 ถึง 1 โดยที่ x เพิ่มขึ้นทีละ 1 ในแต่ละรอบ และ y เพิ่มขึ้นทีละ 0 หรือ 1

สามารถขยายอัลกอริธึมนี้ให้ครอบคลุมค่าความชันระหว่าง 0 ถึง -1 ได้โดยการตรวจสอบว่าค่า y จำเป็นต้องเพิ่มขึ้นหรือลดลง (เช่น dy < 0)

plotLineLow(x0, y0, x1, y1) dx = x1 - x0 dy = y1 - y0 ยี่ = 1 ถ้า dy < 0 yi = -1 dy = -dy จบถ้า D = (2 * dy) - dx y = y0 สำหรับ x ตั้งแต่ x0 ถึง x1 plot(x, y) ถ้า D > 0 y = y + yi D = D + (2 * (dy - dx)) อื่น D = D + 2*dy จบถ้า

โดยการสลับแกน x และ y สามารถเขียนการใช้งานสำหรับความชันสูงบวกหรือลบได้ดังนี้

plotLineHigh(x0, y0, x1, y1) dx = x1 - x0 dy = y1 - y0 xi = 1 ถ้า dx < 0 xi = -1 dx = -dx จบถ้า D = (2 * dx) - dy x = x0 สำหรับ y ตั้งแต่ y0 ถึง y1 plot(x, y) ถ้า D > 0 x = x + xi D = D + (2 * (dx - dy)) อื่น D = D + 2*dx จบถ้า

วิธีแก้ปัญหาที่สมบูรณ์จะต้องตรวจสอบว่า x1 > x0 หรือ y1 > y0 หรือไม่ และกลับค่าพิกัดอินพุตก่อนที่จะวาด ดังนั้น

plotLine(x0, y0, x1, y1) if abs(y1 - y0) < abs(x1 - x0) if x0 > x1 plotLineLow(x1, y1, x0, y0) อื่น plotLineLow(x0, y0, x1, y1) จบเงื่อนไขมิเช่นนั้นถ้า y0 > y1 plotLineHigh(x1, y1, x0, y0) อื่น plotLineHigh(x0, y0, x1, y1) จบถ้าจบถ้า

ในการใช้งานระดับต่ำที่เข้าถึงหน่วยความจำวิดีโอโดยตรง โดยทั่วไปแล้วกรณีพิเศษของเส้นแนวตั้งและแนวนอนจะได้รับการจัดการแยกต่างหาก เนื่องจากสามารถปรับให้เหมาะสมที่สุดได้

บางเวอร์ชันใช้หลักการของ Bresenham เกี่ยวกับข้อผิดพลาดที่เพิ่มขึ้นเป็นจำนวนเต็มเพื่อดำเนินการวาดเส้นอ็อกแทนต์ทั้งหมด โดยปรับสมดุลข้อผิดพลาดบวกและลบระหว่างพิกัด x และ y [ 3 ]

plotLine(x0, y0, x1, y1) dx = abs(x1 - x0) sx = x0 < x1 ? 1 : -1 dy = -abs(y1 - y0) sy = y0 < y1 ? 1 : -1 ข้อผิดพลาด = dx + dy ในขณะที่เป็นความจริง plot(x0, y0) e2 = 2 * ข้อผิดพลาด ถ้า e2 >= dy ถ้า x0 == x1 ให้หยุด ข้อผิดพลาด = ข้อผิดพลาด + dy x0 = x0 + sx จบเงื่อนไข ถ้าe2 <= dx ถ้า y0 == y1 หยุด ข้อผิดพลาด = ข้อผิดพลาด + dx y0 = y0 + sy จบถ้าจบในขณะที่

อัลกอริทึมที่คล้ายกัน

อัลกอริทึมของเบรเซนแฮมสามารถตีความได้ว่าเป็นตัววิเคราะห์ความแตกต่างแบบดิจิทัลที่ ได้รับการดัดแปลงเล็กน้อย (โดยใช้ค่าเกณฑ์ความคลาดเคลื่อน 0.5 แทนที่จะเป็น 0 ซึ่งจำเป็นสำหรับการสร้างภาพแรสเตอร์ของรูปหลายเหลี่ยมที่ไม่ทับซ้อนกัน)

หลักการของการใช้ข้อผิดพลาดที่เพิ่มขึ้นแทนการดำเนินการหารมีแอปพลิเคชันอื่น ๆ ในด้านกราฟิก สามารถใช้เทคนิคนี้ในการคำนวณพิกัด U,Vระหว่างการสแกนแรสเตอร์ของรูปหลายเหลี่ยมที่แมปพื้นผิว[ 4 ]เอ็น จิ้นการเรนเดอร์ซอฟต์แวร์แผนที่ ความสูงแบบว็อกเซล ที่พบในเกมพีซีบางเกมก็ใช้หลักการนี้เช่นกัน

Bresenham ยังได้เผยแพร่อัลกอริธึมการคำนวณ Run-Slice ด้วย: ในขณะที่อัลกอริธึม Run-Length ที่อธิบายไว้ข้างต้นจะวนลูปบนแกนหลัก รูปแบบ Run-Slice จะวนลูปในทิศทางตรงกันข้าม[ 5 ] วิธีนี้ได้รับการนำเสนอในสิทธิบัตรของสหรัฐอเมริกาหลายฉบับ:

  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5815163 "วิธีการและอุปกรณ์สำหรับวาดเส้นแบ่งส่วนระหว่างการคำนวณ" 
  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5740345 "วิธีการและอุปกรณ์สำหรับแสดงข้อมูลกราฟิกคอมพิวเตอร์ที่จัดเก็บในรูปแบบบีบอัดด้วยระบบจัดทำดัชนีสีที่มีประสิทธิภาพ" 
  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5657435 "เครื่องมือวาดเส้นแบ่งส่วนแบบรันที่มีความสามารถในการปรับขนาดแบบไม่เชิงเส้น" 
  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5627957 "เครื่องมือวาดเส้นแบ่งส่วนแบบรันที่มีความสามารถในการประมวลผลขั้นสูง" 
  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5627956 "โปรแกรมวาดเส้นแบ่งส่วนแบบใช้การยืดขยาย" 
  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5617524 "โปรแกรมวาดเส้นแบ่งส่วนพร้อมความสามารถในการแรเงา" 
  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5611029 "เครื่องมือวาดเส้นแบ่งส่วนแบบรันที่มีความสามารถในการแรเงาแบบไม่เชิงเส้น" 
  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5604852 "วิธีการและอุปกรณ์สำหรับแสดงเส้นโค้งพาราเมตริกบนจอแสดงผลวิดีโอ" 
  • สิทธิบัตรสหรัฐอเมริกาหมายเลข 5600769 "ใช้งานเครื่องมือวาดเส้นแบ่งส่วนด้วยเทคนิคการตัดที่ได้รับการปรับปรุง" 

อัลกอริทึมได้รับการขยายเพิ่มเติมเป็น:

ดูเพิ่มเติม

หมายเหตุ

  1. ^ Paul E. Black.พจนานุกรมอัลกอริทึมและโครงสร้างข้อมูล, NIST . https://xlinux.nist.gov/dads/HTML/bresenham.html
  2. ^จอย, เคนเนธ. "อัลกอริทึมของเบรเซนแฮม" (PDF) . กลุ่มวิจัยด้านการแสดงภาพและกราฟิก ภาควิชาวิทยาการคอมพิวเตอร์ มหาวิทยาลัยแคลิฟอร์เนีย เดวิส. สืบค้นเมื่อ20 ธันวาคม 2016 .
  3. ^ a b Zingl, Alois (2016) [เผยแพร่ก่อนหน้านี้ในปี 2012] อัลกอริทึมการแปลงเส้นโค้งเป็นภาพแรสเตอร์(PDF) (รายงาน)บทคัดย่อและตัวอย่าง HTML: Zingl, Alois (2020) [เผยแพร่ก่อนหน้านี้ในปี 2012]. "ความงดงามของอัลกอริทึมของเบรเซนแฮม" . zingl.github.io .
  4. ^ US 5739818 , Spackman, John Neil, "อุปกรณ์และวิธีการสำหรับการดำเนินการแทรกสอดที่ถูกต้องตามหลักทัศนวิสัยในกราฟิกคอมพิวเตอร์", เผยแพร่เมื่อ 14 เมษายน 1998, มอบหมายให้Canon KK 
  5. ^ "หนังสือ "Michael Abrash's Graphics Programming Black Book Special Edition: The Good, the Bad, and the Run-Sliced" . www.phatcode.net . สืบค้นเมื่อ13 กุมภาพันธ์ 2024 .;
  6. ^ "อัลกอริทึมเส้นเบรเซนแฮมที่ปรับปรุงแล้วของเมอร์ฟี" . homepages.enterprise.net . สืบค้นเมื่อ2018-06-09 .('การเพิ่มความหนาของเส้นโดยการดัดแปลงอัลกอริทึมของเบรเซนแฮม' ใน IBM Technical Disclosure Bulletin เล่มที่ 20 ฉบับที่ 12 พฤษภาคม 1978 หน้า 5358-5366)

อ่านเพิ่มเติม

  • วิทยานิพนธ์ของแพทริค-กิลเลสบันดาประกอบด้วยส่วนขยายของอัลกอริทึมการวาดเส้นของเบรเซนแฮมเพื่อทำการลบเส้นที่ซ่อนอยู่แบบ 3 มิติ
    • ตีพิมพ์ในรายงานการประชุม MICAD '87 เรื่อง CAD/CAM และกราฟิกคอมพิวเตอร์ หน้า 591 - ISBN 2-86601-084-1.
  • การเพิ่มความหนาของเส้นโดยการดัดแปลงอัลกอริทึมของ Bresenham โดย AS Murphy, IBM Technical Disclosure Bulletin, Vol. 20, No. 12, พฤษภาคม 1978
  • Bresenham, Jack (กุมภาพันธ์ 1977). "อัลกอริทึมเชิงเส้นสำหรับการแสดงผลดิจิทัลแบบเพิ่มทีละขั้นของส่วนโค้งวงกลม". Communications of the ACM . 20 (2): 100– 106. doi : 10.1145/359423.359432 .– รวมถึงรายงานทางเทคนิค 1964 27 ม.ค. -11- อัลกอริทึมวงกลม TR-02-286 ห้องปฏิบัติการ IBM ซานโฮเซ
  • หนังสือ Graphics Programming Black Book ฉบับพิเศษของ Michael Abrash: บทที่ 35: Bresenham เร็ว และเร็วคือสิ่งที่ดี
  • อัลกอริทึมการวาดเส้นแบบเบรเซนแฮมโดย โคลิน แฟลนาแกน
  • หน้าเว็บของสถาบันมาตรฐานและเทคโนโลยีแห่งชาติเกี่ยวกับอัลกอริทึมของเบรเซนแฮม
  • ข้อมูลเกี่ยวกับเครื่องพิมพ์พล็อตเตอร์แบบเพิ่มทีละขั้น Calcomp 563
  • อัลกอริทึม Bresenham ในภาษาโปรแกรมหลายภาษา
  • ความงดงามของอัลกอริทึมของเบรเซนแฮม — การใช้งานอย่างง่ายเพื่อวาดเส้นตรง วงกลม วงรี และเส้นโค้งเบซิเยร์
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Bresenham%27s_line_algorithm&oldid=1351252038 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ อัลกอริทึมเส้นของเบรเซนแฮม

อัลกอริทึม เส้นตรงของเบรเซนแฮม (Bresenham's line algorithm)เป็นอัลกอริทึมการวาดเส้นที่กำหนดจุดในแรสเตอร์nมิติที่ควรเลือกเพื่อสร้างเส้นตรงที่ใกล้เคียงที่สุดระหว่างสองจุดโดยทั่วไปแล้...

ประวัติศาสตร์

อัลกอริทึมเส้นของเบรเซนแฮมตั้งชื่อตาม แจ็ค เอลตัน เบรเซนแฮม ผู้พัฒนาอัลกอริทึมนี้ในปี 1962 ที่ IBM ในปี 2001 เบรเซนแฮมเขียนว่า: [ 1 ]

อนุพันธ์

ในการสร้างอัลกอริทึมของเบรเซนแฮม ต้องดำเนินการสองขั้นตอน ขั้นตอนแรกคือการแปลงสมการเส้นตรงจากรูปแบบความชัน-จุดตัดแกน y ทั่วไป ให้เป็นสมการโดยปริยายที่มีสัมประสิทธิ์เป็นจำนวนเต็ม...

สมการเส้นตรง

รูปแบบสมการเส้นตรงแบบความชัน-จุดตัดแกน y เขียนได้ดังนี้