public PolarVector face(Vector target) {
        double pitch, yaw = this.yaw;

        if (target.x == 0 && target.z == 0 )
            pitch = target.y > 0 ? -90 : 90;
        else {
            yaw = (float) Math.toDegrees((Math.atan2(-target.x, target.z) + (PI * 2)) % (PI * 2));
            pitch = (float) Math.toDegrees(Math.atan(-target.y / Math.hypot(target.x, target.z)));
        }

        if (mutable) {
            this.pitch = pitch;
            this.yaw = yaw;
            return this;
        }

        return new PolarVector(x, y, z, pitch, yaw);
    }