d2cモジュール
ダウンロード
d2cモジュール Ver.1.12 (2025/07/23)
ダウンロード(606 KB)
内容
このパッケージはHSP3用モジュールです。
D2C(Dimension 2 Calculation)モジュールは、2D空間での計算において便利そうで実装が面倒そうな命令をまとめたHSP3用モジュールです。
簡単なベクトル演算や衝突判定などを行うことが出来ます。2Dゲームやツール開発などで活用ください。主に次のような機能があります。
ライセンス:NYSL
主な機能
- 多角形の作成
- 直線の反射
- 点光源の影作成
- 図形の接線取得
- 図形の簡易描画
- 基本計算機能(内積、外積、法線ベクトル、ベクトル回転、ベクトル正規化)
- 図形の計測機能(角度、長さ、面積、外接円など)
- 衝突判定
- 線分と図形の交点取得
- 軌道予測計算
- 線分の反射軌道計算
- 線分の屈折計算(応用例)
- バネの計算
- ロープのシミュレーション計算
動作環境
- Windows10で動作確認済み。
- HSP3でのプログラミング作業にご利用ください。
インストール・アンインストール
HSP3アップデータ【推奨】
HSP3アップデータでのインストールやアップデートが可能です。
- HSPスクリプトエディタのメニューから、 ツール>HSP3機能のアップデート を選択してください。HSP3 Updateが起動します。
- 「設定」ボタンを押してください。
- 真ん中あたりにある入力ボックスで、以下の文字列を入力してください。
https://mclab.uunyan.com/dl/package/u10_index.hspupd - 「追加」ボタンを押してください。
- 「追加パッケージURL」にURLが追加されます。
- 「戻る」ボタンを押してください。
- 「プラグイン/素材」の一覧にインストール可能な項目が追加されます。
- 「D2Cモジュール」をクリック。
- 「選択」ボタンを押して選択し、「アップデート」ボタンを押すとインストールできます。
HSP3アップデータでのバージョンアップ
- HSPスクリプトエディタのメニューから、ツール>HSP3機能のアップデート を選択してください。HSP3 Updateが起動します。
- 「プラグイン/素材」の一覧から「D2Cモジュール」をクリック。
- 「選択」ボタンを押して選択し、「アップデート」ボタンを押すとインストールできます。
手作業での新規インストール・バージョンアップ
- zipファイルを展開してください。
- HSP3インストールフォルダに、commonフォルダとdoclibフォルダを上書きコピーしてください。これでインストール作業は完了です。
手作業でのアンインストール
- commonフォルダからd2cm.hspを削除してください。
- doclibフォルダからd2cmフォルダを削除してください。
サンプルスクリプト
ほぼすべての命令についてサンプルスクリプトを用意してあります。 説明文章だけではわかりにくい使い方の把握の参考にしてください。
サンプルのサムネイル画像もつけているので探しやすいと思います。
機能紹介
機能の一部を紹介。
衝突判定
次の組み合わせの衝突判定が可能です。
点 | 線分 | 円 | 楕円 | カプセル | 矩形 | 回転矩形 | 多角形 | |
---|---|---|---|---|---|---|---|---|
点 | △ | △ | ● | ● | ● | ● | ● | ● |
線分 | ● | ● | ● | ● | ● | ● | ● | ● |
円 | ● | ● | ● | ▲ | ● | ○ | ○ | ○ |
楕円 | ● | ● | ▲ | ▲ | ○ | ○ | ○ | ○ |
カプセル | ● | ● | ● | ○ | ● | ○ | ○ | ○ |
矩形 | ● | ● | ○ | ○ | ○ | ● | ● | ● |
回転矩形 | ● | ● | ○ | ○ | ○ | ● | ● | ● |
多角形 | ● | ● | ○ | ○ | ○ | ● | ● | ● |
●▲:専用の衝突判定命令あり。
▲:判定精度はあまり高くありません。
○:多角形でその他の形状を再現して作成することで、多角形同士として判定した場合。
△:距離を計算できます。
影を作成
d2cCreateShadowPolygon
命令は、任意の点から各図形への接線を求めて疑似的な影を作成する命令です。図形の接線をうまく使うことで、任意の点を光源とした図形の影を作成することができます。
反射・屈折
レーザー光線が鏡にぶつかった際のような反射経路や、ガラスにぶつかった際のような屈折経路を計算することができます。
ばね・ダンパ
バネとダンパの物理計算が行えます。バネとダンパのパラメータを設定して、バネの伸びと速度からどのくらいの力が発生するかを計算する事ができます。 ObaQなどの物理エンジンと組み合わせて使用すると効果を発揮します。
バネの性質は、ばね定数と減衰係数で決定することはよく知られています。しかしながら思い通りの動きになるような値を動かしながら探るのは大変な作業です。減衰比や限界減衰率、固有振動数など便利なパラメータは存在していますが、使い方がよくわからないので手軽に利用できません。
そこで本モジュールでは、d2cCalcSpringJointPrm
命令とd2cSetSpringJointPrmMFZ
命令を用意しました。これらの命令は、バネの性質を指定することでばね定数と減衰係数を算出するものです。これでバネの調整作業の負担がかなり軽減できると思います。
ロープ(PBD)
ロープのシミュレーション計算が行えます。
複数の質量をばねダンパで数珠つなぎにするとロープのようなものができますが、動作結果が収束せずいつまでも動き続けます。
本モジュールでは、PBD(Position Based Dynamics)という位置ベースのアルゴリズムを用いることでこの問題を解決しました。物体の位置をベースとした計算方法のため、物理的な正確さはありませんが、小さい負荷でとてもリアルな動作結果を得ることができます。 ObaQなどの物理エンジンと組み合わせて使用すると効果を発揮します。
ベンチマークテスト
衝突判定系の命令のベンチマークテストを行うスクリプトをつけました。 計算負荷の見積りに使用してください。
技術的解説
本モジュールが備えている一部の機能について、技術的な解説については「衝突判定」のページを参照してください。 移動物体の狙撃と影の作成について、実装方法を解説しています。
命令・関数の一覧
作成
d2cMakePolygon | 多角形を作成 |
反射
d2cColRayRefLineSgt | 反射光のと鏡面の衝突判定 |
d2cGetPosLineSymmetry | 線対称座標を取得 |
d2cGetPosPointSymmetry | 点対称座標を取得 |
変換
d2cConvShape | 形状データを予備変換 |
d2cConvShape2 | 形状データを予備変換2 |
d2cConvShapeReverse | 多角形を裏返す |
接線
d2cCreateShadowPolygon | 影を作成 |
d2cSetShadowOption | 影作成のオプションを設定 |
d2cTangentOfCapsule | カプセルの接線 |
d2cTangentOfCircle | 円の接線 |
d2cTangentOfEllipse | 楕円の接線 |
d2cTangentOfPolygon | 多角形の接線 |
d2cTangentOfRSquare | 回転矩形の接線 |
d2cTangentOfSquare | 矩形の接線 |
描画
d2cDrawBox | 中空の矩形を描画 |
d2cDrawCapsule | カプセルを描画 |
d2cDrawCircle | 中空の円を描画 |
d2cDrawPolygon | 多角形を描画 |
d2cDrawStrtLine | 直線を描画 |
d2cDrawBoxF | 塗りつぶし矩形を描画 |
d2cDrawCircleF | 塗りつぶし円を描画 |
数学サポート命令
d2cGetNormalVector | 法線ベクトルを取得 |
d2cInnerProduct | 内積を算出 |
d2cRotate | 平面座標回転演算 |
d2cVectorNormalize | ベクトルを正規化 |
d2cVectorProduct | クロス積(外積)を算出 |
測定
d2cAngleByPoints | 3点による角度を計算 |
d2cDistance | 2点間の距離を算出 |
d2cDistancePoint2Line | 点から直線までの距離を取得 |
d2cGetCenterOfGravity | 多角形の重心座標を取得 |
d2cGetGaisetsuCircle | 三角形の外接円を計算 |
d2cGetGaisetsuCircleSquare | 矩形の外接円を計算 |
d2cLength | ベクトルの長さを算出 |
d2cPolygonArea | 多角形の面積を算出 |
d2cGetVertex | 頂点座標を取得 |
d2cGetPolygonVertex | 多角形の頂点座標を取得 |
衝突判定
d2cColCapsuleCapsule | カプセルとカプセルの衝突判定 |
d2cColCircleCapsule | 円とカプセルの衝突判定 |
d2cColCircleCircle | 円と円の衝突判定 |
d2cColEllipseEllipse | 楕円と楕円との衝突判定 |
d2cColInsideCapsule | 点とカプセルの衝突判定 |
d2cColInsideCircle | 点と円の衝突判定 |
d2cColInsideEllipse | 点と楕円との衝突判定 |
d2cColInsidePolygon | 点と多角形の衝突判定 |
d2cColInsideRSquare | 点と回転矩形の衝突判定 |
d2cColInsideSquare | 点と矩形の衝突判定 |
d2cColLineCircle | 直線と円の衝突判定 |
d2cColLineEllipse | 直線と楕円の衝突判定 |
d2cColLineSgtCapsule | 線分とカプセルの衝突判定 |
d2cColLineSgtCircle | 線分と円の衝突判定 |
d2cColLineSgtEllipse | 線分と楕円の衝突判定 |
d2cColLineSgtLineSgt | 線分と線分の衝突判定 |
d2cColLineSgtPolygon | 線分と多角形の衝突判定 |
d2cColLineSgtRSquare | 線分と回転矩形の衝突判定 |
d2cColLineSgtSquare | 線分と矩形の衝突判定 |
d2cColPolygonPolygon | 多角形と多角形の衝突判定 |
d2cColRSquarePolygon | 回転矩形と多角形の衝突判定 |
d2cColRSquareRSquare | 回転矩形と回転矩形の衝突判定 |
d2cColSquarePolygon | 矩形と多角形の衝突判定 |
d2cColSquareSquare | 矩形と矩形の衝突判定 |
d2cGetIntersectionPos | 交点座標を取得 |
d2cGetIntersectTangent | 交点と接線を取得 |
d2cSetIntersect | 交点座標の計算の有効/無効 |
軌道予測
d2cShot_SetTargetPrm | 目標の位置と速度を設定 |
d2cShot_SetShotPrm | 攻撃の位置と速度を設定 |
d2cShot_GetShotData | 攻撃の打ち出し設定を取得 |
反射
d2cColRayRefLineSgt | 反射光のと鏡面の衝突判定 |
d2cGetPosLineSymmetry | 線対称座標を取得 |
d2cGetPosPointSymmetry | 点対称座標を取得 |
バネ
d2cCalcSpringJointPrm | ばね・ダンパのパラメータ計算 |
d2cGetSpringJointForce | ばね・ダンパから受ける力を取得 |
d2cGetSpringJointPrmKC | ばね定数と減衰係数を取得 |
d2cSetSpringJoint | 質点と支点の座標を設定 |
d2cSetSpringJointDistance | 距離制限を設定 |
d2cSetSpringJointPrmKC | ばね定数と減衰係数を設定 |
d2cSetSpringJointPrmMFZ | 周波数でばね定数を設定 |
ロープ(PBD)
d2cPbdrSolve | 制約解決処理 |
d2cPbdrSetDamping | 速度減衰を設定 |
d2cPbdrSetIterations | 制約解決回数を設定 |
d2cPbdrSetRestLength | ノード間距離を設定 |
d2cPbdrSetStiffness | 硬さを設定 |
d2cPbdrSetFixedNode | ノードを固定 |
d2cPbdrIsFixedNode | ノードの固定状態を取得 |
d2cPbdrUnsetAllFixedNode | 全てのノードの固定を開放 |
d2cPbdrUnsetFixedNode | ノードの固定を開放 |
履歴
2019/12/25 v1.00 | ・初公開版 |
2020/12/06 v1.01 |
・接線系の命令を追加 d2cCreateShadowPolygon d2cTangentOfCircle d2cTangentOfPolygon d2cTangentOfRSquare d2cTangentOfSquare ・マニュアルを全体的に修正 表記のゆらぎなどを修正。 |
2020/12/17 v1.02 |
・d2cCreateShadowPolygon 命令で、光の範囲境界付近で影が正しく生成されない不具合を修正。 ・d2cTangentOfEllipse 命令を追加。 ・d2cTangentOfCapsule 命令を追加。 ・マニュアルを全体的に修正 誤記や表記のゆらぎなどを修正。 |
2020/12/28 v1.03 |
・衝突判定関連の命令を追加。 d2cColCircleCapsule d2cColLineSgtEllipse d2cColLineSgtCapsule d2cColLineSgtCircle d2cColLineSgtPolygon d2cColLineSgtSquare d2cColLineSgtRSquare d2cColSquarePolygon d2cColRSquarePolygon ・d2cLength をマクロに変更。 ・d2cDraw系命令実行後のカレントポジションを図形の描画位置に変更。 ・サンプルをすべて見直し。 |
2021/01/30 v1.04 |
・d2cMakePolygon 命令を追加 ・d2cDrawBoxF 命令を追加 ・d2cDrawCircleF 命令を追加 ・サンプル01, 10, 11, 16 の修正。 ・サンプルスクリプトのサムネイル画像を追加。 ・ベンチマークテスト「ベンチ_….hsp」を追加。 |
2021/05/01 v1.05 |
・軌道予測関連の命令を追加 d2cShot_SetTargetPrm 命令を追加 d2cShot_SetShotPrm 命令を追加 d2cShot_GetShotData 命令を追加 |
2021/05/03 v1.06 | ・d2cShot_GetShotData 命令で、射出時の目標と攻撃の位置が同じ場合に衝突しないという計算結果を算出する不具合を修正。 |
2023/12/06 v1.07 |
・d2cColRayRefLineSgt 命令を追加 ・d2cGetPosLineSymmetry 命令を追加 ・d2cGetPosPointSymmetry 命令を追加 |
2023/12/24 v1.08 |
・d2cColLineCircle 命令を追加 ・d2cColLineEllipse 命令を追加 ・d2cSetIntersect 命令を追加 ・d2cGetIntersectionPos2 命令を追加 ・d2cGetIntersectTangent 命令を追加 |
2023/12/31 v1.09 |
・D2C_06_面積と重心.hsp で、反転面積の計算結果が正しく表示されない不具合を修正。 ・モジュール内を整理整頓 ・d2cGetNormalVector命令の引数を順番を他の命令に合わせて変更(終点,始点 → 始点,終点) ・d2cGetNormalVector命令の引数がint型だったため、double型に変更 ・d2cAngleByPoints命令の引数がint型だったため、double型に変更 ・全てのd2cColLine系命令で、線分と図形外周の交点を求める事ができるようにした。 ・d2cGetIntersectionPos2命令をd2cGetIntersectionPos命令に変更。これに伴いd2cGetIntersectionPos命令を廃止。 |
2024/04/14 v1.10 |
・線分と四角形/多角形の交点検出の際、線分の端が頂点にあった場合に正しく検出できないことがある不具合を修正。 ・d2cGetVertex 命令を追加 ・d2cGetPolygonVertex 命令を追加 |
2025/06/21 v1.11 |
・新しい命令を追加 d2cCalcSpringJointPrm ばね・ダンパのパラメータ計算 d2cGetSpringJointForce ばね・ダンパから受ける力を取得 d2cGetSpringJointPrmKC ばね定数と減衰係数を取得 d2cSetSpringJoint 質点と支点の座標を設定 d2cSetSpringJointDistance 距離制限を設定 d2cSetSpringJointPrmKC ばね定数と減衰係数を設定 d2cSetSpringJointPrmMFZ 周波数でばね定数を設定 |
2025/07/23 v1.12 |
・新しい命令を追加 d2cPbdrSolve 制約解決処理 d2cPbdrSetDamping 速度減衰を設定 d2cPbdrSetIterations 制約解決回数を設定 d2cPbdrSetRestLength ノード間距離を設定 d2cPbdrSetStiffness 硬さを設定 d2cPbdrSetFixedNode ノードを固定 d2cPbdrIsFixedNode ノードの固定状態を取得 d2cPbdrUnsetAllFixedNode 全てのノードの固定を開放 d2cPbdrUnsetFixedNode ノードの固定を開放 |