2014-03-06 1 views
0

내가 원하는 것은 간단해야하지만 수학을 공부 한 이후로 꽤 오래되었습니다.포인트가 원호에 있는지 c를 확인하는 가장 좋은 방법 #

PointArc 클래스는 아래와 같습니다. 포인트 p이 아크 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#에서 그것을 구현하는 것은 사소한 것이어야한다고 생각합니다. 그래서 그것에 관해서 물어볼 필요는 없습니다. – 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