タイトル通り高速で例えば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; } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。