【2023年】椭圆一般方程(ABCDEF) 转化 椭圆几何参数 (椭圆中心等)(发现很多博客写的有点问题,自己推导了一个)

在这个网站里找了十几篇相关博客,发现很多都有点问题,所以我自己推了一个。

椭圆一般方程Ax^2+Bxy+Cy^2+Dx+Ey+F=0.

大家注意,因为各种椭圆拟合算法的结果通常不一样,所以这里的ABCDEF是需要考虑符号变化和缩放的。那些没有提到这点的博客,数学能力不强的人看了很容易出错。

椭圆中心(所有博客里都没问题,变符号和系数缩放对结果无影响),

x_0=\frac{BE-2CD}{4AC-B^2}

y_0=\frac{BD-2AE}{4AC-B^2}

长轴倾斜角度公式(这个是公认的),

cot(2\theta)=\frac{A-C}{B}

很多博客反手就是一个\theta=\frac{1}{2}arctan(\frac{B}{A-C}),我大意了啊,没有闪,给我的代码蹭了一下,导致我代码错了几个月我才发现。不论是数学上还是matlab代码里,arctan的值域是(\frac{-\pi}{2},\frac{\pi}{2}],1/2arctan的值域是(\frac{-\pi}{4},\frac{\pi}{4}]. 如果我把椭圆逆时针旋转60°,上面这个公式只能干瞪眼。

正确的公式(我自己推导的,这里得到的倾角是[-\frac{\pi}{4},\frac{3\pi}{4}]之间的角。有错误的话欢迎读者指出来)应该是

\theta= \begin{cases} \frac{1}{2}\arctan{\frac{b}{a-c}} & \text{for } \lvert a\rvert<\lvert c \rvert \\ \frac{1}{2}\arctan{\frac{b}{a-c}}+\frac{\pi}{2} & \text{for } \lvert c\rvert <\lvert a \rvert \end{cases}

最经典的环节来了,长短半轴。很多博客写的是

实际上,这个公式是有问题的。

原公式(a,c>0必须成立)应该是

semimajor axis=\sqrt{\frac{2(a x_0^2+cy_0^2+bx_0y_0-f)}{ a+c-\sqrt{(a-c)^2+b^2}}},

semiminor axis=\sqrt{\frac{2(a x_0^2+cy_0^2+bx_0y_0-f)}{ a+c+\sqrt{(a-c)^2+b^2}}}

是这个人推导的,我仔细看了下,没啥问题,但是这个人的角度写的跟其他博客一样。

椭圆一般方程参数求解_kerrity的博客-CSDN博客
 很明显,这个公式里,系数可以缩放,但是不能变符号。这个公式是基于a,c>0的情况下推导出来的,所以想用这个公式,系数a和c必须大于0。如果a和c小于0,那么公式里长短轴的长度会互换。不可能每一个读者都拥有那么深的几何知识, 写成一开始那样,一般人根本看不懂,很容易导致编程错误。

我之前看了十几篇博客,然后直接写代码,中间总是出错,还找不到原因。今天花了很长时间自己推了一遍,跑了很多遍没发现问题,所以拿出来跟大家分享。

如果我公式里有错误,非常欢迎读者指出来,毕竟我代码就是按照这个写的,帮我纠错我很开心。

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值