2017-02-07 108 views
2

我想知道是否有人能夠幫助我在R包cluster中的功能ellipsoidhull的一些問題。我正在使用它來查找包含一系列2d點的最小橢圓。例如關於橢球體的澄清在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 

問題

一)如何使用這些數據來檢查,如果給定的點屬於橢圓形?

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

太好了!謝謝。你不僅幫助我解決了我的問題,而且還明確了橢圓的de協方差表示與我理解的表示之間的關係。謝謝。我想我可以自己解決距離問題。 – user2345448