ㄍ๏ สารบัญ ๏ㄟ
๛ การหมุนวัตถุด้วยเมธอด .rotate()
๛ การกำหนดจุดหมุน
๛ การเปลี่ยนแกนหมุน
๛ คลาส Rotating
๛ เมธอด .flip()
๛ การคูณเมทริกซ์ด้วยคลาส ApplyMatrix
ต่อจาก
บทที่ ๙
บทนี้จะเป็นเรื่องของการหมุนวัตถุ รวมถึงการบิดดัดวัตถุโดยใช้วิธีการคูณเมทริกซ์
การหมุนวัตถุด้วยเมธอด .rotate()介
วัตถุคลาส MObject นั้นมีเมธอด .rotate() ซึ่งเอาไว้ใช้หมุนวัตถุตามมุมที่กำหนดเป็นเรเดียน
.rotate() สามารถใช้กับ .animate เพื่อทำเป็นภาพเคลื่อนไหวได้ ตัวอย่างเช่น ลองเอาข้อความมาหมุน 90 องศา
การกำหนดจุดหมุน介
หากไม่ได้กำหนดจุดหมุนจะเป็นการหมุนรอบกลางวัตถุ แต่หากต้องการกำหนดจุดหมุนก็ทำได้โดยใส่คีย์เวิร์ด about_point เช่น
การเปลี่ยนแกนหมุน介
ปกติแล้วถ้าไม่ได้กำหนดแกนหมุนจะเป็นการหมุนรอบแกน z คือหมุนในระนาบ xy สองมิติ แต่สามารถเปลี่ยนแกนหมุนให้ดูเป็นการหมุนในสามมิติได้
แกนหมุนกำหนดโดยคีย์เวิร์ด axis หากไม่ได้ใส่จะเป็นค่าตั้งต้นคือ [0,0,1] (ก็คือแกน z)
ลองเปลี่ยนแกนหมุนเป็นแกน x ดูได้ดังนี้
อีกตัวอย่าง ลองใช้แกน y เป็นแกนหมุน
หรืออาจลองตั้งแกนหมุนให้เอียง
คลาส Rotating介
อีกวิธีที่ใช้ในการทำภาพเคลื่อนไหวหมุนวัตถุคือใช้คลาส Rotating ผลที่ได้จะคล้ายกับใช้ .animate.rotate() แต่ว่า Rotating จะเป็นการหมุนวัตถุไปเรื่อยๆจริงๆ ในขณะที่ .animate.rotate() นั้นจริงๆแล้วเป็นแค่การเปลี่ยนสภาพให้เลื่อนไปอยู่ในตำแหน่งหลังจากหมุนแล้วเท่านั้น ดังนั้นหากให้ .animate.rotate() เป็นมุม 360 องศาจะไม่มีการเคลื่อนไหวใดๆ แต่ถ้าใช้ Rotating จะเกิดการหมุนวนรอบจริงๆ
ตัวอย่าง
เมธอด .flip()介
กรณีที่หมุน 180 องศารอบแกน y คือมีแกนเป็น [0,1,0] อาจใช้เมธอด .flip()
การคูณเมทริกซ์ด้วยคลาส ApplyMatrix介
คลาส ApplyMatrix ใช้แปลงวัตถุโดยให้ตำแหน่งใหม่ถูกคูณด้วยเมทริกซ์ที่ใส่เข้ากับตำแหน่งเก่า
ให้
→X=[xy] เป็นตำแหน่ง x,y เดิม
และ
→X∗=[x∗y∗] เป็นตำแหน่ง x,y ใหม่
ส่วน
M=[ax+bycx+dy] คือตัวเมทริกซ์ที่จะเอามาคูณ
การคำนวณจำเป็นดังนี้
→X∗=M×→X[x∗y∗]=[abcd]×[xy]=[ax+bycx+dy]
ดังนั้นจะได้ค่าตำแหน่งใหม่เป็น
x∗=ax+byy∗=cx+dy
ตัวอย่าง
เกี่ยวกับเรื่องการคูณเมทริกซ์เพื่อแปลงภาพนั้นอาจอ่านรายละเอียดเพิ่มเติมได้ในเนื้อหาที่อธิบายการแปลงภาพด้วย opencv
https://phyblas.hinaboshi.com/oshi07
อ่านบทถัดไป >>
บทที่ ๑๑