This is an example application of the raw and central moments.
#define _USE_MATH_DEFINES
using namespace std;
int main()
{
return EXIT_FAILURE;
}
double M00 = rm({ 0, 0 });
double M10 = rm({ 1, 0 });
double M01 = rm({ 0, 1 });
double M11 = rm({ 1, 1 });
double M02 = rm({ 0, 2 });
double M20 = rm({ 2, 0 });
double x = M10 / M00;
double y = M01 / M00;
double u00 = cm({ 0, 0 });
double u11 = cm({ 1, 1 });
double u20 = cm({ 2, 0 });
double u02 = cm({ 0, 2 });
double u00_bis = M00;
double u11_bis = M11 - x * M01;
double u20_bis = M20 - x * M10;
double u02_bis = M02 - y * M01;
double u_20 = u20 / u00;
double u_02 = u02 / u00;
double u_11 = u11 / u00;
double lambda1 = (u_20 + u_02) / 2 + sqrt(4 * u_11*u_11 + (u_20 - u_02)*(u_20 - u_02)) / 2;
double lambda2 = (u_20 + u_02) / 2 - sqrt(4 * u_11*u_11 + (u_20 - u_02)*(u_20 - u_02)) / 2;
double theta = 0.5 * atan2(2 * u_11, (u_20 - u_02));
double d = sqrt(M00 * sqrt(lambda1 * lambda2) / M_PI);
double a = d / sqrt(lambda1);
double b = d / sqrt(lambda2);
DrawEllipse(origin, { (int)x, (
int)y }, { (int)a, (
int)b }, theta * 180 / M_PI, { 0, 0, 255 }, 2);
return EXIT_SUCCESS;
}