如何在R中绘制圆锥曲线一般式的右上(正x,y)象限图形?
在R中绘制圆锥曲线右上象限部分的解决方案
问题分析
你找到的椭圆参数化代码仅适用于椭圆场景(对应二次项矩阵正定的情况),当曲线为双曲线、抛物线或退化圆锥曲线时,二次项矩阵不满足正定条件,chol()分解自然会报错,因此必须采用通用的数值求解方法。
通用实现方案:数值求解+象限筛选
对于一般圆锥曲线方程 (Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0),我们可以通过固定x的取值范围,对每个x求解对应的y值,再筛选出x>0、y>0的有效点,具体实现如下:
1. 定义通用绘制函数
plot_conic_upper_right <- function(A, B, C, D, E, F, x_range = seq(0.01, 10, length.out = 1000)) { # 初始化存储有效点的数据框 valid_points <- data.frame(x = numeric(), y = numeric()) for (x in x_range) { # 整理关于y的方程系数:C*y² + (Bx + E)*y + (A*x² + D*x + F) = 0 y_coeffs <- c( C, B * x + E, A * x^2 + D * x + F ) # 求解y的根 roots <- polyroot(y_coeffs) # 提取虚部可忽略的实根 real_roots <- Re(roots)[abs(Im(roots)) < 1e-8] # 筛选正y值的根(排除0,只保留右上象限) positive_y <- real_roots[real_roots > 1e-8] if (length(positive_y) > 0) { valid_points <- rbind(valid_points, data.frame(x = rep(x, length(positive_y)), y = positive_y)) } } # 绘制右上象限曲线 plot(valid_points$x, valid_points$y, type = "l", xlab = "x", ylab = "y", main = "圆锥曲线右上象限部分") return(valid_points) }
2. 不同类型圆锥曲线测试示例
椭圆测试:以 (x^2/4 + y^2/9 = 1) 为例,对应参数A=1/4, B=0, C=1/9, D=0, E=0, F=-1
plot_conic_upper_right(A=1/4, B=0, C=1/9, D=0, E=0, F=-1)双曲线测试:以 (x^2/4 - y^2/9 = 1) 为例,对应参数A=1/4, B=0, C=-1/9, D=0, E=0, F=-1,需调整x范围避免无实根区域
plot_conic_upper_right(A=1/4, B=0, C=-1/9, D=0, E=0, F=-1, x_range=seq(2.01, 10, length.out=1000))抛物线测试:以 (y^2 = 4x) 为例,对应参数A=0, B=0, C=1, D=-4, E=0, F=0
plot_conic_upper_right(A=0, B=0, C=1, D=-4, E=0, F=0)
注意事项
- 需根据曲线类型调整
x_range:比如双曲线右支的x必须大于实半轴长度,否则无有效实根 - 用
polyroot()求解时,通过判断虚部绝对值小于阈值(如1e-8)提取实根,避免数值误差干扰 - 如果曲线是退化型(如两条直线、单个点或无实轨迹),函数会返回空的有效点数据框
内容的提问来源于stack exchange,提问作者threadofmotion
相关产品推荐
相关产品推荐

