2012-03-07 14 views
0

私は円で接線を見つけるためにアルゴリズムを作成して、オブジェクトと衝突したときにその円に対する反射の角度を計算できるようにしようとしています。私は、円の中心と半径のxとyの値を知っています。私はまた、他のオブジェクトとのインパクトのポイントのxとyの値を持っています。 Javaライブラリを使用して接線を計算する方法についての助けは素晴らしいでしょう。また、反射の角度を計算する方法について誰かが推奨している場合は、別の方法で評価してください。ありがとう。円上の点から接線を計算しますか?

+0

だから、接線の方程式を見つける方法を尋ねていますか? – noMAD

+2

紙と鉛筆でどうやってやりますか? –

+0

さて、答えはイエスだと思いますが、Javaライブラリが私のやっていることをより簡単にする方法はありますか?また、私がやっていることは、この反射角を計算する良い方法です。 – John

答えて

2

私が理解していることから、あなたは実際に円の入射角を計算したいと思っています。このためには、円の動きの角度と、それが跳ね返っているサーフェスの角度を知る必要があります。円が衝突する角度に関係なく同じであるため、衝突のポイントは十分ではありません。この角度をお持ちの場合、円の新しい角度は(360 - circle's angle + (surface's angle * 2)) % 360です。あなたはすでに円の動きの角度を把握しているとは思えませんが、動きのある2つの変数があるかもしれません。「更新ごとにdx単位を右に移動し、dy単位を上に移動してください。これを持っている場合は円の角度を度で計算することができます(180/π) * arctan(dy/dx)。この式は、dy/dxが平面を横切る円の動きによって作成された線の傾きを与えるために機能します。勾配をつくると、逆の接線(arctan)をとり、その角度をラジアンで与えます。最後に、180/π部分を使ってその角度を度に変換します。

これは、サーフェスの傾斜を使用する場合にも機能します。表面がポイント(x1, y1)で始まり、ポイント(x2, y2)で終わるラインであるとします。表面の勾配は(y1 - y2)/(x1 - x2)で検出されます。次に、表面の勾配を次のように置き換えて、以前のように数式を適用することができます。(180/π) * arctan((y1 - y2)/(x1 - x2))

ここではサークルとサーフェスの両方を度数で表しており、上記の最初の数式を適用できます。

+0

ええ、ありがとう。それはまさに私が意味していたものです。表面の角度が何であるかについて少し混乱していますが、角度を計算するためにdyとdxの代わりに何が使われるのでしょうか? – John

+1

あなたは基本的に表面の勾配を見つける必要があります。サーフェスは点 '(x1、y1)'から始まり、(x2、y2)をポイントする線であるとします。そして、 'dy = y2 - y1'と' dx = x2 - x1'となります。 – justinrstout

+0

ありがとうございます。衝突がコーナーにある場合、衝突の時点でサーフェススロープはサークルの接線になりますか?もしそうなら、その斜面からどのようにdyとdxを得るべきですか? – John

関連する問題