Для однородных точек на окружности или конусе радиуса 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 (значение) - это то, что обеспечивает равномерность плотности ваших случайных точек. Как уже упоминалось в других вопросах, для этого вам нужно треугольное распределение ; взятие sqrt () превращает равномерное распределение на [0,1) в треугольное.
Для цилиндра вам не нужен sqrt (); изогнутая часть:
cylinder_point= point3d( R*cos(angle), R*sin(angle), H*value )