Форум программистов, компьютерный форум, киберфорум
VASSUV
Войти
Регистрация
Восстановить пароль
Оценить эту запись

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

Запись от VASSUV размещена 02.01.2013 в 13:14

Цитата:
Сообщение от VASSUV Посмотреть сообщение
Добрый день, Уважаемые,
На самом деле у меня не окружность, а дуга. Известны начальная и конечная точка, и коэффициент кривизны, т.е. тангенс четверти угла стянутого дуговым сегментом.

Четверть угла лишь для того чтобы тангенс необрывался если модуль угла больше Пи/2
А тангенс нужен для того что бы определить в какую сторону дуга выпуклая от отрезка соединяющего те две точки.
Далее код нахождения центра дуги

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
Размещено в Без категории
Показов 616 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.