我正在使用 UE3 制作我的 HUD。我在 Canvas 上完成了它,并且有一个圆形按钮 - 问题是在非正方形的屏幕上,按钮是一个椭圆形。因此,这会导致检测鼠标是否“悬停”在按钮上时出现问题。
这是因为整个椭圆的半径与圆形不同。
我的下划线问题是:
如果我知道,如何算出椭圆相对于一个点(鼠标位置)的半径:
- 长轴和短轴的半径
- 与点(鼠标位置)的轴(长轴和短轴)的角度
最佳答案
在椭圆以原点为中心且长轴和短轴分别平行于 x 轴和 y 轴的简单情况下,椭圆可以通过以下方程参数化 x = a cos(t )
和 y = b sin(t)
,其中 a
和 b
是长轴和短轴, 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) 是 rotation matrix正确定位椭圆。因此,为 x' 和 y' 形成上面的方程,然后通过求解上面的矩阵方程代入 x 和 y 的表达式。
关于algorithm - 根据椭圆与长轴或短轴的角度求出椭圆的半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17130079/