Как найти 4 угла от центра вращающегося эллипса к нему 4 конечности - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь найти алгоритм для получения 4 углов от центра вращающегося эллипса до его конечностей.Другими словами, от центра к точкам, где ограничивающий прямоугольник касается линии эллипса.

Я уже понял, как получить ограничивающий прямоугольник, используя:

leftX/rightX  =  h± sqrt(a*a*cos(PI)*cos(PI) + b*b*sin(PI)*sin(PI))
topY/bottomY  =  k± sqrt(a*a*sin(PI)*sin(PI) + b*b*cos(PI)*cos(PI))

Вышедает мне ограничительную рамку И:

x левой и правой точек

y верхней и нижней точек

Но мне нужны x и y для левой и правой точек и x и y для верхней и нижней точек для вычисления углов.

Мне кажется, что я упустил что-то простое, но не смог его найти.

Изображение иллюстрирует точку в верхней части ограничительной рамки.

enter image description here

1 Ответ

0 голосов
/ 24 мая 2018

Пусть полуоси эллипса a, b, центральная точка (cx, cy) и угол поворота fi.Тогда координаты по окружности эллипса в параметре t имеют вид:

 x = a * Cos(t) * Cos(fi) - b * Sin(t) * Sin(fi) + cx
 y = a * Cos(t) * Sin(fi) + b * Sin(t) * Cos(fi) + cy

Чтобы получить экстремальные точки, мы можем дифференцировать координаты по t и установить производные в ноль

 a * Sin(t) * Cos(fi) = - b * Cos(t) * Sin(fi)   //  dx/dt
 a * Sin(t) * Sin(fi)  =  b * Cos(t) * Cos(fi) //  dy/dt

 tg(t) = -b/a * Tg(fi)
 t(l,r)  = Pi * k + Atan(-b/a * Ttg(fi)  //left and right, k=0,1

 tg(t) = b/a * Ctg(fi)
 t(t,b) = Pi * k + Atan(b/a * Ctg(fi))  //top and bottom, k = 0,1

 ytop = a * Cos(t(t)) * Sin(fi) + b * Sin(t(t)) * Cos(fi) + cy
 and so on

реальный примердля a: 200; b: 100; fi: Pi/6 CW;, сгенерированного быстрым код Delphi

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...