各行が円の中心を指定する座標のベクトルがあります。
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の距離)
新しいセンターは、元の正方形内にある必要があります。
中心が円の境界に接する場合、反射の法則に従って反射する必要があります(選択したランダム半径距離の残りの長さを反映します)