关于椭圆的一些研究

点到椭圆的距离

平面内任意一点P到椭圆E的最短与最长距离,其实质是以点P为圆心,与E相切的两个圆的半径。具体的求解过程利用如下事实,假设椭圆与圆的切点为Q,构造直线PQ,PQ与Q点在椭圆的切向量垂直,再联立椭圆方程,便可求出直线PQ与椭圆的交点。通过化简最后得到一个一元四次方程,所以其精确解是求一元四次方程的根,可以分解为如下形式去求解
x 4 + a x 3 + b x 2 + c x + d = ( x 2 + p 1 x + q 1 ) ( x 2 + p 2 x + q 2 ) x^4+ax^3+bx^2+cx+d=(x^2+p_1x+q_1)(x^2+p_2x+q_2) x4+ax3+bx2+cx+d=(x2+p1x+q1)(x2+p2x+q2)
P在椭圆内
P在椭圆外
关于最短距离,也可以用其他方法去近似,毕竟求解一元四次方程的代价是昂贵的,大概有两个办法去近似,这在halcon中的dist_ellipse_contour_xld 算子1也有提到,一种是使用PF1+PF2-2a代替;一种是使用点P与点Q的距离代替,Q为PF1、PF2的角平分线与椭圆交点。其中F1、F2是椭圆的两个焦点。此外还有一种办法,就是Sampson Error,定义如下
Sampson Error

椭圆周长

椭圆周长公式如下,实际上是一个定积分计算,不会计算的可以使用boost库, 除了能够得到椭圆周长的精确值,定积分的计算也可以解决椭圆等分问题,等分之后,椭圆每一段的弧长都相等,这在建立椭圆卡尺时很有用。
C = 4 ∫ 0 π 2 a 2 s i n 2 ( θ ) + b 2 c o s 2 ( θ ) d θ = 4 ∫ 0 π 2 a 2 ( 1 − c o s 2 ( θ ) ) + b 2 c o s 2 ( θ ) d θ = 4 ∫ 0 π 2 1 − e 2 c o s 2 ( θ ) d θ = 4 ∫ 0 π 2 1 − e 2 s i n 2 ( θ ) d θ \begin{align} C&=4\int_{0}^{\frac{\pi}{2}}\sqrt{a^2sin^{2}(\theta)+b^2cos^{2}(\theta)}d\theta\\ &=4\int_{0}^{\frac{\pi}{2}}\sqrt{a^2(1-cos^{2}(\theta))+b^2cos^{2}(\theta)}d\theta\\ &=4\int_{0}^{\frac{\pi}{2}}\sqrt{1-e^2cos^{2}(\theta)}d\theta \\ &=4\int_{0}^{\frac{\pi}{2}}\sqrt{1-e^2sin^{2}(\theta)}d\theta\end{align} C=402πa2sin2(θ)+b2cos2(θ) dθ=402πa2(1cos2(θ))+b2cos2(θ) dθ=402π1e2cos2(θ) dθ=402π1e2sin2(θ) dθ
等分椭圆

椭圆拟合

opencv里的椭圆拟合函数并不是很好使,参照文献2实现会好很多,该方法是数值稳定的,对于只占椭圆很小一段比例的圆弧效果很好。
椭圆拟合matlab实现
椭圆拟合


  1. https://www.mvtec.com/doc/halcon/12/en/dist_ellipse_contour_xld.html ↩︎

  2. https://www.semanticscholar.org/paper/Numerically-Stable-Direct-Least-Squares-Fitting-of-oy-Flusser/9a8607575ba9c6016e9f3db5e52f5ed4d14d5dfd ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值