พอดีมีคนถามว่าจะหาพื้นที่แรเงาได้อย่างไรที่
http://topicstock.pantip.com/wahkor/topicstock/2011/07/X10848195/X10848195.html
ซึ่งวิธีหาพื้นที่นี้สามารถคำนวณได้จากการอาศัยความสัมพันธ์ของพื้นที่สี่เหลี่ยมและวงกลมครับ แต่ผมจะเสนออีกวิธีหนึ่ง ซึ่งเป็นวิธีที่เรียกว่า Monte Carlo ครับ จากรูปเราอาจประมาณได้ว่า
(พื้นที่ที่ต้องการ / พื้นที่สี่เหลี่ยม(หนึ่งหน่วย) ) มีค่าประมาณ (จำนวนจุดในพื้นที่ที่ต้องการ / จำนวนจุดในพื้นที่สี่เหลี่ยม)
ดังนั้น พื้นที่ที่ต้องการ มีค่าประมาณ (จำนวนจุดในพื้นที่ที่ต้องการ / จำนวนจุดในพื้นที่สี่เหลี่ยม)
จากสูตรที่ได้นี้จะเห็นว่าถ้ายิ่งมีจำนวนจุดมากก็จะทำให้ค่าประมาณมีความละเอียดแม่นยำมากขึ้น และในตัวอย่างนี้จำนวนจุดที่ผมใช้ก็เอามาจากจำนวนจุดของภาพ(pixel)ครับ
ดังนั้นการหาจุดในพื้นที่ที่ต้องการนั้นก็เพียงนับจุดที่มีสีตรงกับสีที่ถูกทาไว้
ด้านล่างนี้เป็น Mathematica codes ที่ผมใช้ในการคำนวณครับ
โหลดภาพจากpantip.com
pic= Import[“http://topicstock.pantip.com/wahkor/topicstock/2011/07/X10848195/X10848195-0.jpg“];
crop เอาส่วนขอบออกโดยภาพที่ได้จะมีขนาด 380×380
croppic=ImageCrop[pic,{380,380}];
ดังนั้นจำนวนจุดทั้งหมดในสี่เหลี่ยมเท่ากับ 380^2
coorls =Table[{i, j}, {i, 1, 380}, {j, 1, 380}] // Flatten[#, 1] &;
จำนวนจุดที่อยู่ในพื้นที่ที่ต้องการก็คือจุดที่มีสี RGB เท่ากับ 0-0-254
ninside = Select[ImageValue[croppic, #, “Byte”] & /@ coorls, # =={ 0,0,254} &] // Length;
แต่ยังมีจุดที่อยู่บนขอบอีก
nedge=Select[ImageValue[croppic, #, “Byte”] & /@ coorls, # != {0, 0, 254} && # != {0, 0, 0} &] // Length;
ผมประมาณเอาว่าจุดที่เป็นขอบนี้เป็นส่วนของพื้นที่ที่ต้องการประมาณ 20% ดังนั้น พื้นที่ที่ต้องการประมาณ
(ninside + 0.2*nedge)/Length@coorls
0.146298
ลองเปรียบเทียบกับที่คำนวณจากสูตรโดยตรงดูนะครับ 🙂
แต่ถ้าจะใช้ Mathematica คำนวณพื้นที่ที่ว่าให้เลยก็ง่ายนิดเดียวครับ เพียงแค่ใช้คำสั่ง RegionDifference
Area@RegionDifference[Disk[{0.5, 0.5}, 0.5], Disk[{1, 0}, 1]]
0.146381
https://www.wolframcloud.com/obj/sompob/Published/estimatearea.nb