انتظروا قريبا جدا مجموعة دروس تعليم AutoCad 2006 وايضا تعليم Inventor 10 انتظروا

     

اخر الدروس تعليمية

     
  تعليم برنامج MATLAB
  الدرس الثامن
الدرس التاسع
  الدرس العاشر
 
 
  تطبيقات على Matlab
    التعامل مع الصور والالوان
     
  تعليم برنامج AutoCad
    الدرس الخامس
  الدرس السادس
  الدرس السابع
  الدرس الثامن
  الدرس التاسع
  تطبيقات على AutoCad
    الكتل الديناميكية
    تصميم خط عربى
    الحاسبة الهندسية
    الامر تغيير
    القطع المكافئ
    النجوم
  اساسيات المحاكاة فى لمتلاب
      الدرس الاول
    الدرس الثانى
    الدرس الثالث
  االتسجيل في سجل الزوار
   
  وصلات هامة
  موقع الخيمة
     
  موقع البوصلة
   

خدمــــــات

  إرسال الموقع لصديق
     
   
اسم صديقك:
بريد صديقك:
اســمك:
بـــريدك:

  محرك بحث جوجل
   

Google

     
     
     
     
           
 

تطبيقات AutoCad

 

أساسيات AutoCad

القطع المكافئ

 

بسم الله الرحمن الرحيم، والصلاة والسلام على سيدنا محمد وعلى آله وصحبه أجمعين …

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

 

تعريف القطع المكافئ :
القطع المكافئ هو المحل الهندسي لنقاط المستوي متساوية البعد عن نقطة ثابتة وعن مستقيم ثابت مفروضين من المستوي.

تدعى النقطة الثابتة محرق القطع، أما المستقيم الثابت فيدعى دليل القطع.


 

معادلة القطع المكافئ:
ليكن القطع المكافئ في الشكل معرّفاً بالمحرق c والدليل D، والبعد بين c و D هو a.
وليكن مبدأ الإحداثيات هو رأس القطع.
b نقطة من القطع أي أنها تحقق العلاقة [cb]=[bf]
من المثلث القائم bce، وحسب فيثاغورس نجد:
[ce]2 + [be]2 = [bc]2
ولكن :
[ce] = x
[bc] = [bf] = y + a/2
[be] = y – a/2
نعوض في المعادلة السابقة نجد:
x2 + (y – a/2)2 = (y + a/2)2
نصلح المعادلة السابقة فنحصل على معادلة القطع المكافئ التالية:
x2 = 2.a.y
وهي معادلة قطع مكافئ محوره يوازي المحور y، أي يوازي دليله المحور x ويقع رأسه على مركز الإحداثيات.

 

إنشاء القطع المكافئ في أوتوكاد:
إن إحدى خصائص مجمّع الخطوط (Polyline) أنه يمكن تحويله بمنحن (أو شبه منحن) من الدرجة الثانية أو الدرجة الثالثة، وما يهمنا هنا هو الدرجة الثانية، فلو أنشأنا مجمع خطوط على شكل زاوية، وألبسناه هذا المنحني، تكون خصائص المنحني:
  1. بدايته ونهايته هما بداية ونهاية الزاوية المرسومة.
  2. أضلاع الزاوية هي مماسات للقطع كما في الشكل.


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

ولكن كيف يمكن تحديد المماس للقطع المكافئ؟

لنفرض النقطة b أحد أطراف القطع (نقطة من القطع) وf مسقطها على الدليل.
من خصائص القطع المكافئ أن المماس للقطع في النقطة b عمودي على القطعة cf.

أما خطوات الرسم فهي كما يلي :

