-
24.01.2009, 03:29 #166
- Регистрация
- 04.09.2008
- Адрес
- Одесса, Украина
- Возраст
- 55
- Сообщений
- 1,959
- Записей в дневнике
- 2
- Поблагодарили
- 113
- Поблагодарил
- 161
Log4Win аппаратный журнал для повседневных связей и соревнований http://log4win.ucoz.net/
-
24.01.2009, 10:31 #167
- Регистрация
- 03.02.2006
- Возраст
- 52
- Сообщений
- 18,724
- Поблагодарили
- 8994
- Поблагодарил
- 4772
Нет конечно, не всегда 0. 0 в данном случае - это начальный азимут от RX4HX до W7AA. Делается такой цикл:
Точка1 = RX4HX; // Координаты X,Y на карте
Точка2 = W7AA;
пока Точка1 <> Точка2 делаем
определяем азимут от Точка1 до Точка2.
Точка3 = от Точка1 определенным выше азимутом длинной на корте равной 100 км.
Нарисовать линию(Точка1, Точка3);
Точка1 = Точка3;
конец цикла пока.
Все! Очень просто.73 de RX4HX, Alexei, http://rx4hx.qrz.ru
Ant.: UW4HW, Pwr.: ~500 Wtts
-
24.01.2009, 10:49 #168
- Регистрация
- 04.09.2008
- Адрес
- Одесса, Украина
- Возраст
- 55
- Сообщений
- 1,959
- Записей в дневнике
- 2
- Поблагодарили
- 113
- Поблагодарил
- 161
Log4Win аппаратный журнал для повседневных связей и соревнований http://log4win.ucoz.net/
-
24.01.2009, 10:59 #169
- Регистрация
- 03.02.2006
- Возраст
- 52
- Сообщений
- 18,724
- Поблагодарили
- 8994
- Поблагодарил
- 4772
Для того, чтоб решить задачу с картотой Вам прежде всего нужно написать следущие ф-ции:
1. Перевод географических координат в X,Y координаты Вашей карты.
2. Зная координаты начальной точки и азимут и дистанцию до искомой точки = получить координаты искомой точки. Сами эту ф-ци. Вы не напишите - она очень сложная. Вот ее реализация:
procedure AzimuthDistToLatLon(const LatIn, LonIn, Azimuth, Distance: extended;
var LatOut, LonOut: extended);
const
EARTHRADIUS = 6366.71;
var
dlon, sinlat1, coslat1, sind, cosd, sintc, costc: extended;
begin
SinCos(LatIn, sinlat1, coslat1);
SinCos(Distance / EARTHRADIUS, sind, cosd);
SinCos(Azimuth, sintc, costc);
LatOut := arcsin(sinlat1 * cosd + coslat1 * sind * costc);
dlon := arctan2(sintc * sind * coslat1, cosd - sinlat1 * sin(LatOut));
LonOut := SphericalMod(LonIn - dlon + LocalPI) - LocalPI;
LatOut := LatOut * R2D;
LonOut := LonOut * R2D;
if LonOut < -180 then
LonOut := 360 + LonOut;
end;
Ну думаю теперь все понятно.73 de RX4HX, Alexei, http://rx4hx.qrz.ru
Ant.: UW4HW, Pwr.: ~500 Wtts
-
24.01.2009, 11:16 #170
- Регистрация
- 04.09.2008
- Адрес
- Одесса, Украина
- Возраст
- 55
- Сообщений
- 1,959
- Записей в дневнике
- 2
- Поблагодарили
- 113
- Поблагодарил
- 161
Спасибо!
Что такое SinCos, R2D, SphericalMod
atan2 -это арктангенс?
Не понятно где брать sinlat и т.д и что такое extended?
Куда теперь эту функцию
Еще dll
Координаты привязаны к X,Y c самого начала
Ух не люблю я эту математику :russian_roulette:
Давай по e-mail
Добавлено через 1 час 34 минуты
Да азимут считает у меня правильно
Тут вопрос в отображении на карте. ПонимаетеПоследний раз редактировалось UR5FCM; 24.01.2009 в 12:51. Причина: Добавлено сообщение
Log4Win аппаратный журнал для повседневных связей и соревнований http://log4win.ucoz.net/
-
25.01.2009, 12:39 #171
-
25.01.2009, 16:03 #172
- Регистрация
- 12.03.2007
- Адрес
- Грац, Австрия - Санкт-Петербург, Россия
- Возраст
- 60
- Сообщений
- 1,749
- Поблагодарили
- 375
- Поблагодарил
- 160
Игорь, я же тебе линки послал... на мыло... Разве не хватает? Тем более там готовый и практический пример есть. С полным кодом... а не с одной функцией, непонятно откуда взятой... и к тому же не полной, поскольку нет некоторых функций. Если уж приводится фрагмент кода, то неплохо иметь и первоисточник или ссылку на него... нормальная практика...
73! Михаил (OE6MAF) :: HB9/OE6MAF, DL/OE6MAF
-
25.01.2009, 16:27 #173
- Регистрация
- 04.09.2008
- Адрес
- Одесса, Украина
- Возраст
- 55
- Сообщений
- 1,959
- Записей в дневнике
- 2
- Поблагодарили
- 113
- Поблагодарил
- 161
Log4Win аппаратный журнал для повседневных связей и соревнований http://log4win.ucoz.net/
-
25.01.2009, 18:10 #174
- Регистрация
- 03.02.2006
- Возраст
- 52
- Сообщений
- 18,724
- Поблагодарили
- 8994
- Поблагодарил
- 4772
procedure SinCos(Theta: extended; var eSin, eCos: extended);
asm
FLD Theta
FSINCOS
FSTP tbyte ptr [EDX] // Cos
FSTP tbyte ptr [EAX] // Sin
FWAIT
end;
R2D: double = 57.295781; // Константа для преобразования радиан в градусы
//********************************************************************** *
// X значение в радиантах по модулю
// Возвращает X в диапазоне -LocalPi to +LocalPi
//********************************************************************** *
function SphericalMod(X: extended): extended;
begin
Result := X;
if X < -LocalPi then
Result := X + DoublePi
else if X > LocalPi then
Result := X - DoublePi;
end;73 de RX4HX, Alexei, http://rx4hx.qrz.ru
Ant.: UW4HW, Pwr.: ~500 Wtts
-
26.01.2009, 01:51 #175
- Регистрация
- 04.09.2008
- Адрес
- Одесса, Украина
- Возраст
- 55
- Сообщений
- 1,959
- Записей в дневнике
- 2
- Поблагодарили
- 113
- Поблагодарил
- 161
26.01.2009
Build ver. 200
+ Добавлено возможность скрывать / показывать колонки в логе
+ Изменять размеры колонок, шрифт, цвет шрифта
* Исправлено отображение линии между корреспондентами на карте QSO
+ Опция в поиске. Можно теперь выбрать связи по новым критериям (QSL и eQSL получена/отправлена)
* Исправлены некоторые ошибки в коде
+ новая библиотека для CW
Установка распакуйте архив в каталог с программой
Файлы в архиве
- Cweng.dll - новая библиотека CW
- config.mdb - база данных для сохранения настроек
-UR5FCMLogger.exe - новый исполняемый файл программы
Ссылка для скачивания
ur5fcm-new_200.exeПоследний раз редактировалось UR5FCM; 26.01.2009 в 02:28.
Log4Win аппаратный журнал для повседневных связей и соревнований http://log4win.ucoz.net/
-
26.01.2009, 20:56 #176
- Регистрация
- 04.09.2008
- Адрес
- Одесса, Украина
- Возраст
- 55
- Сообщений
- 1,959
- Записей в дневнике
- 2
- Поблагодарили
- 113
- Поблагодарил
- 161
Новая версия программы 201
И снова новая тестовая версия 201
Установка распакуйте архив в каталог с программой
Файлы в архиве
- Cweng.dll - новая библиотека CW
- config.mdb - база данных для сохранения настроек (должен быть в
папке с программой проверьте)
-UR5FCMLogger.exe - новый исполняемый файл программы
Вид программы
1. Настройки колонок лога
2. Вид карты (исправленная)Последний раз редактировалось UR5FCM; 26.01.2009 в 21:09.
Log4Win аппаратный журнал для повседневных связей и соревнований http://log4win.ucoz.net/
-
26.01.2009, 21:55 #177
- Регистрация
- 12.03.2007
- Адрес
- Грац, Австрия - Санкт-Петербург, Россия
- Возраст
- 60
- Сообщений
- 1,749
- Поблагодарили
- 375
- Поблагодарил
- 160
UR5FCM:
Вот... уже не слово мальчика, а мужа! Так и продолжать...
Из замечаний... Я одного не понял: ты считаешь дистанцию от себя до корреспондента всегда по длинному пути? Если так, то это не совсем верно. Нужно в обе стороны считать. У нас же есть Short Path и Long Path. И отображать их разным цветом в таком случае. Внизу можно дать легенду по цветам, или добавить тултип для линии. Ты же наверху данные отображаешь для направления антенны, ну вот...
Чтобы не думать, о том какую формулу использовать для нахождения кратчайшей дистанции с учетом кривизны поверхности земли, сразу скажу, что это формула Haversine.
ПС То есть завтра у нас будет уже 202 билд...73! Михаил (OE6MAF) :: HB9/OE6MAF, DL/OE6MAF
-
26.01.2009, 22:40 #178
- Регистрация
- 04.09.2008
- Адрес
- Одесса, Украина
- Возраст
- 55
- Сообщений
- 1,959
- Записей в дневнике
- 2
- Поблагодарили
- 113
- Поблагодарил
- 161
Последний раз редактировалось UR5FCM; 26.01.2009 в 22:46.
Log4Win аппаратный журнал для повседневных связей и соревнований http://log4win.ucoz.net/
-
26.01.2009, 23:12 #179
- Регистрация
- 12.03.2007
- Адрес
- Грац, Австрия - Санкт-Петербург, Россия
- Возраст
- 60
- Сообщений
- 1,749
- Поблагодарили
- 375
- Поблагодарил
- 160
UR5FCM:
Обратный азимут тоже надо рисовать... а как же... У тебя же направление зависит от нескольких факторов: прохождения и направления антенны.
Haversinе прамой реализации нет, но написать ее дело 10-15 минут. Тем более, у меня и код готовый есть... Когда-то писал... На мыло могу заслать, если скажешь, что надо...
Из добавлений... Если уж ты имеешь карту, то неплохо было бы на ней день и ночь отображать, в зависимости от солнца... И не в статике, а динамике по изменению времени. Очень полезная функциональность. А если еще связать с MUF - так вообще будет то, что доктор прописал.
Ниже код функции на VB 6.0:
Public Function Haversine(ByVal Latitude1 As Double, _
ByVal Latitude2 As Double, _
ByVal Longitude1 As Double, _
ByVal Longitude2 As Double) As Double
Const EarthRadius As Integer = 6371 'Earth radius in kilometer
Dim DeltaLatitude As Double, DeltaLong As Double
Dim a As Double, c As Double
Dim Pi As Double
On Error GoTo ErrorExit
Pi = 4 * Atn(1)
'Convert Latitude1, Latitude2, Longitude1, Longitude2 from decimal degrees into radians
Latitude1 = Latitude1 * Pi / 180
Latitude2 = Latitude2 * Pi / 180
Longitude1 = Longitude1 * Pi / 180
Longitude2 = Longitude2 * Pi / 180
'Calculate change in Latitude and Longitude
DeltaLatitude = Abs(Latitude2 - Latitude1)
DeltaLongitude = Abs(Longitude2 - Longitude1)
a = ((Sin(DeltaLatitude / 2)) ^ 2) + (Cos(Latitude1) * Cos(Latitude2) * ((Sin(DeltaLongitude / 2)) ^ 2))
c = 2 * Atan((Sqr(1 - a)) / (Sqr(a)))
Haversine = R * c
ErrorExit:
End FunctionПоследний раз редактировалось RX1AL; 26.01.2009 в 23:25. Причина: Добавлено сообщение
73! Михаил (OE6MAF) :: HB9/OE6MAF, DL/OE6MAF
-
27.01.2009, 00:08 #180
- Регистрация
- 04.09.2008
- Адрес
- Одесса, Украина
- Возраст
- 55
- Сообщений
- 1,959
- Записей в дневнике
- 2
- Поблагодарили
- 113
- Поблагодарил
- 161
Последний раз редактировалось UR5FCM; 27.01.2009 в 00:15.
Log4Win аппаратный журнал для повседневных связей и соревнований http://log4win.ucoz.net/
Социальные закладки