0

敵が大きなg2d.setStroke()の線でできているゲームがあります。この線と別の線の衝突をどのように見つけますか?これが私が描くところです:

g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
//thickness = 35 --- declared previously
g2d.drawLine(x1, y1, x2, y2);
4

1 に答える 1

2

数学は好きなトピックではないようですので、シンプルに保ち、学校の数学を使いましょう。

g2d.drawLine(x1, y1, x2, y2);
g2d.drawLine(u1, v1, u2, v2);

2つの線の部分のポイントは次のようになります。

(x, y) = (x1, y1) + alpha * (x2 - x1, y2 - y1)  where alpha in (0 .. 1).
(x, y) = (u1, v1) + beta * (u2 - u1, v2 - v1)  where beta in (0 .. 1).

交差する点は、これら2つの線上にある必要があります。したがって、次のようになります。

x1 + alpha * (x2 - x1) = u1 + beta * (u2 - u1);
y1 + alpha * (y2 - y1) = v1 + beta * (v2 - v1);

これは次と同じです:

alpha * (x2 - x1) = (u1 - x1) + beta * (u2 - u1);
alpha * (y2 - y1) = (v1 - y1) + beta * (v2 - v1);

{0、...、1}内にアルファとベータの解決策がある場合、あなたはそれを手に入れました。

-のような補因子(x2 - x1)が0の場合、簡単な解決策があります。それ以外の場合は、補因子で除算/乗算できます。

または、線形代数の基礎、行列式、行列式などを学ぶために少し時間を費やすことができます。その知識があれば、3Dサーフェスが自分の方を向いているかどうか、つまり法線ベクトルを判断することもできます。

于 2012-11-27T17:08:36.657 に答える