「ロドリゲスの回転公式?」と思った人は検索するといっぱい出てきますので、詳細は割愛します。
まずはロドリゲスの回転公式.gsmを作成します。
追加する新規パラメータは以下とします。
thetaは回転角度、nは法線ベクトル、tpは回転させたい点の座標という設定です。
ロドリゲスの回転公式.gsmは他のオブジェクトからcallして使いたいと思いますので、
以下のスクリプトでは返り値を_result[]として、ENDコマンドを使用して値を返すようにします。
ロドリゲスの回転公式.gsmの3Dスクリプト
x=1:y=2:z=3 dim _result[], _matrix_n[][], _matrix_t[][], _matrix_r[][] _matrix_n[1][1]=n[x]**2 _matrix_n[1][2]=n[x]*n[y] _matrix_n[1][3]=n[x]*n[z] _matrix_n[2][1]=n[y]*n[x] _matrix_n[2][2]=n[y]**2 _matrix_n[2][3]=n[y]*n[z] _matrix_n[3][1]=n[z]*n[x] _matrix_n[3][2]=n[z]*n[y] _matrix_n[3][3]=n[z]**2 _matrix_t[1][1]= cos(theta) _matrix_t[1][2]=-n[z]*sin(theta) _matrix_t[1][3]= n[y]*sin(theta) _matrix_t[2][1]= n[z]*sin(theta) _matrix_t[2][2]= cos(theta) _matrix_t[2][3]=-n[x]*sin(theta) _matrix_t[3][1]=-n[y]*sin(theta) _matrix_t[3][2]= n[x]*sin(theta) _matrix_t[3][3]= cos(theta) for i=1 to 3 for j=1 to 3 _matrix_r[i][j] = (1-cos(theta)) * _matrix_n[i][j] + _matrix_t[i][j] next j next i print(_matrix_r) for i=1 to 3 _result[i]=0 next i for i=1 to 3 for j=1 to 3 _result[i] = _result[i] + _matrix_r[i][j]*tp[j] next j next i END _result[1], _result[2], _result[3]
test.gsmの3Dスクリプト
dim _n[], _tp[] _n[1]=0 _n[2]=0 _n[3]=1 _tp[1]=1 _tp[2]=0 _tp[3]=1 theta=30 call "ロドリゲスの回転公式" parameters theta=theta, n=_n, tp=_tp, RETURNED_PARAMETERS nx,ny,nz !回転軸ベクトル lin_ 0,0,0,_n[1],_n[2],_n[3] !tp hotspot _tp[1],_tp[2],_tp[3] !回転後 hotspot nx,ny,nz
ロドリゲスの回転公式.gsmをcallして、返り値を取得するためにRETURNED_PARAMETERSというキーワードを使用します。
結果を確認するために、lin_とhotspotを使用すると、以下のような状態になっているかと思います。
![]() |
| 回転結果 |
今回は以上となります。
GDLで3D形状を細かく表現しようとすると、色々な数学の知識が必要になってきて大変です💦頑張って知識の幅を広げていきたいと思います。
【お知らせ】
ココナラでのサポートサービスも承っておりますので、
ご活用いただければと思います。
1日GDL作成やArchiCAD関連の相談のります 自分でGDLを作成している方へXのアカウントもありますので、ぜひフォロー頂けると嬉しいです。
アカウントはこちらから⇨https://x.com/BIM_arekore
世界の建設業従事者、BIM推進者と繋がりたいです。よろしくお願いします。


Why you didn't use xform ??
返信削除Thanks for the feedback! I’m not very familiar with xform — could you explain how to use it?
削除