【发布时间】:2012-07-18 13:58:30
【问题描述】:
我的粒子系统的物理更新功能似乎不正确。我的目标是让所有粒子都被鼠标吸引。
粒子像预期的那样向鼠标指针移动,直到它们非常接近。当它们靠近时,它们会加速很多,以至于它们飞离指针很远并且永远不会返回。
这里是更新函数:
void updateParticle(particle& p,double time){
const double G=0.000000000066726;
const double POINTERMASS=1000000000000;
double squareDistance=pow(p.coords.x-pointerDevice.x,2)+pow(p.coords.y-pointerDevice.y,2)+pow(p.coords.z-pointerDevice.z,2);
if(squareDistance<0.001)
squareDistance=0.001;//to fix the possible division by zero
coords_3d_f accelerationVector={p.coords.x-pointerDevice.x,p.coords.y-pointerDevice.y,p.coords.z-pointerDevice.z};
accelerationVector=vector_scalar_multiplication(vector_unit(accelerationVector),((G*POINTERMASS)/squareDistance));
accelerationVector=vector_scalar_multiplication(accelerationVector,time);
p.velocity=vector_addition(p.velocity,accelerationVector);
p.coords.x-=p.velocity.x*time;
p.coords.y-=p.velocity.y*time;
p.coords.z-=p.velocity.z*time;
}
当 squareDistance 为常数时,程序看起来没问题,但我知道它是假的。
那么,我做错了什么?
【问题讨论】:
-
你真的看到粒子加速了,还是他们只是消失在屏幕外?您可以尝试增加最低
squareDistance直到您看到它们变慢。 -
@Staven 我看到他们以极快的速度走了一段时间。然后他们就消失了。
-
如果我没记错的话,当一个粒子距离指针 1 个单位时,你将获得大约 67 个单位/秒平方的加速度。一个单位在屏幕上有多长?将
POINTERMASS缩小可能是个好主意。 -
@Staven 一个单位是一个像素。
标签: c++ physics simulation particles