การกำหนดสเกลในการแสดงผลที่จอภาพ อ่าน 3,807

การกำหนดสเกลในการแสดงผลที่จอภาพ 

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

แนวคิด

   ในการโปรแกรมรุ่นเก่าโดยปกติหากจะสร้างกราฟิกขึ้นมาจะต้องทำการแปลงพิกัดโดยเรียกว่าเปลี่ยนพิกัดโลก(world

coordinate)มาเป็นพิกัดจอภาพ (screen coordinate)ซึ่งพิกัดโลกหมายถึงพิกัดที่เราใช้วัดกันทั่วไปเช่นเมตร, ฟุต เป็นต้น

พิกัดจอภาพหมายถึงพิกัดที่จอภาพใช้อ้างอิงมีหน่วยเป็นจุดภาพ (pixel)

   ปัญหาในการแปลงคือ โดยทั่วไปพิกัดโลก แกน Xจะวัดจากซ้ายไปขวา ส่วนแกน Yจะวัดจากล่างขึ้นบน ดังรูป

 

แต่พิกัดจอภาพแกน X จะวัดจากซ้ายไปขวาส่วนแกน Y จะวัดจากบนลงล่างดังรูป

ซึ่งการแปลงจะใช้2 วิธี คือ วิธีแรกยอมรับข้อแตกต่างนี้แล้วกำหนด Yให้สัมพันธ์กับพิกัดจอภาพ

                                       วิธีที่สองใช้การคำนวณแปลงให้ Y จอภาพกลับเป็นชี้ขึ้นเหมือน Y จริง

 

อย่างไรก็ตามในวิชวลเบสิกได้ช่วยในการแก้ปัญหาตรงนี้คือเราสามารถกำหนดสเกลในการแสดงผลขึ้นมาใหม่ให้อยู่ใน

สภาพพิกัดโลกได้ทันทีโดยการกำหนดพิกัด2 จุด คือ มุมบนซ้ายและมุมล่างขวา ดังรูป

 

โปรแกรม

   เราจะใช้หลักการนี้ทดลองสร้างโปรแกรมขึ้นมาโดยกำหนดสเกลให้เป็นแบบพิกัดโลกแล้วลงจุดกริดทุกๆ ระยะ 1 m

และให้มีการแสดงตำแหน่งพิกัดตามเมาส์ที่เคลื่อนไปมีขั้นตอนดังนี้

1.สร้างโปรเจ็กต์ใหม่ (อาจกำหนดName ว่า GraphicSeries) มีหนึ่งฟอร์ม (อาจกำหนดName ว่า frmMain)

แล้วใส่คอนโทรลStatusBar (ไปที่เมนู Project\\Componentsเลือกคอนโทรลกลุ่ม Microsoft Windows Common

Control 6.0คอนโทรล StatusBar จึงจะปรากฏที่ ToolBox)กำหนด Name ว่า stbMain แล้วเลือก Customกำหนด Style

เป็น1-sbrSimple ดังรูป

 

 

2.ประกาศตัวแปรที่ General Declarationของฟอร์ม ดังรูป

 

3.เขียนโปรแกรมที่เหตุการณ์ Loadของฟอร์ม ดังรูป

 

4.เขียนโปรแกรมที่เหตุการณ์Activate ของฟอร์ม ดังรูป

 

5.เขียนโปรแกรมที่เหตุการณ์MouseMove ของฟอร์ม ดังรูป

 

6.เมื่อรันดูจะได้ดังรูป (สังเกตเมื่อเลื่อนเมาส์ค่าพิกัดจะเปลี่ยนตาม)

 

หมายเหตุ

- สัดส่วนจอภาพของความสูงต่อความกว้างเท่ากับ 3 : 4

-ขอให้ทดลองเปลี่ยนค่า max, minของแกน X และ Y และเปลี่ยนค่าระยะลงจุดกริดแล้วดูผลนะครับจะเข้าใจมากขึ้น

-สนใจโปรแกรมสำเร็จในรูปแบบนี้แนะนำ CCT-Beam ของผมเอง หรือ Grasp ของAIT

-หากต้องการไฟล์ตัวอย่างของบทความนี้เมล์มาบอกนะครับ

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