2014-03-06 5 views
0

То, что я хочу сделать, должно быть простым, но прошло некоторое время с тех пор, как я изучал математику.Лучший способ проверить, находится ли точка на дуге в C#

Предположим, у меня есть Point и Arc классы, как показано ниже. Как проверить, находится ли точка 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 Ok. Благодарю. – 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

Смежные вопросы