javajmonkeyengine

I want to add random vector to an array that has n elements.HoweverI want a distance between a new random Vertor and elements in the array>4f


Here is my code, apparently it doesn't correct? Is there any other way to create object in random location without overlap? Thanks for your time.

   public ArrayList getVector3f() {
    boolean lessThan = false;
    // create first random vector & add it to the list array
    Vector3f v1 = randVector();
    list.add(v1);
    //num=4;
    for (int i = 0; i <= num - 2; i++) {
        vec = randVector();

        for (int j = 0; j <= list.size() - 1 ; j++) {
            if (list.get(j).distance(vec) < 4f) {
                lessThan = true;
            }
        }
        if (lessThan == true) {
            vec = randVector();
            for (int j = 0; j <= list.size() - 1; j++) {
                if (list.get(j).distance(vec) < 4f) {
                    lessThan = true;
                } else {
                    lessThan = false;
                }
            }
        }
        if (lessThan == false) {
            list.add(vec);
            System.out.println(vec);
        }
    }
    return list;
}

Solution

  • You seem to have "unrolled your loop". Try this (untested) :-

      public ArrayList getVector3f() {
        // create first random vector & add it to the list array
        Vector3f vec = randVector();
        list.add(vec);
    
        for (int i = 0; i <= num-2; i++) {
            boolean lessThan = true;
            while (lessThan) {
                lessThan = false;
                vec = randVector();
                for (int j = 0; j < list.size() ; j++) {
                    if (list.get(j).distance(vec) < 4f) {
                        lessThan = true;
                        break;
                    }
                }
            }
            list.add(vec);
            System.out.println(vec);
        }
        return list;
    }