الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Bresenham's Generation

مغلق
بدأه ابو صخر في 2 فبراير 2008 · 7 رد · 1,616 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم

اود مساعدتم في حل معادلة ترسم ثلاث دوائر متقاطعة ورسم لاين من كل نقطة تقاطع لينتهي في نقطة تقاطع ثانية للدائرة وهذه المعادلة اريد ارسمها على طريقةbresenham's generation algorithem

ارجوكم محتاجة حيل وبشكل سريع

هذا الرسم

-----------1---.jpg

واكون شاكر لكم

تحياتي لكم جميعا

#2

السلام عليكم،

أخي الفاضل ربما تفيدك هذه الروابط:

و الله الموفق،

[bg=#000000]

La filosofia e scritta in questo grandissimo libro che continuamente ci sta aperto innanzi a gli occhi (io dico l’universo), ma non si pu o intender se prima non s’impara a intender la lingua e conoscere i caratteri ne’ quali e scritto. Egli e scritto in lingua matematica e i caratteri sono triangoli, cerchi, ed altre figure geometriche senza i quali mezi e impossibile a intenderne umanamente parola; senza questi e un aggirarsi vanamente per un oscuro laberinto.

Galileo

لقد كُتبت الفلسفة في هذا الكتاب العظيم الذي يوجد دائماً أمام أعيننا (و أعني به الكون)، و لكن لا يمكن لأحدٍ أن يفهمه ما لم يتعلم في البدء حروفَ اللغة التي كُتب بها. لقد كُتب بلغة الرياضيات، و الحروف هي مثلثاتٌ و دوائر و أشكالٌ هندسية أخرى؛ بدون هذه اللغة يكون من المستحيل على البشر أن يفهموا و لو كلمة، بدون هذه اللغة نُمسي كمن يتخبطُ بلا هدى في متاهةٍ مظلمة.

جاليليو

[/bg]

Yasser

#3

السلام عليكم،

و هذه أيضا تحوي بعض المواد الجيدة عن الموضوع:

و الله الموفق،

[bg=#000000]

La filosofia e scritta in questo grandissimo libro che continuamente ci sta aperto innanzi a gli occhi (io dico l’universo), ma non si pu o intender se prima non s’impara a intender la lingua e conoscere i caratteri ne’ quali e scritto. Egli e scritto in lingua matematica e i caratteri sono triangoli, cerchi, ed altre figure geometriche senza i quali mezi e impossibile a intenderne umanamente parola; senza questi e un aggirarsi vanamente per un oscuro laberinto.

Galileo

لقد كُتبت الفلسفة في هذا الكتاب العظيم الذي يوجد دائماً أمام أعيننا (و أعني به الكون)، و لكن لا يمكن لأحدٍ أن يفهمه ما لم يتعلم في البدء حروفَ اللغة التي كُتب بها. لقد كُتب بلغة الرياضيات، و الحروف هي مثلثاتٌ و دوائر و أشكالٌ هندسية أخرى؛ بدون هذه اللغة يكون من المستحيل على البشر أن يفهموا و لو كلمة، بدون هذه اللغة نُمسي كمن يتخبطُ بلا هدى في متاهةٍ مظلمة.

جاليليو

[/bg]

Yasser

#4

السلام عليكم،

و هذه مجموعة من أكواد CPP توضح استخدام الخوارزمية في توليد الخطوط و الدوائر و يمكنك الإستعانة بها أو بعضها، و تشمل:

Circle by Bresanham's Algorithm




#include <iostream.h>


#include <graphics.h>


#include <math.h>


#include <conio.h>




void drawcircle(int x1, int y1, int r)


{


int x=0,y=r,p;


p=3-2*r;


while (x<y)


{


if (p<0)


{


p+=2*(2*x+3);


x++;


}


else


{


x++,y--;


p+=2*(2*x+5)-4*y;


}


putpixel(x+getmaxx()/2+x1,y+getmaxy()/2-y1,5);


putpixel(-x+getmaxx()/2+x1 ,y+getmaxy()/2-y1,5);


putpixel(x+getmaxx()/2+x1,-y+getmaxy()/2-y1,5);


putpixel(-x+getmaxx()/2+x1,-y+getmaxy()/2-y1,5);


putpixel(y+getmaxx()/2+x1,x+getmaxy()/2-y1,5);


putpixel(-y+getmaxx()/2+x1,x+getmaxy()/2-y1,5);


putpixel(y+getmaxx()/2+x1,-x+getmaxy()/2-y1,5);


putpixel(-y+getmaxx()/2+x1,-x+getmaxy()/2-y1,5);


}




}




void main()


{


int x1, y1, r;


int gdriver = DETECT, gmode, errorcode;


initgraph(&gdriver, &gmode, "");


line(0,getmaxy()/2,getmaxx(),getmaxy()/2);


line(getmaxx()/2,0,getmaxx()/2,getmaxy());


cout<<"Enter x1 ";


cin>>x1;


cout<<"Enter y1 ";


cin>>y1;


cout<<"Enter r ";


cin>>r;


drawcircle(x1,y1,r);


getch();


}
//Circle by Bresanham's Algorithm

Circle by Mid-Point Approach




#include <iostream.h>

#include <graphics.h>

#include <math.h>

#include <conio.h>



void drawcircle(int x1, int y1, int r)

{

int x=0,y=r,d;

d=1-r;

while (x<y)

{

if (d<0)

{

d+=2*x+3;

x++;

}

else

{

x++,y--;

d+=2*x+5-2*y;

}

putpixel(x+getmaxx()/2+x1,y+getmaxy()/2-y1,5);

putpixel(-x+getmaxx()/2+x1 ,y+getmaxy()/2-y1,5);

putpixel(x+getmaxx()/2+x1,-y+getmaxy()/2-y1,5);

putpixel(-x+getmaxx()/2+x1,-y+getmaxy()/2-y1,5);

putpixel(y+getmaxx()/2+x1,x+getmaxy()/2-y1,5);

putpixel(-y+getmaxx()/2+x1,x+getmaxy()/2-y1,5);

putpixel(y+getmaxx()/2+x1,-x+getmaxy()/2-y1,5);


putpixel(-y+getmaxx()/2+x1,-x+getmaxy()/2-y1,5);



}



}



void main()

{

int x1, y1, r;

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "");

line(0,getmaxy()/2,getmaxx(),getmaxy()/2);

line(getmaxx()/2,0,getmaxx()/2,getmaxy());

cout<<"Enter x1 ";

cin>>x1;

cout<<"Enter y1 ";

cin>>y1;

cout<<"Enter r ";

cin>>r;

drawcircle(x1,y1,r);

getch();

}
//Circle by Mid-Point Approach

Line by Direct Draw Algorithm




#include <iostream.h>

#include <graphics.h>

#include <math.h>

#include <conio.h>



void drawline(int x1, int y1, int x2, int y2)

{

int temp;

if (x2<x1)

{

temp=x2;

x2=x1;

x1=temp;

temp=y2;

y2=y1;

y1=temp;

}

float x=x1, y=y1;

int dx, dy, step;

float xi, yi;

while (x<x2)

{



dx=x2-x1;

dy=y2-y1;

step=abs(dx)>abs(dy)?abs(dx):abs(dy);

xi=double(dx)/step;

yi=double(dy)/step;

for (int k=1; k<=step; k++)

{

y=y+yi;

x=x+xi;

putpixel(x+getmaxx()/2,getmaxy()/2-y,5);

}

}

}



void main()

{

int x1, x2, y1, y2;

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "");

line(0,getmaxy()/2,getmaxx(),getmaxy()/2);

line(getmaxx()/2,0,getmaxx()/2,getmaxy());

cout<<"Enter x1 ";

cin>>x1;

cout<<"Enter y1 ";

cin>>y1;

cout<<"Enter x2 ";

cin>>x2;

cout<<"Enter y2 ";

cin>>y2;

drawline(x1,y1,x2,y2);

getch();

}
//Line by Direct Draw Algorithm

