看板 Math 關於我們 聯絡資訊
※ 引述《jeep168917 (幫幫)》之銘言: : 原始座標A(0,0),B(100,0),C(0,100) : 經過旋轉90度、放大2倍、平移10 : 新座標變成A’(10,10), B’(10,210), C’(-190,10) : 已知旋轉角度theta = 90°, 放大T=2, 平移S=10 : 利用二維矩陣可以算出經過旋轉、放大、平移後的座標(X’,Y’) : X’= T*x*cos(theta) - T*y*sin(theta)+S : Y’= T*x*sin(theta) - T*y*cos(theta)+S : 問題來了,若已知原始座標(x,y)與新座標(X’,Y’) : 該如何反推求出theta、T、S呢? 如果固定都是三個點轉換到三個點, 你可以把三個點視為一個三角形。 而且經過「旋轉」、「放大」、「平移」後,只有放大會改變邊長。 -- 於是你可以利用向量 AB, AC 和轉換後的 A'B', A'C' 之間的長度比 得到伸長的比例 T = |A'B'| / |AB| = |A'C'| / |AC| (擇一) -- 再來,旋轉影響了向量的方向,你可以用你上面的算式算出兩組向量的旋轉角度。 以你的例子來說, AB = (100, 0), AC = (0, 100); A'B' = (0, 200), A'C' = (-200, 0). 單位向量(因為只考慮角度) u1 = (1, 0), u2 = (0, 1); u'1 = (0, 1), u'2 = (-1, 0) 所以變成解下面兩式(同樣擇一) ┌ ┐ ┌ ┐┌ ┐ ┌ ┐ ┌ ┐┌ ┐ │0│ │cosθ -sinθ││1│ │-1│ │cosθ -sinθ││0│ │ │ = │ ││ │, or │ │ = │ ││ │. │1│ │sinθ cosθ││0│ │ 0│ │sinθ cosθ││1│ └ ┘ └ ┘└ ┘ └ ┘ └ ┘└ ┘ 或者我提供另一個方法,直接把單位向量用極坐標表示: u1 = (cos 0º, sin 0º), u2 = (cos 90º, sin 90º), u1'= (cos 90º, sin 90º), u2'= (cos 180º, sin 180º). 所以可以得知旋轉的角度θ. 如果是寫程式,可以考慮 tanθ=x/y, 由差角公式得到 tan(T), 就可以用 arctan 求得 T。 -- 最後,再把原本的點 x, y 經過 T, θ 的變換後的點,與 X', Y' 相減, 只需要高中所學的數學就能得到你要的 S (和 T, θ 了)。 以上,半夜打字,有錯請大家直接推文指正>< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.228.146.173 ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1510084792.A.B3A.html
jeep168917 : 太感謝您了! 11/11 06:43