Для однородных точек на окружности или конуса с радиусом R, а высота/подъема H:
generate:
angle= uniform_random(0,2*pi)
value= uniform_random(0,1)
in either case, let:
r= R * sqrt(value)
then (using separate random numbers for each):
circle_point= point3d(r*cos(angle), r*sin(angle), H)
or:
cone_point= point3d(r*cos(angle), r*sin(angle), r*H)
Обратите внимание, что если вы хотите базу на вашем конусе, вам нужно будет сделать это отдельно от изогнутая форма. Чтобы плотность точек была одинаковой для разных частей, простой способ - рассчитать площади деталей и создать пропорциональное количество точек для каждой части.
sqrt (value) - это то, что гарантирует плотность ваших случайных точек. Как и другие вопросы, вы хотите получить треугольное распределение ; взятие sqrt() превращает равномерное распределение на [0,1) в треугольное.
Для цилиндра вам не нужен sqrt(); изогнутая часть:
cylinder_point= point3d(R*cos(angle), R*sin(angle), H*value)
Похоже, что соотношение составляет от 1,5 до 0,5. Вероятно, вам понадобится отношение = (max_y-y)/cone-> Height(). – comingstorm
Кроме того, чтобы остановить ваши точки от группировки вокруг вершины, вы хотите, чтобы y = (max_y-min_y) * (1-sqrt (RandomNumber())) + min_y – comingstorm
выглядит как вопрос в вашем EDIT был дан ответ. Можете ли вы его очистить или добавить еще один EDIT, чтобы указать, что на него ответили? – brainjam