Вопрос по вычислениям на ардуино.

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
Написал тут одну функцию, и при вводе значений она как-то некорректно считает, в чём может быть проблема? Функция считает расстояние между двух заданных точек, т.е. вводишь градусы, получаешь расстояние. Вот код:
C++:
float calc_distance(float x1, float y1, float x2, float y2) {

  float A;
  float B;
  float C;
  float LowLat;
  int R = 6400;

  if (x1 < x2) LowLat = x1;
  else LowLat = x2;

  A = sqrtf (square ((x1 - x2) * 111.16));
  B = sqrtf (square ((y1 - y2) * 111.3 * cos(LowLat)));
  C = R * sqrtf (square (A / R) + square (B / R));

  return C;
}
Информацию брал отсюда: http://www.bolshoyvopros.ru/questio...mja-gorodami-esli-izvestny-ih-koordinaty.html
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
@Vlad_os,
Углы какого порядка ? Для углов близких к 0 вполне можно использовать сам угол вместо косинуса и (1-угол) для синуса (в радинах!)
А переводить надо для того, что Си считает углы в радианах:
C++:
Serial.begin(115200);
float ugol=0;
Serial.print(sin(ugol));
Serial.print("\t");
Serial.println(cos(ugol));
ugol=90;
Serial.print(sin(ugol));
Serial.print("\t");
Serial.println(cos(ugol));
ugol=180;
Serial.print(sin(ugol));
Serial.print("\t");
Serial.println(cos(ugol));
Результат:
10:51:59.896 -> 0.00 1.00
10:51:59.896 -> 0.89 -0.45
10:51:59.896 -> -0.80 -0.60
 
  • Лойс +1
Реакции: Vlad_os

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
углы - координаты на карте. По типу: 65.027627, 57.135553, 65.031700, 57.112680.
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
Нашёл формулу гаверсинуса, подстроил под себя. Считает правильно, разлёт - 2 метра, но мне не критично.
C++:
float calc_distance(float x1, float y1, float x2, float y2) {
  const double R = 6371; // Earth's radius
  float lat1 = x1 * M_PI / 180;
  float lon1 = y1 * M_PI / 180;
  float lat2 = x2 * M_PI / 180;
  float lon2 = y2 * M_PI / 180;
  double sin1 = sin((lat1 - lat2) / 2);
  double sin2 = sin((lon1 - lon2) / 2);
  return 2 * R * asin(sqrt(sin1 * sin1 + sin2 * sin2 * cos(lat1) * cos(lat2)));
}
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
Можно ещё вопрос? Как можно высчитывать угол относительно осевого меридиана Земли. Т.е. мне нужно знать в каком направлении "идти", зная координаты точки назначения, и свои конечно же. Вроде правильно выразился.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Этот угол называется азимут. В прямоугольной системе координат достаточно просто: https://gis-lab.info/qa/aveazimuth.html
А вот по широте и долготе не очень. Хотя вам точность не особо нужна, пробуйте перевести разницу в координатах в метры и вычислять азимут по метрам.
 

Vlad_os

✩✩✩✩✩✩✩
28 Ноя 2019
27
0
Спасибо за информацию выше.
 
Изменено: