首页 文章

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

提问于
浏览
1

我试图找到一个算法来推导从旋转椭圆的中心到其四肢的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 and y 和顶点和底点的 x and y 来计算角度 .

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

图像显示了边界框顶部的点 .

enter image description here

1 回答

  • 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
    

    快速制作的 a: 200; b: 100; fi: Pi/6 CW; 的真实示例Delphi code

    enter image description here

相关问题