我有一个坐标向量,其中每一行指定一个圆的中心:
x <- runif(5,0,2)
y <- runif(5,0,2)
如您所见,圆心都在正方形 (0,2) 内。
每个圆的半径为 0.2。我想在原始圆的范围内随机移动圆的中心。我想我可以这样做:
radii <- (sample(20,5,replace=TRUE))/100
angles <- sample(360,5,replace=TRUE)
newx <- x + radii*(cos(angles))
newy <- y + radii*(sin(angles))
但是,我意识到这样做我可以从技术上获得落在正方形 (0,2) 之外的圆心。我可以尝试编写一个拒绝newx
和否定newy
值的循环。但是必须为成千上万行执行此操作并担心此速度。是否可以在不诉诸循环的情况下运行这种有条件的坐标偏移?
我的规则集如下:
为每个中心选择一个新的圆心。
新的中心必须落在每个圆的区域内(距离原始中心的半径 0.2 距离)
新中心必须位于原来的方格内。
如果一个中心与圆的边界相交,则应按照反射定律反映(反映所选随机半径距离的剩余长度)