You are on page 1of 7

‫الرسم بالحاسوب‬

‫بلغة ‪C++‬‬
‫النجاح مخفي في روتينك اليومي‬

‫‪ENG.AHLAM ALI‬‬
GRAPHICS ‫مكتبة‬
3 ‫المحاضرة‬

ENG.AHLAM ALI
‫العناوين‬

‫• مقدمة‬
‫• خوارزمية ‪ Bresenham‬لرسم الخط‬
‫• امثلة‬

‫‪ENG.AHLAM ALI‬‬
‫خوارزمية برزنهام رسم الخط‬

‫❑ الفروق الجوهرية بين خوارزمية ‪ DDA‬وخوارزمية برزنهام ‪ ( /‬لماذا تم ظهور خوارزمية البرزنهام لرسم الخط‬

‫رغم وجود خوارزمية ‪ DDA‬لرسم الخط المستقيم ) ؟‬

‫‪ .1‬خوارزمية برزنهام اكثر دقة في تحديد النقاط من اجل رسم الخط المستقيم‬

‫‪ .2‬اسرع في رسم الخط المستقيم ألنها تعتمد على ارقام صحيحة فقط (خوارزمية ‪ DDA‬تعتمد على ارقام عشرية‬

‫ثم تقوم بتقريبها ألقرب رقم صحيح)‬

‫‪ .3‬تصلح هذه الطريقة لتطبيقها على المعالجات البسيطة ‪ ،‬إلنها ال تستهلك إمكانيات المعالج بشكل كبير (بسبب‬

‫تعاملها مع االعداد الصحيحة فقط)‬


‫‪ENG.AHLAM ALI‬‬
#include <iostream>
#include <graphics.h>
using namespace std; ‫ لرسم الخط‬Bresenham ‫خوارزمية‬
void drawLine(int x1, int y1, int x2, int y2) {
int dx = abs(x2 - x1);
int main() {
int dy = abs(y2 - y1);
int gd = DETECT, gm;
int slope_x = (x2 > x1) ? 1 : -1;
initgraph(&gd, &gm, "");
int slope_y = (y2 > y1) ? 1 : -1;
if (dx > dy) {
int x1, y1, x2, y2;
int p = 2 * dy - dx;
cout << "Enter the coordinates of the starting point (x1, y1): ";
while (x1 != x2) {
cin >> x1 >> y1;
putpixel(x1, y1, WHITE);
cout << "Enter the coordinates of the ending point (x2, y2): ";
x1 += slope_x;
cin >> x2 >> y2;
if (p >= 0) {
y1 += slope_y;
drawLine(x1, y1, x2, y2);
p -= 2 * dx; }
p += 2 * dy; }
getch();
} else {
closegraph();
int p = 2 * dx - dy;
return 0; }
while (y1 != y2) {
putpixel(x1, y1, WHITE);
y1 += slope_y;
if (p >= 0) {
x1 += slope_x;
p -= 2 * dy; }
p += 2 * dx; }}}
ENG.AHLAM ALI
‫تمارين‬

‫‪ .1‬قم برسم خط من النقطة (‪ )200 ، 100‬الى النقطة (‪ ، )410 ، 300‬باستخدام‬


‫خوارزمية برزنهام ؟‬
‫‪ .2‬رسم كرسي عن طريق خوارزمية برزنهام ؟‬

‫‪ENG.AHLAM ALI‬‬
‫التكليف‬

‫‪ .1‬قم بشرح وتوضيح خوارزمية ‪ Midpoint‬لرسم الخط رياضيا وبرمجيا ( كود ) ؟‬

‫‪ENG.AHLAM ALI‬‬

You might also like