2016-05-18 6 views
0

こんにちは私は、このコードを書いたポイントが多かった最小四角形のmethhodで円を探したいのですが、それは動作していないし、エラーメッセージも表示されません (私のコードはFittingCircle I私の機能(FittingCircle)が間違っていると思います。しかし、私は最小二乗法で円に合わせる

おかげで)私のエラーを見つけることができませんあなたのadanced

#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; 
} 

答えて

0

あなたのコードがクラッシュしていないことを不思議。 #define A(i,j) A[i + j * 3]経由

FittingCircle()の最初の引数はdoubleポインタであるが、マトリックスとして使用されている(。

ので、A(2,2)に読んで、あなたはA[2 + 2 * 3]で読み、それがA[8]です。

しかし、最初の引数あなたはFittingCircle()に渡すということは、あなたがA[8]に読んだとき、あなたはで読む

double matris[3]={25,30,50}; 

です。

非常に危険で未定義の動作です。

p.s .:申し訳ありませんが、私の悪い英語です。

+0

今度はありがとう私は混乱しています何の代わりにmatrisで書くべきですか?例えば – aspodap

+0

私はこれらを書いたが、私は結果を得ることができない。matris [8] = {25,30,50,40,20,71,43,78 }; double matris2 [8] = {40,25,50,42,35,74,53,24}; FittingCircle(matris、matris2); return 0; – aspodap

+0

@aspodap - アルゴリズムがわからないので、正確に何をする必要があるのか​​分かりません。しかし、あなたが 'A [8]'(つまり 'matris [8]')で読むと、 'mastris' **は少なくとも9位でなければならないので、' double matris [9] = {/ * 9値* /}; ' 'matris2'について、私はあなたが0,1,2の位置でしか読み書きしていないことを知っています。だから' double matris2 [3] = {/ * three valuse * /}; – max66

関連する問題