我有坐标的载体,其中每一行指定一个圆心:方内圆内选择点周边
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距离)
的新的中心必须位于原始正方形内的区域内。
如果中心符合应当反映为反射定律的圆的边界(反映选择的随机半径距离的剩余长度)
这应该是一种随机游走?如果是这样,你应该首先决定边界发生了什么。如果没有,为什么不只是做一些像'X < - sapply(1:10,function(x)runif(5,0,2))'? – Roland
谢谢@罗兰德是在随机散步下。如果原来的中心,我需要新的中心在半径范围内徘徊。 – user1320502
正如@Roland所说,你应该提供确切的规则集。由于R的向量化本质,你不需要循环。例如,从博客的关于估计pi的讨论中借用:'a < - runif(n,0,1); b < - runif(n,0,1); #使用毕达哥拉斯定理;rads < - sqrt((a^2)+(b^2))',那么选择所有限制内的所有'rads'确实是最快的。 'rads < - rads [rads <0.2]' –