بفرض أن المحرق والدليل وارتفاع القطع معلومة، نقوم بما يلي:

  1. تحديد النقطة b: نرسم دائرة نصف قطرها ارتفاع القطع مضافاً له نصف المسافة بين المحرق والدليل، وتمر من المحرق وتمس الدليل فيكون مركزها هو النقطة b.
  2. رسم المماس في b : نرسم النقطة f مسقط b على الدليل ثم نرسم عموداً من b على cf.
  3. نأخذ نظير هذا المماس بالنسبة لمحور القطع المار من المحرق فيكون المماس الآخر، نمدد كلا المماسين حتى يلتقيا في نقطة واحدة، ثم نحولهما إلى مجمع خطوط واحد.
  4. نختار الأمر تحرير مجمع خطوط (pedit)، ثم ننتقي مجمع الخطوط السابق، ونكتب s لتحويله إلى منحن، ثم x للخروج من الأمر.
  5. نختار هذا المنحني (شبه المنحني) ثم نكتب ch لإظهار نافذة الخصائص، نغير الخصيصة Fit/Smooth إلى تربيعي (Quadratic)، فيتحول إلى منحن تربيعي من الدرجة الثانية.
  6. نكتب الأمر تحرير منحنى شرائحي (splinedit)، ثم ننتقي شبه المنحني السابق فيتحول إلى منحني شرائحي (Spline)، ثم نخرج من الأمر، وهو المطلوب

وقد قمت بكتابة برنامج بلغة VBA يختصر هذه العملية كلها ويقوم برسم قطع مكافئ في الحالات التالية :

  1. المحرق والدليل وارتفاع القطع معلومة.
  2. عرض وارتفاع ورأس القطع معلومة.
شرح البرنامج:
قم أولاً بتشغيل VBA بالضغط على (ALT + F11) معاً، فتظهر النافذة الرئيسية لفيجوال بيسيك للتطبيقات.
أضف وحدة نمطية (module) جديدة، من القائمة Insert > Module.
تظهر نافذة فارغة، لكتابة البرنامج.
يتألف البرنامج من إجرائين (Sub) ووظيفتين (Function):

 

الوظيفة/ الإجراء  

الشرح

Parabola الإجراء الرئيسي الذي يُستدعى، وهو يتحكم بالأجزاء الأخرى للبرنامج.
DrawParabola الجزء الذي يقوم برسم القطع بعد تمرير المعطيات له.
GetInfo1 الوظيفة الأولى، نحصل منه على المعطيات المطلوبة لرسم القطع، والمعطيات هي المحرق والدليل وارتفاع القطع، ويعيد القيمة True في حال الاختيار الصحيح.
GetInfo2   الوظيفة الثانية، نحصل منه على المعطيات المطلوبة لرسم القطع، والمعطيات هي عرض وارتفاع ورأس القطع، ويعيد القيمة True في حال الاختيار الصحيح.
الوظيفة GetInfo1 :
سأقوم بشرح هذا الجزء بالتفصيل، أما الجزء الثاني GetInfo2 فهو شبيه به، ولن أتطرق إلى شرحه، ولكني سأدرج شفرته.
أما شفرة GetInfo1 فموضحة في الشكل التالي:

Private Function GetInfo1(a As Single, h As Single, pnt As Variant) As Boolean
    Dim o As Object, TN As String, lin As acadLine
    Dim pnt1(0 To 2) As Double
    On Error GoTo anError
        
    pnt = ThisDrawing.Utility.GetPoint(, "Specify point: ")
    Do
        Do
            ThisDrawing.Utility.GetSubEntity o, a1, a2, a3, "Select Line: "
            TN = TypeName(o)
        Loop While TN <> "IAcadLine"
        Set lin = o
        If Abs(lin.StartPoint(1) - lin.EndPoint(1)) > 10 ^ -10 Then
            MsgBox "يجب أن يكون الخط أفقياً"
        Else
            Exit Do
        End If
    Loop
    a = pnt(1) - lin.StartPoint(1)
    pnt1(0) = pnt(0): pnt1(1) = pnt(1) - a / 2: pnt1(2) = pnt(2)
    Do
        h = Abs(ThisDrawing.Utility.GetDistance(pnt1, "Specify height: "))
        ThisDrawing.Utility.Prompt "Height must be nonzero."
    Loop While h = 0

    GetInfo1 = True
anError:
    Err.Clear
End Function

نلاحظ أن هذه الوظيفة من النوع Private، لأننا لن نحتاج لها خارج الوحدة النمطية، ولا نريدها أن تظهر في لائحة الماكروات في أوتوكاد.

نلاحظ أن القيم a,h,pnt قد مُررت للوظيفة، وفي الحقيقة سيتم إدخالها ضمن هذه الوظيفة.
نقوم أولاً باختيار نقطة المحرق، وتخزينها في المتحول pnt، بواسطة الطريقة GetPoint.
ثم نختار خطاً أفقياً من النوع خط (line) وليس من النوع مجمع خطوط (polyline)، ونخزّنه في المتحول lin، بواسطة الطريقة GetSubEntity.

