algorithm - 根据椭圆与长轴或短轴的角度求出椭圆的半径

标签 algorithm graphics geometry

我正在使用 UE3 制作我的 HUD。我在 Canvas 上完成了它,并且有一个圆形按钮 - 问题是在非正方形的屏幕上,按钮是一个椭圆形。因此,这会导致检测鼠标是否“悬停”在按钮上时出现问题。

这是因为整个椭圆的半径与圆形不同。

我的下划线问题是:

如果我知道,如何算出椭圆相对于一个点(鼠标位置)的半径:

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

最佳答案

在椭圆以原点为中心且长轴和短轴分别平行于 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) 是 rotation matrix正确定位椭圆。因此,为 x' 和 y' 形成上面的方程,然后通过求解上面的矩阵方程代入 x 和 y 的表达式。

关于algorithm - 根据椭圆与长轴或短轴的角度求出椭圆的半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17130079/

相关文章:

algorithm - 如何从字符数组中查找单词?

c# - 最大路径总和在带质数校验的三角形中

java - 在二维数组中找到最长的路径(如多米诺骨牌)

java - 如何在 Java 中平滑地移动图形对象 360 度?

java - JPanel 位置被 BufferStrategy 重击

java - 当端点完全相同时,线相交算法返回 false?

java - 为什么 Java 的 String 中的 hashCode() 使用 31 作为乘数?

javascript - 形状(三 Angular 形)绘制不正确 - HTML5 Canvas/JavaScript 问题

c++ - 将点数组转换为多边形

vb.net - 绘制图形在 VB.net 中消失