2016-10-14 2 views
0

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?

A and B areas

+1

Trouver une position dans B et s'il est également dans A, essayez à nouveau (c.-à-d. Échantillonnage de rejet). –

Répondre

1

Une solution est la même que Nico Schertler a mentionné dans le commentaire

  1. Obtenir les coordonnées de chaque sommets des deux le rectangle.
  2. 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)
  3. Faites la même chose pour la coordonnée Y et obtenez (yminBlue, yminRed). (YmaxRed, ymaxBlue)
  4. 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;
    }
    enter image description here
  5. 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

+0

Merci beaucoup pour cette solution, c'est juste ce dont j'avais besoin et très simple à comprendre. – programmerdude619

+0

Je l'ai testé et ça marche bien, juste une question, pourquoi le <0.5f? – programmerdude619

+0

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