0

3 つの float x、y、z (3-D 空間座標) を取る point3 構造体があります。

ポイントのリスト内の各要素の x、y、z 値を変換する関数を作成しようとしています。

私はC++が初めてなので、イテレータを正しく書いたとは思いません。リストを反復してリスト内の各要素のコンポーネントを変更する方法を明確にするのに役立つ人はいますか?

この投稿C++ How to loop through a list of structs and access their propertiesを見て、これで問題が解決したと思いましたが、解決策はうまくいきませんでした。

これが私のコードです:

//Translates the face by dx, dy, dz coordinates
list<point3> translateFace(list<point3> lop, float dx, float dy, float dz)
{
    list<point3>::iterator iter;

    for (iter = lop.begin() ; iter != lop.end(); iter++){
        iter->x - dx;
        iter->y - dy;
        iter->z - dz;
    }
   return lop;
}

上記のリンクで提案されている解決策も試しましたが、まだ機能しませんでした。return lopはfor ループの内側または外側にあるべきですか? lop 以外のものを返す必要がありますか?

for (iter = lop.begin() ; iter != lop.end(); iter++){
    (*iter).x - dx;
    (*iter).y - dy;
    (*iter).z - dz;
    }
return lop;
4

2 に答える 2

2

計算結果を実際に保存していないように見えます。

for (iter = lop.begin() ; iter != lop.end(); iter++){
    iter->x - dx;
    iter->y - dy;
    iter->z - dz;
}

これを試して:

for (iter = lop.begin() ; iter != lop.end(); iter++){
    iter->x -= dx;
    iter->y -= dy;
    iter->z -= dz;
}

ほとんどのコンパイラが、このような未使用の計算について警告をスローすることを願っています。可能であれば、コンパイラの警告レベルを上げてください。

于 2012-04-18T02:30:07.243 に答える
1

どれどれ:

list<point3> translateFace(list<point3> lop, float dx, float dy, float dz)
{
    list<point3>::iterator iter;

    for (iter = lop.begin() ; iter != lop.end(); iter++){
        (*iter).x -= dx;
        (*iter).y -= dy;
        (*iter).z -= dz;
    }

    return lop;
}

これを行うと、lop パラメーターのローカル コピーが作成され、それが返されて移動 (C++0x) またはコピー (C++03) されることを知っていると仮定すると、正しいオプションである必要があります。に設定しています。例 (point3 を構築するために 3 つの float が必要であると仮定します):

point3 point(0.0, 0.3, 0.5);
list<point3> face;

face = translateFace(list<point3>(point), -0.5, -3.32, -7.5);

座標が -.5、-3.02、および -7.0 の点のみを保持するリストを含む面になるはずです。

于 2012-04-18T02:39:51.307 に答える