Line by Bresanham's Algorithm




#include <iostream.h>


#include <graphics.h>


#include <math.h>


#include <conio.h>




void drawline(int x1, int y1, int x2, int y2)


{


int temp,p, dx, dy;


dx=abs(x2-x1);


dy=abs(y2-y1);


float m;


m=float(y2-y1)/float(x2-x1)>0?2:1;


if (abs(x2-x1)>abs(y2-y1))


{


if (x2<x1)


{


temp=x2;


x2=x1;


x1=temp;


temp=y2;


y2=y1;


y1=temp;


}


int x=x1,y=y1;


p=2*dy-dx;


while (x<x2)


{


x++;


if (p<=0)


p+=2*dy;


else


{


p+=2*(dy-dx);


y=y+pow(-1,m);


}


putpixel(x+getmaxx()/2,getmaxy()/2-y,5);


}


}


else


{


if (y2<y1)


{


temp=x2;


x2=x1;


x1=temp;


temp=y2;


y2=y1;


y1=temp;


}


int x=x1,y=y1;


p=2*dx-dy;


while (y<y2)


{


y++;


if (p<=0)


p+=2*dx;


else


{


p+=2*(dx-dy);


x=x+pow(-1,m);


}


putpixel(x+getmaxx()/2,getmaxy()/2-y,5);


}


}


}




