角度の分布
Pythonでも試してみる
N=100
https://gyazo.com/f434c0c2b420c9802567d133b7743e3b
45度の倍数にもスパイクが立っているのがわかる
それだけではなく15度刻みでも小さなスパイクがあるように見える
N=1000
https://gyazo.com/390c0b7d7e2b181496b06e0ec0719d1c
刻みを細かくしたら45度などのスパイクは目立たなくなったが、0度と180度のスパイクが目立った
180度に大きな凹みができるのが興味深い
atan2(1,1000) == 0.0009999996666668666, atan(1, -1000) == 3.1405926539231266
0度付近は「キリのいい数」で、180度付近は「キリの悪い数」であることが影響しているのか?
あ、わかってきたぞ
atan2の値域は-pi ~ pi
int(-0.1) == 0 つまりゼロへの丸め
だから0に集まるわけだ
-inf方向への丸め(floor)に変えた場合
https://gyazo.com/db4e66f6830bfbfd1f864212fcb439da
これで同じくらいの長さの「45度の倍数のスパイク」だけになった
90度の倍数で、どこでも同じ高さのスパイク
それ以外の45度の倍数では少し長い(おそらくルート2倍)のスパイク
これは元々尖ってるから長く見えるだけかも?
90度の倍数のスパイクでは「1度少ないもの」が同じ程度減少している
code::
87 8751
88 8737
89 8243
90 9243
91 8737
92 8751
それ以外の45度の倍数の時も同じ現象が起こってるかもしれないが元々のピークと重なっててわかりにくい
円の内側の格子点に限定した
if x ** 2 + y ** 2 > N ** 2: continue
https://gyazo.com/c329b081cbe655fcb1721588b33c773c
code:x,yと角度の関係
(1000, -1): -1
(1000, 0): 0
(1000, 1): 0
---
(1000, 1001): 45
(1000, 1000): 45
(1001, 1000): 44
ちょうど整数ビンの境界の上に乗ってる点が無視できない数存在している
もし僅かなノイズを加えれば2つのビンに振り分けられるだろう、たとえば44と45に。
それが全部45に入るため、44が減って45が増える
45度の倍数以外にタンジェントが有理数なものはないんだっけ?
しかもただの有理数ではなく1/8っていう二進数としてキリのいい数
code:python
from math import atan2, pi
from matplotlib import pyplot as plt
N = 1000
for x in range(-N, N + 1):
for y in range(-N, N + 1):
if x == y == 0:
continue
theta = int(atan2(x, y) / 2 / pi * 360)
for i in range(360):
plt.bar(range(360), count)
plt.show()