質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

383閲覧

矩形同士の埋まっている部分を飛び出させる。

KimuGimp

総合スコア4

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2023/11/19 08:55

編集2023/11/29 10:13

実現したいこと

矩形Aと矩形Bがあったとして、
矩形Aと矩形Bが埋まったら
イメージ説明
埋まっている分を離れさせるようにするにはどうすればいいですか?
イメージ説明

試したこと以外の方法を教えてほしいです。

前提

VB.NET(C#)で物理演算を使ったアクションゲームを作っています。
描画エンジンはDxLibを使っています。

試したこと

埋まったら、矩形Aと矩形Bのスピードの逆の方向に移動させたあと、
矩形Aと矩形Bのスピードを0にすることで実質的に再現することができました。
ですが、もとから埋まっていたりすると、両方がずっとスピードを0にし続けるため、
重力に逆らう動きを取ることがありました。

調査したこと

https://thinkit.co.jp/article/8467

補足

矩形Aと矩形Bは角度のついていない単純な矩形です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2023/11/20 01:14

矩形と矩形 の話を何故 矩形と円 に見立てたのか? その妥当性や想定に関する説明が無いと全く話の意味がわかりません. それが原因で「暴れる」というのであれば,矩形は矩形として素直に扱えばよいのではないのでしょうか? そもそも何が質問内容なのかがはっきりません. > 簡単な物理演算 というのが実際何なのかわかりませんが,とにかくその方法での適切な接触力(撃力なのかペナルティフォースなのかその他なのか)を求めてAとBとに作用させるという話かと想像します.そのようなことをするにあたって,今現在何が 問題点/解決すべき課題 なのですか? というのを明確にすべきと思えます.
guest

回答1

0

ベストアンサー

試したこと

の雰囲気から,それほど本格的(?)なことをやろうとしているわけでもなさそうかと見えるので,
適当に接触法線を決めて,その方向に押し出すような力を加えればそれで良い のではないかと.
(場合によっては,「力を加える」ではなく「ダイレクトにその方向に位置をオフセットする」とかでも良いのかもしれない.その辺は作ってるもの次第かと.)

例えば,下図は
【一方の矩形の対角線(青破線) が 他方の矩形の辺(赤実線) と交差するとき → その辺の法線(黒矢印)の方向の力を青矩形に加えればよくね?(赤矩形には反力を加える)】
という話を書いてみた絵です.

イメージ説明

接触点(力を加える位置)が必要な場合でも{交点(矢印の根本),青矩形の頂点,両者の中間}とかを用いればよいのではないでしょうか.
(おそらく,実際上は,この絵みたいに目に見えて深くめり込むなんてことは,それこそ意図的にそういう初期状態でも与えない限りはまず起こらないのでしょうから,どれを選んでも大差ないのであろうと想像)

投稿2023/11/20 07:52

編集2023/11/20 07:56
fana

総合スコア11554

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2023/11/20 08:07 編集

> 対角線 は単に簡便な手段として挙げただけなので,何かしらの意味での厳密さを問題視する場合には別の方法でやればよい. 例えば,この図の例で言えば,対角線ではなくて45度な斜めの線を用いる方が妥当だと言える可能性があるであろう.
KimuGimp

2023/11/21 05:26

ありがとうございます。 実際に試してみます。
fana

2023/11/21 08:31 編集

あまり役に立たない意見かもしれないけども,これ系のは 「必ず1回の更新処理(タイムステップ)の間にめり込みを完全に解消せねばならない!」みたいに過度にこだわらない方が楽だと思う. 例えば他の矩形群とか壁とかが周囲にあったりすると,AとBのめり込みを解消すべくAとBの位置を修正したら→その結果としてAが別の矩形Cにめり込むし,BはBで壁にめり込むではないか! とか何とかいう話が面倒だし, 空間の広さや形状次第では「解無し(=全てのめり込みを解消することはできない)」なのかもしれないし. 「とりあえずめり込みを解消する方向に相応の力を加えておくぜ!」というだけなら上記のような話はとりあえずガチで扱わなくて済む(そういう場面では「なるようになる」という扱い). (まぁそれはそれで,うまくやらないと加えた力が別の諸々に負けてしまうと結果として「すりぬけちゃう」とかいう話が生じたりして「コレ,どうしたらいいの?」とかなったりするのだが).
KimuGimp

2023/11/28 22:43

実際にやってみたところうまくいきました! ずっと行き詰まっていたところだったので本当に助かりました。
fana

2023/11/29 01:13

この回答の内容だと,示した図の状況になったならば常に左右方向に力が加えられる. この図の状況に「どうやってなったのか」という経緯は一切考慮されない. 例えば,「青い矩形が下から上に猛スピードで動いてきた結果としてこの状態になった」という場合,左右に跳ね返るような結果は不自然だとも言える(上下方向に力が加えられるべき). とは言え,実際上 Δt が十分に小さければ,すなわち,上下方向からぶつかった場合にここまで上下方向に深くめり込む状態にはそもそもならない(:もっと浅いめり込みの段階が存在し,そこで適切に解消される)ならば,問題にならないと思う. 逆に言えば,めり込み量が相応に大きくなるような世界ではもっとまともな(?)方法が必要になり得る. ……みたいな点を念頭に置いておくと,この先「あれ?」っていう動きが観測されたような場合にその原因の想像が付きやすいかもしれない.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問