void main()


{


int x1, x2, y1, y2;


int gdriver = DETECT, gmode, errorcode;


initgraph(&gdriver, &gmode, "");


line(0,getmaxy()/2,getmaxx(),getmaxy()/2);


line(getmaxx()/2,0,getmaxx()/2,getmaxy());


cout<<"Enter x1 ";


cin>>x1;


cout<<"Enter y1 ";


cin>>y1;


cout<<"Enter x2 ";


cin>>x2;


cout<<"Enter y2 ";


cin>>y2;


drawline(x1,y1,x2,y2);


getch();


}
//Line by Bresanham's Algorithm

الأكواد تجدها بالمرفقات

و الله الموفق،

Bresenham.rar

[bg=#000000]

La filosofia e scritta in questo grandissimo libro che continuamente ci sta aperto innanzi a gli occhi (io dico l’universo), ma non si pu o intender se prima non s’impara a intender la lingua e conoscere i caratteri ne’ quali e scritto. Egli e scritto in lingua matematica e i caratteri sono triangoli, cerchi, ed altre figure geometriche senza i quali mezi e impossibile a intenderne umanamente parola; senza questi e un aggirarsi vanamente per un oscuro laberinto.

Galileo

لقد كُتبت الفلسفة في هذا الكتاب العظيم الذي يوجد دائماً أمام أعيننا (و أعني به الكون)، و لكن لا يمكن لأحدٍ أن يفهمه ما لم يتعلم في البدء حروفَ اللغة التي كُتب بها. لقد كُتب بلغة الرياضيات، و الحروف هي مثلثاتٌ و دوائر و أشكالٌ هندسية أخرى؛ بدون هذه اللغة يكون من المستحيل على البشر أن يفهموا و لو كلمة، بدون هذه اللغة نُمسي كمن يتخبطُ بلا هدى في متاهةٍ مظلمة.

جاليليو

[/bg]

Yasser

#5

السلام عليكم رحمة الله

أخى الفاضل ياسر

بارك الله فيك على مجهودك الوافر. لكن اخى الفاضل واضح ان السؤال هو حل واجب كان مفروض يقوم به الاخ صاحب السؤال بنفسه. ولكنه اختار الحل الاسهل , وهو ايجاد من يقوم له بذلك.

بالله التوفيق ,,,

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#6

مشكور اخي الاستاذ ydviperوانا اكون لك ممنون على مساعدتي في هذا الموضوع

وايضاً انا مشكور من الاستاذ عماد حمدي لحرصة ولكن انا لا احتاجة في واجب ولكن احتاجة في جزء من بحث اقوم بعملة للحصول على 10 درجات على مادة الفصل الاول مع العلم اني حصلت على درجة 12.5 من 15 في الفصل الاول وانا استطيع ان ارسم دائرة واحدة ولكن الذي يحيرني كيف ادعها تتقاط في ثلاث دوائر

والذي يوجد لدية المزيد لا يبخل علينا وشكرا لكم جميعا

اخوكم shadowMan

#7
ابو صخر كتب:
انا لا احتاجه في واجب ولكن احتاجة في جزء من بحث اقوم بعملة للحصول على 10 درجات على مادة الفصل الاول مع العلم اني حصلت على درجة 12.5 من 15 في الفصل الاول

:blink: :blink:

اليس هذا واجبا

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#8

لا يا اخي يا عزيزي ليس واجبا حين اني الان بعدين عن الكلية بسس العطلة واني لو كنت هناك لذهبت الى المكتبة واخرجتة بكل سهولة ولكن لعدم وجود هذا الكتاب الان في بلدتي التجات الى الانترنيت

هذا الموضوع مغلق.

مواضيع مشابهة