Wednesday, October 26, 2005

Transformation Matrix: Orthonormal Transformations

พูดเรื่องคำศัพท์นิดนึงก่อน มาดูว่า คำว่า "Normal" เนี่ย มันมีความหมายประมาณไหน

สมมติว่าเรามีเวกเตอร์ v อยู่ ขนาดของมัน เรียกว่า Norm เขียนแทนด้วย || v || (หรือ | v |)

Unit Vector
คือ เวกเตอร์ที่มีขนาดเป็น 1 ภาษาไทยเรียกตรง ๆ ว่า เวกเตอร์หนึ่งหน่วย

Normalization
คือ การหารเวกเตอร์ด้วยขนาดของมันเอง (เช่น v / || v ||) ผลลัพธ์เป็น unit vector ที่มีทิศทางเดิม

อีกที่นึงที่เจอคำว่า "Normal" บ่อย ๆ

ใน 2 มิติ Normal Vector ของเส้นตรง คือ เวกเตอร์ที่มีทิศตั้งฉากกับแนวเส้นตรงนั้น

ใน 3 มิติ Normal Vector ของระนาบ คือ เวกเตอร์ที่มีทิศตั้งฉากกับระนาบนั้น

รู้สึกอันนี้ คำว่า normal มันจะไม่ค่อยเกี่ยวกันเท่าไหร่แฮะ

ถ้า r(s) เป็นฟังก์ชันจาก เซตย่อยของจำนวนจริง ไปยังเซตย่อยของปริภูมิใด ๆ และมีอนุพันธ์อันดับสอง

T(s) = r'(s) / || r'(s) || เรียกว่า Tangent Vector
N(s) = T'(s) / || T'(s) || เรียกว่า Normal Vector
B(s) = T(s) × N(s) เรียกว่า Binormal Vector

อันนี้เกี่ยวกับอันที่แล้ว แต่ไม่ค่อยเกี่ยวกับอันแรกนะ

แล้วบอกทำไมมากมาย??? ... นั่นสิ ... ช่างมันดีกว่า เข้าเรื่องเลยละกัน ...

Orthogonal Transformation

คำว่า Orthogonal มันก็แปลว่า ตั้งฉาก อยู่แล้ว ดังนั้น Orthogonal Transformation ก็คือ การแปลงตั้งฉาก ... ???

เอาตัวอย่างมาดูเลยดีกว่า ท่าจะง่ายกว่า

สมมติว่า เดิมเรามีจุด (x, y) = xi + yj อยู่ แล้วเราอยากรู้ว่า ถ้าเปลี่ยนไปเป็นพิกัด au + bv เนี่ย จะได้ค่า a กับ b เป็นเท่าไหร่ เราจะทำยังไง? (เรารู้ค่า u กับ v ในพิกัด i-j อยู่แล้วนะ)

เอารูปเก่ามาดู (จาก ตามหาความหมายของ Determinant: Linear Combination)



วิธีที่เรารู้ ๆ กัน ก็คือใช้กฎของเครเมอร์ หาคำตอบของระบบสมการเชิงเส้น 2 ตัวแปร ก็จะได้ค่า a กับ b ออกมา ดังนี้ (เขียนไว้แล้วใน ตามหาความหมายของ Determinant: Kramer's Rule)

w = (x, y)
a = | w : v | / | u : v |
b = | u : w | / | u : v |
(ถ้าดูเครื่องหมายไม่รู้เรื่อง กลับไปดู ตามหาความหมายของ Determinant: เวกเตอร์ตั้งฉาก ก่อนนะ)

ถ้า u กับ v ตั้งฉากกันหละ? จะมีวิธีหา a กับ b ได้ง่ายกว่านี้รึเปล่า?

ลองดูใหม่นะ เรารู้ว่า

w = au + bv

เอา u ไปคูณ (ภายใน) ทั้งสองข้าง ก็จะได้

uw = u⋅(au + bv)
uw = auu + buv

จากที่เราสมมติให้ u ตั้งฉากกับ v ดังนั้น uv = 0 สมการก็จะกลายเป็น

uw = auu
a = uw / uu

เอ้อ มันดูง่ายกว่ากฎของเครเมอร์นิดนึงนะ (ตอนนี้อาจจะยังไม่เห็นชัด แต่ว่า พอมันมีหลาย ๆ มิติหนะ จะเห็นชัดมาก)

และแน่นอน ค่า b ก็หาได้ด้วยวิธีเดียวกัน แต่เปลี่ยนจากตอนที่เอา u ไปคูณ (ภายใน) ให้เป็น v แทน สูตรของ b ก็จะเป็น

b = vw / vv

จริง ๆ แล้ว เราขยายข้อสังเกตของเราได้นะ ... สมมติว่า เวกเตอร์แกนใหม่ของเรา มีอยู่ n ตัว คือ v1 v2 v3 ... vn แล้วเรามีจุด w = (x1, x2, x3, ..., xn) ใน n มิติอยู่ (ต้องรู้ค่าของเวกเตอร์ทุกตัว ในระบบแกนเดียวกันนะ ไม่งั้นจะหาผลคูณภายในไม่ได้) เราอยากรู้ว่า ในระบบพิกัดของแกนใหม่ ซึ่งระบุด้วย vi เนี่ย ค่า wi แต่ละตัวจะหาได้ยังไง? ... กำหนดให้
w = Σ1≤i≤n wivi

ถ้าหากทุก ๆ vi ตั้งฉากกันหมด เราจะสามารถหาค่า wi ทุกตัวได้ด้วยสมการ

wi = viw / vivi

หรือถ้าเขียนรวม ๆ ก็จะเป็น

w = Σ1≤i≤n (viw / vivi) vi

ซึ่ง ... คราวนี้เห็นชัดเลยหละ ว่ามันง่ายกว่ากฎของเครเมอร์

Orthonormal Transformation

คราวนี้ ถ้าเกิดเรา normalize เวกเตอร์แกนใหม่ทุกตัว ให้เป็น unit vector ก่อนหละ ... มันจะมีอะไรง่ายขึ้นอีก?

คำถามนี้ ตอบง่ายแฮะ ... ก็ดูจากสูตรเมื่อกี๊

wi = viw / vivi

ถ้า vi ทุกตัว มีขนาดเป็น 1 ... vivi ก็ต้องเท่ากับ 1 ... ดังนั้น

wi = viw
w = Σ1≤i≤n (viw) vi

Fine ...

1 Comments:

At 4/21/2014 2:31 PM, Blogger JP said...

Thank you for information na ka :-)

 

Post a Comment

<< Home