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

الناقل : elmasry | الكاتب الأصلى : Dev:MOH-TAHA | المصدر : www.arabteam2000-forum.com

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

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

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

،،

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

Posted Image

لننظر الى الصورة ،، على فرض ان (xc,yc) هي مركز الدائرة
ونصف قطرها يساوي r
والاحداثيات الاخرى هي احداثيات ال x و الy
ولنضع في اذهاننا ان احداثي الاكس الموجب في الحاسوب هو نفس احداثي الاكس الموجب على الصبورة ،، أما احداثي ال y فهو عكس احداثي ال y على الصبورة ،،

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

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

لدينا قانون رياضي يقول
x=r*Cos a
y=r*Sin a

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

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

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

@Override
        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);

        }

        }



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

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

الآن لدينا نقطة (x,y)
لو قمنا بعمل انعكاس لها على المحور y=x
سنجد ان احداثياتها هي
(y,x)
ولو قمنا بعد ذلك بعمل انعكاس لها على محور ال y
سنجد ان احداثياتها اصبحت
(-y,x)

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

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

الان ساضع دالة ال paint
        @Override
        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);


        }

        }


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

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

دعواتكم لي ،،
 
ملف مرفق(ملفات)
 
ملف مرفق  cycle.rar (2.2كيلو )