You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于给定参数求椭圆与相切圆的切点x坐标

基于给定参数求椭圆与相切圆的切点x坐标

先理清楚问题里的图形关系:未旋转的椭圆最低点在原点(0,0),x轴方向半轴为a,y轴方向半轴为b,所以椭圆的中心在(0, b),对应的方程是:

x²/a² + (y - b)²/b² = 1

(题目说的右下四分之一椭圆,对应x>0、y∈[0,b]的部分,也就是从原点(0,0)到点(a,b)的这段曲线)

半径为r的小圆和这段椭圆相切,且圆的顶部y坐标为h,所以圆心的y坐标是h - r,设圆心x坐标为x_c,圆的方程为:

(x - x_c)² + (y - (h - r))² = r²

要找到切点的x坐标,我们需要利用两个核心相切条件:切点同时在椭圆和圆上切点处两者的切线斜率完全相等。下面是具体的推导和求解步骤:

步骤1:建立关联方程

首先,针对右下部分椭圆,我们可以把y用x表示出来:

y = b - b√(1 - x²/a²)

为了简化后续计算,令s = √(1 - x²/a²),则x = a√(1 - s²)y = b(1 - s),其中s ∈ [0,1](对应x从0到a,y从b到0的范围)。

再定义辅助变量D = b + r - h(用来简化表达式),结合斜率相等的条件,最终可以推导出关于s的四次方程:

b²(a² - b²)s⁴ - 2bD(a² - b²)s³ + [b⁴ + D²(a² - b²) - a²r²]s² - 2b³Ds + D²b² = 0

步骤2:数值求解四次方程

这个四次方程没有简洁的解析解,实际应用中推荐用牛顿迭代法来数值求解,具体步骤如下:

  1. 定义函数f(s)为上述四次方程的左边,同时求它的导函数f’(s)
    f(s) = b²(a² - b²)s⁴ - 2bD(a² - b²)s³ + [b⁴ + D²(a² - b²) - a²r²]s² - 2b³Ds + D²b²
    f’(s) = 4b²(a² - b²)s³ - 6bD(a² - b²)s² + 2[b⁴ + D²(a² - b²) - a²r²]s - 2b³D
    
  2. 选择一个初始迭代值(比如s₀=0.5,如果能预判切点大致位置,初始值可以更精准),然后重复迭代计算:
    sₙ₊₁ = sₙ - f(sₙ)/f’(sₙ)
    
  3. 直到相邻两次迭代的s值差小于设定的精度(比如1e-8),就得到了收敛的s值。

步骤3:计算切点的x坐标

得到收敛的s后,代入下式就能算出切点的x坐标:

x = a√(1 - s²)

示例验证

举个实际例子:设a=2b=1r=0.5h=1.2,则D=1+0.5-1.2=0.3,代入四次方程后通过牛顿迭代得到s≈0.75,最终x≈2*√(1-0.75²)=1.32,和预期的相切位置吻合。

备注:内容来源于stack exchange,提问作者eirirlar

火山引擎 最新活动