#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 до 12.
Math.random()
возвращаетfloating point number
значение от 0 до 1. Таким образом, это не дает afractal
, что является чем-то совершенно другим. Но, я думаю, это может сработать, поскольку оно создает число между 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. Конечно! Большое вам спасибо!