Assignment - Implementing a simple Collision System

Given the following interface which exposes a method collide which takes a non-modifiable Collidable as a parameter returns true if caller collides with the given Collidable parameter.


public interface ICollidable {

    public boolean collide(ICollidable c);

}

Create a class Box and implements ICollidable and stores fields describing a 2D box in space.


Two boxes collide if they share some portion on the space.
This is a blurry definition, you have to come up with a more formal and mathematical description of what collision means.

Box must also override the toString method from Object superclass.

The following image gives you a (big) hint on how to formalize collisions in two 2D.
alt text
Pink and blue boxes are colliding while green and blue are not for instance.

Create a class Arena which stores information about a set of Collidable Objects and exposes a method with the following signatures.
Arena stores an array of Collidable which size (can be assumed) never exceed 1000 ;


    public void checkCollisions(){

    }

    @Override
    public String toString() {

    }

checkCollisions should check for all collision between all ICollidable objects. On the event of a collision between two objects A and B it should print the following:

    System.out.println("Collision: " +  A.toString() + " "+ B.toString());

toString takes care of drawing the Arena to standard output (console). Draw the boundaries of the Area using the plus + , character.
Boxes must be drawn using the point . character and corner using the + character.
You can always assume that Collidable Objects coordinates are never lower than 0 or greater than 99 .

In order to test out collision detection system, you should also provide a init function which inits boxes randomly (within arena boundaries) and a main which will execute a demo.

    public static void main(String[] args) {
        Arena a = new Arena();
        a.initArena(10); //initialize arena with 10 random Box

        System.out.println(a.toString()); // Print the Arena

        a.checkCollisions(); // Detect collisions and print them out on stdout
    }

    //init arena should init boxes randomly.

    public void initArena(final int NO){
        Random r = new Random(System.currentTimeMillis());
        objects = new Box[NO];
        for(int i=0; i<NO; i++){
            //function that creates a random box
            Box br=createRandomBox(r,....);
            objects[i] =br;
        }
    }

The following is the kind of result you should aim to obtain.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                   +..................................+           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .                                  .           +
+                                                   .       +....+                     .           +
+                                                   .       .    .                     .           +
+                                                   .       .    .                     .           +
+                                                   .       .    .                     .           +
+                                                   .       .    .                     .           +
+                                                   .       .    .                     .           +
+                                                   +..................................+           +
+                                                           .    .                                 +
+                                                           .    .                                 +
+                  +...........................................................+                   +
+                  .                                        +....+             .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  .                                                           .                   +
+                  +...........................................................+                   +
+                                                                                                  +
+                                                                                             +.+  +
+                                                                                             . .  +
+                                                                                             . .  +
+                                                                                             . .  +
+                                                                                             . .  +
+                                                                                             . .  +
+                                                                                             . .  +
+                                                                                             . .  +
+                                                                                             . .  +
+                +.................................................................+          . .  +
+                .                                                                 .          . .  +
+                .                                                                 .          +.+  +
+                .                                                                 .               +
+                +.................................................................+               +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
+                                                                                                  +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Collision:  60:49-5:10  19:58-60:14
Collision:  60:49-5:10  52:10-35:45

Final Remarks

What is the complexity of the checkCollision method?
Do you think it can be used in a game?
Can it be used in a game, even if the number of objects is, more than 1000?