d2cモジュール

ダウンロード

d2cモジュール Ver.1.12 (2025/07/23)
ダウンロード(606 KB)

内容

 このパッケージはHSP3用モジュールです。

 D2C(Dimension 2 Calculation)モジュールは、2D空間での計算において便利そうで実装が面倒そうな命令をまとめたHSP3用モジュールです。

 簡単なベクトル演算や衝突判定などを行うことが出来ます。2Dゲームやツール開発などで活用ください。主に次のような機能があります。

ライセンス:NYSL

主な機能

  • 多角形の作成
  • 直線の反射
  • 点光源の影作成
  • 図形の接線取得
  • 図形の簡易描画
  • 基本計算機能(内積、外積、法線ベクトル、ベクトル回転、ベクトル正規化)
  • 図形の計測機能(角度、長さ、面積、外接円など)
  • 衝突判定
  • 線分と図形の交点取得
  • 軌道予測計算
  • 線分の反射軌道計算
  • 線分の屈折計算(応用例)
  • バネの計算
  • ロープのシミュレーション計算

動作環境

  • Windows10で動作確認済み。
  • HSP3でのプログラミング作業にご利用ください。

インストール・アンインストール

HSP3アップデータ【推奨】

HSP3アップデータでのインストールやアップデートが可能です。

  1. HSPスクリプトエディタのメニューから、 ツール>HSP3機能のアップデート を選択してください。HSP3 Updateが起動します。
  2. 「設定」ボタンを押してください。
  3. 真ん中あたりにある入力ボックスで、以下の文字列を入力してください。
    https://mclab.uunyan.com/dl/package/u10_index.hspupd
  4. 「追加」ボタンを押してください。
  5. 「追加パッケージURL」にURLが追加されます。
  6. 「戻る」ボタンを押してください。
  7. 「プラグイン/素材」の一覧にインストール可能な項目が追加されます。
  8. 「D2Cモジュール」をクリック。
  9. 「選択」ボタンを押して選択し、「アップデート」ボタンを押すとインストールできます。

HSP3アップデータでのバージョンアップ

  1. HSPスクリプトエディタのメニューから、ツール>HSP3機能のアップデート を選択してください。HSP3 Updateが起動します。
  2. 「プラグイン/素材」の一覧から「D2Cモジュール」をクリック。
  3. 「選択」ボタンを押して選択し、「アップデート」ボタンを押すとインストールできます。

手作業での新規インストール・バージョンアップ

  1. zipファイルを展開してください。
  2. HSP3インストールフォルダに、commonフォルダとdoclibフォルダを上書きコピーしてください。これでインストール作業は完了です。

手作業でのアンインストール

  1. commonフォルダからd2cm.hspを削除してください。
  2. 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クロス積(外積)を算出

測定

d2cAngleByPoints3点による角度を計算
d2cDistance2点間の距離を算出
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 ノードの固定を開放

関連記事

  1. エクソダス・オブ・ザ・デッド 前の画像 次の画像 エクソダス・オブ・ザ・デッド Ver.1.00 (2021/01/10) ダウン...
  2. エクソダス・オブ・ザ・デッド2 前の画像 次の画像 エクソダス・オブ・ザ・デッド2 Ver.2.02 (2021/08/31) ダウ...
  3. 行列計算モジュール mod_matrix Ver.1.03 (2017/08/26) ダウンロード(65.1 KB) H...
  4. 等速で移動する物体に当てる  先日実装したHSP3用モジュールの軌道予測関連命令 d2cShot_GetShotData 命令の...
  5. d2cmでの影の作成  まずはじめに、ここで扱う「影」は便宜上、影っぽいから「影」と呼んでいるだけで物理的に正しい影のこと...