การสร้างกราฟิกโครงข้อหมุน ตอนที่ 3 อ่าน 3,458

การสร้างกราฟิกโครงข้อหมุน ตอนที่ 3

สรกานต์  ศรีตองอ่อน 

ความนำ

    สำหรับตอนนี้ จะอธิบายถึงการสร้างที่รองรับ (support) นะครับ แล้วตอนต่อไปจะกลับไปที่การสร้างรูปแบบหน้าจอทั่วไปของโปรแกรม ที่พร้อมจะแสดงผลทางกราฟิกใน 2 มิติ

แนวคิด

  • สำหรับที่รองรับของโครงข้อหมุน สามารถเป็นไปได้ 3 รูปแบบคือ แบบบานพับ (hinge) แบบล้อเลื่อน (roller) ในแนวราบ และแบบล้อเลื่อนในแนวดิ่ง ซึ่งพิกัดที่เราทราบคือพิกัด (X,Y) ของแต่ละจุดต่อ ดังรูปที่ 1

  รูปที่ 1  ที่รองรับแต่ละแบบ

  • ในการวิเคราะห์โดยวิธีสติฟเนสนั้น จะพิจารณาที่รองรับว่ามีการยึดรั้งในแนวแกนใดบ้าง ซึ่งโดยปกติ แต่ละจุดต่อถ้าไม่มีที่รองรับนั่นคือไม่มีการยึดรั้ง โดยถ้าให้ไม่มีการยึดรั้งเท่ากับ 0 และมีการยึดรั้งเท่ากับ 1 จะได้ว่า

    1. ที่รองรับแบบบานพับ                    แกน X = 1    แกน Y = 1

    2. ที่รองรับแบบล้อเลื่อนในแนวราบ   แกน X = 0    แกน Y = 1

    3. ที่รองรับแบบล้อเลื่อนในดิ่ง           แกน X = 1    แกน Y = 0

    4. จุดต่อที่ไม่มีที่รองรับ                    แกน X = 0    แกน Y = 0

  • ดังนั้น หากจุดต่อใดมีที่รองรับ ก็ป้อนข้อมูลว่ามีการยึดรั้งในแนวแกนใดบ้าง แล้วจึงแปลงเป็นกราฟิกในภายหลัง

  • การสร้างกราฟิก อาศัยจุด (X,Y) นั้นเป็นจุดอ้างอิงของพิกัดที่เหลือ

การโปรแกรม

    อ้างอิงโค้ดจากบทความที่ 11 นะครับ โดยมีการแก้ไขเพิ่มเติมดังนี้

  • กำหนดตัวแปรเพิ่มเติมที่ Gerneral Declarations

Option Explicit
\' ตัวแปรที่ใช้ในการเก็บข้อมูลของโครงข้อหมุน
          |

          |

          |

Private Type Bound_Type
    X As Integer
    Y As Integer
End Type
Dim Bound(1 To 50) As Bound_Type
\' สมมุติกำหนดให้ที่รองรับสูงสุดเท่ากับจำนวนจุดต่อสูงสุด

  • สร้างโปรแกรมย่อยสำหรับพล็อตกราฟิกแต่ละรูปแบบของที่รองรับ

Sub HingeSup(X, Y)
Const c = 13 \' Light Magenta
Dim a As Single

    a = 0.08
    Line (X - 4 * a, Y - 3 * a)-(X + 4 * a, Y - 3 * a), QBColor(c)
    Line (X - 3 * a, Y - 3 * a)-(X, Y), QBColor(c)
    Line (X + 3 * a, Y - 3 * a)-(X, Y), QBColor(c)
    Line (X - 5 * a, Y - 4.5 * a)-(X - 4 * a, Y - 3 * a), QBColor(c)
    Line (X - 1 * a, Y - 4.5 * a)-(X, Y - 3 * a), QBColor(c)
    Line (X + 3 * a, Y - 4.5 * a)-(X + 4 * a, Y - 3 * a), QBColor(c)
End Sub

