6

私が開発している衝突アルゴリズムでは、線を別の線に反映させる方法を見つける必要があります。

ライン1:

y=ax+b 

2行目:

y=cx+d 

3 行目:

(a result of reflecting line 1 over line 2) y=ex+f

、、、およびに関してeおよびを決定する代数的な方法はありますか?fabcd

4

3 に答える 3

15

私は以前にこのまったく同じ問題に遭遇しました。ここで私と一緒にいてください...

この問題には、次の 2 つの部分が含まれます。

1. 交点を見つける

2 つの線が交差する場所を見つけるには、線の 2 つの方程式を使用します。

y = M1x + B1
y = M2x + B2

置換の使用:

M1x + B1 = M2x + B2
M1x - M2x = B2 - B1
x(M1 - M2) = B2 - B1
x = (B2 - B1) / (M1 - M2)

y 値を見つけるには、次のように接続します。

y = M1x + B1

2. 他の 2 つの傾きから直線の傾きを見つけます。

2番目ははるかにトリッキーです。三角法を使用すると、不可能ではありません。

L1 を「ベースライン」とします。(M1の傾きで)

L2 を「ベース ライン」上に反映されるラインとします。(M2の傾きで)

L3 を結果の行とします。(M3の傾きで)

私が使用した式は次のとおりです。

double M3 = ((2 * M1) + (M2 * pow(M1, 2)) - M2) / (2 * M1 * M2 - pow(M1, 2) + 1);

私のCコードから直接。両方の勾配を定義する必要があることに注意することが重要です。ロピタルの法則を使用して、勾配の 1 つが無限大に近づいているときに方程式を得ることができます。

説明を続けてください!

線図

これは、3 つの線の大まかな図です。L2 は L1 に反映され、L3 になります。図面は正確ではありません。L1 と L2、および L2 と L3 の間の角度は、R としてラベル付けされています。\ ここに事実があります。

M1 = tan(A1) 
M2 = tan(A2) 
M3 = tan(A3) 

これは接線の定義から来ています。

A3 = R + A1

これは少し見にくいですが、交点に水平線を引くと一目瞭然です。

したがって、目標は tan(A3) を見つけることです。これを達成するには、R を見つける必要があります。ご覧のとおり、R は A2 と A1 の補角を他の角とする三角形の中にあります。したがって、次のことがわかります。

R + (180 - A1) + A2 = 180
R - A1 + A2 = 0
R = A1 - A2

両側の接線を取りましょう:

tan(R) = tan(A1 - A2)

三角法から、次のことがわかります。

tan(R) =  (tan(A1) - tan(A2)) / (1 + tan(A1)tan(A2))
R = arctan((tan(A1) - tan(A2) / (1 + tan(A1)tan(A2))

Arctan は逆正接です。前の式、A3 = R + A1 から、次のようになります。

A3 = arctan((tan(A1) - tan(A2) / (1 + tan(A1)tan(A2)) + A1
A3 = arctan((M1 - M2) / (1 + M1*M2)) + A1

しかし、A3 は必要ありません。tan(A3)が欲しいです。繰り返しますが、両側の接線を取ります。

tan(A3) = M3 = tan(arctan((M1 - M2) / (1 + M1*M2)) + A1)
M3 = tan(arctan((M1 - M2) / (1 + M1*M2))) + tan(A1) / (1 - tan(arctan((M1 - M2) / (1 + M1*M2))) * tan(A1))

残念ながら、それはひどく恐ろしいことです。接線を勾配に置き換えて単純化すると、次のようになります。

M3 = ((M1 - M2) / (1 + M1*M2)) + M1 / (1 - ((M1 - M2)/(1 + M1*M2)) * M1)
M3 = (M1 - M2 + M1*(1 + M1*M2)) / (1 + M1*M2 - M1*M1 + M1*M2)
M3 = (M1^2 * M2 + 2*M1 - M2) / (1 + 2*M1*M2 - M1^2)

これは、上記の式とまったく同じです。すべての醜い数学で申し訳ありません。M2 が完全に垂直の場合、ロピタルの法則を使用して

M3 = (M1^2 - 1) / 2*M1

誰かがそう思っているなら、私の数学をチェックしてください。でもそろそろ疲れてきました。

于 2013-06-30T23:51:04.473 に答える
0

さらに別の方法:

線 y=ax+b に対する反射のアフィン変換の行列 (非垂直線で機能します!)。pa = 1+a^2、ma = 1-a^2 とすると、行列は (Nikulin の Computer Geometry の本から)

 ma/pa    2a/pa     0
 2a/pa   -ma/pa     0
-2ab/pa   2b/pa     1  

したがって、2 番目の線で 2 つの任意の点を取得し、この変換を適用して、新しい線の方程式を計算できます。

于 2013-07-01T06:12:29.300 に答える