การกำหนดสเกลในการแสดงผลที่จอภาพ
สรกานต์ ศรีตองอ่อน
แนวคิด
ในการโปรแกรมรุ่นเก่าโดยปกติหากจะสร้างกราฟิกขึ้นมาจะต้องทำการแปลงพิกัดโดยเรียกว่าเปลี่ยนพิกัดโลก(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
-หากต้องการไฟล์ตัวอย่างของบทความนี้เมล์มาบอกนะครับ