いつだったか、記事にmatlabで楕円を描くには行列の固有値が必要とか書きました。しかし、あれは間違いでした。今日の記事はその修正版です。先日から始めたアクセス解析を見ると「matlab 楕円」で検索してこのブログに来てくれる方がいらっしゃるようですし。
matlabのplotコマンドを用いて図形を描くときは、その図形のxy座標の式を直接用いることはできず、媒介変数表示でx=○、y=△と書く必要があります。
例えば直径1の円形を描くときは以下のようなプログラムになります。
t=0:10:360;
x=cosd(t);y=sind(t);
figure(1)
plot(x,y)
次に楕円の描き方を説明します。楕円の式は
と表します。これを媒介変数表示すると、となります。つまり
t=0:10:360;
a=2;b=3;
x=a*cosd(t);y=b*sind(t);
figure(1)
plot(x,y)
となります。
「それだけじゃ物足りない!x軸からθだけ回転させた楕円は描けないの?」
できます。回転行列Rというものを導入します。
R=[cosθ -sinθ;
sinθ cosθ]
これを先ほどのx,y座標に書けるとあら不思議、回転した楕円がかけます。
t=0:10:360;
a=2;b=3;
theta=30;
x1=[a*cosd(t);
b*sind(t)];
R=[cosd(theta) -sind(theta);
sind(theta) cosd(theta)];
X=R*x1;
figure(1)
plot(X(1),X(2))
また楕円を原点から(x0,y0)だけ離れたところを中心に描くとすると以下のようになります。
t=0:10:360;
n=length(t)
a=2;b=3;
theta=30;
x0=5;y0=3;
c=[x0*ones(1,n);y0*ones(1,n)];
x1=[a*cosd(t);
b*sind(t)];
R=[cosd(theta) -sind(theta);
sind(theta) cosd(theta)];
X=R*x1+c;
figure(1)
plot(X(1),X(2))
補足
t=0:10:360 %tを0から360まで10刻みで変化させた行列。t=[0 10 20 ... 360];となる。
n=length(n) %行列の要素数を計算。ここではn=36;
ones(m,n) %要素がすべて1のm行n列の行列。
X=R*x1+[x0;y0]とすると多分行列のサイズが合ってないというエラーが起こるとおもったのでonesを使ってみました。
実は今日描いたプログラムはmatlab上で起動させていません。無事に動くかどうかは分かりません。なにか問題があったらコメントしてくださるとありがたいです。
以上。
追記:(20120817)--------
このプログラムを使えば、正n角形を描くことも可能です。プログラムの「t=0:10:360」に注目してください。これは角度を10度刻みで点をプロットすることを意味しています。つまり360/10=正36角形を描いていることになります。つまり正8角形を描きたければ360/8=45 つまりt=0:45:360とすればOKです。
追記:(20130213)--------
検索サイトから来ていただいた方へ
x軸からθだけ傾けたときの楕円の方程式は
となります。
二次形式を利用します。
MATLAB/Simulinkと実機で学ぶ制御工学-PID制御から現代制御まで- (Physical Computing Lab)
- 作者: 川田昌克
- 出版社/メーカー: TechShare
- 発売日: 2013/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る