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

بخصوص دالة ترسم Ellipse أتمنى توضيح هذا الكود اللي نتيجته شكل بيضاوي

بدأه بدر العتيبي في 27 نوفمبر 2008 · 2 رد · 1,009 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

بداية يشرفني أن أكون أحد أعضاء هذا المنتدى منتديات الفريق العربي للبرمجة

و إن شاء نستفيد منكم و نتمنى أن

نفيدكم ...

أحبتي في الله مشرفوا هذا القسم أعتذر إن لم يكن موضوعي هذا خاص بهذا القسم لأني احترت أين أضعه ثم وضعته هنا بناء على فهم ماقرأت لكل نوع ..

أتمنى مساعدتي في شرح هذا الكود سطر سطر ماعدا المتغيرات مثل الاكس و غيرها يعني بسطر واحد

لأن الدكتور طلب منا واجب و هذا هو الحل في مادة

Graphic

و أتمنى مساعدتي في شرح هذا الكود لأني راح استخدمه بكثرة في الفصل لاسيما و ان درجة العملي هي اللي عليها الكلام

آخر موعد لتسليمه هو السبت يعني اتمنى مساعدتي هاليومين خصوصا وانا عندي اختبار في نفس اليوم غير هالمادة وواجبها فلاتبخلوا علي بمالديكم من علم

  1. void CGraphicsDlg::OnEllipse()
  2. {
  3. int rx = 50
  4. int ry = 100
  5. int xc = 150
  6. int yc = 200
  7. int x = 0
  8. int y = ry
  9.  
  10.  
  11. CClientDC pDC(this) // وش معنى هذا الكود حبذا التفصيل أكثر
  12. pDC.SetPixel(0 + xc,ry + yc ,100) وش المقصود بهذا الكود
  13. pDC.SetPixel(-1 * x + xc,y + yc,100)
  14. pDC.SetPixel(x + xc, -1 * y + yc,100)
  15. pDC.SetPixel( -1 *x + xc, (-1 *y) + yc ,100)
  16.  
  17. int p1 = ( ry * ry ) - ( rx * rx ) * ry + (0.25) * (rx * rx)
  18. int ryd = 2 * ( ry * ry ) * ( x + 1 ) // 2 ry^2 * xk+1
  19. int rxd = 2 *( rx * rx) * (y+1) // 2 rx^2 * yk+1
  20.  
  21. while( ryd <= rxd)
  22. {
  23. if(p1 < 0)
  24. {
  25. x++
  26. p1 = p1 + 2 * (ry * ry) * (x+1) + ry * ry
  27. }
  28. else
  29. {
  30. x++
  31. y--
  32. p1 = p1 + 2 * ry * ry * (x+1) - 2 * rx * rx * (y+1) + ry * ry
  33. }
  34.  
  35. pDC.SetPixel(x + xc,y + yc,100)
  36. pDC.SetPixel(-1 * x + xc,y + yc,100)
  37. pDC.SetPixel(x + xc, -1 * y + yc,100)
  38. pDC.SetPixel( -1 *x + xc, (-1 *y) + yc ,100)
  39.  
  40. //p1 = ( ry * ry ) - ( rx * rx ) * ry + (0.25) * (rx * rx)
  41. ryd = 2 * ( ry * ry ) * ( x + 1 ) // 2 ry^2 * xk+1
  42. rxd = 2 *( rx * rx) * (y+1) // 2 rx^2 * yk+1
  43.  
  44. }
  45.  
  46. int p2 = ry * ry * (x+0.5) * (x+0.5) + rx * rx * (y -1) * (y-1) - rx * rx * ry
    * ry
  47.  
  48. while( y > 0 )
  49. {
  50. if(p2 > 0)
  51. {
  52. y--
  53. p2 = p2 - 2 * rx * rx * (y+1) + rx * rx
  54.  
  55. }
  56.  
  57. else
  58. {
  59. x++
  60. y--
  61. p2 = p2 + 2 * ry * ry * (x+1) - 2 * rx * rx * (y+1) + rx * rx
  62. }
  63.  
  64. pDC.SetPixel(x + xc,y + yc,100) pDC.SetPixel(-1 * x + xc,y + yc,100)
  65. pDC.SetPixel(x + xc, -1 * y + yc,100)
  66. pDC.SetPixel( -1 *x + xc, (-1 *y) + yc ,100)
  67.  
  68. }
  69.  
  70.  
  71. }
  72.  

تم تعديل هذه المشاركة بواسطة بدر العتيبي في 27 نوفمبر 2008 في 14:42

#2

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

واضح أنكم تتعاملون مع MFC , يجب أن تكون قد درستها قبل أن تتعامل مع graphics programming ,

عموما .. سأشرح بناء على فهمي لل Win32 API وأعتقد بنسبة كبيرة أنه لا يوجد اختلاف عن MFC .

1- أنت تنشئ نافذة .. ولكل نافذة مقبض Handle ..

حتى تستطيع أن ترسم بداخل النافذة .. فأنت بحاجة لما يسمى Device Context

وهو مجرد هيكل بياني data structure يحتوي على معلومات عن خصائص الرسم .. مثلا .. لون النقطة .. و نوع PEN و نوع Brush .. بل وأظن أنه يحوي أيضا على مؤشر يشير الى محتويات النافذة .. مثل الصورة .

لذلك اذا أردت أن ترسم على نافذة .. فخذ أولا Device Context

CClientDC pDC(this)

this تعني النافذة التي تتعامل معها

وهي عبارة عن كلاس

CWnd

أما SetPixel فهي مجرد دالة تقوم برسم نقطة بمعلومية ثلاثة بارمترات :

1- احداثي السيني .

2- الاحداثي الصادي .

3- لون النقطة .. تستطيع استخدام الماكرو RGB .. مثال ..

SetPixel ( 100 , 200 , RGB( 255 , 0 , 0) );

ترسم نقطة في الاحداثي السيني = 100 , الصادي = 200 ولون النقطة أحمر

باقي الاكواد هي الخوارزمية التي تعمل عليها .. ولا أظنك تسأل عنه .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

أخي الشمري شاكر لك مرورك و ردكـ و الله يكتب لك الأجر مع عصر هالجمعة المباركة

فهمتني ووضحت وماقصرت الله يبارك فيك

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

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

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

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

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