6

GPSとArduinoを使用してジオフェンスの作成に取り組んでいます。半径で計算するために、Haversine Formula を実装して 2 点間の距離を求めたいと考えています。問題は、Arduino IDE で Haversine Formula を実装するのが難しいことです。私は Arduino で比較的初心者です。

a = sin²(Δφ/2) + cos(φ1).cos(φ2).sin²(Δλ/2)
c = 2.atan2(√a, √(1−a))
d = R.c

上記の式をArduino IDEに実装するにはどうすればよいですか?

4

2 に答える 2

2

Haversine または Spherical Law of Cosinesを使用するには、Arduino では使用できないと思われる atan2() または acos() 関数が必要です。

ピタゴラスの定理は正距円筒図法で距離を計算するために使用できます。これは、Haversine または Spherical Law of Cosines よりも複雑ではありませんが、極への収束を可能にし、Arduino で利用可能な三角関数を使用します。

仮説

赤道での地球の円周 = 40,076 km。赤道は 360 度の経度に分割されているため、赤道の各度は約 111.32 km を表します。赤道から極に向かって移動すると、この距離は極でゼロに減少します。

1 degrees aproximates to 111.32 km at equator.
96.41km at 30 degrees N/S
78.71 km at 45 degrees N/S
55.66 km at 60 degrees N/S
28.82 km at 75 degrees N/S

応用

私はArduinoを知らないので疑似コードで

R = 6371;km
lat/lng in radians

var x = (lng2-lng1) * cos((lat1+lat2)/2);
var y = (lat2-lat1);
var dist = sqrt(x*x + y*y) * R;

結果

coordinates = (0,0) to (1,0) Haversine 157.293809 km Equirectangular 157.294807 km
coordinates = (10,0) to (11,0) Haversine 155.985273 km Equirectangular 155.986379 km
coordinates = (20,0) to (21,0) Haversine 152.397156 km Equirectangular 152.39855 km
coordinates = (30,0) to (31,0) Haversine 146.81715 km Equirectangular 146.818975 km
coordinates = (40,0) to (41,0) Haversine 139.728101 km Equirectangular 139.730447 km
coordinates = (50,0) to (51,0) Haversine 131.817706 km Equirectangular 131.820603 km
coordinates = (60,0) to (61,0) Haversine 123.976838 km Equirectangular 123.980256 km
coordinates = (70,0) to (71,0) Haversine 117.255674 km Equirectangular 117.259525 km
coordinates = (80,0) to (81,0) Haversine 112.726966 km Equirectangular 112.731106 km
于 2014-05-06T11:31:38.720 に答える