I am working through the Firmware Framework code and I came across this routine for center of mass calculation, which did not make sense at first glance.

I can't find anything online to confirm that this is the correct or maybe best approach. I did find this on stackoverflow but it's not really helpful in confirming if code methodology correct: https://stackoverflow.com/questions/66175912/center-of-mass-algorithm

```
void calcCenterOfMass(const int pixels[], const unsigned int
xres, const unsigned int yres, float *cmx, float *cmy, int *totalmass)
```

`{`

` int cmx_numer=0, cmy_numer=0;`

` for (unsigned int i = 0; i < xres*yres; i++) {`

` cmx_numer += (i%xres)*pixels[i];`

` cmy_numer += (i/xres)*pixels[i];`

` *totalmass += pixels[i];`

` }`

` if (*totalmass == 0) {`

` *totalmass = 1; // avoid NaN`

` }`

` *cmx = (float)cmx_numer/(float)(*totalmass);`

` *cmy = (float)cmy_numer/(float)(*totalmass);`

`}`

For example, when calculating cmx_numer and cmy_numer, one uses modulus of xres and the other divides by xres. Struggling to work out if correct.

I'm also wondering about the "for" routine too.

So I am seeking feedback.