Нахождение квадрата в координатной плоскости описывающего окружность - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, Уважаемые, Вроде и с математикой у меня не так уж и плохо, но все же к решению не могу прийти!? На самом деле у меня не окружность, а дуга. Известны начальная и конечная точка, и коэффициент кривизны, т.е.

тангенс четверти угла

стянутого дуговым сегментом. Четверть угла лишь для того чтобы тангенс

необрывался

если модуль угла больше Пи/2 А тангенс нужен

для того что бы определить в какую сторону дуга выпуклая

от отрезка соединяющего те две точки.
Point a = new Point(4, 1);
Point b = new Point(8, 3);
 
// Тангенс четверти угла стянутого дуговым сегментом
double bulge = 2.414213562373094;
 
// Угол стянутый дуговым сегментом
double L = Math.Atan(bulge) * 4;
 
// Для отрезка соединяющего начальну и конечную точки дуги
double AB = Math.Sqrt(Math.Pow(a.X - b.X, 2.0) + Math.Pow(a.Y - b.Y, 2.0));
 
// Радиус кривизны дуги
double R = AB / (Math.Sqrt(2 - 2 * Math.Cos(L)));
Собственно дальше не догоню как искать квадрат описывающий дугу?!

Решение задачи: «Нахождение квадрата в координатной плоскости описывающего окружность»

textual
Листинг программы
Point a = new Point(4, 1);
Point b = new Point(8, 3);
 
// Тангенс четверти угла стянутого дуговым сегментом
double bulge = 2.414213562373094;
 
// Угол стянутый дуговым сегментом
double L = Math.Atan(bulge) * 4;
 
// Для отрезка соединяющего начальну и конечную точки дуги
double AB = Math.Sqrt(Math.Pow(a.X - b.X, 2.0) + Math.Pow(a.Y - b.Y, 2.0));
 
// Радиус кривизны дуги
double R = AB / (Math.Sqrt(2 - 2 * Math.Cos(L)));
 
// Растояние от АВ до Центра окружности
double h = R - AB * bulge;
 
// Координаты вектора AB
double ABx = b.X - a.X;
double ABy = b.Y - a.Y;
 
//Находим перпендикуляр:
double Px = -ABy;
double Py = ABx;
 
//Длина перпендикуляра:
double LenP = Math.Sqrt(Math.Pow(Px, 2.0) + Math.Pow(Py, 2.0));
 
//Нормализуем вектор P (приводим к единичной длине):
Px = Px / LenP;
Py = Py / LenP;
 
//Находим нужные координаты центра окружности:
double Hx = (a.X + b.X) / 2 + Px * h;
double Hy = (a.Y + b.Y) / 2 + Py * h;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы