最小二乘椭圆拟合ovalfit m sci 代码

 //m sci 代码


function [xc,yc,Ra,Rb,theta,res] = ovalfit(x,y)

//椭圆方程:x^2+res(1) xy+res(2) y^2+res(3) x+res(4) y+res(5)=0;

//长半轴Ra,短半轴Rb,中心(xc1,yc1); 长轴与x轴夹角theta.


N=length(x);
g=zeros(5,5);
b=zeros(5);
g(1,1)=sum(x.*x.*y.*y);
g(1,2)=sum(x.*y.*y.*y);
g(1,3)=sum(x.*x.*y);
g(1,4)=sum(x.*y.*y);
g(1,5)=sum(x.*y);

g(2,1)=sum(x.*y.*y.*y);
g(2,2)=sum(y.*y.*y.*y);
g(2,3)=sum(x.*y.*y);
g(2,4)=sum(y.*y.*y);
g(2,5)=sum(y.*y);

g(3,1)=sum(x.*x.*y);
g(3,2)=sum(x.*y.*y);
g(3,3)=sum(x.*x);
g(3,4)=sum(x.*y);
g(3,5)=sum(x);

g(4,1)=sum(x.*y.*y);
g(4,2)=sum(y.*y.*y);
g(4.3)=sum(x.*y);
g(4,4)=sum(y.*y);
g(4,5)=sum(y);

g(5,1)=sum(x.*y);
g(5,2)=sum(y.*y);
g(5,3)=sum(x);
g(5,4)=sum(y);
g(5,5)=N;

b(1)=-sum(x.*x.*x.*y);
b(2)=-sum(x.*x.*y.*y);
b(3)=-sum(x.*x.*x);
b(4)=-sum(x.*x.*y);
b(5)=-sum(x.*x);

res=zeros(5);
res=b'/g;
A=res(1);
B=res(2);
C=res(3);
D=res(4);
E=res(5);

Ra=sqrt(2*(A*C*D-B*C*C-D*D+4*B*E)/(A*A-4*B)/(B-sqrt(A*A+(1-B)*(1-B))+1));
Rb=sqrt(2*(A*C*D-B*C*C-D*D+4*B*E)/(A*A-4*B)/(B+sqrt(A*A+(1-B)*(1-B))+1));
theta=atan(sqrt((ra*ra-rb*rb*B)/(ra*ra*B-rb*rb)));
xc=(2*B*C-A*D)/(A*A-4*B);
yc=(2*B*D-A*D)/(A*A-4*B);

endfunction

 

调用示例:

N=6;
t=0.001:1/N:1.0;
PI=3.14159265358979;
x=0.2*sin(t*2*PI);
y=1.7*cos(t*2*PI);

 

[xc1,yc1,Ra,Rb,theta,res]=ovalfit(x,y)

 

椭圆方程:x^2+res(1) xy+res(2) y^2+res(3) x+res(4) y+res(5)=0;

长半轴Ra,短半轴Rb,中心(xc1,yc1); 长轴与x轴夹角theta.

 

转载于:https://www.cnblogs.com/JkReader/p/4357024.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解决c++中崩溃问题,捕捉程序中种种异常,产生dmp信息以方便修改, 适用windows平台。 1 CrashHooker 为异常捕捉模块 2 CrashRptTest 为模拟各种异常模块 【分为主线程和其他线程】 (1)seh (2)C++ terminate() call. (3)C++ unexpected() call. (4)C++ pure virtual function call (VS .NET and later). (5)C++ new operator fault (VS .NET and later). (6)Buffer overrun error (VS .NET only). (7)Invalid parameter exception (VS 2005 and later). (8)C++ SIGABRT signal (abort). (9)C++ SIGFPE signal (flotating point exception). (10)C++ SIGILL signal (illegal instruction). (11)C++ SIGINT signal (CTRL+C). (12)C++ SIGSEGV signal (invalid storage access). (13)C++ SIGTERM signal (termination request). (14)c++ vectored exception 3 CrashRptTest 模块设置异常捕获 (1)在主进程入口处定义CrAutoInstallHelper对象,并设置起启动参数。 注意:在定义CrAutoInstallHelper前调用SetErrorMode(SEM_NOGPFAULTERRORBOX), 定义CrAutoInstallHelper后调用DisableSetUnhandledExceptionFilter()接口, 这样可以在系统前捕获到异常。 (2)在线程入口处定义CrThreadAutoInstallHelper对象。 4 dmprpt 为信息和dmp收集模块,需要web配合可以参考php模块 (1) file.php 用于接收文件 【本机测试使用】 (2) test.php 用于保存参数 【本机测试使用】 5 进程间通信使用了共享内存技术,进行参数的传递, 参考CShareMemParas类,参数收集使用了CDmpInfoGather类,适合 社区项目,其他项目请酌情修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值