Y a-t-il un moyen de parcourir X, y des coordonnées Y, y, de sorte qu'elles tombent dans un cercle plutôt qu'un carré?
Par exemple, si j'ai le code suivant: P>
circleRadius = 100; context.drawImage(img_elem, dx, dy, dw, dh);
5 Réponses :
Je ne sais pas ce que vous voulez dire pour JavaScript mais P>
x = r * cos (theta) code> et
y = r * sin (theta) code> sont les points cartésiens pour un cercle. R est le rayon bien sûr et theta est l'angle qui va de 0 à 2 * pi. P>
Je ne sais pas si cela est correct du code JavaScript, mais quelque chose comme ceci:
for (x = -r; x < r; x++) { for (y = -r; x < r; y++) { if ((x * x + y * y) < (r * r)) { // This x/y coordinate is inside the circle. // Use <= if you want to count points _on_ the circle, too. } } }
x ^ 2 + y ^ 2 = r ^ 2 code>, lequel dans votre cas est égal à 100 ^ 2 = 10000 li>
- de cette équation, vous pouvez obtenir ce
y ^ 2 = 10000 - x ^ 2 code>, donc les points avec un x et y = +/- sqrt (10000 - x ^ 2 ) code> Will lonole sur le cercle. Li>
- Choisissez une Y au hasard entre les deux coordonnées trouvées au point 3 li>
- vous êtes défini! li>
EDIT: strong>
Dans JS: P> var radius = 100;
x = Math.random() * 2 * radius - radius;
ylim = Math.sqrt(radius * radius - x * x);
y = Math.random() * 2 * ylim - ylim;
Juste jouer avec elle un peu: jsfiddle.net/yl6bj/1 - Notez que les points ont tendance Pour se grappes sur les extrêmes de la direction X, en raison du fait qu'il y a moins de choix pour la Y dans ces zones. Si vous avez besoin de beaucoup de points, vous devrez peut-être corriger pour que l'introduction d'un biais dans la génération des coordonnées X.
Oui, cela donne une très mauvaise distribution. J'ai ajouté une réponse avec des résultats équidistribués.
Eh bien, la solution fonctionne très bien pour la plupart des situations, il n'y avait pas besoin de bowevote ...
Je l'ai fait dans un violon et ajouté que
Si vous voulez des coordonnées équidistributées, vous ferez mieux d'aller pour
var r = radius*Math.random(1)
Je pose cela comme une solution car cette question était le seul résultat pertinent dans Google.
Ma question / problème était comment ajouter des coordonnées cartésiennes à l'intérieur d'un cercle où exemples: p> solution p> x code> et
y code> ne dépasserait pas
r code>. p>
L'ensemble de (x, y) i> points dans un cercle de rayon r i> est donné par l'inégalité x ^ 2 + y ^ 2 je>