精華區beta MATLAB 關於我們 聯絡資訊
各位版上的前輩大家好,請版上的高人們幫忙給予指教。 假設現在有一點的座標為(x1,y1),中心點是(x0,y0) 如何讓點(x1,y1)依照角度翻轉, 例如●=(x1,y1)與X軸的夾角是135度, 翻轉135度後座標變為○=(x1',y1')。 如何由點(x1,y1)與角度135得到(x1',y1')? Y | ●(x1,y1) | | | | (x1',y1') --------------------○------X (x0,y0) | | | | 感謝回答! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.231.122.158 > -------------------------------------------------------------------------- < 作者: gbl (ggyy￾NN N ) 看板: MATLAB 標題: Re: [問題] 如何讓點依照角度翻轉 時間: Tue Mar 18 11:57:24 2008 ※ 引述《dever (殘存亦沒路,兵敗如山倒)》之銘言: : 各位版上的前輩大家好,請版上的高人們幫忙給予指教。 : 假設現在有一點的座標為(x1,y1),中心點是(x0,y0) : 如何讓點(x1,y1)依照角度翻轉, : 例如●=(x1,y1)與X軸的夾角是135度, : 翻轉135度後座標變為○=(x1',y1')。 : 如何由點(x1,y1)與角度135得到(x1',y1')? : Y : | : ●(x1,y1) | : | : | : | (x1',y1') : --------------------○------X : (x0,y0) : | : | : | : | : 感謝回答! 用旋轉矩陣 R=[ cos() sin() -sin() cos() ] 矩陣裡面的term自己確認一下用哪種比較方便 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.137.95
dever:感謝@@b 03/19 00:26
> -------------------------------------------------------------------------- < 作者: biglongtoday (大長今) 看板: MATLAB 標題: Re: [問題] 如何讓點依照角度翻轉 時間: Tue Mar 18 11:57:38 2008 ※ 引述《dever (殘存亦沒路,兵敗如山倒)》之銘言: : 各位版上的前輩大家好,請版上的高人們幫忙給予指教。 : 假設現在有一點的座標為(x1,y1),中心點是(x0,y0) : 如何讓點(x1,y1)依照角度翻轉, : 例如●=(x1,y1)與X軸的夾角是135度, : 翻轉135度後座標變為○=(x1',y1')。 : 如何由點(x1,y1)與角度135得到(x1',y1')? : Y : | : ●(x1,y1) | : | : | : | (x1',y1') : --------------------○------X : (x0,y0) : | : | : | : | : 感謝回答! syms x1 y1 [cosd(-135) -sind(-135);sind(-135) cosd(-135)]*[x1;y1] 則 x1'= -1/2*2^(1/2)*x1+1/2*2^(1/2)*y1 y1'= -1/2*2^(1/2)*x1-1/2*2^(1/2)*y1 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.178.52
dever:感謝@@b 03/19 00:27
> -------------------------------------------------------------------------- < 作者: zupo (幫解MATLAB難題囧) 看板: MATLAB 標題: Re: [問題] 如何讓點依照角度翻轉 時間: Tue Mar 18 14:03:17 2008 ※ 引述《dever (殘存亦沒路,兵敗如山倒)》之銘言: : 各位版上的前輩大家好,請版上的高人們幫忙給予指教。 : 假設現在有一點的座標為(x1,y1),中心點是(x0,y0) : 如何讓點(x1,y1)依照角度翻轉, : 例如●=(x1,y1)與X軸的夾角是135度, : 翻轉135度後座標變為○=(x1',y1')。 : 如何由點(x1,y1)與角度135得到(x1',y1')? : Y : | : ●(x1,y1) | : | : | : | (x1',y1') : --------------------○------X : (x0,y0) : | : | : | : | : 感謝回答! 來個不一樣的吧 :P. pttex69(x1,y1,b,x0,y0) x1 y1 是你的參考點. b是你的旋轉角度 . x0 y0 則是你認定可能出現的值 (就是說.你認定是在哪個象限.因為斜率+180的值又會一樣.正負號自己找吧) ============================================================================== function pttex69(x1,y1,b,x0,y0) global x11 y11 new x11 = x1; y11 = y1; m = atan(y11/x11)*180/pi; % while (m < 0) m = m+180; end % new_angl = m + b; new = tan(new_angl*pi/180); while ( new > 50 | new < -50 ) x = 0; y = (x1^2+y1^2).^0.5; break end while( new < 50 ) point = fsolve(@rotat,[x0 y0]); x = point(1); y = point(2); break end [x y] function f = rotat(x) % x(1) = x , x(2) = y global x11 y11 new f = zeros(2,1); f(1) = (x(1).^2+x(2).^2).^0.5-(x11.^2+y11.^2).^0.5; f(2) = x(2)./x(1) - new; ============================================================================== 經測試.你想要從哪個任意參考點.轉幾度.都可以計算了. 不過 x y 的正負號.還是要由 x0 y0 來控制 (畫圖就可以猜大概位置了吧?) 我連 -inf 與 inf 也有預防錯誤了.所以來看看答案吧 測試1:轉 15度 >> pttex69(-2,2,15,1,-1) Optimization terminated: first-order optimality is less than options.TolFun. ans = 2.4495 -1.4142 測試2:轉 90度 >> pttex69(-2,2,90,1,-1) Optimization terminated: first-order optimality is less than options.TolFun. ans = 2.0000 2.0000 >> pttex69(-2,2,90,-1,-1) Optimization terminated: first-order optimality is less than options.TolFun. ans = -2.0000 -2.0000 測試3:原PO的例子 轉135度 >> pttex69(-2,2,135,1,-1) ans = 0 2.8284 這邊要注意的是.只要有一點為零.就表示 x y 可以互換.(向左轉或向右轉) 大致上是如此 你自己試玩看看吧 -- 數值方法 : 求根值 . ODE系統 . DDE系統. DAE系統. PDE系統 非線性聯立系統. 化工程序控制系統 . 力學系統 RLC 系統 . MCK 系統 . Lalpace 轉換 系統 其他 : 工程數學 .微積分.化工程序.輸送現象.化工程序線性控制 Simulator . MATLAB tool box . Simulink . FORTRAN 不會影像處理.....囧> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.160.163
dever:感謝@@b 03/19 00:27
> -------------------------------------------------------------------------- < 作者: gbl (ggyy￾NN N ) 看板: MATLAB 標題: Re: [問題] 如何讓點依照角度翻轉 時間: Tue Mar 18 15:29:47 2008 恩。。。總覺得這麼簡單的問題應該不需要寫這麼多程式 建議用基本的數學會讓code減少很多,畢竟Matlab是一款 強調數學計算的軟體 x1 = [ 3 5 ]' ; % Any Initial Point x0 = [ -1 -6 ]' ; % Any rotating center % i.e. x1 rotates about x0 Relx = x1 - x0 ; % Relative vector used to define % the rotation of x1 about x0 t = 30 * pi / 180 ; % Angle of rotation RotMat = [ cos( t ) -sin( t ) ; sin( t ) cos( t ) ] ; x1Prime = RotMat * Relx + x0 ; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.137.95
zupo:囧...好吧.... 03/18 15:34
zupo:不過這個我也學起來好了 ^^ 03/18 15:37
dever:感謝@@b 03/19 00:27
> -------------------------------------------------------------------------- < 作者: Gwaewluin (神無月 孝臣) 看板: MATLAB 標題: Re: [問題] 如何讓點依照角度翻轉 時間: Tue Mar 18 15:37:35 2008 ※ 引述《dever (殘存亦沒路,兵敗如山倒)》之銘言: : 各位版上的前輩大家好,請版上的高人們幫忙給予指教。 : 假設現在有一點的座標為(x1,y1),中心點是(x0,y0) : 如何讓點(x1,y1)依照角度翻轉, : 例如●=(x1,y1)與X軸的夾角是135度, : 翻轉135度後座標變為○=(x1',y1')。 : 如何由點(x1,y1)與角度135得到(x1',y1')? : Y : | : ●(x1,y1) | : | : | : | (x1',y1') : --------------------○------X : (x0,y0) : | : | : | : | : 感謝回答! 這個其實已經有人寫過整套現成的了 而且還是台灣人寫的 叫做trans4.m 裡面提供五種座標轉換的方法 平移、比例、鏡射、剪切、旋轉 都是可以讓你一次把全部座標點作input以後處理好全部的output給你 而且二維或三維都可以做 有興趣去找找看吧,有人寫好現成的就別再自己殺腦細胞來寫了 如果想要自己寫的話 可以建議去找些CAD的資料 這種座標轉換其時只是兩個矩陣相乘的結果 只要把那個4x4的座標轉換矩陣求出來就一切ok -- Deserves death! I daresay he does. Many that live deserve death. And some die that deserve life. Can you give that to them? Then be not too eager to deal out death in the name of justice, fearing for your own safty. Even the wise cannot see all ends. Gandalf to Frodo -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.25.235
zupo:喔喔.原來是這樣.好.那我去找找 03/18 15:38
Gwaewluin:呃,原始文章好像找不到了,有興趣的寫信來拿原始碼吧 03/18 16:49
dever:感謝@@b 03/19 00:27
Evanny:推 transformation matrix 才是王道阿 03/23 00:39