【小ネタ】ロドリゲスの回転公式をGDLで実装してみる

2025年10月6日月曜日

call end returned_parameters

t f B! P L
今回はロドリゲスの回転公式を実装してみたいと思います。
「ロドリゲスの回転公式?」と思った人は検索するといっぱい出てきますので、詳細は割愛します。

まずはロドリゲスの回転公式.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推進者と繋がりたいです。よろしくお願いします。



検索

GDLオブジェクト

ブログ アーカイブ

自己紹介

自分の写真
連絡先:bim.arekore@gmail.com  普段はBIM界隈で働いております。皆さんに役立つ情報を提供できればと思っております。BIMマネやBIMオペ、開発、プログラミング、BIMコンサル、技術営業等様々な業務をおこなっております。#施工管理#生産設計#BIM開発#ソフトウェアベンダー#ArchiCAD API#GDL#ArchiCAD python#Revit API#Dynamo

QooQ