19

関数の逆関数は何ですか

math.atan2

私はこれをLuaで使用し、math.atanbyの逆関数を取得できますmath.tan
しかし、私はここで迷子になっています。

編集

OK、詳細を教えてあげましょう。

2点(x1、y1)と(x2、y2)の間の角度を計算する必要がありましたが、

local dy = y1-y2 
local dx = x1-x2
local angle = atan2(dy,dx)* 180 / pi

今、私が角度を持っている場合、dyとdxを取り戻すことは可能ですか?

4

4 に答える 4

26

角度のみが与えられた場合、を指す単位ベクトルのみを導出できます(dx, dy)。オリジナルを取得するに(dx, dy)は、ベクトルの長さも知っておく必要があります。(dx, dy)これをと呼びますlen。また、度から導出した角度をラジアンに変換してから、この投稿の他の場所で説明されている三角方程式を使用する必要があります。それはあなたが持っていることです:

local dy = y1-y2
local dx = x1-x2
local angle = atan2(dy,dx) * 180 / pi
local len = sqrt(dx*dx + dy*dy)

(度単位で)与えられangle、ベクトルの長さ、、は、len次のように導出できます。dxdy

local theta = angle * pi / 180
local dx = len * cos(theta)
local dy = len * sin(theta)
于 2012-07-09T12:29:39.163 に答える
5

どうやら、このようなものが役立ちます:

x = cos(theta)
y = sin(theta) 

単純なグーグル検索はこれを投げ出しました、そして質問をした人はそれがそれを解決したと言いました。

于 2012-07-09T12:11:03.837 に答える
2

次を使用すると、おそらく間違った番号が表示されます。

local dy = y1-y2 
local dx = x1-x2
local angle = atan2(dy,dx) * 180 / pi

画面の下に行くほどyが大きくなり、右に行くほどxが大きくなる座標系を使用している場合は、次を使用する必要があります。

local dy = y1 - y2
local dx = x2 - x1
local angle = math.deg(math.atan2(dy, dx))
if (angle < 0) then
  angle = 360 + angle
end

これを使用する理由は、luaのatan2が-180から180までの数値を与えるためです。180に達するまでは正しいでしょう。180を超えると(つまり187)、負の数値に反転します。 360に近づくにつれて、-180から0に下がります。これを修正するには、角度が0未満かどうかを確認し、0未満の場合は、360を追加して正しい角度を指定します。

于 2014-03-31T03:56:05.660 に答える
0

この参照によると:

y / xのアークタンジェント(ラジアン)を返しますが、両方のパラメーターの符号を使用して結果の象限を見つけます。(xがゼロの場合も正しく処理されます。)

だから私はあなたがmath.tanそれを反転するためにも使うことができると思います。

于 2012-07-09T12:12:13.950 に答える