2014-12-16 7 views
0

Я в ужасном состоянии с просьбой о последней минуте в консалтинговом проекте, над которым я работаю.Получение области перекрытия двух окружностей

По сути вот что я пытаюсь сделать:

У меня есть SurfaceView, который рисует серию случайным образом размера кругов. Каждый круг может иметь радиус от 50 до 100.

х, у значения генерируется случайным образом наряду со случайным радиусом

Каждый круг создается как объект, представляющий этот круг (х, у 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; 

Затем он перебирает список кругов и рисует их на холст.

Любые предложения о том, где я не могу обнаружить обнаружение столкновения?

+0

Этот ответ дал мне, что мне нужно: http://stackoverflow.com/questions/306316/determine-if-two-rectangles-overlap-each- другое – tronious

+0

@markE Не могли бы вы объяснить больше? Я пытался проверить выражение, предполагающее следующие значения: 'cx1 = 0; Cy1 = 0; R1 = 5; CX2 = 9; су2 = 0; r2 = 5; '. В этом случае не сталкиваются круги? –

+0

@markE - Спасибо за ваше предложение. Я попробовал ваше решение, и оно не работает. Я все еще сталкиваюсь с перекрытиями ... хотя и второстепенными перекрытиями ... все еще есть перекрытия. – tronious

ответ

0

Вы можете обнаружить, если 2 кружки сталкиваясь как этот:

Дано:

  • centerpoints CX1, Cy1 & cx2, cy2

  • и даны радиусы r1 & r2,

Тогда вы можете определить пе, если 2 кружки сталкиваясь:

areColliding=((cx2-cx1)*(cx2-cx1)+(cy2-cy1)*(cy2-cy1))<((r1+r2)*(r1+r2)); 
+0

В простом английском выражении означает: «Если расстояние между двумя центральными точками меньше суммы радиусов, то круги сталкиваются». –

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