[BlueLeaf1336]> PROBLEMS> Goza>

Goza - 前準備

historyTOP

2004/03/26:作成

overviewTOP

以前やろうとして力尽きていたんですが、ここに来てすることもなく再挑戦しようと考えています。で、何かというと、画像をぐるぐると回転させるプログラムです。そんなの腐るほどあります。えぇ知っています。でも、自分でやりたいんです。自分で数式を見てプログラムに書き直してパクッて端折って妥協して書きたいわけです。DirectXを使えば一撃なんていうのは嫌なんです。

ぐるぐるというのは、通常の普通の右回転・左回転だけではなく3次元すべてを使って回転させようとたくらんでいて、で、ぐるぐるというわけです。完成した暁には...多分使わないと思います。そこはそれ。そんなもんです。PhotoShopとかの方がよっぽど早くよっぽどきれいに回転してくれますから。

さて、名前なんですが「Goza」にする予定です。画像を回転させる...回転する...回転焼き...御座候(ござそうろう)。で「Goza(ござ)」です。ちょちょっと並べ替えると「Gazo(画像)」にもなって名前だけは良い感じです。

念のため、「御座候」は小豆文化の創造 御座候というわけで「あんこ屋さん」です(多分)。姫路駅地下にあるんです。今ホームページを見ると全国にあるみたいです。

それから参考文献は、「技術評論社 河西朝雄著 Visual Basicによるはじめてのアルゴリズム入門」です。2001/04/12に購入したみたいです。

では、いってみましょう。ゆるゆるとのらりくらりとほよほよと。

test-001TOP

2004/03/26

さて、いきなり画像を回転させるのはどう見ても無謀なので、画像は点の集まりということから点を回転させるところから入っていきます。また、画像は四角形に決まっているということにして、四角形(4つの頂点で決定できるので4つの点を回転させて元の順番でつなぐという方法で)を回転させるところまでテストしたのが次のモノです。

うれしくもなんとも無いと思いますが、EXE(UPX 90% compressed)とソース(Delphi6 Personal)が入ってます。20040326Goza.zip(173,050bytes)

また、問題を簡単にするために、四角形の回転の中心は四角形の中心(だと信じてるんですが)にしています。見た感じそのように回っているように思います。で、スクリーンショットはこんな風です。

まず回転させる対象となる四角形を作ります。
左側の白い部分でマウスの左ボタンを押したままドラッグすると格子模様の四角形を描きます(よくある奴です)。
結局こういうインターフェースが一番邪魔くさいです。

で、ボタンを離すと決定します。

右上の「XY」と描いてあるパネルでマウスの左ボタンを押すと回転を始めます。
このときパネルの外にマウスがはみ出さないようにクリッピングしています。
(...ここでエラーが起きると嫌な感じになります。)
横移動が X 軸周りの回転で、縦移動が Y 軸周りの回転に対応しています。
見事に直感と異なる方向に回ることにあきれてください。
それから、周囲の枠は「回転後の四角形がほぼ完全に含まれる長方形」です。
どこかで使うことになりそうな予感がしたのでやってみました。

右中の「XZ」と描いてあるパネルでマウスの左ボタンを押しても回転を始めます。
横移動が X 軸周りの回転で、縦移動が Z 軸周りの回転に対応しています。

さらに、右下のトラックバーを触ると奥行きを出すための消失点の位置を変更できます。
左端が -1000 右端が +1000 で深くは考えていません。
ただ真中(当然 0 付近)に持ってくると、おそらくですが消失点が回転後の点よりも内部というかおかしな位置関係になってそれなりにおかしな表示になりますが、そのあたりはアレで。

こんな感じです。で、これは4つの点だけでしたが、実際の画像となると驚くほどの点の集まりなので先が思いやられます。

また、説明ででてきた X軸/Y軸/Z軸はコンピュータのものをそのまま採用しています(のつもり)。つまり、右方向が X軸の正の方向、下方向が Y軸の正の方向(これが普通とは違います)、でここから自動的に決まるんですが、Z軸はモニターの向こう側が正の方向になります。まぁ、特に気付かないですが。

飽きないうちに完成しますように。

EOFTOP