gpt4 book ai didi

r - 给定R中的一般方程,如何绘制椭圆?

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

椭圆一般方程:

a * x ^ 2 + b * y ^ 2 + c * x * y + d * x + e * y + f = 0

enter image description here

最佳答案

我们可以从parametric开始ellipse 的方程(以下来自维基百科),我们需要5个参数:中心(xc, yc)(h,k)在另一种表示法中,轴长度 a, b以及 x 轴和长轴之间的角度 phitau在另一种表示法中。

enter image description here

xc <- 1 # center x_c or h
yc <- 2 # y_c or k
a <- 5 # major axis length
b <- 2 # minor axis length
phi <- pi/3 # angle of major axis with x axis phi or tau

t <- seq(0, 2*pi, 0.01)
x <- xc + a*cos(t)*cos(phi) - b*sin(t)*sin(phi)
y <- yc + a*cos(t)*cos(phi) + b*sin(t)*cos(phi)
plot(x,y,pch=19, col='blue')

enter image description here

现在,如果我们想从 cartesian conic 开始方程,这是一个两步过程。
  • 转换 cartesian方程到 polar ( parametric ), 形式我们可以使用以下方程首先使用下图中的 5 个方程获得 5 个参数(取自 http://www.cs.cornell.edu/cv/OtherPdf/Ellipse.pdf ,详细数学可以在那里找到)。
  • 使用获得的参数绘制椭圆,如上所示。

  • enter image description here

    对于步骤 (1),我们可以使用以下代码(当我们知道 A,B,C,D,E,F 时):
    M0 <- matrix(c(F,D/2,E/2, D/2, A, B/2, E/2, B/2, C), nrow=3, byrow=TRUE)
    M <- matrix(c(A,B/2,B/2,C), nrow=2)
    lambda <- eigen(M)$values
    abs(lambda - A)
    abs(lambda - C)

    # assuming abs(lambda[1] - A) < abs(lambda[1] - C), if not, swap lambda[1] and lambda[2] in the following equations:

    a <- sqrt(-det(M0)/(det(M)*lambda[1]))
    b <- sqrt(-det(M0)/(det(M)*lambda[2]))
    xc <- (B*E-2*C*D)/(4*A*C-B^2)
    yc <- (B*D-2*A*E)/(4*A*C-B^2)
    phi <- pi/2 - atan((A-C)/B)*2

    对于步骤 (2),使用以下代码:
    t <- seq(0, 2*pi, 0.01) 
    x <- xc + a*cos(t)*cos(phi) - b*sin(t)*sin(phi)
    y <- yc + a*cos(t)*cos(phi) + b*sin(t)*cos(phi)
    plot(x,y,pch=19, col='blue')

    关于r - 给定R中的一般方程,如何绘制椭圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41820683/

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