ソラマメブログ

2008年09月14日

三角関数


オブジェクト製作、プリムを並べる、配置するときに、手作業では困難、角度をすこしずつ変化させたい、距離をすこしづつ変化させたい、大量にそろえてみたいなどのときに、

スクリプトで計算して、パパッと実現できたら、 並べられたらなんて思うことがあります、

1)手作業では、 編集作業で、 グリッドを利用する、 コピー、 移動、 回転、ができます、
位置座標、回転角度を数値で入力設定すれば、ぴったりにも並べたりできます、

2)スカートのプリムを円周にならべてくれるもの、 

3)平面 円周に壁を配置、建物製作ツール

4)球体状に 平面プリムを配置するドーム状にする、 武道館のたまねぎみたいな変形タイプも自動に作成するすぐれものも販売されているようです(スゴイデス)

5)PENTAGON 5角形を配置した 正12面体 三角形からなる正20面体 などの多面体の作成

おおくの場面で、ズバット計算されています、これらには、★三角関数などを利用します^^ 

llCos(
llSin(
llAcos(
llAsin(
llAtan2(
llSqrt( 平方根

http://wiki.secondlife.com/wiki/LlCos
Returns a float that is the cosine of theta.
float theta ? angle expressed in radians.

Function: float llCos( float theta );
Returns a float that is the cosine of theta.
float theta – angle expressed in radians.

★関数使い方
単位の相互関係を注意して、関数を利用します ラジアンの相互変換のための定数を掛けて使用すると正しい結果になります
float DEG_TO_RAD = 0.01745329238;
float RAD_TO_DEG = 57.29578;
(準備されている定数です、 スクリプトで前もって書かなくても、定数として使用できます)

integer A; //角度 たんい:DEG
integer B; //角度 たんい:DEG
float x1; //辺の長さ たんい:m
float y1; //辺の長さ たんい:m
float z1; //辺の長さ たんい:m
であるとき

x1=llCos(A*DEG_TO_RAD)*z1;
z1=llSqrt(x1*x1+y1*y1);
B=llAcos(x1/z1)*RAD_TO_DEG;

三角関数の中の数値はラジアンなので、DEG_TO_RADをかける、
ラジアンにRAD_TO_DEGを掛けると、角度DEGになります、



★日本家屋などの屋根の傾斜・辺の長さを計算してみましょう
三角関数で計算したら、座標がただしく計算できるのでしょうか? (当然できます^^;)

スクリプトでは、プリムの大きさ、位置、向き、パスカットなどの構成されるパラメータを直接指定できます(プリミティブパラメータ)

考える課題は以下のものです

1)パラメータ、 変数の名前、 配置、 モデルの構成の準備、

2)必要な角度、辺の長さから、影響する部位を三角関数など計算から求める、

角度から 他方の辺の長さを求めたり、 辺の長さの組合せから、角度をもとめたりできますね、

3)セカンドライフ中でどんな数値をもとめたらよいのでしょうか? プリムの表現、REZする、変形する、移動するには? 

プリムを移動させたりするには、 プリムの中心の座標が必要です、これは、オブジェクトの中心となります、
編集画面やプリムの位置座標は、表示されているし、簡単に関数で取得できます、


では? プリムの表面の座標は?、 辺の座標は?、 頂点の座標は? どこなんでしょう? 辺と辺をあわせたり 面を接する座標はどこになるでしょう?
これらはプリムの厚み、各辺の長さ、プリムの大きさ、オブジェクトの中心座標から  計算することになるんですね、
(プリムがパスカットされていたりすると、見た目の大きさと辺の長さの数値が異なるものになりますので、まず、基本の箱、三角形だけ考えてみましょう)

4)テキスチャの傾き調整

プリムの形、パスカットで テキスチャの調整が比較的実施しやすい向きを、いくつか作成します、
テストパターンを貼り付けてあります、
表面をそろえると、裏面にも影響するので、向き角度を調整できない配置も存在します^^;


三角関数

三角関数は問題なく利用できました^^

三角形の傾いたプリムの配置を決めると、 90度に交差する辺を共有する他方の三角形の傾いたプリムの、辺の長さ、傾きの角度が計算できます、ので数値を指定しプリムを変形。移動させると、面がぴったり一致します、

この2プリムを頂点で90度、180度、270度 Z軸で回転させた角度と、中心位置がX軸、Y軸でどのくらい移動するのか計算して配置させれば、 全体として8プリムで構成された屋根のような形に配置させることできました、
(基本の形)赤色-緑色の2プリム

X軸方向に長方形の2プリムを加えて10プリムで峰のある、屋根のような形に配置できます、

X軸、 Y軸方向だけコピー・並べることで(中ぬき)に配置できます、


各課題の説明は、また次回^^; 機会があれば^^b



5)PENTAGON 5角形を配置した 正12面体 正20面体 などの多面体の作成
これは、セカンドライフでは、親プリムの回転と、リンクの追加で実施する方法も簡単なアイデアです、


参考:
llSetPrimitiveParams( list rules );
http://wiki.secondlife.com/wiki/LlSetPrimitiveParams/ja

http://wiki.secondlife.com/wiki/LlCos


Posted by しんいち at 21:51│Comments(0)三角関数・多角形
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。