نقوم بحساب قيمة a في السطر:

a = pnt(1) – lin.StartPoint(1)

حيث يتم تعريف كل نقطة بمصفوفة من ثلاثة عناصر هي x,y,z.
نحسب إحداثيات رأس القطع ونخزنها في المتحول pnt1، وفائدة ذلك في الخطوة التالية.
ندخل الارتفاع بواسطة الطريقة GetDistance، وهي المسافة الشاقولية بين رأس القطع pnt1 وطرف القطع، ويمكن إدخالها إما بواسطة الفأرة أو بإدخال القيمة في سطر الأوامر.
تعيد الوظيفة القيمة True في حال أدخلت المعطيات جميعها، ويعيد القيم a,h,pnt.
الوظيفة GetInfo2:
Private Function GetInfo2(a As Single, h As Single, pnt As Variant) As Boolean
    On Error GoTo anError:
    With ThisDrawing.Utility
        Do
            W = Abs(.GetDistance(, "Specify width: "))
        Loop While W = 0
        Do
            h = .GetDistance(, "Specify height: ")
        Loop While h = 0
        pnt = .GetPoint(, "Specify peak for parabola: ")
    End With
    a = (W / 2) ^ 2 / (2 * h)
    pnt(1) = pnt(1) + a / 2
    h = Abs(h)
    ThisDrawing.ModelSpace.AddPoint pnt
    GetInfo2 = True
    
anError:
    Err.Clear
End Function
الإجراء DrawParabola:
Private Sub DrawParabola(a As Single, h As Single, pnt As Variant)
    Dim m As Single, y As Single
    Dim plin As AcadPolyline, ppnt(0 To 8) As Double

    x = Sqr(Abs(2 * a * h))
    m = x / a
    If a < 0 Then h = -h
    y = h - m * x
    
    ppnt(0) = -x + pnt(0): ppnt(1) = h + pnt(1) - a / 2: ppnt(2) = pnt(2)
    ppnt(3) = pnt(0): ppnt(4) = y + pnt(1) - a / 2: ppnt(5) = pnt(2)
    ppnt(6) = x + pnt(0): ppnt(7) = h + pnt(1) - a / 2: ppnt(8) = pnt(2)
    
    Set plin = ThisDrawing.ModelSpace.AddPolyline(ppnt)
    plin.Type = acQuadSplinePoly

End Sub
عرفنا المتحولات التالية:
m: ميل المماس.
plin: مجمع الخطوط الذي سنرسمه.
ppnt: إحداثيات النقاط المعرفة للقطع.
نقوم بتمرير المتحولات a,h,pnt لهذا الجزء من البرنامج، ونحسب إحداثيات رؤوس مجمع الخطوط كما في الشفرة.
نقوم - بعد حساب الإحداثيات ppnt – برسم مجمع خطوط بواسطة الطريقة AddPolyLine، ثم نغيّر الخصيصة Type إلى acQuadSplinePoly.
الإجراء Parabola:
Public Sub Parabola()
    Dim pnt As Variant
    Dim a As Single, h As Single, j As Boolean
    
    On Error GoTo Leave

    ThisDrawing.Utility.InitializeUserInput 0, "P W"
    i = ThisDrawing.Utility.GetKeyword("Enter an option [Point and line / Width and height] : ")
    If i = "" Then i = "P"
    Select Case i
        Case "P"
            j = GetInfo1(a, h, pnt)
        Case "W"
            j = GetInfo2(a, h, pnt)
    End Select
    If j = False Then GoTo Leave
    
    DrawParabola a, h, pnt
    ThisDrawing.SendCommand "splinedit l x "
Leave:
    Err.Clear
