gpt4 book ai didi

C++ vector 、指针等

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:44 27 4
gpt4 key购买 nike

我正在做一些基本的碰撞检测作业。我有一个包含一堆球体对象的 vector ,这些球体对象具有半径、位置、速度等成员。我已将我的问题缩小到以下代码。

这是我得到的有效代码。对于 vector 球体中的每个球体,它检查 vector 球体中的所有其他球体是否发生碰撞。

// Do the physics simulation
for ( unsigned int i = 0; i < spheres.size(); i++ )
{
spheres[i].computeForces(gravity, air_friction, walls, spheres);
}

引用此函数:(最后一个参数是球体的 vector )

// Compute all the forces between a sphere and the walls and other spheres and gravity and drag.
void computeForces(Vec3d gravity, double dragConstant, plane walls[6], std::vector< sphere > & spheres)
{
clearForce();
accumulateGravity( gravity );
accumulateDrag( dragConstant );
// Now check for collisions with the box walls
for ( int j = 0; j < 6; j++ )
accumulatePlaneContact(walls[j]);

//Check for collisions with external spheres in the environment
for ( unsigned int j = 0; j < spheres.size(); j++ )
if ( this != &spheres[j] ) // Don't collide with yourself
accumulateSphereContact( spheres[j] );
}

我修改了一些东西,这样我就不必检查每个球体与其他球体,而是一次只比较一个球体,但这是行不通的。

// Do the physics simulation
for ( unsigned int i = 0; i < spheres.size(); i++ )
{
//Here I can choose which spheres to test
for (unsigned int j = 0; j < spheres.size(); j++)
{
spheres[i].computeForce(gravity, air_friction, walls, spheres[j]);
}
}

用这个函数:(最后一个参数是一个球体)

void computeForce(Vec3d gravity, double dragConstant, plane walls[6], sphere & s)
{
clearForce();
accumulateGravity( gravity );
accumulateDrag( dragConstant );
for ( int j = 0; j < 6; j++ )
{
accumulatePlaneContact(walls[j]);
}
if (this != &s)
{
accumulateSphereContact(s);
}
}

在 Debug模式下运行,它运行良好并且似乎正确输入了所有函数并进行了计算,但好像力实际上并未保存到球体对象中。我得到相互穿过的球体。 (与墙壁的碰撞、重力和拖动都可以正常工作)。

有什么区别?我的第一个猜测是它与。我也尝试过使用 unordered_map 而不是具有相同结果行为的 vector 。

最佳答案

请注意,在第一种情况下,computeForces()(包括对 clearForce() 的调用)在每个球体上仅被调用一次。在您修改后的案例中,您为每个合作伙伴领域调用一次 computeForce(),并且这些调用中的每一个都执行 clearForce()。我想这就是问题所在。

关于C++ vector 、指针等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450880/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com