Является ли функция Math.random() на самом деле фракталом?

#javascript #canvas #random

#javascript #холст #Случайный

Вопрос:

Я следую руководству по quadtree из The Coding Train (YT), и у меня получилось, что мое quadtree работает и рисует! Моя проблема в том, что точки при использовании Math.random()*canvas.width и Math.random()*canvas.height для создания случайной точки на холсте не дают мне случайного набора точек, они фрактальны (например, треугольник Серпинского).

Я просмотрел игру chaos (благодаря Numberphile) и понимаю достаточно, чтобы знать, что Math.random() не работает. Вот мой код, который генерирует точки.

 for(let i=0; i<100000; i  ){
    var rx = Math.random()*canvas.width;
    var ry = Math.random()*canvas.height;
    let p = new Point(rx, ry, 2.5, i);
    qtree.insert(p);
}
  

Если кто-нибудь знает объяснение, которое могло бы помочь, я неправильно использую Math.random() ? Есть ли лучший способ получить случайную точку внутри квадрата?

РЕДАКТИРОВАТЬ: это jsFiddle: https://jsfiddle.net/muteman30/5b8mpfsc/5 /

Комментарии:

1. какой ожидаемый результат rx? Math.random() возвращает значение от 0 до 1

2. Math.random() возвращает floating point number значение от 0 до 1. Таким образом, это не дает a fractal , что является чем-то совершенно другим. Но, я думаю, это может сработать, поскольку оно создает число между 0 и canvas.width . Таким образом, показанный код должен быть правильным. Если совокупность точек вместе образует фрактал, у вас, вероятно, проблема в коде, который не показан.

3. Попробуйте это: const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min 1)) min;

4. Не могли бы вы добавить скриншот результата (или рабочий фрагмент)? Я не уверен, что именно вы имеете в виду под «фракталом»

5. Вы уверены, что это Math.random() ошибка, а не Quadtree функция реализации?

Ответ №1:

В вашей функции subdivide:

     let neb = new Rectangle(b.x b.w/2, this.y, b.w/2, b.h/2);
  

this должно быть b

Комментарии:

1. Конечно! Большое вам спасибо!