2016-09-15 1 views
0

그래서 클래스를 만들고 두 원이 거리에 따라 겹쳐져 있는지 확인해야합니다. 이것은 내가 가지고있는 것입니다 :두 서클이 겹치는 지 확인하는 방법

Circle a = other; 
    Circle b = other; 

    double xDist = a.getX() - a.getX(); 
    double yDist = b.getY() - b.getY(); 

    double radi = a.getRadius() + b.getRadius(); 

    double distance = Math.sqrt((xDist*xDist) + (yDist*yDist)); 

    if((distance < radi * radi)) { 
     return true; 
    } else { 
     return false; 
    } 

나의 과정은 중심의 거리가 반지름의 합보다 작 으면 원이 겹치는 것입니다.

+0

Math.sqrt()에 대한 호출을 제거 할 수 있지만 당신은 [Eclipse2D의 (HTTPS의 사용을 만들 수 있습니다 //docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html) 교차 검사를위한 기능. –

답변

3

평방의 반지름의 합계와 거리를 비교하려고합니다. 반지름의 합계와 거리를 비교하려고합니다.

또는, Math.sqrt을 사용할 필요를 제거 할 것 광장 반경의 합에 거리의 평방을 비교할 수 있습니다. 또한 이미 thisother 두 디스크에 참조 할 수있어 때, 변수 ab를 가진 아무 소용이 없다는 것을

참고. 실제로 ab을 모두 other이라고 잘못 지정했습니다. 이것을 다음과 같이 수정할 수 있습니다.

public boolean overlaps(Disk other) { 
    double xDistance = getX() - other.getX(); 
    double yDistance = getY() - other.getY(); 

    double sumOfRadii = getRadius() + other.getRadius(); 
    double distanceSquared = xDistance * xDistance + yDistance * yDistance; 

    boolean isOverlapping = distanceSquared < sumOfRadii * sumOfRadii; 
    return isOverlapping; 
} 
+1

'a'와'b'는'Disk other'와 동일하다는 것을 지적하고 싶을 수도 있습니다. –

+0

우, 좋은 지적입니다. 나는 그 오류를 발견하지 못했다. –

2

변경 2 일 :

Circle a = this; // "this" instead of "other" 

당신이 찾고있는하지 무엇 아마

관련 문제