🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
DXライブラリ

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

Q&A

解決済

2回答

1542閲覧

外積を使って当たり判定のすり抜けを修正するコードでベクトルの割り算とはどうすれば計算できるのか?

退会済みユーザー

退会済みユーザー

総合スコア0

DXライブラリ

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

0グッド

0クリップ

投稿2019/12/11 12:42

編集2019/12/14 13:50

タイトル通り高速で例えば400pxを一フレームの間に移動すると壁に当たらずすり抜けてしまうバグの修正法としてベクトルの外積などを使ったすり抜け防止プログラムを書くために数学上での手計算をしているのですがベクトル通しの割り算とはどうすればいいのでしょうか?調べてみると割り算がそもそもできないらしいのですがこのコードでは割り算の / 記号がるため困っています。
参考サイト下部のコードのコメント部 k = BD×AB / (BD×AB + BD×BC);です
掛け算はそれぞれの成分同士でやれたしても割り算はわかりません。これはどうすればいいのでしょうか?

参考サイト: http://www.fumiononaka.com/Business/html5/FN1312004.html

参考サイトのコード

function getIntersection(from_0, to_0, from_1, to_1) { var intersection = new createjs.Point(); // AC var vector_0 = new createjs.Point(to_0.x - from_0.x, to_0.y - from_0.y); // BD var vector_1 = new createjs.Point(to_1.x - from_1.x, to_1.y - from_1.y); // AB var vector_2 = new createjs.Point(from_1.x - from_0.x, from_1.y - from_0.y); // BC var vector_3 = new createjs.Point(to_0.x - from_1.x, to_0.y - from_1.y); // BD×AB var area_0 = crossProduct2D(vector_1, vector_2); // BD×BC var area_1 = crossProduct2D(vector_1, vector_3); // BD×AB + BD×BC var area_total = area_0 + area_1; if (Math.abs(area_total) >= 1) { // k = BD×AB / (BD×AB + BD×BC) var ratio = area_0 / area_total; // x = ax + k×(cx - ax) intersection.x = from_0.x + ratio * vector_0.x; // y = ay + k×(cy - ay) intersection.y = from_0.y + ratio * vector_0.y; return {intersection:intersection, crossed:crossed}; } else { return null; } }

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

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

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

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

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

guest

回答2

0

  1. 同様な質問が続いているようですが,デバッグ以来気味になりつつあるように見受けます.

まず,ご自身が使おうとしている式の内容を十分に理解しましょう.その段階が必須です.それを実装したコードの各所の値のあるべき状態を把握できなければ「動いた/動かない」の結果でしか見ることができなくなります.
内容把握した上でデバッグを行いましょう.
2. 前の質問もそうだったように記憶していますが,話の内容は純然たる計算処理の内容なので,質問に付与するタグを工夫されるほうが良いのではないかと思います.現状では「DXライブラリ」を使っていない人の目には触れない状態になってしまっていそうです.
3. で,ぱっと見での当てずっぽうな回答ですが……
数式の雰囲気的に,扱っているのは「(長さの)比率」でしょうから,
t1やt2(コード内ではccやeかな)の符号(正負)が問題を起こしているのではないかと想像します.
t1,t2共に絶対値をとるようにしたら,改善しませんか?
4. 本件の問題の範疇では無いかもしれませんが,関数cross_col()は交差するか否かを判定できていないように思います.(AB_CDが0でなければ「衝突している」と出力している.あと,非0の判定方法も微妙かなぁ)

投稿2019/12/14 03:51

fana

総合スコア11990

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

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

0

ベストアンサー

自分が知らないだけでベクトル同士の掛け算とは外積を計算する行為のことで((x1 * y2) - (x2 * y1));
得られる値はスカラー値です。先に計算してスカラーどうしの計算に持っていくことにしましたので自己解決とします。

投稿2019/12/15 06:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問