رسم مستقيم بمعلومية زاوية

رسم مستقيم بمعلومية زاوية

السلام عليكم

 

ها أنا ذا أعود لكم بعد انقطاع عنكم شغلني فيه عدة مشاريع , لكني كنت اتابع المنتدى من حين لآخر

درسنا اليوم يتعلق بالرسم بالحاسب الآلي بل بأساسيات الرسم بالحاسب الآلي , دعوني اعرفكم بضيفتنا هذا المساء إنها دالة رسم المستقيم في الفيجوال بيسك دوت نت

DrawLine

وتأخذ احد اربعة طرق لرسم المستقيم وفي كل طريقة يجب ان يكون لديك قلم J Pen

و القلم في برمجة الفيجوال بيسك دونت لايزم تعريفه بشكل مستقل وككائن منفصل لكن تسطيع ان تعرفه بشكل مستقل لمزيد من الراحة وتنظيم الكود , وأهم خصائص القم هي اللون ويعرف قلم الرسم فيي الفيجوال بيسك كالآني

Dim MyPen As New Pen(Color.Blue)

مع تغيير اللون حسب ماتراه مناسب

هناك ايضا خصائص عدة للقم كالتنقيط DashStyle لجعل القلم عبارة عن خط منقط ...... وغيرها مما لايسع المقال لها

نعود لنقول ان DrawLine تأخذ أربعة طرق لكل طريقة قيمها

الطريقة الأولى

DrawLine(Pen, Point, Point)

وتأخذ القيم  كالتالي  : القلم , النقطة الأولى ( بإحداثيات ارقامها صحيحة - int) و النقطة الثانية ( بإحداثيات ارقامها صحيحة  -  int )

الطريقة الثانية

DrawLine(Pen, PointF, PointF)

وتأخذ القيم  كالتالي  : القلم , النقطة الأولى ( بإحداثيات ارقامها عشرية - Single) و النقطة الثانية ( بإحداثيات ارقامها عشرية -  Single )

الطريقة الثالثة

DrawLine(Pen, Int32, Int32, Int32, Int32)

وتأخذ القيم  كالتالي  : القلم , الإحداثي السيني للنقطة الأولى برقم صحيح 32 بت , الإحداثي الصادي للنقطة الأولى برقم صحيح 32 بت , الإحداثي السيني للنقطة الثانية برقم صحيح 32 بت , الإحداثي السيني للنقطة الثانية برقم صحيح 32 بت

الطريقة الرابعة

DrawLine(Pen, Single, Single, Single, Single)

وتأخذ القيم  كالتالي  : القلم , الإحداثي السيني للنقطة الأولى برقم عشري , الإحداثي الصادي للنقطة الأولى برقم عشري, الإحداثي السيني للنقطة الثانية برقم عشري , الإحداثي السيني للنقطة الثانية برقم عشري

إذا نلاحظ مماسبق انه يجب ان نعرف الاحداثي السيني والصادي لكلا النقطتين اللتان تحددان طرف المستقيم

ماذا لو أردنا ان نرسم مستقيم بمعلومية نقطة وزاوية  مع تحديدنا لطول المستقيم ..؟؟؟

هنا تقف السيدة DrawLine عاجزة :(

فما الحل ؟؟

الحل في الأسطر التالية

لنعود قليلا إلى الرياضيات

ونلاحظ الرسمة التالية :

حيث نريد ان نرسم المستقيم الاحمر دون معرفة الإحداثيات X2  و  Y2

والحل يمكن في معرفة شيئين اثنين سيحددان لنا X2  و  Y2

هما جيب وجيب تمام الزاوية ( sin & Cos  )

وهنا وقفة احترام للعلماء المسلمين الأوائل الذين اوجدوا جداول ظل الزوايا وظل تمامها وعلى رأسهم الخوارزمي وابو الوفاء البورزنجي قبل ان توجد الحواسيب

نعود لننشى دالة ولنسميها

DrawLineByAngle

ولنجعلها تأخذ القيم التالية

1- منطقة الرسم (plan) من النوع (PictureBox)

2- لون القلم (MyPenColor) من النوع (PictureBox)

3- الزاوية (Angle) من النوع (Double)

4- طول الخط (Length) من النوع (Double)

ونعرف بداخلها بشكل ثابت مبدأيا ..

النقاط الأحداثيات الأربع لرسم المستطيل مع وضع نقطة الأصل في وسط منطقة الرسم

كالتالي  :

Dim X1 As Single = plan.Height / 2

Dim Y1 As Single = plan.Width / 2

Dim X2 As Single

Dim Y2 As Single

الخطوة التالية هي تحويل الزاوية إلى من درجات إلى راديان مع تجاهل التحويل في حال كون الزاوية صفر حتى لانقسم الصفر , كما سنستعين بالدالة Math  لإيجاد الثابت ط و إيجاد الظل وظل التمام

If Angle <> 0 Then Angle = CDbl((Angle) / 180) * Math.PI '' Convert to radians

والآن نوجد احداثيات النقطة الثانية بالإعتماد على الزواية واحداثيات النقطة الأولى كالتالي

X2 = X1 + Math.Cos(Angle) * Length

Y2 = Y1 + Math.Sin(Angle) * Length

بقي لدينا تحديد لون القلم ومن ثم رسم المستقيم :)

Dim MyPen As New Pen(MyPenColor)

plan.CreateGraphics.DrawLine(MyPen, X1, Y1, X2, Y2)

 

إذا كيف نستفيد من هذه الدالة بشكل عملي

قم بفتح فورم جديد وضع فيه مايلي

 

 

صورة

أداة العداد الرقمي واجعل القيمة العليا 360

وزر التنفيذ

وبعداضافة كود الدالة التي تكلمنا فيه مسبقا

اكتب الكود التالي في زر التنفيذ ليظهر البرنامج بعد التشغيل كالتالي J

DrawLineByAngle(PictureBox1, Color.Red, NumericUpDown1.Value, 50)

 

قد تلاحظ بدأ الزاوية من جهة الأسفل

وذلك شيئ طبيعي لأن نقطة الأصل لدى الكمبيوتر هي في أعلى يسار الشاشة ممايعني ان جمع القيم الموجبة ستكون للأسفل واليمين

وشكرا

رابط البرنامج مع الكود

http://www.tecnyt.com/ar/angle/Angle.zip

 

 

 


الردود

آراء أعضاء الموقع وتعليقاتهم

هل أنت مشترك بموقع تقنيات ؟ بادر بالإشتراك الآن


يجب عليك التسجيل لتستطيع كتابة تعليق