敵が大きなg2d.setStroke()の線でできているゲームがあります。この線と別の線の衝突をどのように見つけますか?これが私が描くところです:
g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
//thickness = 35 --- declared previously
g2d.drawLine(x1, y1, x2, y2);
敵が大きなg2d.setStroke()の線でできているゲームがあります。この線と別の線の衝突をどのように見つけますか?これが私が描くところです:
g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
//thickness = 35 --- declared previously
g2d.drawLine(x1, y1, x2, y2);
数学は好きなトピックではないようですので、シンプルに保ち、学校の数学を使いましょう。
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サーフェスが自分の方を向いているかどうか、つまり法線ベクトルを判断することもできます。