7
votes

Utilisez X, Y coordonnées pour tracer des points dans un cercle

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);


1 commentaires

L'ensemble de (x, y) points dans un cercle de rayon r est donné par l'inégalité x ^ 2 + y ^ 2


5 Réponses :


2
votes

Je ne sais pas ce que vous voulez dire pour JavaScript mais

x = r * cos (theta) et y = r * sin (theta) 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.


0 commentaires

0
votes

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.
    }          
  }
}


0 commentaires

6
votes
  1. Choisissez un X au hasard entre -100 et 100 li>
  2. Un cercle est défini par x ^ 2 + y ^ 2 = r ^ 2 code>, lequel dans votre cas est égal à 100 ^ 2 = 10000 li>
  3. 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>
  4. Choisissez une Y au hasard entre les deux coordonnées trouvées au point 3 li>
  5. 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;
    


4 commentaires

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



2
votes

Si vous voulez des coordonnées équidistributées, vous ferez mieux d'aller pour

var r = radius*Math.random(1)


0 commentaires

1
votes

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ù x et y ne dépasserait pas r .

exemples:

  1. Terrain: (45,75) Dans un cercle avec un rayon de 100 (cela tomberait normalement à l'intérieur du cercle, mais pas la position correcte)
  2. Terrain: (100.100) à l'intérieur d'un cercle avec un rayon de 100 (cela tomberait normalement à l'extérieur du cercle

    solution xxx


0 commentaires