Je n'ai pas de technique applicable en pratique, mais voici ce que l'on peut faire pour générer un point uniformément dans une forme 2d quelconque à partir d'un générateur uniforme dans [0,1], avec un nombre d'essai constant (c'est tout bête mais c'est déjà ça) :
- Identifier les point du plan par deux réels (sans que forcément chaque couple de réels corresponde à un point valide).
- Calculer pour chaque valeur du premier paramètre la densité de probabilité correspondante (généralement longueur d'un chemin dans le plan, éventuellement coupé en plusieurs bouts).
- Tirer le premier paramètre avec cette densité de probabilité (avec le générateur uniforme dans [0,1]).
- Tirer le deuxième paramètre avec la densité de probabilité valant 1 aux endroits valides et 0 aux autres (normalisée).
Cela requiert d'intégrer certains trucs et de connaitre la réciproque d'une fonction. Par exemple, dans le cas du triangle avec deux vecteurs $v_1$ et $v_2$, on peut paramétrer un point du plan par sa décomposition en base $(v_1,v_2)$ et prendre $v_1(1-\sqrt{1-x_1}) + v_2(\sqrt{1-x_1})x_2$, avec $x_1$ et $x_2$ tirés uniformément entre $0$ et $1$. Les transformations qui préservent l'uniformité du tirage sont les transformations affines, donc on pouvait se réduire à tirer un point dans un triangle rectangle. Mais cela est moins bien que ce vers quoi a pointé Lucas-84 pour le triangle (moins simple et moins performant).
Pour un disque, on peut faire quelque chose un peu pareil en coordonnées polaires. Mais dans le cas du disque troué, ça a l'air trop complexe, je ne vois que l'essai-erreur (en maintenant une liste des positions valides (régulières ou aléatoires) ?).
Un problème intermédiaire pourrait être de tirer dans un rectangle des trous en forme de disques aléatoirement. Déjà, on voit que si on fait coup par coup, ce ne sera pas réparti uniformément sur l'ensemble des configurations possibles (il se peut qu'on laisse plus ou moins de place pour la suite).
Une idée pourrait être de générer une configuration imparfaite (trop régulière, ou bien avec des trous qui se chevauchent), et de la modifier pour la faire respecter tous les critères (bouger aléatoirement les cercles, gérer des collisions). Sinon, pour faire un essai-erreur, je ne sais pas si ça vaut le coup de faire quelque chose de plus performant asymptotiquement (avec de la triangulation et des diagrammes de Voronoï)…
Es-tu obligé de générer ça dynamiquement ? C'est pour quoi plus exactement ?
Voici des trucs assez jolis qui ressemblent : http://www.paulbourke.net/texture_colour/randomtile/
edit défi : En s'inspirant de ce qui a été dit plus haut dans ce topic, à partir d'un générateur uniforme de réel dans [0,1], produire un générateur aléatoire entre [0,1] avec pour fonction de répartition √x, et ce sans calculer de racine carrée.