计算Processing中椭圆和直线的交点

时间:2013-10-30 15:52:11

标签: java processing trigonometry

我在计算椭圆和直线的交点时遇到了麻烦。

假设我在半径为500的点(0/0)处有一个椭圆。另外,我是从点(0/0)到(mouseX, mouseY)画一条线。 / p>

首先,我通过

检查鼠标坐标是否在椭圆之外
if((mouseX*mouseX)+(mouseY*mouseY)) > 500*500){/*...*/}

现在,只要鼠标坐标位于该椭圆之外,我就想直到鼠标画线,但直到边界为''椭圆为了做到这一点,我必须有线和椭圆的交点。

是否有任何库可以简化这些三角函数任务?有没有其他或多或少的简单方法来计算交叉点?

1 个答案:

答案 0 :(得分:2)

据你所说,我做了以下假设:

  • 椭圆始终是圆形的(一直相同的半径)。
  • 始终从圆心绘制线条。

如果这些都是真的那么问题实际上非常简单。您需要做的就是截断直线,使其长度与圆的半径相同,并为您提供交点。

如果鼠标在椭圆之外:

  1. 存储描述该行的向量;在这种情况下(mouseX,mouseY)。
  2. 规范化矢量(将每个分量除以线的长度)。
  3. 将矢量乘以圆的半径。
  4. 矢量现在包含相对于圆心的交点。

    您不必使用矢量类,尽管它可能会有所帮助。

    如果您的圆和线没有在原点(0,0)上开始,那么您需要进行补偿。在步骤1中,从(mouseX,mouseY)中减去新的原点。在步骤3之后,重新添加原点以获取显示坐标。