2017-02-07 6 views
2

Rパッケージの機能ellipsoidhullについての質問がありますか?私はそれを使って、2次元の点列を含む最小の楕円を見つけます。例えばRの楕円体についての明確化

library(cluster) 
d <- matrix(c(1,2,3,1,3,2),ncol=2) 
e <- ellipsoidhull(d) 

関数は楕円と共分散行列の中心を含む構造を返す、楕円OKを計算します。

summary(e) 
## 'ellipsoid' in 2 dimensions: 
## center = (2 2); squared ave.radius d^2 = 2 
## and shape matrix = 
##  [,1] [,2] 
## [1,] 0.66667 0.33333 
## [2,] 0.33333 0.66667 
##  hence, area = 3.6276 

質問

a)はどのように私は与えられた点が楕円に属しているかどうかをチェックするためにこのデータを使用できますか?

b)このデータを使用して、特定の点から楕円までの距離を計算するにはどうすればよいですか?

答えて

1

私たちは次のことを試すことができます:

library(cluster) 
d <- matrix(c(1,2,3,1,3,2),ncol=2) 
e <- ellipsoidhull(d) 
eg <- eigen(e$cov) 
axes <- sqrt(eg$values) 
angle <- atan(eg$vectors[1,1]/eg$vectors[2,1]) # angle of major axis with x axis 

# check if the point (xp, yp) belongs to the ellipse with parameters a,b,... with tolerance eps 
belongs.to <- function (xp, yp, a, b, x0, y0, alpha, eps=1e-3) { 
    return(abs((cos(alpha)*(xp-x0)+sin(alpha)*(yp-y0))^2/a^2+(sin(alpha)*(xp-x0)-cos(alpha)*(yp-y0))^2/b^2 - 1) <= eps) 
} 

# check if the point (xp, yp) is inside the ellipse with parameters a,b,... 
is.inside <- function (xp, yp, a, b, x0, y0, alpha) { 
    return((cos(alpha)*(xp-x0)+sin(alpha)*(yp-y0))^2/a^2+(sin(alpha)*(xp-x0)-cos(alpha)*(yp-y0))^2/b^2 <= 1) 
} 

# plot ellipse 
plot(e$loc, xlim=c(0,4), ylim=c(0,4), main = "ellipsoidhull", xlab='x', ylab='y') 
lines(predict(e), col="blue") 
points(rbind(e$loc), col = "red", cex = 3, pch = 13) 

x0 <- e$loc[1] # centroid locations 
y0 <- e$loc[2] 
a <- sqrt(e$d2) * axes[1] # major axis length 
b <- sqrt(e$d2) * axes[2] # minor axis length 

alpha <- angle 
xp <- 3 
yp <- 2.9 
is.inside(xp, yp, a, b, x0, y0, alpha) 
# [1] TRUE 
points(xp, yp, pch=19, col='green') 
xp <- 3 
yp <- 3.1 
is.inside(xp, yp, a, b, x0, y0, alpha) 
# [1] FALSE 
points(xp, yp, pch=19, col='blue') 
xp <- 3 
yp <- 3 
belongs.to(xp, yp, a, b, x0, y0, alpha) 
# [1] TRUE 
points(xp, yp, pch=19, col='pink') 


# distance of a point from the center of the ellipse 
sqrt((xp-x0)^2+(yp-y0)^2) 

enter image description here

+1

グレート!ありがとう。あなたは私の質問に私を助けただけでなく、楕円の共分散表現と私が理解している表現との関係も明確にしました。ありがとう。私は自分自身で距離の問題を解決できると思う。 – user2345448