26 #include <fvmodels/shape/circle.h> 43 center.x=center.y=0.0f;
64 Circle::printToStream(std::ostream &stream)
66 stream <<
"center=(" << center.
x <<
"," << center.y <<
")" 67 <<
" radius=" << radius <<
" count= " << count;
75 Circle::fitCircle (vector< upoint_t > &points)
78 double A00=0.0, A01=0.0, A02=0.0;
79 double A10=0.0, A11=0.0, A12=0.0;
80 double A20=0.0, A21=0.0, A22=0.0;
81 double b0 =0.0, b1 =0.0, b2 =0.0;
84 int count = points.size();
85 for (
int i = 0; i < count; i++)
88 double x0 = 2.0f * t.
x;
89 double y0 = 2.0f * t.
y;
90 double b = (double)(t.
x * t.
x + t.
y * t.
y);
106 double delta = + A00 * A11 * A22 + A01 * A12 * A20 + A02 * A10 * A21
107 - A00 * A12 * A21 - A01 * A10 * A22 - A02 * A11 * A20;
108 center.x = (float)( ( + b0 * A11 * A22 + A01 * A12 * b2 + A02 * b1 * A21
109 - b0 * A12 * A21 - A01 * b1 * A22 - A02 * A11 * b2 ) / delta);
110 center.y = (float)( ( + A00 * b1 * A22 + b0 * A12 * A20 + A02 * A10 * b2
111 - A00 * A12 * b2 - b0 * A10 * A22 - A02 * b1 * A20 ) / delta);
112 radius = (float)sqrt( ( + A00 * A11 * b2 + A01 * b1 * A20 + b0 * A10 * A21
113 - A00 * b1 * A21 - A01 * A10 * b2 - b0 * A11 * A20 ) / delta
114 + center.x * center.x + center.y * center.y);
115 count = points.size();
120 Circle::setMargin(
unsigned int margin )
122 this->margin = margin;
127 Circle::isClose(
unsigned int in_roi_x,
unsigned int in_roi_y )
129 float dx = in_roi_x - center.x;
130 float dy = in_roi_y - center.y;
132 float dist = sqrt( dx * dx + dy * dy );
134 return ( (dist <= (radius + margin)) &&
135 (dist >= (radius - margin)) );
Fawkes library namespace.
unsigned int y
y coordinate
unsigned int x
x coordinate
Point with cartesian coordinates as unsigned integers.