/**/
/**
* 求平方根
* @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));
}
* 求平方根
* @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));
}