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

شرح رسم دائرة بالطريقة العادية وبالتماثل ،، باستخدام الجافا

بدأه Dev:MOH-TAHA في 17 ديسمبر 2009 · 5 رد · 7,473 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ،،

اليوم ساقوم بشرح طريقة رسم دائرة بالطريقة العادية و باستخدام نظريات التماثل

بالطبع سأقوم باستخدام لغة ال جافا

،،

اولا الطريقة العادية ،،

4191601235_3a2bf6b001_o.jpg

لننظر الى الصورة ،، على فرض ان (xc,yc) هي مركز الدائرة

ونصف قطرها يساوي r

والاحداثيات الاخرى هي احداثيات ال x و الy

ولنضع في اذهاننا ان احداثي الاكس الموجب في الحاسوب هو نفس احداثي الاكس الموجب على الصبورة ،، أما احداثي ال y فهو عكس احداثي ال y على الصبورة ،،

الاحداثيات الاخرى صاحبة اللون الاسود هي نقاط تلاقي احداثيي ال x و y مع النافذة ذات الحجم 400X400

على فرض ان لدي نقطة على محيط الدائرة وهي (x,y) فكيف سنستطيع معرفة قيم احداثيات هذه النقطة ؟

لدينا قانون رياضي يقول

x=r*Cos a

y=r*Sin a

حيث a هي الزاوية المبينة اعلاه وال r هي نصف قطر الدائرة

اذن فقد انتهينا ووصلنا الى دور البرمجة ،،

سأضع كود دالة ال paint وملف المصدر سيكون في المرفقات


public void paint(Graphics g){
g.drawLine(0, yc, 499,yc);
g.drawLine(xc, 0, xc,499);

for(a=0;a<=360;a++){
x=(int)(r*Math.cos(a*Math.PI/180));
y=(int)(r*Math.sin(a*Math.PI/180));
g.drawLine(xc+x, yc+y, xc+x, yc+y);

}

}
@Override

الطريقة الثانية وهي رسمها بالتماثل

ونستخدمها ونفضلها عن الطريقة الاولى لان عملية حساب ال sin و ال Cos مكلفة في الحاسوب فنحاول ان نقللها

لننظر للرسمة التالية

4191601237_fcdf213c20_o.jpg

الآن لدينا نقطة (x,y)

لو قمنا بعمل انعكاس لها على المحور y=x

سنجد ان احداثياتها هي

(y,x)

ولو قمنا بعد ذلك بعمل انعكاس لها على محور ال y

سنجد ان احداثياتها اصبحت

(-y,x)

ملاحظة: اضطررت لكتابتها في تاج كود لكي تكون الاشارة صحيحة ،،

ولو تابعنا عمل انعكاسات كما هو موضح في الصورة سنحصل على الاحداثيات الموضحة في الصورة ،،

الان ساضع دالة ال paint


public void paint(Graphics g){
g.drawLine(0, yc, 499,yc);
g.drawLine(xc, 0, xc,499);

for(a=0;a<=45;a++){
x=(int)(r*Math.cos(a*Math.PI/180));
y=(int)(r*Math.sin(a*Math.PI/180));
g.drawLine(xc+x, yc+y, xc+x, yc+y);
g.drawLine(xc+y, yc+x, xc+y, yc+x);
g.drawLine(xc+x, yc-y, xc+x, yc-y);
g.drawLine(xc+y, yc-x, xc+y, yc-x);
g.drawLine(xc-y, yc-x, xc-y, yc-x);
g.drawLine(xc-x, yc-y, xc-x, yc-y);
g.drawLine(xc-x, yc+y, xc-x, yc+y);
g.drawLine(xc-y, yc+x, xc-y, yc+x);


}

}
	@Override

في هذه المرة قسمنا الدائرة كما لاحظتم الى 8 اقسام ،، بالطبع نستطيع ان نقسمها لأكثر من ذلك ونقوم باجراء الحسابات وبرمجتها

اتمنى ان يكون الشرح سهلا وواضحا واي استفسار انا والاخوة موجودون

دعواتكم لي ،،

cycle.rar

تم تعديل هذه المشاركة بواسطة Dev:MOH-TAHA في 17 ديسمبر 2009 في 21:57

3

Linux for human beings

#2

بارك الله فيك ، مقال واضح ومرتب . تم إضافة المقال إلى فهرس القسم .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4

اهلا بكم اخواني :)

Linux for human beings

#5

موضوع جميل :)

لم أكن أعرف طريقة التماثل، لكني مازلت أفضل طريقة معادلة الدائرة :P لأنها أسهل :unsure::wacko:

#6

اهلا بك أخي herch صحيح هي أسهل ولكن طريقة التماثل سهلة للغاية والطريقة العادية مكلفة بالنسبة لل cpu اما طريقة التماثل أقل تكلفة بكثير

شكرا لتواجدك :)

Linux for human beings

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…