import java.util.Random;
import com.alibaba.fastjson.JSON;
import com.game.json.FastJSONserializable;
/**
* 随机圆内坐标
*
* @author zs
* @time 2018年11月7日
* @Description
*/
public class RandomCirPos {
// 圆心坐标
static int cirx = 0;
static int ciry = 0;
// 半径
static int circleR = 5000;
static Random random = new Random();
static double r2 = Math.pow(circleR, 2);
// 随机点坐标
static int[] pos = new int[2];
public static int[] getxy() {
// 取xy距离圆心的距离
int x = random.nextInt(2 * circleR) + 1 - circleR;
int y = random.nextInt(2 * circleR) + 1 - circleR;
// 获取x整数坐标
if (r2 < Math.pow(x, 2) + Math.pow(y, 2)) {
//理论上不用再次计算的概率为3.14/4
pos = getxy();
} else {
pos[0] = cirx + x;
pos[1] = ciry + y;
}
return pos;
}
public static void main(String[] args) {
long t1 = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
getxy();
}
long t2 = System.currentTimeMillis();
System.out.println("T1 " + (t2 - t1));
for (int i = 0; i < 100000; i++) {
getxy2();
}
long t3 = System.currentTimeMillis();
System.out.println("T2 " + (t3 - t2));
}
// 上面这个方法和下面这个方法相比,耗时差不多的
public static int[] getxy2() {
// 取xy距离圆心的距离
int x = random.nextInt(2 * circleR) + 1 - circleR;
int yh = (int) Math.sqrt((r2 - Math.pow(x, 2)));
int y = 0;
if (yh != 0) {
y = random.nextInt(yh) + 1 - yh;
}
pos[0] = cirx + x;
pos[1] = ciry + y;
return pos;
}
}