在矢量中的采样点

时间:2013-03-08 15:45:17

标签: vector 3d geometry mesh sampling

我有一个向量 _pts ,它包含(x,y,z)的值,即3D中的一个点。从_pts [0]开始,我想选择那些之前选择的点之间的距离大于 sampleRadius 的点。

这是我的代码,但显然有些错误,因为选择了很多点而不是仅仅选择了一些。 任何人都可以看到我做错了什么?可能你需要更多的代码才能看到可以错过的内容,但我也很感激如何实现这一点。

float distance;
bool distanceIsOk;

//PICK A POINT IN VECTOR _pts
for (int cPIdx = 0; cPIdx < _pts.size(); cPIdx++) {
    distanceIsOk = true;
    //CHECK DISTANCE AGAINST PREVIOUSLY PICKED POINTS
    for (int dPIdx = 0; dPIdx < indeces.size(); dPIdx++) {
        distance = sqrt(
                        (_pts[cPIdx].v[0] - _pts[dPIdx].v[0])*(_pts[cPIdx].v[0] - _pts[dPIdx].v[0]) +
                        (_pts[cPIdx].v[1] - _pts[dPIdx].v[1])*(_pts[cPIdx].v[1] - _pts[dPIdx].v[1]) +
                        (_pts[cPIdx].v[2] - _pts[dPIdx].v[2])*(_pts[cPIdx].v[2] - _pts[dPIdx].v[2])
                        );
        //IF DISTANCE IS <= SUBSAMPLERADIUS FOR AT LEAST ONE PREVIOUSLY SELECTED POINT
        if (distance <= subsampleRadius) {
            //DISCARD THE POINT
            distanceIsOk = false;
            dPIdx += indeces.size();
        }
    }
    //OTHERWISE INCLUDE THAT POINT
    if (distanceIsOk == true) {
        indeces.push_back(cPIdx);
    }
}

1 个答案:

答案 0 :(得分:0)

发现错误。而不是

        distance = sqrt(
                        (_pts[cPIdx].v[0] - _pts[dPIdx].v[0])*(_pts[cPIdx].v[0] - _pts[dPIdx].v[0]) +
                        (_pts[cPIdx].v[1] - _pts[dPIdx].v[1])*(_pts[cPIdx].v[1] - _pts[dPIdx].v[1]) +
                        (_pts[cPIdx].v[2] - _pts[dPIdx].v[2])*(_pts[cPIdx].v[2] - _pts[dPIdx].v[2])

应该是

        distance = sqrt(
                        (_pts[cPIdx].v[0] - _pts[indeces[dPIdx]].v[0])*(_pts[cPIdx].v[0] - _pts[indeces[dPIdx]].v[0]) +
                        (_pts[cPIdx].v[1] - _pts[indeces[dPIdx]].v[1])*(_pts[cPIdx].v[1] - _pts[indeces[dPIdx]].v[1]) +
                        (_pts[cPIdx].v[2] - _pts[indeces[dPIdx]].v[2])*(_pts[cPIdx].v[2] - _pts[indeces[dPIdx]].v[2])