End Sub
نلاحظ، أولاً، أنه من النوع Public لأننا نحتاج إلى ظهوره في لائحة الماكروات في أوتوكاد.
لدينا طريقتان لإدخال المعطيات، ولذلك نحتاج إلى توجيه المستخدم باختيار إحداهما بواسطة الطريقة GetKeyword، وسيكون جوابه بكتابة P إذا أراد اختيار Point and line (في حالة إدخال المحرق والدليل) أو W إذا أراد اختيار Width and height (في حالة إدخال ارتفاع وعرض القطع)، والحالة الافتراضية هي P.
ولتعريف الإدخالات التي تفهمها الطريقة GetKeyword نستخدم قبلها الطريقة InitializeUserInput كما في الشفرة.

إذا اختار المستخدم الحالة الأولى ننقله إلى الجزء GetInfo1 وإلا نقلناه إلى GetInfo2، وذلك للحصول على المتحولات a,h,pnt المشروحة سابقاً.

نمرر هذه المتحولات إلى الجزء DrawParabola لرسم القطع.

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

قم بحفظ البرنامج ولننتقل الآن للتنفيذ.

 

تشغيل البرنامج:
انتقل لنافذة أوتوكاد واكتب الأمر التالي :
vbarun
تظهر نافذة تحوي أسماء الماكروات الفعالة، اختر Parabola ثم اضغط الزر Run.
يظهر السطر التالي :
Enter an option [Point and line / Width and height] :
اكتب P لاختيار الحالة الأولى أو W للحالة الثانية

في الحالة الأولى :
يعرض أوتوكاد الرسالة Specify point لاختيار نقطة تمثل المحرق.
ثم Select line لاختيار مستقيم أفقي يمثل الدليل.
ثم Specify height لتحديد ارتفاع القطع.

من أجل الحالة الثانية:
يعرض أوتوكاد الرسالة Specify width لتحديد عرض القطع بتحديد نقطتين باستخدام الفأرة، أو إدخال قيمة في نافذة الأوامر.
ثم Specify height لتحديد ارتفاع القطع.
ثم Specify peak for parabola لتحديد رأس القطع.
يتم عندها رسم القطع وكذلك تحديد محرقه.

 

أمثلة على استخدام البرنامج:
مسألة أولى:

ليكن المستقيم D الأفقي والنقطة a والمستقيم E والمطلوب : رسم دائرة تمس D وتمر من a ومركزها يقع على E

الحل:

إن المحل الهندسي لمراكز الدوائر التي تمر من a وتمس D هو قطع مكافئ محرقه a ودليله D ونقطة تقاطعه مع E هي مركز الدائرة المطلوبة، وفي هذا المثال حلان.



 
مسألة ثانية:

ليكن لدينا مستقيم D أفق ومستقيم آخر E ودائرة C والمطلوب رسم دائرة تمس D وتمس C ومركزها يقع على E

الحل:

إن المحل الهندسي لمراكز الدوائر التي تمس المستقيم D وتمس الدائرة C هو قطع مكافئ محرقه مركز الدائرة C ودليله هو مستقيم موازٍ للمستقيم D ويبعد عنه بمقدار نصف قطر الدائرة C من الجهة المعاكسة لجهة وجود الدائرة بالنسبة للمستقيم D.

نرسم هذا القطع فتكون نقط تقاطعه مع المستقيم E هي مراكز الدوائر المطلوبة.



 
ملاحظات هامة عن البرنامج:

1- قصدت التبسيط في هذا البرنامج لسهولة فهمه، وقد أدى هذا إلى نقطة الضعف التالية: يعمل البرنامج فقط إذا كان الدليل أفقياً والمحاور المستخدمة هي المحاور العالمية، ويمكن تطويره بأن يقوم البرنامج بتحويل الإحداثيات من المحاور العالمية إلى المحاور المستخدمة، وسأقوم بتطويره إن شاء الله وسأضع النسخة الجديدة في هذا الموقع.

2- يمكنك تحميل البرنامج مجاناً، ولا يسمح بنشره في موقع آخر، بدون إذن مني، ولتشغيله راجع فقرة (نجوم أوتوكاد وكذلك مسابقة أوتوكاد – رقم 15) في منتدى CAD في هذا الموقع لاستخدام البرنامج من خلال شريط الأدوات.

لتنزيل نسخة من البرنامج اضغط هنا.

 
وآخر دعوانا أن الحمد لله رب العالمين.
 

الصفحة الرئيسية     |     دروس     |     الكتب     |     مواقع     |     التسجيل     |     اتصل بنا     |     عن الموقع