如何找到从旋转椭圆中心到4个外部的4个角度

时间:2018-05-23 10:54:37

标签: graphics geometry 2d ellipse

我试图找到一个算法来推导出从旋转椭圆的中心到其四肢的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))

上面给出了边界框AND:

左右点 x

顶部和底部点的 y

但是我需要左右点的 x和y 以及顶点和底点的 x和y 来计算角度。

我觉得我错过了一些简单但却找不到的东西。

图像说明了边界框顶部的点。

enter image description here

1 个答案:

答案 0 :(得分:3)

设椭圆半轴为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

快速制作Delphi code

生成的a: 200; b: 100; fi: Pi/6 CW;的真实示例

enter image description here