@Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Body other = (Body) obj;
    if (Double.doubleToLongBits(this.px) != Double.doubleToLongBits(other.px)) {
      return false;
    }
    if (Double.doubleToLongBits(this.py) != Double.doubleToLongBits(other.py)) {
      return false;
    }
    if (Double.doubleToLongBits(this.vx) != Double.doubleToLongBits(other.vx)) {
      return false;
    }
    if (Double.doubleToLongBits(this.vy) != Double.doubleToLongBits(other.vy)) {
      return false;
    }
    if (Double.doubleToLongBits(this.fx) != Double.doubleToLongBits(other.fx)) {
      return false;
    }
    if (Double.doubleToLongBits(this.fy) != Double.doubleToLongBits(other.fy)) {
      return false;
    }
    if (Double.doubleToLongBits(this.mass) != Double.doubleToLongBits(other.mass)) {
      return false;
    }
    return true;
  }