数日前、私は再帰について聞いているものと非常によく似た質問をしました。 C++ vector loses data in recursive functionベクトルにアイテムをプッシュしないC++再帰呼び出し
私は再帰呼び出しでベクトルにプッシュしようとすると問題を理解していると思っていたので、今はかなり密集していますが、今では同様の問題が発生しています関数。
void TriangleDynamic::collectRayRecursive(Ray &ray, double binSize, double radius, Point &org)
{
if (getLowestLevel())
{
//this is where I push the ray.
raysPushBack(move(ray));
}
else
{
bool foundIntersectSub = false;
unsigned int ctr = 0;
while((!foundIntersectSub) && (ctr<=getSubTrianglesSize() - 1))
{
if (getSubTriangle(ctr).intersect(ray))
{
foundIntersectSub = true;
getSubTriangle(ctr).collectRayRecursive(ray, binSize, radius, org);
}
ctr = ctr + 1;
}
}
}
関数がTriangleDynamicクラスの一部であり、パラメータとしてレイを取る: ここで関数のコードのビットです。 RayはTriangleDynamicオブジェクトと交差することが知られていますが、三角形が「最下位レベル」の三角形でない場合、関数は三角形のsubTrianglesを調べて、Rayによって交差されたsubTriangleを探します(1つはデザインによって交差されます) 。これは再帰呼び出しが発生する場所で、レイと呼ばれるベクトルにレイがプッシュされ、TriangleDynamicのメンバーデータであることが最も低いレベルの三角形に一度しか到達しません。しかし、もう一度私はデータを失う。これを行う方法はありますか?以前の質問にどれだけ早く簡単に答えられたのか信じられません。ありがとう!
光線ベクトルはどこで生きていますか? –
TriangleDynamic asメンバーデータ内。 – user1216527
これを最初に投稿した後に追加しましたが、それはRayオブジェクトを保持するベクトルです。 – user1216527