[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『360度以上の計算』(gaihan)
お世話になります。
EXCELで角度を計算しています。
各セルに北を0度として時計回りに360度を超えると0度からはじまる数値が入力されています。
350度のセルと359度のセル差は+9度、359度と5度の差は+6度と計算したい。
450度くらいまでの加減を計算する方法を。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
(γ) 2021/11/13(土) 16:22
(γ) 2021/11/13(土) 17:34
=ABS(ABS(A1-B1)-IF(ABS(A1-B1)>180,360,0))
A1とB1に角度が入力されているとしてます。
もっと大きい角度にも対応させるなら、
=ABS(MOD(A1-B1,360)-IF(MOD(A1-B1,360)>180,360,0))
細かく検証していないので、検証はしっかりしてから使用してください。
(hatena) 2021/11/13(土) 18:02
>例えばA1は5、A2は350、A3は6とします。 >A1とA2の差は345、A2とA3の差は16とすると >これを使った数式はどのようになりますか?
B1セル =MOD(A2-A1,360) 下にコピー
<結果図> 行 _A_ _B_ 1 5 345 2 350 16 3 6
>MODは割り算をした時の余り・・と解説にあります。
こう言う説明もあります。 ↓ MOD 関数と INT 関数の関係は、次のように表すことができます。 MOD(n, d) = n - d*INT(n/d)
普通であれば当たり前の関係式ですが、n がマイナスの時は当たり前とも言えません。 通常の感覚では余りなんて無いですから。
一例として、マイナスの小数を考えてみます。小数を -a.b とします。
Mod(-a.b,1) = -a.b - 1 * INT(-a.b/1) = -a.b - 1 * (-a - 1) = - 0.b +1
つまり、除数が補われて、プラス値に転換します。
(半平太) 2021/11/13(土) 23:41
>A角度のセル あの式結果 いの式結果 >12.35703969 5.141008218 5.141008218 >7.216031468 6.047378538 6.047378538 >1.168652930 356.9243097 3.075690348 >358.0929626 357.9571916 2.042808391 >356.0501542 356.5972098 3.402790222 >352.6473640 358.1602254 1.839774616 >350.8075894 357.8441190 2.155880952 >348.6517084 356.7791999 3.220800052
変ですね・・
こっちでは、下図の通りで、同じに見えますけども?
(1) B2セル =MOD(A2-A3,360) (2) C2セル =ABS(ABS(A2-A3)-IF(ABS(A2-A3)>180,360,0))
行 _____A_____ _____B_____ _____C_____ 1 「あ」 「い」 2 12.35703969 5.141008222 5.141008222 3 7.216031468 6.047378538 6.047378538 4 1.16865293 3.075690330 3.075690330 5 358.0929626 2.042808400 2.042808400 6 356.0501542 3.402790200 3.402790200 7 352.647364 1.839774600 1.839774600 8 350.8075894 2.155881000 2.155881000 9 348.6517084
(半平太) 2021/11/14(日) 10:29
下記だと違いがでますね。
行 ___A__ ___B__ __C__ 1 「あ」 「い」 2 300 290 70 3 10
180以上の場合、反対側の角度(360-290=70)にするか、しないかの違いです。 (hatena) 2021/11/14(日) 15:40
そう言う質問だったとすれば「360度を超えると」とかは無関係ですね。
単に、0〜360の角度で、180を越えた分(または届かなかった分)だけ180から戻るって感じですかね。 すると、こんなのでもよさそう。 ↓ =180-ABS(ABS(A2-A3)-180)
(半平太) 2021/11/14(日) 17:28
私が回答の際、念頭においたのはこういうことでした。
(1)半径1の円周上に、P1とP2があるとして、 「P1、原点O、P2がなす角度」とは、 原点の周りにそれらを回転させて、P1を北位置に合わせたときに、 P2の示す角度(時計回りをプラスとして測った[0,360)の範囲の角度) を求めたい、ということかと理解しました。
(2)それとは別に、 P1,原点O,P2 がなす180度以下の鋭角の角度を求めたい、 という理解のしかたもあったでしょう。
例えば、P1 90度 ,P2が 280度としたとき、 (1)の考え方では、280-90 = 190度となるし、 (2)の考え方では、170度となるでしょう。 どちらなのかを質問者が明確にする必要があるでしょう。 (時計周りに回ると、180度以上回らないとP2には到達しませんが、 成す鋭角の角度は 180を超えることはありません)
仮に(1)の場合は、 Mod(p2-p1,360)でいいはずです。
>時計回りをプラスとして測った[0,360)の範囲の角度 ということは、 360を法とした、剰余を求めることに相当しますから、 Mod(p2-p1,360)でいいはずです。 既に半平太さんから詳しい説明がされています。
===================== MOD計算の結果が違う件。
質問者さんが正確に式を入力しているとすれば、 小数点誤差の関係でMODの振る舞いが狂っているのかもしれません。 私の手元(Excel2019)では正常動作していますが、 Excel2013で同種のことが起きるという記事が、ネット上でいくつか報告されています。(バージョンに依存した振る舞いの差という話) # 2013のふるまいの詳細は私にはわかりません。
(γ) 2021/11/14(日) 17:37
># 2013のふるまいの詳細は私にはわかりません。
私の2013では、正常動作しています。
検証報告のみ。
(半平太) 2021/11/14(日) 18:37
質問者さんの反応を待ちます。
(γ) 2021/11/14(日) 19:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.