السلام
عليكم
ها أنا
ذا أعود لكم بعد انقطاع عنكم شغلني فيه عدة مشاريع , لكني كنت اتابع المنتدى من
حين لآخر
درسنا اليوم
يتعلق بالرسم بالحاسب الآلي بل بأساسيات الرسم بالحاسب الآلي , دعوني اعرفكم
بضيفتنا هذا المساء إنها دالة رسم المستقيم في الفيجوال بيسك دوت نت
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