Андрей Владиславович, ну что Вы так категорически отрубаете человека. ?
Вот три функции, манипулирую которыми можно найти (или не найти) пересечение двух Пеленгов
п.с подробности знает В.В.Беленков (бомбер)
Код |
---|
// Прямая геодезическая задача на эллипсоиде // 03/04/12
// Для расстояния не более 250 км координаты определяются с ошибкой до 0,0001",
// а обратный азимут - до 0,001", что соответствует триангуляции 1 класса
// Способ вспомогательной точки по методу Красовского
// Метод предназначен для расстояний меньше радиуса Земли
// Вычисления выполняются на текущем эллипсоиде, установленном
// в документе - mapSetDocProjection
// hmap - идентификатор открытых данных
// b1,l1 - геодезические координаты исходной точки
// angle1 - азимут на вторую точку
// distance - расстояние до второй точки
// b2,l2 - рассчитанные координаты второй точки
// angle2 - рассчитанный азимут со второй точки на первую
// (если angle2, то обратный азимут не вычисляется)
// При ошибке в параметрах возвращает 0
_MAPIMP long int _MAPAPI mapDirectPositionComputation(HMAP hmap,
double b1, double l1, double angle1,
double distance,
double * b2, double * l2, double * angle2);
// Преобразование из геодезических координат в радианах
// (общеземной эллипсоид WGS84)
// в метры на местности в проекции карты
// (поддерживается не для всех карт !)
// hmap - идентификатор открытых данных
// Bx,Ly,H - преобразуемые координаты
// на входе радианы, на выходе - метры
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGeoWGS84ToPlane3D(HMAP hmap, double *Bx, double *Ly,
double * H);
// Найти точку пересечения двух отрезков
// a1, a2 - точки первого отрезка (A)
// b1, b2 - точки второго отрезка (B)
// cp1 - первая точка пересечения
// cp2 - вторая точка пересечения
// precision - точность, используемая для проверки равенства точек
// (рекомендуется DOUBLENULL)
// force - флаг выполнения дополнительного поиска
// (если равно 1, то учесть наличие отрезков нулевой длины)
// Возвращает CROSS-коды (code: CROSS_0, CROSS_1, CROSS_2 и др.).
// Число пересечений = (code & CROSS_GETCOUNT) = 0,1,2
// При ошибке параметров возвращает 0
_MAPIMP long int _MAPAPI ovlGetCrossPoint(DOUBLEPOINT* a1, DOUBLEPOINT* a2,
DOUBLEPOINT* b1, DOUBLEPOINT* b2,
DOUBLEPOINT* cp1, DOUBLEPOINT *cp2,
double precision, long int force);
|
Технология:
Наблюдатель 1 (точка А) и пеленг 1 (П1)
Наблюдатель 2 (точка Б) и пеленг 2 (П2)
----------------------------------------
1. От наблюдателя проводите виртуальную линию на расстояние соизмеримую с замерами пеленгов (например точка бомбометания)... то есть, пусть мы наблюдаем на полигоне 20*20 км, то линию проводим на 100 км
Вычисляем точки по функции 1
mapDirectPositionComputation(КАРТА, A.X, A.Y, П1, 100000, рез1.X, рез1.Y, рез1.Z)
mapDirectPositionComputation(КАРТА, Б.X, Б.Y, П2, 100000, рез2.X, рез2.Y, рез1.Z)
2. используя функцию 2 mapGeoWGS84ToPlane3D переводите точки в плановую систему координат
mapGeoWGS84ToPlane3D(КАРТА, A.X, A.Y); mapGeoWGS84ToPlane3D(КАРТА, рез1.X, рез1.Y) --первый отрезок
mapGeoWGS84ToPlane3D(КАРТА, Б.X, Б.Y); mapGeoWGS84ToPlane3D(КАРТА, рез2.X, рез2.Y) --второй отрезок
3. функцией номер 3 ovlGetCrossPoint ищем возможное пересечение
ovlGetCrossPoint(A,рез1,Б,рез2,пересечение1,пересечение2, точность, 1)
если результат функции равен единице - у вас в точке "пересечение1" будет нужная координата в плане
функцией mapToPlaneToGeoWGS84 можно найти координаты в геодезической СК