41 aCircle( 0 ) = aX(2)*aX(2)*(aY(0) - aY(1))
42 + (aX(0)*aX(0) + (aY(0) - aY(1))*(aY(0) - aY(2)))*(aY(1) - aY(2))
43 + aX(1)*aX(1)*(aY(2) + aY(0) );
46 aCircle( 1 ) = -(aX(1)*aX(1)*aX(2)) + aX(0)*aX(0)*(-aX(1) + aX(2))
47 + aX(2)*(aY(0) - aY(1))*(aY(0) + aY(1)) + aX(0)*(aX(1)*aX(1)
48 - aX(2)*aX(2) + aY(1)*aY(1) - aY(2)*aY(2)) + aX(1)
49 *(aX(2)*aX(2) - aY(0)*aY(0) + aY(2)*aY(2));
51 real tDiv = 2.0*(aX(2)*(aY(0) - aY(1)) + aX(0)*(aY(1)
52 - aY(2)) + aX(1)*(aY(2) + aY(0)));
58 aCircle( 2 ) = ( std::sqrt(
59 std::pow( aX( 0 ) - aCircle( 0 ), 2 )
60 + std::pow( aY( 0 ) - aCircle( 1 ), 2 ) )
62 std::pow( aX( 1 ) - aCircle( 0 ), 2 )
63 + std::pow( aY( 1 ) - aCircle( 1 ), 2 ) )
65 std::pow( aX( 2 ) - aCircle( 0 ), 2 )
66 + std::pow( aY( 2 ) - aCircle( 1 ), 2 ) ) ) / 3.0;
83 const real tEpsilon = 1e-9;
85 while( tResidual > tEpsilon )
87 tJ( 0, 0 ) = aCircle( 0 ) - aX( 0 );
88 tJ( 1, 0 ) = aCircle( 0 ) - aX( 1 );
89 tJ( 2, 0 ) = aCircle( 0 ) - aX( 2 );
90 tJ( 0, 1 ) = aCircle( 1 ) - aY( 0 );
91 tJ( 1, 1 ) = aCircle( 1 ) - aY( 1 );
92 tJ( 2, 1 ) = aCircle( 1 ) - aY( 2 );
93 tJ( 0, 2 ) = -aCircle( 2 );
94 tJ( 1, 2 ) = -aCircle( 2 );
95 tJ( 2, 2 ) = -aCircle( 2 );
99 tF( 0 ) = std::pow( aX( 0 ) - aCircle( 0 ), 2 )
100 + std::pow( aY( 0 ) - aCircle( 1 ), 2 )
101 - aCircle( 2 ) *aCircle( 2 );
103 tF( 1 ) = std::pow( aX( 1 ) - aCircle( 0 ), 2 )
104 + std::pow( aY( 1 ) - aCircle( 1 ), 2 )
105 - aCircle( 2 ) *aCircle( 2 );
107 tF( 2 ) = std::pow( aX( 2 ) - aCircle( 0 ), 2 )
108 + std::pow( aY( 2 ) - aCircle( 1 ), 2 )
109 - aCircle( 2 ) *aCircle( 2 );
111 tResidual =
norm( tF );
113 if( tResidual > tEpsilon )
126 "Infinite loop while trying to find circle" );
auto norm(const Vector< T > &aA) -> decltype(norm(aA.vector_data()))
Euclidean (L2) norm of a vector.
Definition fn_norm.hpp:56
int_t gesv(Matrix< T > &A, Vector< T > &B, Vector< int_t > &Pivot, const bool AbortOnError=true)
solve the square linear system A * x = b via LAPACK ?gesv ( LU factorization with partial pivoting )
Definition fn_gesv.hpp:222
void circle_from_points(const Vector< real > &aX, const Vector< real > &aY, Vector< real > &aCircle)
Definition fn_circle_from_points.hpp:27