| 
| 
 | Вопрос # 1 067/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Нет ли у кого исходника пересчёта прямоугольных координат в полярные? 
|  |   Вопрос задал: GAZ (статус: Посетитель)Вопрос отправлен: 1 ноября 2007, 06:33
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: min@y™ Пусть точки отсчёта "О" декартовой и полярной систем совпадают и луч полярной системы совпадает с абсциссой декартовой системы. 
 Возьмём точку "А"(x, y). Её координатами в полярной системе будут: длина отрезка d = OA и угол psi между осью ОХ и этим отрезком.
 Тогда: x = cos(psi), y = sin(psi), d = sqrt(sqr(x) + sqr(y))
 
 uses Math;
 
type
  TPolarCoord = record
    d:   Extended; // длина отрезка от начала координат до точки
    psi: Extended; // угол между осью ОХ и этим отрезком
  end;
 
// Наша МЕГАФУНКЦИЯ :))
function Dekart2Polar(const x, y: Extended): TPolarCoord;
begin
  Result.psi:= ArcCos(x); // или ArcSin(y)
  Result.d:= sqrt(sqr(x) + sqr(y));
end;З.Ы. Не брезгуйте ходить на лекции по вышке :))
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 1 ноября 2007, 08:59
 
 |  Ответ #2. Отвечает эксперт: Вадим К Здравствуйте, GAZ!Уважаемый min@y™  наверно сам на лекции высшей математике ходит плохо, ибо это учат по в школе, в курсе геометрии 7-8 класса. :)
 Привожу точные формулы
 пусть x и y - координаты на декартовой оси. r - длина вектора и a - угол. тогда справедливы следующие соотношения
 x = r * cos(a); y = r * sin(a);
 или
 r = sqrt(x*x+y*y); a = arctan(y/x);
 При получении угла есть одна неприятность. дело в том, что если первые две четверти по знаку результата можно определить, а 3 и 4 - нет (почему - попробуйте сами попереводить ручками). и для этого нужно смотреть знаки x и y, которые подскажут правильную четверть. Но можно и проще! есть готовая функция ArcTan2. Она требует двух аргументов x и y и выдает правильный угол в диапазоне 0..2PI. Внимательно посмотрите обявление этой функции, не перепутайте аргументы
 
 function ArcTan2(const Y, X: Extended): Extended;Также не помешает знать, что все трегонометрические функции дают резальтат и требуют аргументов в радианах. Перевод прост, эти функции есть в модуле Math, но они насколько просты, что привожу тут полностью 
 function DegToRad(const Degrees: Extended): Extended;  { Radians := Degrees * PI / 180 }
begin
  Result := Degrees * (PI / 180);
end;
 
function RadToDeg(const Radians: Extended): Extended;  { Degrees := Radians * 180 / PI }
begin
  Result := Radians * (180 / PI);
end;в моделе Math вы найдете также функцию RadToGrad. Это не перевод радиан в градусы! это перевод в грады. 100 град = 90 градусам.(полный круг - 400 градов)
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 1 ноября 2007, 11:21
 
 |  
 Мини-форум вопросаВсего сообщений: 8; последнее сообщение — 2 ноября 2007, 18:01; участников в обсуждении: 4. 
|   | Dron (статус: Студент), 1 ноября 2007, 06:53 [#1]:А в чём, собственно, сложность? Формулы перевода просты. См. здесь: onAlex/Полярная_система_координат#.D0.9F.D0.B5.D1.80.D0.B5.D0.B2.D0.BE.D0.B4_.D0.BF.D0.BE.D0.BB.D1.8F.D1.80.D0.BD.D1.8B.D1.85_.D0.BA.D0.BE.D0.BE.D1.80.D0.B4.D0.B8.D0.BD.D0.B0.D1.82_.D0.B2_.D0.B4.D0.B5.D0.BA.D0.B0.D1.80.D1.82.D0.BE.D0.B2.D1.8B.D0.B5_.D0.B8_.D0.BE.D0.B1.D1.80.D0.B0.D1.82.D0.BD.D0.BE">Перевод полярных координат в декартовые и обратно
 С уважением. |  
|   | GAZ (статус: Посетитель), 1 ноября 2007, 20:23 [#2]:Уточняю ,мне надо пересчитать координаты(X,Y) плюс высоту(H) в дальность угол места и азимут. |  
|   | Вадим К (статус: Академик), 2 ноября 2007, 00:30 [#3]:GAZ Пожалуйста, напишите задачу более детально. непонятно, откуда беруться координаты и в какие именно они переводятся.
 Это случайно не геодезическая задача и геометрия на шаре?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 2 ноября 2007, 08:14 [#4]: Цитата: Уважаемый min@y™ наверно сам на лекции высшей математике ходит плохо, ибо это учат по в школе, в курсе геометрии 7-8 класса.  2 Вадим К: Не знаю как сейчас, но полярную СК я изучал на 1 курсе универа, а не в школе. Может уже ввели это всё в школьную программу. А универ я закончил в 2001 году, так что не надо на меня наезжать. Из 4 семестров вышки я сдавал только 1-й экзамен, остальные 3 - автоматом. Ни единой лекции я не пропустил.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Dron (статус: Студент), 2 ноября 2007, 08:23 [#5]:min@y™: тогда почему Вы в своём ответе привели такие странные формулы? Даже "невооружённым" взглядом видно, что они неправильные. С уважением. |  
|   | min@y™ (статус: Доктор наук), 2 ноября 2007, 08:32 [#6]:2 Dron: видать потому, что учился на 1 курсе 11 лет назад. Ошибся, да, x = d * cos(psi), y = d * sin(psi), забыл радиус. Бывает, извините. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | GAZ (статус: Посетитель), 2 ноября 2007, 17:54 [#7]:Вадиму К. Сама задача давольно таки сложная,не знаю поможете ли Вы мне с ней:
 Имеется две следящие станции,координаты обоих заданны(долгота,широта и высота на уровнем моря),имеется объект(координаты его x,y,z заданны относительно первой станции),так вот необходимо расчитать дальность, угол места и азимут относительно другой станции(тут ещё учесть надо и кривизну земли).
 |  
|   | Вадим К (статус: Академик), 2 ноября 2007, 18:01 [#8]:to min@y™ : Такие формулы успешные студенты не забывают.
 to GAZ :
 Ну если станции недалеко, то кривизной можно принебречь. Но я не учил этот раздел геометрии, я не математик, а инженер.
 Почитайте начиная с http://ru.wikipedia.org/wiki/Сферическая_система_координат
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |