特定の粒子の成長パターンを分析しており、その点パターンを、同じ強度 (単位面積あたりの点数が同じ) の完全な六方格子のパターンと比較したいと考えています。これを行う関数を作成しましたが、固有のエラーがあり、どこから発生したのかわかりません。基本的に、関数がコースを実行した後、正確な数の粒子を持たない完全な六角形の点パターンが生成されます。通常、約 1 ~ 4% ずれています。次のコードをコピーして R に貼り付けると、次のことがわかります。この特定の例では、誤差は 11.25% です。元の点パターンには 71 個の粒子があり、生成された完全な六角形の点パターンには 80 個の粒子があります。これは非常に奇妙に思えます。
以下は、六方格子を生成するために私が書いた関数のコードです。
library(spatstat)
data(swedishpines)
swedishpines.df <- as.data.frame(swedishpines)
MaxXValue <- max(swedishpines.df[1])
MaxYValue <- max(swedishpines.df[2])
#The above two lines dictate the window size
NumberOfParticles <- nrow(swedishpines.df[1])
#Number of entries = number of particles
#calculate delta
intensity <- NumberOfParticles / (MaxXValue*MaxYValue)
#Intensity ---> particles / unit^2
#Area = ( sqrt(3) / 2 ) * delta^2
#Now - in substituting intensity in for area, it is key to recognize
#that there are 3 particles associated with each hexagonal tile.
#This is because each particle on the border of the tile is really 1/3 of a
#a particle due to it being associated with 3 different hexagonal tiles.
#Since intensity = 3 Particles / Area,
delta <- sqrt(2/(intensity*(sqrt(3))))
#This is derived from the equation for the area of a regular hexagon.
#xcoords and ycoords represent the x and y coordintes of all of the generated points. The 'x' and 'y' are temporary holders for the x and y coordinates of a single horizontal line of points (they are appended to xcoords and ycoords at the end of each while loop).
xcoords <- c()
ycoords <- c()
#The following large while loop calculates the coordinates of the first set of points that are vertically aligned with one another. (alternating horizontal lines of particles) This is shown in the image below.
y_shift <- 0
while (y_shift < MaxYValue) {
x <- c(0)
x_shift <- 0 + delta
count <- 0
while (x_shift < MaxXValue) {
x <- append(x, x_shift)
x_shift <- x_shift + delta
count <- count + 1
}
y <- c(y_shift)
for (i in seq(0,(count-1))) {
y <- append(y, y_shift)
}
y_shift <- y_shift + sqrt(3)*delta
xcoords <- append(xcoords,x)
ycoords <- append(ycoords,y)
}
#The following large while loop calculates the coordinates of the second set of points that are vertically aligned with one another. This is shown in the image below.
y_shift <- 0 + (delta*(sqrt(3)))/2
while (y_shift < MaxYValue) {
x <- c(0 + (1/2)*delta)
x_shift <- 0 + (1/2)*delta + delta
count <- 0
while (x_shift < MaxXValue) {
x <- append(x, x_shift)
x_shift <- x_shift + delta
count <- count + 1
}
y <- c(y_shift)
for (i in seq(0,(count-1))) {
y <- append(y, y_shift)
}
y_shift <- y_shift + sqrt(3)*delta
xcoords <- append(xcoords,x)
ycoords <- append(ycoords,y)
}
hexplot <- ppp(xcoords, ycoords, window=owin(c(0,MaxXValue),c(0,MaxYValue)))
現在、私は R に比較的慣れていないため、このエラーの原因となったコードのどこかで構文エラーが発生している可能性があります。あるいは、このプロセスの思考回路に何らかの誤りがあるのかもしれません。しかし、私の結果は私が試みてきたものに非常に近いので、その可能性は低いと思います (ほとんどの場合、わずか 1 ~ 4% の誤差で十分です)。
要約すると、私が助けてほしいのは、ポイント パターンを取得し、同じウィンドウ サイズの別のポイント パターンを同じ数の粒子で作成する方法ですが、完全に六角形のポイント パターンです。
ご不明な点がございましたら、お気軽にお問い合わせください。
ありがとう!