Magnet Design

# Magnet Design

```/*
* Name:  Joe Cool
* Lab:   Lab 2 (magnets)
* Purpose:  Magnet models a physical magnet with a north and south
*           pole.  A magnet can move and it can interact with other
*           magnets through attraction and repulsion.
*/
public class Magnet {
/* The dimensions of the magnet. */
private final static double MAGNET_WIDTH = 150;
private final static double MAGNET_HEIGHT = 50;

/* Distance from pole to magnet perimeter */
private static final double POLE_DISTANCE = MAGNET_HEIGHT / 2;

/* The rectangle representing the outline of the magnet */
private FramedRect box;

/* The poles of the magnet */
private Pole northPole, southPole;

// Creates a new magnet
// Parameters:
//    point - the upper left corner of the magnet
//    canvas - the canvas that the magnet will be displayed on
public Magnet (Location point, DrawingCanvas canvas) {
// Draw the rectangle
// Create the north and south poles offset by POLE_DISTANCE
// within the rectangle
}

// Return the upper left corner of the magnet.
public Location getLocation() {
// return the location of the box;
}

// Move the magnet relative to its current position.
// Parameters:
//    xoff - the x offset in the movement
//    yoff - the y offset in the movement
public void move(double xoff, double yoff) {
// Move the rectangle and the two poles by the same offset.
}

// Move the magnet so that its upper left corner is at the given
// point.
// Parameters:
//   point - the new upper left corner for the magnet
public void moveTo( Location point) {
// Calculate an offset from the point to the current box
// location.  Call the move method using the calculated
// offset.
}

// Returns true if point is within the bounds of the magnet.
// Parameters:
//   point - the point to check for containment
public boolean contains (Location point) {
// Return whether the box contains point.
}

// Swaps the north and south poles of the magnet.
public void flip ()  {
// Remember the x coordinate where the north and south poles
// currently are in local variables.  Compute the distance
// between those x coordinates.  Move the poles that distance
// in the x coordinate and 0 in the y distance.
}

// Return the north pole of the magnet
public Pole getNorth () {
return northPole;
}

// Return the south pole of the magnet
public Pole getSouth()  {
return southPole;
}

// Cause another magnet to move if it is close enough to cause
// a magnet reaction.
// Parameter:  other - the magnet to check for a reaction
public void interact (Magnet other)  {
// Check for attraction between the opposite poles of this
// magnet and the other magnet.
// Check for repulsion between similar poles of this
// magnet and the other magnet.
}
}
```

 Magnet Design