25 #include <fvmodels/shape/circle.h> 32 namespace firevision {
41 center.x = center.y = 0.0f;
62 Circle::printToStream(std::ostream &stream)
64 stream <<
"center=(" << center.
x <<
"," << center.y <<
")" 65 <<
" radius=" << radius <<
" count= " << count;
73 Circle::fitCircle(vector<upoint_t> &points)
76 double A00 = 0.0, A01 = 0.0, A02 = 0.0;
77 double A10 = 0.0, A11 = 0.0, A12 = 0.0;
78 double A20 = 0.0, A21 = 0.0, A22 = 0.0;
79 double b0 = 0.0, b1 = 0.0, b2 = 0.0;
82 int count = points.size();
83 for (
int i = 0; i < count; i++) {
85 double x0 = 2.0f * t.
x;
86 double y0 = 2.0f * t.
y;
87 double b = (double)(t.
x * t.
x + t.
y * t.
y);
103 double delta = +A00 * A11 * A22 + A01 * A12 * A20 + A02 * A10 * A21 - A00 * A12 * A21
104 - A01 * A10 * A22 - A02 * A11 * A20;
105 center.x = (float)((+b0 * A11 * A22 + A01 * A12 * b2 + A02 * b1 * A21 - b0 * A12 * A21
106 - A01 * b1 * A22 - A02 * A11 * b2)
108 center.y = (float)((+A00 * b1 * A22 + b0 * A12 * A20 + A02 * A10 * b2 - A00 * A12 * b2
109 - b0 * A10 * A22 - A02 * b1 * A20)
111 radius = (float)sqrtf((+A00 * A11 * b2 + A01 * b1 * A20 + b0 * A10 * A21 - A00 * b1 * A21
112 - A01 * A10 * b2 - b0 * A11 * A20)
114 + (double)center.x * center.x + (
double)center.y * center.y);
115 count = points.size();
119 Circle::setMargin(
unsigned int margin)
121 this->margin = margin;
125 Circle::isClose(
unsigned int in_roi_x,
unsigned int in_roi_y)
127 float dx = in_roi_x - center.x;
128 float dy = in_roi_y - center.y;
130 float dist = sqrt(dx * dx + dy * dy);
132 return ((dist <= (radius + margin)) && (dist >= (radius - margin)));
Fawkes library namespace.
unsigned int y
y coordinate
unsigned int x
x coordinate
Point with cartesian coordinates as unsigned integers.