Я работаю с osgEarth, и я пытаюсь рисовать линии, выступающие из одной точки в круг. Сначала я попытался сделать следующее (где m_x_start_lon и m_y_start_lat некоторые произвольные начальные точки):Расчет точек на окружности, которая проецируется на Землю
double x_lon = 0.0f;
double y_lat = 0.0f;
if (!GetPointFromScreen(args, x_lon, y_lat)) return true;
m_stop_x_lon = x_lon;
m_stop_y_lat = y_lat;
double x_dist = abs(m_stop_x_lon - m_start_x_lon);
double y_dist = abs(m_stop_y_lat - m_start_y_lat);
m_radius = sqrtf(x_dist * x_dist + y_dist * y_dist);
std::vector<double> x_points(m_slices);
std::vector<double> y_points(m_slices);
//m_slices = 30, which is the number of lines to represent the circle
for (std::size_t i = 0u; i < m_slices; ++i)
{
double new_x = m_start_x_lon + m_radius * cos(i);
double new_y = m_start_y_lat + m_radius * sin(i);
x_points.at(i) = new_x;
y_points.at(i) = new_y;
}
Однако, это лишь бы-работал. Единственный вывод, который я могу сделать, заключается в том, что работа с широтой и долготой каким-то образом искажает результаты.
Радиус ~ 190 метров в горизонтальном положении и ~ 340 метров в длину по вертикали. Я знаю, что хлюпание происходит, когда вы находитесь дальше от полюсов, но я бы не подумал, что это будет эта крайность, пока она не превысит хотя бы несколько километров в длину. И даже тогда радиус по горизонтали и по вертикали должен совпадать.
Итак, что я должен сделать, чтобы получить правильные координаты lon, lat для края моего круга?
У меня нет времени, чтобы написать полезный ответ, но вы должны учитывать, что для круга с радиусом более нескольких километров в любой точке за пределами тропиков он * будет * перекошен, потому что продольный линии пересекаются на полюсах. Вам нужно либо проецировать свой круг на сфероид, либо проектировать свою систему координат из геоида, который вы используете, обратно в 3D-пространство, прежде чем вы вычисляете круг, если вы хотите избежать хрящей. – greyfade
О, я знаю, что проблема скрежет. Меня укусили несколько раз. Однако, я не думаю, что это проблема. Я должен добавить расстояние до моего первоначального сообщения, но радиус горизонтально составляет ~ 190 метров, по вертикали - около 340 метров (когда оба должны быть одинаковыми).Я бы не подумал, что скрежет будет такой крайностью – Acorn