private float circleAround(float x, float y) {
        /*
         * use cross product of v and r
         */
        Vector3d r = new Vector3d(flyingDot.p.x - x, flyingDot.p.y - y, 0);
        float d = r.length();

        //are we close ?
        if (d > flyingDot.my_turn_radius * 3) return headTowards(x, y);

        Vector3d cross = r.crossed(flyingDot.v);

        float dperp = cross.length() / flyingDot.ds;
        float dot = r.dot(flyingDot.v);

        if (cross.z >= 0) {

            //circling the right way
            if (dot > 0) {
                return -1;
            } else {
                if (dperp <= flyingDot.my_turn_radius) {
                    return 0; //was 0 on 26th whem it worked
                } else {
                    return -1;
                }
            }
        } else {

            //circling the wrong way
            if (d < flyingDot.my_turn_radius) {
                return -1;
            } else {
                if (dot > 0) {
                    return -1;
                } else {
                    return 1;
                }
            }
        }
    }