首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用最小二乘法拟合圆

用最小二乘法拟合圆
EN

Stack Overflow用户
提问于 2016-05-18 11:47:55
回答 1查看 729关注 0票数 0

嗨,我想用最小二乘法找一个圆,我写了很多点,但它不是工作,也没有错误信息(我的代码有一个函数,FittingCircle我认为我的函数(FittingCircle)是错的,但我找不到我的错误)

谢谢你的进步

代码语言:javascript
复制
  #include <iostream>
#include <iostream> 
#include <stdlib.h> 
#include <math.h> 

#define A(i,j) A[i + j * 3] 
using namespace std; 
bool FittingCircle(double* A, double* B) 
{ 

    double Sum; 
    double Diagonal[3]; 
    Sum= A(0,0); 
    if (Sum <= 0.f) return false; 
    Diagonal[0]= sqrt(Sum); 
    Sum= A(0,1); 
    A(1,0)= Sum / Diagonal[0]; 
    Sum= A(0,2); 
    A(2,0)= Sum / Diagonal[0]; 
    Sum= A(1,1) - A(1,0) * A(1,0); 
    if (Sum <= 0.f) return false; 
    Diagonal[1]= sqrt(Sum); 
    Sum= A(1,2) - A(1,0) * A(2,0); 
    A(2,1)= Sum / Diagonal[1]; 
    Sum= A(2,2) - A(2,1) * A(2,1) - A(2,0) * A(2,0); 
    if (Sum <= 0.f) return false; 
    Diagonal[2]= sqrt(Sum); 
    Sum= B[0]; 
    B[0]= Sum / Diagonal[0]; 
    Sum= B[1] - A(1,0) * B[0]; 
    B[1]= Sum / Diagonal[1]; 
    Sum= B[2] - A(2,1) * B[1] - A(2,0) * B[0]; 
    B[2]= Sum / Diagonal[2]; 
    Sum= B[2]; 
    B[2]= Sum / Diagonal[2]; 
    Sum= B[1] - A(2,1) * B[2]; 
    B[1]= Sum / Diagonal[1]; 
    Sum= B[0] - A(1,0) * B[1] - A(2,0) * B[2]; 
    B[0]= Sum / Diagonal[0]; 
    return true; 
} 
int main(int argc, char** argv) { 
    double matris[3]={25,30,50}; 
    double matris2[3]={40,25,50}; 

    FittingCircle(matris,matris2); 
    return 0; 
}  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 12:30:54

奇怪的是你的代码不会崩溃。

FittingCircle()的第一个参数是double指针,但用作矩阵(通过#define A(i,j) A[i + j * 3] )。

所以,在A(2,2)中阅读,在A[2 + 2 * 3]中阅读,即A[8]

但是传递给FittingCircle()的第一个参数是

代码语言:javascript
复制
double matris[3]={25,30,50};

当你读A[8]的时候,你读的是matris[8]

非常非常危险和不明确的行为。

对不起,我的英语很差。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37298700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档