Рисование непересекающихся кругов - PullRequest
18 голосов
/ 03 января 2011

Я пытаюсь построить два непересекающихся касательных круга, но мне кажется, что я упускаю что-то довольно простое ...

jpeg(file="test.jpg")
diam <- sqrt (2)
plot (c(-1,1), c(1,-1), xlim=c(-5,5), ylim=c(-5,5))

symbols (c(-1,1), c(1,-1), circles=c(diam,diam), add=TRUE, inches=FALSE)
dev.off()

Может кто-нибудь объяснить мне, почему эти круги перекрываются?

alt text

1 Ответ

16 голосов
/ 03 января 2011

Установите соотношение сторон с помощью asp:

diam <- sqrt (2)
plot (c(-1,1), c(1,-1), xlim=c(-3,3), ylim=c(-3,3), asp=1)
symbols (c(-1,1), c(1,-1), circles=c(diam,diam), add=TRUE, inches=FALSE)

Обновлено для добавления Гэвина Симпсона отличные идеи из комментариев и чатов. Мой ответ может быть правильным, но Гэвин приводит очень полезные причины , почему asp=1 работает и почему это не поведение по умолчанию. Большое ему спасибо.

Настройки графического устройства по умолчанию пытаются отобразить данные, не предполагая ничего о масштабе отношений между переменными. Чтобы напрямую цитировать Гэвина:

Причина asp = 1 не в по умолчанию asp = 1 не делает смысл данных, которые не разделяют общая единица измерения, такая как рост против веса. Зачем менять 1 м в высоту представить в виде изменение веса на 1 кг?

и

В результате расстояние вдоль оси x не имеет никакого отношения к тем, кто на ось у Таким образом, то, что построено, является трансформация реальных кругов - они действительно круги, только что переведенные потому что система координат вы заговор их не подходит.

Чтобы проиллюстрировать точки Гевина, можно нарисовать круги на устройстве по умолчанию (не на устройстве jpeg), а затем изменить размеры устройства. Вы можете сделать круги выглядят странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...