« 2013年05月 | メイン | 2013年07月 »

2013年06月 アーカイブ

2013年06月03日

SketchUpプラグインを考えるvol12

§ Transformationクラス訂正
> 関係を4x3マトリクスで表現
と書きましたが、間違えていました。
正しくは3x4マトリクス、SketchUpでは実用上4x4行列として扱っている。また、4次元の「行」ベクトルを用いて3次元座標を前3項に置き最後の1項を常に「1」とすると座標・変換行列の計算上都合が良い。
日本の3DCG関連参考書では、4次元の「列」ベクトルを用いて解説されることが多いが、拡縮回転移動に関するSketchUpで言うところのtransformation行列が参考書とは転置している。
Transformationクラスを4x4行列=16項配列で与えるメソッド
Geom::Transformation.new[(16)]
を実行する時には、この点に注意しなければならない。

SketchUpプラグインを考えるvol13

§ Transformationクラス訂正その2
たとえば、エンティティをz軸回りに90度回転させるTransformationマトリクスは
t=Geom::Transformation.new [0,1,0,0,-1,0,0,0,0,0,1,0,0,0,0,1]
と与えることが出来るから、選択されたエンティティすべてを回転させるには、
sel = Sketchup.active_model.selection
sel.each {|e| e.transform! t}
とすればよい。
90度回転しつつx方向に3m移動するならば、
t=Geom::Transformation.new [0,1,0,0,-1,0,0,0,0,0,1,0,3000.mm,0,0,1]
である。

2013年06月07日

SketchUpプラグインを考えるvol14

§ Vector3dクラス
SketchUp Rubyクラスには、3D空間ベクトルに関する様々な機能が提供されている。

ベクトルの加減算
v1=Geom::Vector3d.new(x1,y1,z1)
v2=Geom::Vector3d.new(x2,y2,z2)
v3=v1+v2
v4=v1-v2

ベクトルの内積、外積
内積:
s=v1%v2 又は s=v1.dot v2
外積:
v3=v1*v2 又は v3=v1.cross v2

ここで、ベクトル内積、外積とは。
内積値は、スカラーである、
内積値が良く使われる場面に2ベクトルの直交判定がある。
2ベクトルが互いに直交するときその内積値がゼロとなることを利用してある線分への垂線を求めることができる。
外積は、2ベクトルによって既定される平面の法線を得る場面で良く利用される。
ある平面に紐つけされる任意のベクトルv1、v2に対し、その外積値ベクトルv3=v1*v2はその平面の法線ベクトルとなる。

さらに、
2ベクトルの成す角を求める。
ang=v1.angle_between v2
ベクトルの向きはそのままに単位ベクトルを得る。
vn=v1.normalize
ベクトルの大きさを反転。
rv=v1.reverse
ベクトルの大きさを指定。
v1.length=length

これらベクトルメソッドを利用すると、代数的に三角関数を利用しないと得られない結果が、それらを全く使わずに得ることができ、3D空間計算ではとても有用である。

About 2013年06月

2013年06月にブログ「天越ブログ弐」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2013年05月です。

次のアーカイブは2013年07月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。