gpt4 book ai didi

math - 如何计算椭圆的轴对齐边界框?

转载 作者:行者123 更新时间:2023-12-01 22:51:15 25 4
gpt4 key购买 nike

如果椭圆的长轴是垂直或水平的,那么计算边界框很容易,但是当椭圆旋转时呢?

到目前为止我能想到的唯一方法是计算周长周围的所有点并找到最大/最小 x 和 y 值。看来应该有更简单的方法。

如果有一个函数(在数学意义上)可以描述任意角度的椭圆,那么我可以使用它的导数来找到斜率为零或未定义的点,但我似乎找不到一个。

编辑:澄清一下,我需要轴对齐的边界框,即它不应随椭圆旋转,而应与 x 轴保持对齐,因此变换边界框将不起作用。

最佳答案

您可以尝试使用参数化方程来计算以任意角度旋转的椭圆:

x = h + a*cos(t)*cos(phi) - b*sin(t)*sin(phi)  [1]
y = k + b*sin(t)*cos(phi) + a*cos(t)*sin(phi) [2]

...其中椭圆具有中心 (h,k) 长半轴 a 和短半轴 b,并旋转角度 phi。

然后您可以微分并求解梯度 = 0:

0 = dx/dt = -a*sin(t)*cos(phi) - b*cos(t)*sin(phi)

=>

tan(t) = -b*tan(phi)/a   [3]

这将为您提供许多 t 的解决方案(您感兴趣的其中两个),将其插回到 [1] 中以获得最大和最小 x。

重复[2]:

0 = dy/dt = b*cos(t)*cos(phi) - a*sin(t)*sin(phi)

=>

tan(t) = b*cot(phi)/a  [4]

让我们尝试一个例子:

考虑 (0,0) 处的椭圆,a=2,b=1,旋转 PI/4:

[1] =>

x = 2*cos(t)*cos(PI/4) - sin(t)*sin(PI/4)

[3] =>

tan(t) = -tan(PI/4)/2 = -1/2

=>

t = -0.4636 + n*PI

我们对 t = -0.4636 和 t = -3.6052 感兴趣

所以我们得到:

x = 2*cos(-0.4636)*cos(PI/4) - sin(-0.4636)*sin(PI/4) = 1.5811

x = 2*cos(-3.6052)*cos(PI/4) - sin(-3.6052)*sin(PI/4) = -1.5811

关于math - 如何计算椭圆的轴对齐边界框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/87734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com