저는 현재 진행중인 컨설팅 프로젝트에 대한 막판 요청과 함께 엄청나게 바쁩니다.두 개의 원이 겹치는 부분 얻기
나는 무작위 크기의 원의 시리즈를 그리는 서피스 뷰 SurfaceView가 : 기본적으로 여기
내가 달성하기 위해 노력하고 있습니다 것입니다. 각 원은 50-100의 반경을 가질 수 있습니다.
는 x는 y 값 임의로 랜덤 반경
각 원은 그 원 (X, Y COORD 년대 및 반경)를 나타내는 오브젝트로 생성하고이리스트에 추가와 함께 생성된다.
일단 모두 만들어지면 그려집니다.
문제는이 서클 중 어느 것도 겹치지 않도록하려는 것입니다.
나는 조금 어려움을 겪고 있습니다. 이것은 어려운 일이 아니었지만 불행히도 나를위한 것입니다.
x = 100 + (int) (Math.random() * (mCanvasWidth - 200));
y = 100 + (int) (Math.random() * (mCanvasHeight - 200));
radius = 50 + (int) (Math.random() * 99);
color[0] = (float) (Math.random() * 360);
color[1] = 1;
color[2] = 1;
String radVal = String.valueOf(radius);
circle circ = new circle(x, y, radius, Color.HSVToColor(128, color), radVal);
boolean addit = true;
for (dot d : Dots) {
int leftSide = d.get_x() - radius;
int rightSide = d.get_x() + radius;
int xBoundary = x + radius;
int yBoundary = y + radius;
int exist_xLeft = d.get_x() - d.get_radius();
int exist_xRight = d.get_x() + d.get_radius();
int exist_yTop = d.get_y() - d.get_radius();
int exist_yBottom = d.get_y() + d.get_radius();
if ((xBoundary > exist_xLeft) && (xBoundary < exist_xRight))
{
if (yBoundary > (exist_yTop) && (yBoundary < exist_yBottom)) {
addit = false;
break;
}
}
}
if (addit)
circles.add(mdot);
if (circles.size() >= 5)
running = false;
이 그 다음은 원 목록을 반복 처리 캔버스를 그립니다
다음은 지금까지 (내가 친절 ... 그것은 가까이하지 알고) 내 코드입니다.
어디에서 충돌 감지에 실패했는지에 대한 제안 사항이 있습니까?
이 대답은 내가 필요로 무엇을 준 : http://stackoverflow.com/questions/306316/determine-if-two-rectangles-overlap-each- 기타 – tronious
@markE 더 설명해 주시겠습니까? 나는 다음의 값을 가정하여 표현식을 테스트하려고 시도했다 :'cx1 = 0; cy1 = 0; r1 = 5; cx2 = 9; cy2 = 0; r2 = 5;'. 이 경우 원이 충돌하지 않습니까? –
@markE - 귀하의 제안에 감사드립니다. 난 당신의 솔루션을 시도하고 그것은 작동하지 않습니다. 나는 아직도 중첩을 경험한다 ... 사소한 중첩에도 불구하고 ... 여전히 중첩이있다. – tronious