D'autres réponses ont déjà couvert le boîtier du cylindre. Pour le cône, les choses sont un peu plus difficiles. Pour maintenir une densité constante de points, vous devez compenser le changement de rayon.
Pour ce faire, vous pouvez commencer en choisissant une distance entre les points. En vous déplaçant le long de l'axe du cône, vous calculez la circonférence à cette hauteur, puis divisez la circonférence par la distance linéaire entre les points pour obtenir le nombre de points. Vous divisez ensuite 2pi radians (ou 360 degrés, ou peu importe) par le nombre de points pour obtenir la distance angulaire pour ce rayon.
Selon la précision dont vous avez besoin, vous pouvez suivre le reste d'un cercle lorsque vous calculez le cercle suivant. Par exemple, si vous avez deux cercles d'affilée qui ont besoin de xxx.4 points, vous pouvez arrondir chaque point si vous les regardez séparément - mais en les regardant ensemble, vous avez xxx.8 points, alors vous devriez arrondir l'un vers le bas et l'autre vers le haut pour maintenir la densité globale aussi proche que possible de la valeur correcte.
Notez que, bien que ce ne soit pas aussi évident, ce dernier peut également s'appliquer au cylindre - vous aurez généralement quelques arrondis dans la distribution de chaque cercle de points.
On dirait que le ratio passe de 1,5 à 0,5. Vous voulez probablement ratio = (max_y-y)/cône-> Height() à la place. – comingstorm
Aussi, pour empêcher vos points de se regrouper autour de l'apex, vous voulez y = (max_y-min_y) * (1-sqrt (RandomNumber())) + min_y – comingstorm
ressemble à la question dans votre EDIT a été répondu. Pouvez-vous le nettoyer ou ajouter un autre EDIT pour indiquer qu'il a été répondu? – brainjam