為什麼這篇matlab座標旋轉鄉民發文收入到精華區:因為在matlab座標旋轉這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者dever (殘存亦沒路,兵敗如山倒)看板MATLAB標題[問題] 如何讓點依照角度翻轉時間Tu...
各位版上的前輩大家好,請版上的高人們幫忙給予指教。
假設現在有一點的座標為(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 (ggyyNN 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
> -------------------------------------------------------------------------- <
作者: 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
> -------------------------------------------------------------------------- <
作者: 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
> -------------------------------------------------------------------------- <
作者: gbl (ggyyNN 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
> -------------------------------------------------------------------------- <
作者: 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