Я хочу иметь 8 пар целых чисел, так что все они имеют разные координаты, и все они находятся в пределах 5 единиц друг от друга (используя евклидово расстояние).
Чтобы уточнить, я хочу иметь
(x1, y1)
(x2, y2)
(x3, y3)
(x4, y4)
(x5, y5)
(x6, y6)
(x7, y7)
(x8, y8)
, где xi
и yi
являются случайно сгенерированными целыми числами (через nextInt
), так что нет индексов i
, j
, таких как xi = xj
и yi = yj
и такой, что для всех индексов i
, j
sqrt( (xi - xj)^2 + (yi - yj)^2 ) <= 5
.
Я попытался сгенерировать первую пару с помощью nextInt, а затем с помощью 7 сложных циклов while выбрать 7 других пар, новычисление занимает слишком много времени:
int r_x = generateur.nextInt(2*n + 1) - n;
int r_y = generateur.nextInt(2*n + 1) - n;
int p_x = generateur.nextInt(2*n + 1) - n;
int p_y = generateur.nextInt(2*n + 1) - n;
int b1_x = generateur.nextInt(2*n + 1) - n;
int b1_y = generateur.nextInt(2*n + 1) - n;
int b2_x = generateur.nextInt(2*n + 1) - n;
int b2_y = generateur.nextInt(2*n + 1) - n;
int g1_x = generateur.nextInt(2*n + 1) - n;
int g1_y = generateur.nextInt(2*n + 1) - n;
int g2_x = generateur.nextInt(2*n + 1) - n;
int g2_y = generateur.nextInt(2*n + 1) - n;
int m_x = generateur.nextInt(2*n + 1) - n;
int m_y = generateur.nextInt(2*n + 1) - n;
int w_x = generateur.nextInt(2*n + 1) - n;
int w_y = generateur.nextInt(2*n + 1) - n;
Point2D pt_r = new Point2D(r_x, r_y);
Point2D pt_p = new Point2D(p_x, p_y);
Point2D pt_b1 = new Point2D(b1_x, b2_y);
Point2D pt_b2 = new Point2D(b2_x, b2_y);
Point2D pt_g1 = new Point2D(g1_x, g1_y);
Point2D pt_g2 = new Point2D(g2_x, g2_y);
Point2D pt_m = new Point2D(m_x, m_y);
Point2D pt_w = new Point2D(w_x, w_y);
boolean r_p = false;
boolean r_p_b1 = false;
boolean r_p_b1_b2 = false;
boolean r_p_b1_b2_g1 = false;
boolean r_p_b1_b2_g1_g2 = false;
boolean r_p_b1_b2_g1_g2_m = false;
boolean r_p_b1_b2_g1_g2_m_w = false;
while(!r_p_b1_b2_g1_g2_m_w){
while(!r_p_b1_b2_g1_g2_m){
while(!r_p_b1_b2_g1_g2){
while(!r_p_b1_b2_g1){
while(!r_p_b1_b2){
while(!r_p_b1){
while(!r_p){
p_x = generateur.nextInt(n + 1) - n/2;
p_y = generateur.nextInt(n + 1) - n/2;
r_p = pt_r.test(p_x, p_y);
}
pt_p = new Point2D(p_x, p_y);
this.peon.setPos(pt_p);
b1_x = generateur.nextInt(n/2 + 1) - n/4;
b1_y = generateur.nextInt(n/2 + 1) - n/4;
r_p_b1 = (pt_r.test(b1_x, b1_y) && pt_p.test(b1_x, b1_y));
}
pt_b1 = new Point2D(b1_x, b1_y);
this.bugs1.setPos(pt_b1);
b2_x = generateur.nextInt(n/4 + 1) - n/8;
b2_y = generateur.nextInt(n/4 + 1) - n/8;
r_p_b1_b2 = (pt_r.test(b2_x, b2_y) && pt_p.test(b2_x, b2_y) && pt_b1.test(b2_x, b2_y));
}
pt_b2 = new Point2D(b2_x, b2_y);
this.bugs2.setPos(pt_b2);
g1_x = generateur.nextInt(n/8 + 1) - n/16;
g1_y = generateur.nextInt(n/8 + 1) - n/16;
r_p_b1_b2_g1 = (pt_r.test(g1_x, g1_y) && pt_p.test(g1_x, g1_y) && pt_b1.test(g1_x, g1_y) && pt_b2.test(g1_x, g1_y));
}
pt_g1 = new Point2D(g1_x, g1_y);
this.guillaumeT.setPos(pt_g1);
g2_x = generateur.nextInt(n/16 + 1) - n/32;
g2_y = generateur.nextInt(n/16 + 1) - n/32;
r_p_b1_b2_g1_g2 = (pt_r.test(g2_x, g2_y) && pt_p.test(g2_x, g2_y) && pt_b1.test(g2_x, g2_y) && pt_b2.test(g2_x, g2_y) && pt_g1.test(g2_x, g2_y));
}
pt_g2 = new Point2D(g2_x, g2_y);
this.grosBill.setPos(pt_g2);
m_x = generateur.nextInt(n/32 + 1) - n/64;
m_y = generateur.nextInt(n/32 + 1) - n/64;
r_p_b1_b2_g1_g2_m = (pt_r.test(m_x, m_y) && pt_p.test(m_x, m_y) && pt_b1.test(m_x, m_y) && pt_b2.test(m_x, m_y) && pt_g1.test(m_x, m_y)
&& pt_g2.test(m_x, m_y));
}
pt_m = new Point2D(m_x, m_y);
this.merlin.setPos(pt_m);
w_x = generateur.nextInt(n/64 + 1) - n/128;
w_y = generateur.nextInt(n/64 + 1) - n/128;
r_p_b1_b2_g1_g2_m_w = (pt_r.test(w_x, w_y) && pt_p.test(w_x, w_y) && pt_b1.test(w_x, w_y) && pt_b2.test(w_x, w_y) && pt_g1.test(w_x, w_y)
&& pt_g2.test(w_x, w_y) && pt_w.test(w_x, w_y));
}
pt_w = new Point2D(w_x, w_y);
this.wolfie.setPos(pt_w);
, где n - степень 2