0

我在计算椭圆和直线的交点时遇到问题。

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

首先,我检查鼠标坐标是否在椭圆之外

if((mouseX*mouseX)+(mouseY*mouseY)) > 500*500){/*...*/}

现在,每当鼠标坐标在该椭圆之外时,我都想画线,而不是直到鼠标,而是直到椭圆的“边框”。为了做到这一点,我必须有直线和椭圆的交点。

是否有任何库可以简化此类三角任务?还有其他或多或少简单的方法来计算交集吗?

4

1 回答 1

2

根据您所说,我做出以下假设:

  • 椭圆总是圆形的(一直都是相同的半径)。
  • 这条线总是从圆的中心画出来的。

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

如果鼠标在椭圆之外:

  1. 存储描述线的向量;在这种情况下(mouseX,mouseY)。
  2. 标准化向量(将每个分量除以线的长度)。
  3. 将向量乘以圆的半径。

向量现在包含相对于圆心的交点。

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

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

于 2013-10-30T16:40:27.060 回答