Consider refactoring. You can put subexpressions into your own functions, thereby naming your goal.
For example:
if (IsCentered(center) && IsInsideLower(y, j, i) && IsInsideUpper(y, j, i)) regenerateDot(i + 1, j, dots);
Note that in the above example, function names may be fictitious (I didn't really try to figure out what the purpose of the code is), but you should get an image.
Christian.K
source share