0

(x、y、z) の値、つまり 3D の点を含むベクトル_ptsがあります。_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);
    }
}
4

1 に答える 1

0

Found the error. Instead of

        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])

it should be

        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])
于 2013-03-12T15:11:07.680 に答える