« 2014年10月 | トップページ | 2014年12月 »

2014年11月28日 (金)

HP:StoneyDesigner用オートメーションの更新

 アルゴ算法堂のHP>お楽しみプログラム>(StoneyDesigner)サプリメントに掲載している オートメーション・プログラムを更新しました。

 「式ライン」「式プレーン」「式変形」が今回の更新対象です。

 これらのプログラムで共通で使っている式の処理などは、ExprLn.dllが担当しています。このDLLでの式の処理を大きく書き換えました。プログラム的な変更点はC#っぽく、クラスの継承を使って式で生成する内部オブジェクトを表すようにしたこと。大変更でした。
 式の処理を改善して、四則演算だけでなく、比較演算子と論理演算子をサポートしました。
「A大なりB」は、GT(A,B)と書いていたのが、A>Bと書けるようになりました。

 関数の引数処理を少し、柔軟にしたので、いくつかの関数は不定個数の引数を扱えるようになりました。新しい関数もいくつか導入しました。

 「式ライン」では、変数 t を動かしながら頂点の位置を決めているのですが、順番を表す整数として、変数 i も使えるようになりました。

 「式プレーン」でも、同様に、変数 u、v に加えて、横方向、縦方向での順番を現す変数 i、jが使えるようになりました。

| | コメント (0)

2014年11月26日 (水)

HP:StoneyDesigner用オートメーション・プログラム更新

 アルゴ算法堂のHP  > お楽しみプログラム > StoneyDesingerサプリメント においてあるStoneyDesigner用のオートメーション・プログラムを更新しました。

 もっとも大きな変更は、「式変形」を追加したことです。 「式変形」は選択したオブジェクトの座標を数式を利用して移動することで変形するプログラムです。

 座標モードを有効に使用するために、逆変換を組み込む手立てを考えていたのですが、用使用する変換モードでは手で逆変換関数を書いてもそれほど難しくないので、とりあえず、放置することにしました。

 式演算モジュールは若干の関数追加をしています。単純なWave発生関数と、周期関係の関数です。
 また、内部では、空間処理用のマトリックス計算が出来るようになったので、これから、もう少し手の込んだ処理もかけそうです。今回は、3Dカーソル座標上での演算のために逆マトリックス演算を使用しました。

 どうぞ、お試しあれ

| | コメント (0)

2014年11月20日 (木)

StoneyDesignerのオートメーションの話題

 StoneyDesignerの外部オートメーション機能を使用していくつかプログラムを書いています。

 現在進行中のものは、「式変形」。「式プレーン」と「式ライン」が数式に基づいて図形を自動生成するものだったのですが、今度は、図形の頂点を数式で変形(移動)するものです。

 数式のエンジンの流用で軽く考えていたのですが、実際に作ってみると、なかなか、色々問題が生じました。

 まず、単純に、速度の問題。すごく、遅い。で、どこが遅いといったら、頂点オブジェクトを取り出す部分。結局のところ、オートメーションでの関数呼び出しが重い。.NETが遅いかと思ったんですが、そうでなくて、そっち。頂点ごとに呼び出しているので、頂点数に比例して重くなります。アプリケーション間をまたぐので遅いのかも。
 プラグインにすれば解消するかもしれないけれど、めったに使わないものをプラグインにするのもちょっと気がひけます。

 次に問題になったのは、3Dカーソルを利用した相対座標系の使用。生成系の時には計算後に、3Dカーソルの変換マトリックスを掛け算すればよかった。
 今回は、ワールド座標から、相対座標に変換して、また、ワールド座標に戻す必要があります。最初に、逆マトリックスをかけて、式計算して、その後、マトリックスをかけて戻す。
 結局のところ、面倒な逆マトリックス計算をしなきゃいけなくて、ついでだから、手持ちの3Dライブラリの下の部分をC#用に書き換えて組み込みました。
 逆マトリックスの計算は、3Dのソフトでは案外使わなくて、オペレーションをマトリックスで集積するとき、反対側の操作のマトリックスも同時に生成するから、自動的に作られるというのが普通の方法です。ですが、今回はそうもいかず、計算しました。
 ライブラリでは、余因子行列を使用して小さく砕いて計算していたのだけれど、今回は、ここだけは、Maximaのお世話になって式を導入しました。すごく簡単になって少し悔しいです。Maxima恐るべし。

 現在も解消しないのが「式プレーン」「式ライン」にある「座標モード」機能。これも組み込んだけれど、使い方がいまいち直感的になりません。まぁ、理屈がわかっていれば使えるけれど、サービスが足りない。この機能は出力に働くので、入力側の逆変換を用意してやら無いと、使いにくくなるわけですね。
 使いやすくするのが面倒ですね。直交系での座標は変数x,y,zで読めるから、逆変換した座標も変数に用意するといいのかもしれません。でも、使わないのに用意するのも、気持ちが悪いです。

 とりあえず、手元では動いているので、遊んでいますが、それなりに楽しく使えます。
 

| | コメント (0)

« 2014年10月 | トップページ | 2014年12月 »