关于粒子在曲面上弹跳的代码

时间:2018-07-17 11:27:11

标签: c++

我应该编写一个代码,模拟在墙壁和半圆(半径30,中心@(50,0))内反弹的非弹性粒子。每次撞击墙壁,粒子都会损失其原始速度的3%和/或半圆。

我也在使用graphics.h库

我已经制作了大部分程序,但是粒子不能在半圆上正确弹回。

我使用了反射矩阵:

\ begin {bmatrix}  cos 2 \ theta和sin2 \ theta \  sin2 \ theta和-cos2 \ theta \ end {bmatrix}

下面是这段代码片段,其中包含粒子撞击半圆时的条件:

 //initial conditions
   x = 0;
    y = 100;
    Vx = 15.0;
    Vy = 0.0;
    double  dt = 0.0001; //initial time step and increment

  for(double t = 0; t < 50; t += dt)
  {
      Vy = Vy + grav*dt;

      //Conditions when the particle hits a wall or the floor and retaining only 97% of its speed
      if (y<0.0)
      {
          Vy = -Vy + grav*dt;
      }

 if(x >100.0 || x < 0.0)
{
    Vx = -Vx;
}

//condition when the particle hits the semicircle
//semicircle equation: y = sqrt(30^2 - (x-50)^2)
if(y < sqrt((30*30)-((x-50)*(x-50))) )
{
    Vxnew = ((Vx)*(cos(2.0*theta)) + (Vy*(sin(2.0*theta))));
    Vy = (Vy*(cos(2.0*theta)) - ((Vx)*(sin(2.0*theta))));

    Vx = Vxnew;
}

x = x + Vx*dt;
y = y + Vy*dt;

putpixel(conx(x), cony(y), 15);
  }

我不确定该反射矩阵是否适用于曲面,我应该使用其他方法还是实现错误?

对于损失速度部分,我可能只需将新的x和y速度乘以0.97。

对于上下文,我制作的此函数将循环中的计算值转换为像素值

    //convert to pixel value (scale of 6)
    double conx(double x)
  {
      return x * (600/100) + 50;
    }

    double cony(double y)
  {
      return -y * (600/100) + 650;
  }

Here is the sample output

0 个答案:

没有答案