/**//** * 求平方根 * @param value 定义域 * @return 值域 */ final public static int sqrt(int value) ...{ int sqrt = 0; for (int k = 0x100000; k != 0; k >>= 2) ...{ int tmp = sqrt + k; sqrt >>= 1; if (tmp <= value) ...{ value -= tmp; sqrt += k; } } return sqrt; } /**//** * 两点距离公式 * 根据泰勒级数展开,取前三层,足够了。。 * @param dx - x 方向相对距离 * @param dy - y 方向相对距离 * @return * - 第三条边的长度。。 */ final public static int fastSqrt(int dx, int dy) ...{ dx = dx < 0 ? -dx : dx; dy = dy < 0 ? -dy : dy; int dmin = dx < dy ? dx : dy; return (dx + dy - (dmin >> 1) - (dmin >> 2) + (dmin >> 4)); }