Привязка 2 дальности

Сущность метода имеем две исходные точки A и B координаты которых известны, относительно этих точек нам необходимо определить координаты точки P, имея только дальности AP и BP. 

// Находим расстояние AB
double AB = A.distance( B );
// По теореме косинусов находим угол в вершине А
double uA = Math.Acos( ( Math.Pow( AP, 2 ) + Math.Pow( AB, 2 ) - Math.Pow( BP, 2 ) ) / ( 2.0 * AP * AB ) );
// И угол в вершине B
double uB = Math.Acos( ( Math.Pow( AB, 2 ) + Math.Pow( BP, 2 ) - Math.Pow( AP, 2 ) ) / ( 2.0 * AB * BP ) );
// Вычисляем дирекционный угол AB
double dirAB = A.direction( uB );
// Вычисляем диеркционный угол BA
double dirBA = B.direction( uA );
// Вычисляем дирекционный угол AP
double dirAP = dirAB + uA;
// Вычисляем дирекционный угол BP
double dirBP = dirBA - uB;
// Наносим точку P из точки A
Point p1 = A.polar( dirAP, AP );
// Наносим точку P из точки B
Point p2 = B.polar( dirBP, BP );
// Высчитываем среднее арифметическое значение координат
double X = ( p1.X + p2.X ) / 2.0f;
double Y = ( p1.Y + p2.Y ) / 2.0f;
// Двойной расчет точки P видимо анахронизм
Point P = new Point( X, Y );

 Также следует обратить внимание на то, что точка A должна быть левее точки B, если ввести наоборот то мы получаем зеркальную точку P’.

Запись опубликована автором в рубрике Программирование с метками .

Об авторе Ахат Куангалиев

Родился 04.12.1977 года в городе Атырау (Гурьев), закончил в 1998 году Актюбинский университет им К. Жубанова по специальности "Менеджер информатизации", после окончания работал в Казначействе Министерства Финансов РК. Женат, трое детей. С 2002 года участвует в разработке программного обеспечения для МО РК, комплекты артиллерийских тренажеров МАКИ и общевойскового МОКИ с лазерной имитацией.

Добавить комментарий