根据椭圆与长轴或短轴的角度找到椭圆的半径

Gar*_*nes 4 algorithm graphics geometry

我正在使用 UE3 并制作我的 HUD。我已经在画布上完成了它,并且有一个圆形按钮 - 问题是在不是方形的屏幕上,按钮是一个椭圆形。因此,这会导致检测鼠标是否在按钮“上方”的问题。

这是因为围绕整个椭圆的半径并不相同,就像圆的情况一样。

我的下划线问题是:

鉴于我知道,如何计算椭圆相对于点(鼠标位置)的半径:

  • 长轴和短轴的半径
  • 与点(鼠标位置)的轴(长轴和短轴)的角度

Mar*_*rkV 5

在椭圆以原点为中心,长轴和短轴分别平行于 x 轴和 y 轴的简单情况下,椭圆可以由方程x = a cos(t)和参数化y = b sin(t),其中ab是长轴和短轴,和t是从 0 到 2pi 变化的角度。所以在这种情况下,为了回答你的问题,角度 t 处的半径是

r = sqrt( x^2 + y^2 ) = sqrt( a^2 cos^2(t) + b^2 sin^2(t) )

现在,这可以通过以下方式变得更加复杂

(i) 椭圆不以 (0,0) 为中心

(ii) 长轴和短轴不平行于 x 轴和 y 轴,因为长轴与正 x 轴形成一个角度 t0。

(iii) (i) 和 (ii) 的组合。

但是,上述解决方案也可以通过适当的修改应用于这些情况。对于 (i),从上面等式中的 x 和 y 减去中心以获得中心点的半径。对于 (ii),上面的方程将适用于变量 x',y',其中 (x',y')^T = R(t0) (x,y)^T 其中 R(t0) 是旋转矩阵,其中正确定位椭圆。因此,为 x' 和 y' 形成上面的方程,然后通过求解上面的矩阵方程来替换 x 和 y 的表达式。