6

我正在尝试在两个端点之间绘制一个椭圆,或者这张图片称为顶点:

在此处输入图像描述

在函数中,我想给出两个顶点的坐标并指定图像称为短轴的距离(垂直于由顶点创建的线。我忽略了一些高中数学,但正在努力创建一个函数给我沿椭圆的 n 个值。我查看了 ellipse 包,但这似乎需要相关性,但是,我希望函数像返回值一样返回值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)))

}
4

1 回答 1

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)
}
于 2013-09-13T05:48:13.730 回答