0

我尝试用点填充网格,并且只将点保持在一个假想的圆圈内。

例子

首先我这样做: 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());


}
4

0 回答 0