作者as7218 (Kaigiks)
看板Math
标题Re: [线代]座标旋转、放大、平移
时间Wed Nov 8 03:59:50 2017
※ 引述《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://webptt.com/cn.aspx?n=bbs/Math/M.1510084792.A.B3A.html
1F:推 jeep168917 : 太感谢您了! 11/11 06:43