원과 선이 교차하는지 확인하는 방법을 구현하려고합니다. 나는 this 코드 (답변에 따라 고정)를 가장 많이 사용했으며 Point
의 코드를 Vector2f
의 's 대신 약간 수정했습니다.C에서 원과 선분 충돌 #
이 내가 무엇을 현재 : 그것은 this 알고리즘과 일치 보이는
private bool CircleLineIntersect(int x, int y, int radius, Point linePoint1, Point linePoint2) {
Point p1 = new Point(linePoint1.X,linePoint1.Y);
Point p2 = new Point(linePoint2.X,linePoint2.Y);
p1.X -= x;
p1.Y -= y;
p2.X -= x;
p2.Y -= y;
float dx = p2.X - p1.X;
float dy = p2.Y - p1.Y;
float dr = (float)Math.Sqrt((double)(dx * dx) + (double)(dy * dy));
float D = (p1.X * p2.Y) - (p2.X * p1.Y);
float di = (radius * radius) * (dr * dr) - (D * D);
if (di < 0) return false;
else return true;
}
, 그래서 문제가 무엇인지 확실하지 않다.
누군가가 지침을 제공 할 수 있다면 많은 도움이 될 것입니다.
편집 :
정확하게 계산되지 않는 것 같습니다. 예를 들어, 입력 x = 1272, y = 1809, 반경 = 80, linePoint1 = {X = 1272, Y = 2332}, linePoint2 = {X = 1272, Y = 2544} 교차점 (y + radius 선분의 y 값보다 작음) 함수가 true를 반환합니다.
무엇이 문제입니까? 이 코드는 어떤 방식으로 원하는 것을 수행하지 않습니까? – Aron
@Aron 올바르게 계산되지 않는 것 같습니다. 예를 들어, 입력 x = 1272, y = 1809, 반경 = 80, linePoint1 = {X = 1272, Y = 2332}, linePoint2 = {X = 1272, Y = 2544} 교차점 (y + radius 선분의 y 값보다 작음) 함수가 true를 반환합니다. – Brad