Натянул я на себя образ той Аленки... Каюсь, виноват. Обещаю быть сдержаннее. За последние пару часов просмотрел предложенные форумчанами готовые коды - наверное, должны работать... В моих поверхностных алгоритмах черезчур много конструкций типа "if.. then... else" накапливается...
Делал так. Но где-то ошибка. http://gis-lab.info/qa/sphere-geodesic-direct-problem.html procedure TForm1.btn2Click(Sender: TObject); var x,y,z, lat,lon,dist,azi,u,v, lat1, lon1 : Extended; procedure SphereToCart(shir, dolg : extended); begin x:= cos(shir) * cos(dolg); y:= cos(shir) * sin(dolg); z:= sin(shir); end; procedure CartToSphere(xx, yy, zz : extended); begin lat1 := RadToDeg(ArcTan2(zz, sqrt(xx * xx + yy * yy))); lon1:= RadToDeg(ArcTan2(yy, xx)); mmo1.Lines.Add('широта '+Floattostr(lat1)); mmo1.Lines.Add('долгота '+Floattostr(lon1)); mmo1.Lines.Add(''); end; function Rotate1(xx, yy, aa : Extended) : Extended; var c,s : Extended; begin c := cos(aa); s := sin(aa); Result:= xx * c + yy * s; // v:= -xx * s + yy * c; end; function Rotate2(xx, yy, aa : Extended) : Extended; var c,s : Extended; begin c := cos(aa); s := sin(aa); Result:= -xx * s + yy * c; // u:= xx * c + yy * s; end; begin lat := DegToRad(0); lon := DegToRad(0); dist:= 3000000; azi := DegToRad(0); SphereToCart(pi/2-dist, pi-azi); z:= Rotate1(z, x, lat-pi/2); x:= Rotate2(z, x, lat-pi/2); x:= Rotate1(x, y, -lon); y:= Rotate2(x, y, -lon); CartToSphere(x, y, z); end; end. При заданных условиях результат : //широта -45 //долгота 180
В каких единицах? Судя по тексту Код: SphereToCart(pi/2-dist, pi-azi); , должно быть в радианах. Посмотрите проект
В метрах. За проект спасибо, изучу. ... Не могли бы Вы объяснить эти параметры (понимаю, что характеризуют эллипсоид): edtSemiMajorAxis.Text := '6378137.0'; edtInvFlattening.Text := '298.257223563'; Спасибо.
А должно быть в угловой мере (в радианах). На это указывает хотя бы выражение pi/2-dist. В сфероидической геодезии много задач может решаться на сфере, надо только определённым образом перейти от геодезических координат на эллипсоиде (широта, долгота) к сферическим. Математика на сфере намного проще чем на эллипсоиде. Большую полуось определил для того, чтобы можно было дописать конформное отображение эллипсоида на сферу по Гауссу. В приведённом примере она пока не используется. Иногда и англицкая википедия врёт. В частности, неверно утверждение "last revised in 2004".
Еще раз хочу выразить глубокую благодарность всем откликнувшимся на мой вопрос. Особо - stout, trir, MaksNik. Все получилось. Результат при радиусе 2500 км на картинке.
Уважаемые специалисты! С расчетом прямой геодезической задачи с Вашей помощью разобрался. Направьте, пожалуйста, только не очень далеко:), по вопросу: необходимо отрисовать эллипс (длины полуосей известны), при этом угол поворота может быть произвольный. Спасибо.
Параметрическое уравнение эллипса Уравнения в параметрической форме. Находите координаты в локальной системе, а потом умножаете на матрицу поворота.