SSブログ

Mac用プロットライブラリ-11 [考え中 - プロットライブラリ]

思い出したようにやってるプロットライブラリの先日の続き。思い出したんでやってるんだけど。

Plot領域を基準にして相対View座標指定されたOjbectがはみ出る可能性がある場合の処理。複雑なので具体的なアルゴリズムを考えてみた。

  1. 描画オブジェクトをパースしてrelative指定されたview座標を探す
  2. まず描画領域全体を使ったときにそのView座標がはみ出すかどうか計算する
  3. 上下にはみ出すものと左右にはみ出すものを別々に取り出し、それぞれリストを作る
  4. 右に一番大きくはみ出すものと左に一番大きくはみ出すものを取り出し、それが収まるように描画領域を小さくする
  5. 上下にも同じことをする
  6. 新しい小さくした描画領域を使って再びはみ出す量を計算する
  7. はみ出し量が変わらなくなるまで繰り返す
0413fig5.png

ここでちょっと例を考えてみると、図-5の左はNormalized座標であるA点、C点から左にView座標で相対指定されたB点、D点がはみ出している。左の図の場合、はみ出し量はBよりもDの方が大きい。A点のx座標が0.1、C点のx座標が0.4であるとして、それを右の図のように全体の領域を半分にしたとする。相対指定されたView座標の値は変わらないのでこの場合Bの方がDよりもはみ出し量は大きくなり、逆転する。収束計算が必要なのは、今の例のように描画領域を変更すると最もはみ出しの大きいものが変わる可能性があるから。

また、図のように左側だけではみ出し量が決まるわけではなく、右側のはみ出しによってもプロット用の描画領域が変わるので両にらみでなければならない。

一般的には領域を小さくして行くと相対指定元のNormalized座標が領域の中心部に近いほどはみ出しは増えて行く。これは領域を小さくして行った場合、逆転することはない。だから、上のアルゴリズムは必ず収束する。

う〜ん、やっぱりこういう繰り返しが必要だよな。あまりこういうライブラリで計算時間が読めなくなるようなアルゴリズムはいまいちなので使いたくないけど、他にいい方法を思いつかないのでとりあえずこうしておこ。これは収束も早いはずだし。

次回から実装を考えよう。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。