1

:私はLuaを使用しています。

だから、私は円上の2点間の度を見つけようとしています。問題は340と20のようなもので、正解は40度ですが、次のようなことをします。

function FindLeastDegrees(s, f) 
    return ((f - s+ 360) % 360) 
end 

print(FindLeastDegrees(60, 260))

-- S = Start, F = Finish (In degrees)

これは、2つの間の距離を把握しようとする場合を除いて、すべての状況で機能します。この以下のコードは、私の次の失敗した試みです。

function FindLeastDegrees(s, f) 
    local x = 0 
    if math.abs(s-f) <= 180 then 
        x = math.abs(s-f) 
    else 
        x = math.abs(f-s)  
    end 
return x
end

print(FindLeastDegrees(60, 260))

次に試しました:

function FindLeastDegrees(s, f) 
    s = ((s % 360) >= 0) and (s % 360) or 360 - (s % 360); 
    f = ((f % 360) >= 0) and (f % 360) or 360 - (f % 360); 
    return math.abs(s - f) 
end 

print(FindLeastDegrees(60, 350))

--> 290 (Should be 70)

だからそれは失敗した。:/

では、他の2つの度の間の最短の度をどのように見つけ、そこに到達するために時計回りまたは反時計回り(加算または減算)に移動する必要があるかどうかを確認します。私は完全に混乱しています。

私がやろうとしていることのいくつかの例...

FindLeastDegrees(60, 350)
--> 70

FindLeastDegrees(-360, 10)
--> 10

とても難しいようです!私は使用する必要があることを知っています...

  1. 係数
  2. 絶対値?

また、値「Finish」を取得するために加算または減算する必要がある場合は、それを返したいと思います。
長い説明で申し訳ありませんが、おそらくあなたはそれを持っていると思います....:/

4

1 に答える 1

2

度が0〜360の範囲にある場合、% 360パーツをスキップできます。

function FindLeastDegrees(s, f) 
    diff = math.abs(f-s) % 360 ;
    return math.min( 360-diff, diff ) 
end 
于 2012-04-19T23:11:47.487 に答える