2014-03-06 70 views
0

我想要做的應該很簡單,但自從我學習數學以來已經有一段時間了。最好的方法來檢查一個點是否位於c中的一個弧上#

比方說,我有PointArc類如下。我如何檢查點p是否位於Arc a

public class Point 
{ 
    public double X; 
    public double Y; 
} 

public class Arc 
{ 
    public double Radius; 
    public double StartAngle; 
    public double EndAngle; 

    // center of the arc 
    public double Xc; 
    public double Yc; 
} 


Point p = new Point() { X = 5, Y = 5 }; 
Arc a = new Arc() 
{ 
    Radius = 5, 
    StartAngle = 0, 
    EndAngle = Math.PI/2, 
    Xc = 0, 
    Yc = 0 
}; 
+0

@Servy這是關於如何在C#中實現這個。 – Vahid

+0

一旦你解決了創建一個解決這個問題的公式的幾何問題*然後*它成爲一個實現該公式的編程問題。找到這個公式是一個幾何問題,而不是編程問題。我想,一旦你解決了幾何問題,在C#中實現它應該是微不足道的,我不會預見到有必要在SO上提出這個問題。 – Servy

+0

@Servy好的。謝謝。 – Vahid

回答

0

我想出了這個答案,這是張貼在這裏供將來參考。我知道這不是最有效的方法,但它可以完成這項工作。

// first check if the point is on a circle with the radius of the arc. 
// Next check if it is between the start and end angles of the arc. 
public static bool IsPointOnArc(Point p, Arc a) 
{ 
    if (p.Y * p.Y == a.Radius * a.Radius - p.X * p.X) 
    { 
     double t = Math.Acos(p.X/a.Radius); 
     if (t >= a.StartAngle && t <= a.EndAngle) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
+0

您將需要相對於圓弧中心的點。然後,您需要檢查d.y的符號,如果爲負,則應將pi添加到acos的結果中 – rxantos

相關問題