どせいたんさき。

ナスダヨー

Octave の contourc で返される値の使い方がようやくわかった

目的

octave でコントアを書くためには contour という関数を使えばよい.また,contour で描かれるコントアを曲線として得たい場合には contourc という関数を使えばよい.しかしヘルプを一読しただけでは contourc によって返される値の使い方がよくわからなかったのであれこれやったメモ.

ちなみに octave 3.6.3 での contourc のヘルプの文面はここで確認できる.

ヘルプの解読

contourc によって返される値は Clev の 2 つ.このうち lev は作成されたコントアの高さについての情報である.一方,C には計算されたコントアの曲線情報が含まれているのだけどちょっとややこしい.

C = [lev1, x1, x2, ..., levn, x1, x2, ...
     len1, y1, y2, ..., lenn, y1, y2, ...]

C は常に 2xN の行列である. 1 行目の lev1, len1 は最初のコントア曲線に関する情報である.それぞれ最初のコントア曲線の高さ(lev1)最初のコントア曲線のデータ点数(len1)に対応する.ということで 2 行目から 1+len1 行目までコントア曲線のデータ点が並んでいる.2+len1 行目からは次のコントア曲線についての情報が続いていく.

コントアの描画

適当にスクリプトを書いてみた.contourc で得られたコントア情報を入力にしてプロットされたグラフ上にコントアを重ねて表示させる.動作確認の結果は以下の画像を参照.



foo = linspace(0,1,100);
bar = foo;
boo = sin(5*pi*foo')*sin(5*pi*bar);

imagesc(foo,bar,boo); # display boo

[cnt lev] = contourc(foo,bar,boo,-1:0.1:1); # obtain contour info
parsecontour(cnt);    # overlay contours