2011-06-12 3 views
6

Je suis en train de tirer quelques cercles et j'étais en quelque sorte d'espérer qu'ils se croiseraient avec quelques points, hélas ...essayant de dessiner des cercles basés sur la distance entre les points

library(maptools) 
library(plotrix) 
xy <- matrix(runif(20, min = -100, max = 100), ncol = 2) 
distance <- spDistsN1(xy, xy[1, ]) 
plot(0,0, xlim = c(-100, 100), ylim = c(-100, 100), type = "n") 
points(data.frame(xy)) 
points(xy[1, 1], xy[1, 2], pch = 16) 
draw.circle(xy[1, 1], xy[1, 2], radius = distance) 

Le code ci-dessus effectue les opérations suivantes :

  • Créez 10 points aléatoires et choisissez un (premier) point qui servirait de "point d'ancrage".
  • Calculez la distance entre l'ancrage et tous les autres points. Ce sera notre "rayon"
  • Dessinez des cercles autour du point d'ancrage en utilisant les distances calculées ci-dessus pour les rayons.
  • Scratch head pourquoi les cercles ne se croisent pas avec les points qui ont été utilisés pour calculer les rayons. circles don't intersect with points used to calculate distance

Répondre

9

C'est le vieux problème de ratio d'aspect qui vient de temps en temps quand les gens sont des ellipses dessin, cercles, etc.

Substituer MASS::eqscplot pour plot (modifier: ou en utilisant asp=1: voir ?par) apparaît pour résoudre le problème.

+0

Ajout de 'asp = 1' à l'appel de la parcelle résolu aussi. –

+0

ajouter 'asp = 1' ne fonctionnera (je pense) que quand (comme dans ce cas) les plages x et y sont identiques,' eqscplot' devrait fonctionner un peu plus généralement. –

+0

La seule différence que je remarque est que si vous utilisez 'asp = 1' le ratio est préservé (l'image est proportionnellement développée/rétrécie) alors que dans' eqscplot' il est déformé si vous redimensionnez la fenêtre. Belle trouvaille, merci! –

Questions connexes