Sub RollerSup(X, Y)
Const c = 13 \' Light Magenta
Dim a As Single

    a = 0.08
    Line (X - 4 * a, Y - 3 * a)-(X + 4 * a, Y - 3 * a), QBColor(c)
    Line (X - 2 * a, Y - 2 * a)-(X, Y), QBColor(c)
    Line (X + 2 * a, Y - 2 * a)-(X, Y), QBColor(c)
    Line (X - 2 * a, Y - 2 * a)-(X + 2 * a, Y - 2 * a), QBColor(c)
    Circle (X - 1.5 * a, Y - 2.5 * a), 0.5 * a, QBColor(c)
    Circle (X + 1.5 * a, Y - 2.5 * a), 0.5 * a, QBColor(c)

    Line (X - 5 * a, Y - 4.5 * a)-(X - 4 * a, Y - 3 * a), QBColor(c)
    Line (X - 1 * a, Y - 4.5 * a)-(X, Y - 3 * a), QBColor(c)
    Line (X + 3 * a, Y - 4.5 * a)-(X + 4 * a, Y - 3 * a), QBColor(c)
End Sub

Sub VRollerSup(X, Y)
Const c = 13 \' Light Magenta
Dim a As Single

    a = 0.08
    Line (X - 3 * a, Y + 4 * a)-(X - 3 * a, Y - 4 * a), QBColor(c)
    Line (X - 2 * a, Y + 2 * a)-(X, Y), QBColor(c)
    Line (X - 2 * a, Y - 2 * a)-(X, Y), QBColor(c)
    Line (X - 2 * a, Y + 2 * a)-(X - 2 * a, Y - 2 * a), QBColor(c)
    Circle (X - 2.5 * a, Y + 1.5 * a), 0.5 * a, QBColor(c)
    Circle (X - 2.5 * a, Y - 1.5 * a), 0.5 * a, QBColor(c)

    Line (X - 4.5 * a, Y + 5.5 * a)-(X - 3 * a, Y + 4 * a), QBColor(c)
    Line (X - 4.5 * a, Y + 1.5 * a)-(X - 3 * a, Y ), QBColor(c)
    Line (X - 4.5 * a, Y - 2.5 * a)-(X - 3 * a, Y - 4 * a), QBColor(c)
End Sub

  • เพิ่มโค้ดในโปรแกรมย่อย PlotTrussGeometry  

Sub PlotTrussGeometry()
          |

          |

          |

    \' Nodal Restrainst
    For I = 1 To N
        If (Bound(I).X = 0) And (Bound(I).Y = 1) Then
\' Roller
            Call RollerSup(Node(I).X, Node(I).Y)
        ElseIf (Bound(I).X = 1) And (Bound(I).Y = 0) Then
\' Vertical Roller
            Call VRollerSup(Node(I).X, Node(I).Y)
        ElseIf (Bound(I).X = 1) And (Bound(I).Y = 1) Then
\' Hinge
            Call HingeSup(Node(I).X, Node(I).Y)
        End If
    Next I
End Sub

  •  กำหนดข้อมูลตัวอย่างของโครงข้อหมุนรูปทรงใหม่ ที่เหตุการณ์ Form_Load

Private Sub Form_Load()
          |

          |

          |

    \' ข้อมูลตัวอย่างของโครงข้อหมุน
    \' Node
    N = 6
    Node(1).X = 0: Node(1).Y = 0
    Node(2).X = 0: Node(2).Y = 4
    Node(3).X = 0: Node(3).Y = 8
    Node(4).X = 4: Node(4).Y = 2
    Node(5).X = 4: Node(5).Y = 6
    Node(6).X = 8: Node(6).Y = 4
    \' Element
    E = 9
    Elem(1).H = 1: Elem(1).T = 2
    Elem(2).H = 2: Elem(2).T = 3
    Elem(3).H = 4: Elem(3).T = 5
    Elem(4).H = 1: Elem(4).T = 4
    Elem(5).H = 4: Elem(5).T = 6
    Elem(6).H = 3: Elem(6).T = 5
    Elem(7).H = 5: Elem(7).T = 6
    Elem(8).H = 2: Elem(8).T = 4
    Elem(9).H = 2: Elem(9).T = 5
    \' Nodal Restrainst
    Bound(1).X = 1: Bound(1).Y = 1 \' Hinge
    Bound(3).X = 1: Bound(3).Y = 0
\' Vertical Roller
    Bound(6).X = 0: Bound(6).Y = 1
\' Roller
    
    Call Form_Activate \' ไปที่เหตุการณ์ Activate
End Sub

 เมื่อแสดงผล จะเห็นกราฟิกโครงข้อหมุนตามข้อมูลที่กำหนดขึ้น โดยมีกราฟิกที่รองรับด้วย ดังรูปที่ 2

  รูปที่ 2 กราฟิกโครงข้อหมุนตามข้อมูลที่กำหนด

 

คะแนน:
ร่วมแสดงความคิดเห็น (Post Comment)