خوارزمية رسم القطع الناقص بلغة C - إجابة - س ☼ ج
مرحبا بك في قسم الأسئلة والإجابات. نتمنى أن تستمتع بوقتك هنا عبر الاطلاع على المجالات المختلفة كما يمكنك السؤال أو الرد أو حتى التعليق على المشاركات بحرية مع مراعاة الاحترام المتبادل. إن أردت تقييم المشاركات فستحتاج للتسجيل باسم. لاحظ أن اسم المستخدم هنا ليس نفسه اسم المستخدم في الموقع الرئيسي وبالتالي لا يوجد رابط بين الاسمين حالياً.
فحص الدردشة...

مرحبًا بك في قسم الأسئلة والإجابات، حيث يمكنك طرح الأسئلة وانتظار الإجابة عليها من المستخدمين الآخرين.

آخر الانشطة

آخر الانشطة

    الوسوم الأكثر شعبية

    رياضيات علوم فيزياء
    أنشط الأعضاء
    هذا الشهر:
    1. Essam - 81 النقاط
    2. يعرب محمد - 40 النقاط
    3. إجابة - 29 النقاط
    4. muhamad.math - 24 النقاط
    5. ahmedelkady - 11 النقاط
    6. Lina - 8 النقاط
    7. anass - 4 النقاط
    8. The Hunter - 4 النقاط
    9. حسين1992 - 3 النقاط
    10. هدوش - 3 النقاط
    Gute Mathe-Fragen - Bestes Mathe-Forum

    3,590 أسئلة

    2,866 إجابة

    3,062 تعليقات

    1,266 مستخدم

    خوارزمية رسم القطع الناقص بلغة C

    +2 تصويتات
    739 مشاهدات سُئل ديسمبر 18، 2012 بواسطة مجهول  

    إجابة واحدة

    0 تصويتات

    إذا كنت تتعامل مع TC وكانت شاشة جهازك تدعم الرسوميات في وضع DOS (نسخ ما قبل ويندوز فيستا) فإن بإمكانك الاستعانة بمكتبات الرسوميات حيث توجد دالة خاصة برسم القطع الناقص تعرف بـ ellipse وتأخذ الصورة التالية:

    void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius);

    حيث تقوم برسم قطع ناقص (أو جزء من قطع ناقص) بوحدات البكسل مركزه x,y (نسبة إلى أعلى يسار الشاشة بعكس الرسم المعتاد أدنى يسار الورقة)، بداية منحنى الرسم (الزاوية بالدرجات) stangle، نهاية منحنى الرسم (زاوية بالدرجات) endangle، نصف قطر محور السينات xradius، نصف قطر محور الصادات yradius. في حال قطع ناقص كامل أو دائرة ستكون بداية الرسم 0 ونهاية الرسم 360 درجة.

    البرنامج التالي مثال على ذلك (ستحتاج لتعريف مسار مكتبات الرسوميات BGI بشكل صحيح وإلا فلن يعمل البرنامج بالشكل المطلوب).

    #include<graphics.h>
    #include<conio.h>
    main()
    {
       int gd = DETECT, gm;
       initgraph(&gd, &gm, "C:\\TC\\BGI");
       ellipse(200, 100, 0, 360, 80, 40);
       getch();
       closegraph();
       return 0;
    }

    سيرسم قطع ناقص مركزه 200، 100

    الدالة  تقوم بتهيئة شاشة الرسوميات بحسب الوضع المتوافر (DETECT تعني البحث عن النموذج الافتراضي لشاشة الرسوميات. بعد رسم القطاع الناقص، يتم إغلاق شاشة الرسوميات بواسطة الدالة closegraph للعودة إلى شاشة النصوص.

    كائن رسم الدالة: a=2,b=1,-b*sqrt(1-(x/a)*(x/a));b*sqrt(1-(x/a)*(x/a)) (سيتم عرضه بعد حفظ الصفحة)

    في حال لم تكن شاشة الرسوميات جاهزة أو مدعومة، لازال بإمكانك إنشاء خوارزم تقريبي لرسم القطع الناقص في شاشة النصوص (مثلاً عبر طباعة * بشكل قطع ناقص على الشاشة). لرسم الخوارزم نحتاج لبعض المعرفة في الرياضيات عن القطع الناقص. المعادلة العامة لنقطة تقع على منحنى القطع الناقص الذي مركزه $x_0,y_0$ والذي نصف قطر محوره السيني $a$ ونصف قطر محوره الرأسي $b$ بالعلاقة $$\frac{(x-x_0)^2}{a^2} + \frac{(y-y_0)^2}{b^2} = 1$$

    لكي نقوم برسم نقطة على المنحنى نحتاج لإعطاء فرضية لأحد الإحداثيات وليكن الإحداثي السيني بحيث نحصل من خلال المعادلة على الإحداثي الصادي. المعادلة السابقة يمكن إعادة كتابتها في صورة $y=f(x)$ كما يلي $$y= y_0 \pm \frac b a \sqrt{a^2-(x-x_0)^2}$$

    هذا يعني أن نرسم نقطتين أحدهما فوق $y_0$ والأخرى تحت $y_0$ بنفس البعد.

    نقوم بتجهيز الخوارزم على هذا الأساس بحيث نطبع علامة النجمة * نسبة إلى مركز نحدده سلفا ويمكن أن نفيد من دالة gotoxy المسؤولة عن إعادة توضيع المؤشر في مكان ما على الشاشة بدلالة الإحداثي. إذا لم نعلم عن دالة التموضع gotoxy مازال بإمكاننا اللجوء للدالة التقليدية printf مباشرة ولكن بعد إزاحة عدد معين من المسافات المكافئة بدءأ من أعلى الشاشة على اليسار.

    البرنامج التالي يوضح ما سبق

    # include <conio.h>
    # include <math.h>
    void Ellipse(int x0,int y0,int a, int b);
    void main(){
      clrscr();
      Ellipse(40, 13, 30, 10);
      getch();
    }
    void Ellipse(int x0,int y0,int a, int b)
    {
      int x;
      float D;
      for(x=x0-a;x<=x0+a;x++)
      {
        D= b * sqrt(a*a - (x-x0)*(x-x0)) / a;
        gotoxy(x , y0 - D);
        cprintf("*");
        gotoxy(x , y0 + D);
        cprintf("*");
      }
    }
    
    تم الرد عليه ديسمبر 18، 2012 بواسطة إجابة محترف (104,110 نقاط)  
    عُدل مارس 23، 2013 بواسطة طارق
    مشاريع شقيقة مواقع أسئلة وإجابات عربية برامج قد تحتاجها مواقع أسئلة وإجابات أجنبية
    قسم الويكي
    قسم الكتب
    معالج الرياضيات
    دردشة
    ويكيبيديا أسئلة
    منتدى الفيزياء التعليمي
    شبكة الرياضيات رمز
    موقع الكتب العربية
    إجابات Google
    مشغل الفلاش
    موزيلا
    كروم
    برنامج الأسئلة والإجابات
    اكستشينج
    ماث اوفرفلو
    ويكي:علوم
    ويكي:رياضيات
    ولفرام الفا
    انسرز
    ياهو أنسرز
    ...