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

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

رياضيات علوم فيزياء
أنشط الأعضاء
هذا الشهر:
  1. anass - 76 النقاط
  2. إجابة - 40 النقاط
  3. همسة القلوب - 10 النقاط
  4. الحقيقة - 9 النقاط
  5. mogultoby - 9 النقاط
  6. slurpfock - 9 النقاط
  7. محمد حسن - 9 النقاط
  8. Arwa Gh - 7 النقاط
  9. ميس - 7 النقاط
  10. رونق الجفوف - 5 النقاط
Gute Mathe-Fragen - Bestes Mathe-Forum

2,658 أسئلة

2,128 إجابة

2,097 تعليقات

818 مستخدم

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

+2 تصويتات
592 مشاهدات سُئل ديسمبر 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 بواسطة إجابة هاو (68,320 نقاط)  
عُدل مارس 23، 2013 بواسطة طارق
مشاريع شقيقة مواقع أسئلة وإجابات عربية برامج قد تحتاجها مواقع أسئلة وإجابات أجنبية
قسم الويكي
قسم الكتب
معالج الرياضيات
دردشة
ويكيبيديا أسئلة
منتدى الفيزياء التعليمي
شبكة الرياضيات رمز
موقع الكتب العربية
إجابات Google
مشغل الفلاش
موزيلا
كروم
برنامج الأسئلة والإجابات
ماث اكستشينج
فيزكس اكستشينج
ويكي:علوم
ويكي:رياضيات
ولفرام الفا
انسرز
ياهو أنسرز
...