gpt4 book ai didi

r - 在椭圆协方差图上获得椭圆的顶点(由 `car::ellipse`创建)

转载 作者:行者123 更新时间:2023-12-04 13:37:13 25 4
gpt4 key购买 nike

通过遵循this post,可以绘制具有给定形状矩阵(A)的椭圆:

library(car)
A <- matrix(c(20.43, -8.59,-8.59, 24.03), nrow = 2)
ellipse(c(-0.05, 0.09), shape=A, radius=1.44, col="red", lty=2, asp = 1)

现在如何获得该椭圆的主/副(长/副轴和椭圆的相交点对)顶点?

最佳答案

出于实际目的,@ Tensibai的答案可能足够好。只需对segments参数使用足够大的值,以使这些点能很好地逼近真实顶点。

如果您想要更严格一些的东西,则可以解决沿椭圆的位置,该位置最大化/最小化到中心的距离(以角度为参数)。由于存在形状矩阵,这比仅获取angle={0, pi/2, pi, 3pi/2}更复杂。但这并不太困难:

# location along the ellipse
# linear algebra lifted from the code for ellipse()
ellipse.loc <- function(theta, center, shape, radius)
{
vert <- cbind(cos(theta), sin(theta))
Q <- chol(shape, pivot=TRUE)
ord <- order(attr(Q, "pivot"))
t(center + radius*t(vert %*% Q[, ord]))
}

# distance from this location on the ellipse to the center
ellipse.rad <- function(theta, center, shape, radius)
{
loc <- ellipse.loc(theta, center, shape, radius)
(loc[,1] - center[1])^2 + (loc[,2] - center[2])^2
}

# ellipse parameters
center <- c(-0.05, 0.09)
A <- matrix(c(20.43, -8.59, -8.59, 24.03), nrow=2)
radius <- 1.44

# solve for the maximum distance in one hemisphere (hemi-ellipse?)
t1 <- optimize(ellipse.rad, c(0, pi - 1e-5), center=center, shape=A, radius=radius, maximum=TRUE)$m
l1 <- ellipse.loc(t1, center, A, radius)

# solve for the minimum distance
t2 <- optimize(ellipse.rad, c(0, pi - 1e-5), center=center, shape=A, radius=radius)$m
l2 <- ellipse.loc(t2, center, A, radius)

# other points obtained by symmetry
t3 <- pi + t1
l3 <- ellipse.loc(t3, center, A, radius)

t4 <- pi + t2
l4 <- ellipse.loc(t4, center, A, radius)

# plot everything
MASS::eqscplot(center[1], center[2], xlim=c(-7, 7), ylim=c(-7, 7), xlab="", ylab="")
ellipse(center, A, radius, col="red", lty=2)
points(rbind(l1, l2, l3, l4), cex=2, col="blue", lwd=2)

enter image description here

关于r - 在椭圆协方差图上获得椭圆的顶点(由 `car::ellipse`创建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40300217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com