Para los puntos uniformes sobre un círculo o un cono de radio R y altura/elevación 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)
Tenga en cuenta que si quieres una base en su cono, tendrá que hacerlo por separado de la forma curva. Para asegurarse de que la densidad de puntos sea la misma para las diferentes partes, una manera fácil es calcular las áreas de las partes y generar un número proporcional de puntos para cada parte.
El sqrt (valor) es lo que asegura que la densidad de sus puntos aleatorios sea uniforme. Como han mencionado otras preguntas, desea una distribución triangular para esto; tomando sqrt() convierte la distribución uniforme en [0,1) en una triangular.
Para un cilindro no desea el sqrt(); la parte curva es:
cylinder_point= point3d(R*cos(angle), R*sin(angle), H*value)
Parece que la proporción va de 1.5 a 0.5. Probablemente quieras ratio = (max_y-y)/cone-> Height() en su lugar. – comingstorm
Además, para evitar que sus puntos se agrupen alrededor del vértice, usted quiere y = (max_y-min_y) * (1-sqrt (RandomNumber())) + min_y – comingstorm
parece que la pregunta en su EDIT ha sido respondida. ¿Puedes limpiarlo o agregar otro EDIT para indicar que ha sido respondido? – brainjam