2013-10-30 93 views
0

我在計算橢圓和線的交點時遇到了問題。計算橢圓和線的交點處理中

假設我在半徑爲500的點(0/0)處有一個橢圓。另外,我從點(0/0)到(mouseX, mouseY)繪製了一條直線。

首先,我檢查,如果鼠標座標是橢圓外做

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

現在,只要鼠標座標是橢圓形之外,我想不畫線,直到鼠標,但直到「邊界「的橢圓。爲了做到這一點,我必須有直線和橢圓的交點。

是否有任何庫可以簡化這種三角函數?是否有任何其他或多或少簡單的方法來計算交叉點?

回答

2

從你說什麼,我做以下假設:

  • 橢圓總是圓(半徑相同全面的方式)。
  • 該線始終從圓的中心繪製。

如果這些都是真的,那麼問題其實很簡單。所有你需要做的就是截斷線條,使其長度與圓的半徑相同,並給出交點。

如果鼠標是橢圓外:

  1. 存儲描述行向量;在這種情況下(mouseX,mouseY)。
  2. 標準化向量(將每個分量除以行的長度)。
  3. 將矢量乘以圓的半徑。

該矢量現在包含相對於圓心的交點。

您不必爲此使用矢量類,但它可能有幫助。

如果你的圓和線不是從原點(0,0)開始,那麼你需要補償。在第1步中,從(mouseX,mouseY)中減去您的新來源。在步驟3之後,重新添加原點以獲取顯示座標。

+0

你的假設是正確的,你的答案非常好!謝謝! –