我试图在两个端点之间绘制一个椭圆,或者这个图片称为顶点:
在函数中,我想给出两个顶点的坐标,并指定图像调用短轴的距离(垂直于顶点创建的线。我刷了一些高中数学,但我正在努力创建一个函数,它给我沿椭圆的n个值。我看过椭圆包,但这看起来想要一个相关性,但是,我希望函数返回像ellipse
那样的值。
我没有坚持任何特定的方法,但想在下面的尝试函数中指定参数。我对ellipse和R的搜索产生了许多命中,但未给出我试图使用的参数。
elip <- function(vert1 = c(.25, .45), vert2 = c(.5, .35), minoraxis = .1, n =150) {
majoraxis <- sqrt(((vert2[1] - vert1[1])^2) + ((vert2[2] - vert1[2])^2))
center <- c((vert2[1] + vert1[1])/2, (vert2[2] + vert1[2])/2)
half_ma <- minoraxis/2
focci_dist <- sqrt(abs((majoraxis ^2) - (half_ma^2)))
}
答案 0 :(得分:6)
它采用长轴上的两个顶点和短轴的半长度(如b)以及点数。
halfEllipse <- function(v1, v2, b, n = 100){
x1 <- v1[1]
y1 <- v1[2]
x2 <- v2[1]
y2 <- v2[2]
xc <- mean(c(x1,x2))
yc <- mean(c(y1,y2))
A <- sqrt((xc-x1)^2 + (yc-y1)^2)
myangle <- atan((yc-y1)/(xc-x1))
# Construct half ellipse with desired
# major and minor axis length
ts <- seq(0, pi, length.out = n)
X <- A*cos(ts)
Y <- b*sin(ts)
# Rotate to get to desired angle
Xp <- X*cos(myangle) - Y*sin(myangle)
Yp <- X*sin(myangle) + Y*cos(myangle)
# Shift back to desired center
Xp <- Xp + xc
Yp <- Yp + yc
cbind(Xp,Yp)
}