เส้นเชื่อมต่อสองจุด เป็นองค์ประกอบพื้นฐานในกราฟิก ในการวาดเส้น คุณต้องมีจุดสองจุดระหว่างนั้นคุณสามารถวาดเส้นบนหน้าจอและในแง่ของกราฟิก เราเรียกจุดนั้นว่าเป็นพิกเซล และทุกพิกเซลเชื่อมโยงกับพิกัดจำนวนเต็ม เราได้รับพิกัดจำนวนเต็มในรูปแบบของ (x1, y1) และ (x2, y2) โดยที่ x1
มีสามอัลกอริธึมที่แตกต่างกันซึ่งถูกใช้เพื่อสร้างเส้นบนหน้าจอและอัลกอริธึมเหล่านี้คือ −
-
อัลกอริธึม DDA
-
การสร้างไลน์ของ Bresenham
-
อัลกอริทึมจุดกึ่งกลาง
อัลกอริทึมจุดกึ่งกลาง
ขั้นตอนในการวาดเส้นโดยใช้ Mid-Point Line Algorithm are-
-
คำนวณจุดกึ่งกลางโดยใช้จุดที่อยู่ปัจจุบัน เช่น East(Xp+1, Yp) และ North East(Xp+1, Yp+1) คือจุดกลาง(Xp+1, Yp+1/2)
-
ตอนนี้ จุดกึ่งกลางจะกำหนดตำแหน่งสำหรับพิกัดถัดไปบนหน้าจอ เช่น
-
หากจุดกึ่งกลางอยู่เหนือเส้น พิกัดถัดไปจะอยู่ที่ทิศตะวันออก
-
หากจุดกึ่งกลางอยู่ใต้เส้น พิกัดถัดไปจะอยู่ที่ทิศตะวันออกเฉียงเหนือ
-
ให้เราดูสถานการณ์อินพุตเอาต์พุตต่างๆ สำหรับสิ่งนี้ -
ใน − int x_1 =3, int y_1 =3, int x_2 =10, int y_2 =8
ออก − จุดกึ่งกลางผ่านอัลกอริธึมการสร้างไลน์คือ:3,3 4,4 5,5 6,5 7,6 8,7 9,7 10,8
คำอธิบาย − เราได้รับพิกัดเป็น x_1 =3, x_2 =10, y_1 =3, y_2 =8 ดังนั้น ขั้นตอนแรกในการคำนวณ dx =x_2 - x_1 เป็น 10 - 3 =7 และ dy เป็น y_2 - y_1 เป็น 8 - 3 =5 แล้วตรวจสอบว่า dy น้อยกว่า dx หรือไม่ ตอนนี้คำนวณ d เป็น 5 - (7 / 2) =2 จุดแรกจะเป็น x_1 และ y_1 พิมพ์พวกเขา ตอนนี้ในขณะที่ x_1
ใน − int x_1 =2, int y_1 =2, int x_2 =3, int y_2 =4
ออก − จุดกึ่งกลางผ่านอัลกอริธึมการสร้างไลน์คือ:2,2 3,3 3,4
คำอธิบาย − เราได้รับพิกัดเป็น x_1 =2, x_2 =2, y_1 =3, y_2 =4 ดังนั้น เมื่อใช้อัลกอริธึมการสร้างเส้นจุดกึ่งกลาง เราจะคำนวณพิกเซลจุดกึ่งกลางทั้งหมดเป็นผลลัพธ์
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนจุดจำนวนเต็มเป็น int x_1, int y_1, int x_2, int y_2 เรียกใช้ฟังก์ชันเป็น Mid_Point(x_1, y_1, x_2, y_2) เพื่อสร้างเส้น
-
ภายในฟังก์ชัน Mid_Point(x_1, y_1, x_2, y_2)
-
คำนวณ dx เป็น x_2 - x_1 และ dy เป็น y_2 - y_1
-
ตรวจสอบว่า dy น้อยกว่าหรือเท่ากับ dx แล้วตั้งค่า d เป็น dy - (dx / 2) และตั้งค่า first_pt เป็น x_1 และ second_pt เป็น y_1
-
พิมพ์ first_pt และ second_pt.
-
เริ่มในขณะที่ first_pt น้อยกว่า x_2 จากนั้นเพิ่ม first_pt เป็น 1 และตรวจสอบว่า IF d น้อยกว่า 0 จากนั้นตั้งค่า d เป็น d + dy ELSE ตั้งค่า d เป็น d + (dy - dx) และเพิ่ม second_pt โดย 1 พิมพ์ first_pt และ second_pt .
-
อื่น ถ้า dx น้อยกว่า dy ให้ตั้งค่า d เป็น dx - (dy/2) และตั้งค่า first_pt เป็น x_1 และ second_pt เป็น y_1 แล้วพิมพ์ first_pt และ second_pt
-
เริ่มในขณะที่วินาที _pt น้อยกว่า y_2 ภายใน WHILE ให้เพิ่ม thesecond_pt ขึ้น 1 ตรวจสอบว่า IF d น้อยกว่า 0 แล้วตั้งค่า d เป็น d + dx ELSE, d ถึง d + (dx - dy) และเพิ่ม first_pt ทีละ 1
-
พิมพ์ first_pt และ second_pt.
-
ตัวอย่าง
#include<bits/stdc++.h> using namespace std; void Mid_Point(int x_1, int y_1, int x_2, int y_2){ int dx = x_2 - x_1; int dy = y_2 - y_1; if(dy <= dx){ int d = dy - (dx / 2); int first_pt = x_1; int second_pt = y_1; cout<< first_pt << "," << second_pt << "\n"; while(first_pt < x_2){ first_pt++; if(d < 0){ d = d + dy; } else{ d = d + (dy - dx); second_pt++; } cout << first_pt << "," << second_pt << "\n"; } } else if(dx < dy){ int d = dx - (dy/2); int first_pt = x_1; int second_pt = y_1; cout << first_pt << "," << second_pt << "\n"; while(second_pt < y_2){ second_pt++; if(d < 0){ d = d + dx; } else{ d += (dx - dy); first_pt++; } cout << first_pt << "," << second_pt << "\n"; } } } int main(){ int x_1 = 3; int y_1 = 3; int x_2 = 10; int y_2 = 8; cout<<"Mid-Points through Line Generation Algorithm are: "; Mid_Point(x_1, y_1, x_2, y_2); return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
Mid-Points through Line Generation Algorithm are: 3,3 4,4 5,5 6,5 7,6 8,7 9,7 10,8