0

左上のセルが (0, 0) である 2D グリッドを想定します。任意の 2 点/座標を選択し、それぞれに対角線と反対角線を描きます。それらはグリッドの内側または外側で交差する場合があります。

添付の図では、赤い線は (300, 200) と (700, 800) の 2 つの点に対する対角線です。

対角線の交点の座標を調べるにはどうすればよいですか? また、直線の傾きが負の場合、式はどのように異なるでしょうか?

高度に最適化する必要があるアルゴリズムでこれを使用して、正しい答えが可能な限り最速の計算方法になるようにします。これが三角法なしでできるかどうかはわかりません。

注: 赤い線は真の対角線/反対角線のペアであることに注意してください。つまり、それらは長方形に対して 45 度の角度になっています。これは、ベクトル計算よりも最適化された式を選択するのに役立つ場合とそうでない場合があります。

ここに画像の説明を入力

4

2 に答える 2

3

を 2辺Dの長さの差とします。あなたの図では、D=200. これは、2 つの白い三角形 (外側の交点と長方形の間の三角形) の斜辺の長さです。したがって、これらの三角形の辺の長さはD/sqrt(2)であり、外部交点の座標は長方形の角と だけ異なりますD/2

次に、図について、

(x1,y1) = 300-D/2, 200+D/2 = 200,300
(x2,y2) = 700+D/2, 800-D/2 = 800,700

可能なすべての方向 ( x1<x2x1>x2、...) を処理する必要がありますが、それらはすべてこの方向と対称です。

于 2012-07-30T18:20:11.950 に答える
0

それはただの数学です。方程式のある2行があります

y1 = k1 * x1 + b1
y2 = k2 * x2 + b2
If they intersect then y1 == y2 and x1 = x2 so
k1 * x1 + b1 = k2 * x1 + b2
x1 = (b2 - b1) / (k1 - k2)

唯一の問題は、k1、k2、b1、b2 を見つける方法です。単純!各ラインに2つのポイントがあります(graphics.DrawLine(x1、y1、x2、y2)から)。ここでそれらを使用します。最初の行の場合:

y1 = k * x1 + b
y2 = k * x2 + b
b = y1 - k * x1
y2 = k * x2 + y1 - k * x1 = k * (x2-x1) + y1
so
k = (y2 - y1) / (x2 - x1)

これを代入kするb = y1-k*x1と、正確な衝突点を計算するために必要なすべての値が得られます。

于 2012-07-30T18:21:30.733 に答える