Comme le montre l'image ci-dessous, j'aimerais trouver une position aléatoire dans la zone bleue (B) et non dans la zone rouge (A). Comment puis-je atteindre cet objectif? A et B sont actuellement 2 collisionneurs. J'ai juste besoin d'une position dans B mais il ne peut pas être dans A. Merci d'avance.Unité, obtenir une position aléatoire dans une zone?
Répondre
Une solution est la même que Nico Schertler a mentionné dans le commentaire
- Obtenir les coordonnées de chaque sommets des deux le rectangle.
- prendre la coordonnée x de min x de triangle bleu et la coordonnée min de triangle rouge comme une paire. (XminBlue, xminRed). Prenez la coordonnée x de max x du triangle rouge et la coordonnée max du triangle bleu comme une paire. (XmaxRed, xmaxBlue)
- Faites la même chose pour la coordonnée Y et obtenez (yminBlue, yminRed). (YmaxRed, ymaxBlue)
- Utilisez
if(Random.value < GetRatio(xminBlue-xminRed),xmaxRed-xmaxBlue){ x= Random.Range(xminBlue,xminRed); }else { x= Random.Range(xmaxRed,xmaxBlue); } float GetRatio (float distance_1,float distance_2){ return distance_1/distance_1 + distance_2;
} - Faites la même chose que 4 pour obtenir la valeur de y
Dans cette solution u ne avez pas besoin de rejeter toute coordonnée
Merci beaucoup pour cette solution, c'est juste ce dont j'avais besoin et très simple à comprendre. – programmerdude619
Je l'ai testé et ça marche bien, juste une question, pourquoi le <0.5f? – programmerdude619
désolé n'utilisez pas random.value <0.5f au lieu d'utiliser le code ci-dessus j'ai édité. Cela vous aidera à obtenir la valeur avec une probabilité égale tout était dans la région bleue – sagar
Trouver une position dans B et s'il est également dans A, essayez à nouveau (c.-à-d. Échantillonnage de rejet). –