วันอาทิตย์ที่ 4 กรกฎาคม พ.ศ. 2553

Determine polygon area โดยใช้เทคนิค VBA in excel (Macro excel)

เข้าสู่ฤดูฝนอย่างเต็มตัวกันแล้วนะครับท่านผู้อ่าน ฟุตบอลโลก 2010 กำลังโม่แข้งกันงวดเข้ามาทุกที เยอรมันทีมโปรดของผมยังอยู่ในเส้นทางลุ้นแชมป์ อีกประมาณ 1 สัปดาห์คงทราบผลกัน รักษาสุขภาพกันด้วยนะครับ
บทความที่ต้องการนำเสนอทุกท่านวันนี้เป็นภาคต่อจากที่เคยนำเสนอระเบียบวิธีในการคำนวณหาพื้นที่หลายเหลี่ยมไปแล้ว และได้กล่าวทิ้งท้ายถึงเทคนิคที่จะนำมาใช้กับระเบียบวิธีดังกล่าว บทความนี้จึงขอนำเสนอเทคนิคการใช้ VBA in excel เข้ามาช่วยในการแก้ปัญหานี้ ซึ่งผู้อ่านต้องเข้าใจพื้นฐานของ VBA Excel มาพอสมควร โดยขอยกตัวอย่างการหาพื้นที่รูปหลายเหลี่ยมซึ่งมีจุดยอด (vertex) ในระบบพิกัดคาร์ทีเซียน ดังนี้ (0,0) , (10,0) , (10 , 10) , (5,10) , (5,15) , (0,10) , (0,0) เมื่อลากเส้นตรงเชื่อมจุดยอดจะได้รูปหลายเหลี่ยมดังแสดงในภาพที่ 1

ภาพที่ 1 รูปหลายเหลี่ยม (Polygon)

จากภาพพบว่ารูปหลายเหลี่ยมประกอบไปด้วยจุดยอดทั้งหมด 7 จุด และเมื่อพิจารณารูปหลายเหลี่ยมจะเห็นได้ว่าเกิดจากรูปร่างอย่างง่ายสองรูปประกอบเข้าด้วยกัน ได้แก่ รูปสี่เหลี่ยมจัตุรัส(A2) และรูปสามเหลี่ยมหน้าจั่ว A1 ดังนั้นสามารถคำนวณหาพื้นที่รูปหลายเหลี่ยมได้ง่ายๆดังนี้

A (polygon) = A1 + A2 = (5*5/2) + 10*10 = 112.5 ตารางหน่วย

ทีนี้หากต้องการใช้เทคนิค VBA ช่วยในการคำนวณหาพื้นที่จะเริ่มดำเนินการอย่างไร เรามาเริ่มกันเลยดีกว่า
เริ่มจากการนำเข้าข้อมูลจุดยอดของรูปหลายเหลี่ยมมายัง Excel โดยกำหนดให้คอลัมน์ A เป็นพิกัด X คอลัมน์ B เป็นพิกัด Y ดังแสดงในภาพที่ 2


ภาพที่ 2 พิกัดจุดยอดของ Polygon ในระบบพิกัดคาร์ทีเซียน

คลิก ปุ่ม Alt + F8 เพื่อจัดการมาโครสำหรับใช้คำนวณพื้นที่ โดยกำหนดชื่อมาโครเป็น PolygonArea ดังแสดงในภาพที่ 3 คลิกปุ่ม สร้างเพื่อเข้าสู่หน้า Visual Basic Editor โดยจะพบกับ Subroutine PolygonArea ดังรูปที่ 4



ภาพที่ 3 สร้าง Macro Excel


ภาพที่ 4 Visual Basic Editor

เราจะเขียนโค้ดสำหรับคำนวณพื้นที่ของ Polygon ใน Subroutine PolygonArea ตามระเบียบวิธีที่เคยนำเสนอมากันครับ โดยมีรายละเอียดดังนี้
แนวคิด
ในการคำนวณพื้นที่รูปหลายเหลี่ยมจะคำนวณได้จากผลรวมของ Xi*Yi+1 ลบด้วยผลรวมของ Xi+1*Yi หารด้วย 2 ดังแสดงในภาพที่ 5 จากสูตรที่กล่าวมาจะพบว่า แถวสุดท้ายที่สามารถหาผลคูณได้คือแถวที่ n-1 เนื่องจากแถวถัดไปคือแถวที่ n-1+1 นั่นคือ n เนื่องจากแถวที่ n+1 ไม่มีข้อมูล



ภาพที่ 5 ระเบียบวิธีการคำนวณ


ภาพที่ 6 แสดงการคำนวณแถวที่ n-1



ภาพที่ 7 code vba และคำอธิบาย

สร้างปุ่มกด และกำหนดมาโคร PolygonArea ให้กับปุ่มกดนี้ ดังแสดงในภาพที่ 8



ภาพที่ 8 ผลการคำนวณพื้นที่รูปหลายเหลี่ยม

ท่านผู้อ่านจะเห็นว่าการคำนวณด้วย มาโคร PolygonArea ให้ผลลัพธ์เท่ากับการคำนวณด้วยสูตรการคำนวณทั่วไป แต่หากเป็นรูปหลายเหลี่ยมที่มีจุดยอดเป็นจำนวนมากดังนำเสนอในบทความที่ผ่านมา เรายังสามารถใช้ มาโคร PolygonArea ที่ได้พัฒนานี้ช่วยคำนวณได้เหมือนเดิมโดยที่ไม่ต้องปรับเปลี่ยน และสามารถใช้งานได้ง่ายเพียงคลิกปุ่ม Polygon Area
มาโคร PolygonArea ที่ได้พัฒนาขึ้นยังไม่สมบูรณ์ที่สุดขอฝากท่านผู้อ่านพัฒนามาโครนี้ให้ถูกต้องสมบูรณ์โดยให้ค่าพื้นที่รูปหลายเหลี่ยมที่ถูกต้อง บักที่ยังไม่ได้แก้ไขเป็นบักที่ทำให้ผลการคำนวณอาจจะไม่ถูกต้องได้เป็นบางกรณี ขอบคุณครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Yahoo bot last visit powered by  Ybotvisit.com