Рассчитать xSteps и ySteps, чтобы получить N очков в круге
Я стараюсь заполнить сетку точками и держу точки только внутри воображаемого круга.
Сначала я сделал это с:createColorDetectionPoints(int xSteps, int ySteps)
Но для меня намного проще установить это с целью:
void ofxDTangibleFinder::createColorDetectionPoints(int nTargetPoints)
Цель не должна быть слишком точной. Но в тот момент, когда я хочу 1000 баллов, например, я получаю 2289 баллов.
Я думаю, что моя логика неверна, но я не могу понять это. Идея состоит в том, чтобы получить правильное количество xSteps и ySteps.
Может кто-нибудь помочь?
void ofxDTangibleFinder::createColorDetectionPoints(int nTargetPoints) {
colorDetectionVecs.clear();
// xSteps and ySteps needs to be calculated
// the ratio between a rect and ellipse is
// 0.7853982
int xSteps = sqrt(nTargetPoints);
xSteps *= 1.7853982; // make it bigger in proportion to the ratio
int ySteps = xSteps;
float centerX = (float)xSteps/2;
float centerY = (float)ySteps/2;
float fX, fY, d;
float maxDistSquared = 0.5*0.5;
for (int y = 0; y < ySteps; y++) {
for (int x = 0; x < xSteps; x++) {
fX = x;
fY = y;
// normalize
fX /= xSteps-1;
fY /= ySteps-1;
d = ofDistSquared(fX, fY, 0.5, 0.5);
if(d <= maxDistSquared) {
colorDetectionVecs.push_back(ofVec2f(fX, fY));
}
}
}
// for(int i = 0; i < colorDetectionVecs.size(); i++) {
// printf("ellipse(%f, %f, 1, 1);\n", colorDetectionVecs[i].x*100, colorDetectionVecs[i].y*100);
// }
printf("colorDetectionVecs: %lu\n", colorDetectionVecs.size());
}