在给定端点的情况下沿椭圆获得n个点。短轴

时间:2013-09-13 05:07:15

标签: r

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

enter image description here

在函数中,我想给出两个顶点的坐标,并指定图像调用短轴的距离(垂直于顶点创建的线。我刷了一些高中数学,但我正在努力创建一个函数,它给我沿椭圆的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)))

}

1 个答案:

答案 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)
}