[[20211113161106]] 『360度以上の計算』(gaihan) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『360度以上の計算』(gaihan)

お世話になります。
EXCELで角度を計算しています。
各セルに北を0度として時計回りに360度を超えると0度からはじまる数値が入力されています。
350度のセルと359度のセル差は+9度、359度と5度の差は+6度と計算したい。
450度くらいまでの加減を計算する方法を。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


MOD関数を使うとよいのでは?

(γ) 2021/11/13(土) 16:22


MODは割り算をした時の余り・・と解説にあります。
例えばA1は5、A2は350、A3は6とします。
A1とA2の差は345、A2とA3の差は16とすると
これを使った数式はどのようになりますか?
(gaihan) 2021/11/13(土) 17:19

ん?
=MOD(359-350,360) で 9 になり
=MOD(5-359,360) で 6 になるのでは?
向きが重要なので、終点 - 始点 を使います。

(γ) 2021/11/13(土) 17:34


450度までなら、
下記でよさそうです。

=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


みなさんありがとうございます。
「あ」の式 =Mod(A2-A3,360)
「い」の式 =ABS(ABS(A1-A2)-IF(ABS(A1-A2)>180,360,0))
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
いの式結果が希望の解でした。
(gaihan) 2021/11/14(日) 09:37

 >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


議論が続いていたのですね。いただいた式で作業をしていて戻ってきませんでしたスミマセン
今再度確認しましたところ、下記になりました。
あ=ABS(ABS(B3-B2)-IF(ABS(B3-B2)>180,360,0))
い=Mod(A2-A3,360)
う=MOD(B3-B2,360)
数値           あの式          いの式          うの式
12.35703969    5.141008218    5.141008218    354.8589918
7.216031468    6.047378538    6.047378538    353.9526215
1.16865293    3.075690348    3.075690348    356.9243097
358.0929626    2.042808391    2.042808391    357.9571916
356.0501542    3.402790222    3.402790222    356.5972098
352.647364    1.839774616    1.839774616    358.1602254
350.8075894    2.155880952    2.155880952    357.844119
348.6517084
あの式といの式は同じ結果でした。なぜ以前の結果が出たのか仮の計算でしたので再現できません・・混乱させて申し訳ありません。
ただ計算はB3-B2を求める必要がありますので、あの式を使わせていただきました。
計算は地図の上の連続した線分で北を0°とした方位が振られています。7°から359°になることもあれば160°、190°、185°、275°、350°、4°のようになることもあります。
(gaihan) 2021/11/29(月) 16:27

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.