إذا كنت تتعامل مع 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("*");
}
}
| مشاريع شقيقة | مواقع أسئلة وإجابات عربية | برامج قد تحتاجها | مواقع أسئلة وإجابات أجنبية |
|---|---|---|---|
|
قسم الويكي قسم الكتب معالج الرياضيات دردشة |
ويكيبيديا أسئلة إجابات Google |
مشغل الفلاش موزيلا |
ماث اكستشينج فيزكس اكستشينج ويكي:علوم ويكي:رياضيات ولفرام الفا انسرز ياهو أنسرز |