如何找到从旋转椭圆的中心到它的 4 个角 4 extermaties
How to find the 4 angles from center of a rotated ellipse to it 4 extermaties
我正在尝试找到一种算法来导出 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为了计算角度。
我觉得我错过了一些简单但找不到的东西。
图像说明了边界框顶部的点。
设椭圆半轴为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
生成
我正在尝试找到一种算法来导出 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为了计算角度。
我觉得我错过了一些简单但找不到的东西。
图像说明了边界框顶部的点。
设椭圆半轴为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