4.2การหมุนภาพ ( Rotation)

การหมุนภาพเป็นการแปลงรูปที่จะต้องกำหนดว่าจุดใดจุดหนึ่งเป็นจุดหมุน (pivot point) เสมอ หลังจากหมุนภาพไปแล้ว ระยะห่างระหว่างจุดหมุนกับภาพจะยังคงมีค่าเท่าเดิม รูปร่าง ลักษณะของภาพก็ยังคงเดิม แต่ภาพจะมีการจัดวางที่ต่างไปจากเดิม เนื่องมาจากการหมุนนั่นเอง

            การหมุนภาพอาจจะหมุนทีละหลาย ๆภาพก็ได้ จะหมุนทวนเข็มนาฬิกา(ค่ามุมเป็นบวก) หรือ หมุนตามเข็มนาฬิกาก็ได้(ค่ามุมเป็นลบ) และจุดหมุนที่ใช้อาจจะอยู่ภายในภาพหรือภายนอกภาพก็ได้

            การอ้างถึงจุดพิกัด (X,Y) นั้น นอกจากจะใช้ระบบพิกัดฉากแล้ว อาจจะใช้ระบบพิกัด Polar (การบอกตำแหน่งจุดโดยใช้ Vector ) ก็ได้ ซึ่งทั้งสองระบบมีความสัมพันธ์กันดังนี้

                        X = rcosf

                        Y = rsinf

            ถ้า(X,Y) ถูกหมุนไปจากเดิมเป็นมุม q ในทิศทางทวนเข็มนาฬิกาจะได้จุดใหม่คือ (X’,Y’) ดังรูป

 

 

            จะได้

                        X’ = rcos(f+q)  =  rcosfcosq - rsinfsinq

                        Y’ = rsin(f+q)  =  rsinfcosq + rcosfsinq

            แทนค่า rcosf ด้วย X และ rsinf ด้วย Y จะได้

                        X’ = Xcosq - Ysinq

                        Y’ = Ycosq + Xsinq

            สมการที่ได้นี้คือ สมการที่ใช้แปลงค่าพิกัดจากจุด (X,Y) ไปเป็นจุดใหม่ (X’,Y’) โดยการหมุนรอบจุดกำเนิดไปเป็นมุม q ทิศทางทวนเข็มนาฬิกา การหมุนภาพทำได้โดยการแปลงค่าพิกัดจุดทุกจุดที่ใช้นิยามภาพนั้นไปเป็นพิกัดใหม่โดยใช้สมการข้างต้นแล้วค่อยวาดภาพเดิมที่จุดพิกัดใหม่นั้น

            จากสมการการหมุนภาพดังกล่าว สามาเขียนในรูปแบบของ Matrix ได้ดังนี้

                                                                                                cosq              sinq              0

                        [ X’            1] =  [  X        Y         1]        -sinq             cosq              0

                                                                                                0                      0                      1

 

                                    cosq              sinq              0

            เรียก                -sinq             cosq              0          ว่า “Transformation Matrix สำหรับการหมุน”

                                    0                      0                      1

 

            ในทางปฏิบัติเราอาจจะต้องหมุนภาพรอบจุดใด ๆ ซึ่งไม่ใช่จุดกำเนิด สำหรับกรณีนี้จะต้องใช้ 3 ขั้นตอน ดังนี้

 

1.      ย้ายจุดหมุน (Xr,Yr)ไปยังจุดกำเนิด (0,0) โดยนำ Transformation Matrix สำหรับการย้ายมาคูณกับจุดทุกจุด และให้ Tx = -Xr และ Ty = -Yr  เมื่อย้ายแล้ว ทุกจุด(X,Y) ที่ใช้นิยามภาพก็จะถูกย้ายไปยังจุดใหม่ (X’,Y’) ด้วย

 

 

 

                                                                                    1          0          0

            [ X’            1] = [ X          Y         1]        0          1          0

                                                                                    -Xr     -Yr     1

           

2.      ทำการหมุนภาพรอบจุดกำเนิด(0,0) เป็นมุม q ทำได้โดยการนำ Transformation Matrix สำหรับการหมุนมาคูณกับจุดทุกจุดที่ได้จากข้อ 1 ได้จุดใหม่เป็น  (X”,Y”)

 

 

                                                                                                cosq              sinq              0

                        [ X”           1] =  [               1]        -sinq             cosq              0

                                                                                                0                      0                      1

 

3.      ย้ายจุดหมุนจากจุดกำเนิด(0,0) กลับไปยังจุดเดิม (Xr,Yr) จะได้จุดใหม่ของทุกจุดที่นิยามภาพเป็น (X*,Y*)

 

 

                                                                                    1          0          0

            [ X*    Y*       1] = [ X”               1]        0          1          0

                                                                                    Xr       Yr       1

 

            จาก 3 ขั้นตอนข้างต้นเราอาจหาจุดใหม่โดยการประยุกต์ดังนี้ คือ นำ Transformation Matrix มาคูณกันก่อน

 

                        1          0          0                      cosq              sinq              0                      1          0          0

                        0          1          0                      -sinq             cosq              0                      0          1          0

                        -Xr     -Yr     1                      0                      0                      1                      Xr       Yr       1

 

                        cosq                                      sinq                                      0

            =          -sinq                                     cosq                                      0

                        (1- cosq)Xr + Yrsinq      (1-cosq)Yr - Xrsinq        1

 

            จากนั้นนำ Transformation Matrix ใหม่ที่ได้มาคูณกับจุดทุกจุดที่นิยามภาพ

 


                                                                                    cosq                                      sinq                                      0

            [X’             1] = [X           Y         1]        -sinq                                     cosq                                      0

                                                                                    (1- cosq)Xr + Yrsinq      (1-cosq)Yr - Xrsinq        1

 

            ก็จะได้ภาพที่ถูกหมุนตามต้องการ ทั้งนี้ต้องคูณ Transformation Matrix ตามลำดับขั้นตอนของการ Transform เนื่องจากถ้าคูณผิดลำดับหรือสลับกันแล้วภาพที่ได้ก็จะผิดไปจากความเป็นจริง

 

 

Back  Next