예제 #1
0
void Man::advance(int phase)
{
    AnimatedPixmapItem::advance(phase);
    if (phase == 0) {
        checkCollision();
        if (dead) {
            if (count < 10) {
                setFrame(6);
                setVelocity(0,0);
                count++;
            } else {
                deleteLater();
                return;
            }
        }
        if (y() > scene()->height()-43) {
            setFrame(f%5);
            f++;
            setPos(x(), scene()->height()-26);
            setVelocity(-2.0, 0);
        } else if (xVelocity() == -2.0) {
            //
            // There's been a resize event while this Man has
            // been on the ground.  Move the man back to the
            // new ground location.  This is not neat.
            //
            setPos(x(), scene()->height()-26);
        }
    }
}
예제 #2
0
QRect ossimQtVceShape::boundingRectAdvanced() const
{
   int dx = int(x()+xVelocity())-int(x());
   int dy = int(y()+yVelocity())-int(y());
   QRect r = boundingVceShapeRect();
   r.moveBy(dx,dy);
   return r;
}
예제 #3
0
void Floater::advance(int phase)
{
	if (!isEnabled())
		return;

	Bridge::advance(phase);

	if (phase == 1 && (xVelocity() || yVelocity()))
	{
		if (Vector(origin, QPoint(x(), y())).magnitude() > vector.magnitude())
		{
			vector.setDirection(vector.direction() + M_PI);
			origin = (origin == wall->startPoint()? wall->endPoint() : wall->startPoint());

			setVelocity(-xVelocity(), -yVelocity());
		}
	}
}
예제 #4
0
void BouncyLogo::initPos()
{
    initSpeed();
    int trial=1000;
    do {
	move(rand()%canvas()->width(),rand()%canvas()->height());
	advance(0); // 動畫不移動
    } while (trial-- && xVelocity()==0.0 && yVelocity()==0.0); // trial不為0且x,y速度都為0
}
예제 #5
0
void
KbfxPlasmaCanvasItem::advance ( int phase )
{
	if ( phase == 0 )
	{
		setXVelocity ( 0 );
		setYVelocity ( yVelocity () * 1 - 0.001 );
	}
	else
	{
		move ( x () + xVelocity (), y () + yVelocity () );
	}
}
예제 #6
0
void BouncyLogo::advance(int stage)
{
    switch ( stage ) {
      case 0: {
	double vx = xVelocity();
	double vy = yVelocity();

	if ( vx == 0.0 && vy == 0.0 ) {
	    // stopped last turn
	    initSpeed();
	    vx = xVelocity();
	    vy = yVelocity();
	}

	double nx = x() + vx;
	double ny = y() + vy;

	if ( nx < 0 || nx >= canvas()->width() )
	    vx = -vx; // 換反方向
	if ( ny < 0 || ny >= canvas()->height() )
	    vy = -vy; // 換反方向

	for (int bounce=0; bounce<4; bounce++) {
	    QCanvasItemList l=collisions(FALSE); // 沒有那麼精準的傳回所有有碰撞的canvas item
	    for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
		QCanvasItem *hit = *it;
		if ( hit->rtti()==logo_rtti && hit->collidesWith(this) ) {
		    switch ( bounce ) {
		      case 0:
			vx = -vx;
			break;
		      case 1:
			vy = -vy;
			vx = -vx;
			break;
		      case 2:
			vx = -vx;
			break;
		      case 3:
			// Stop for this turn
			vx = 0;
			vy = 0;
			break;
		    }
		    setVelocity(vx,vy);
		    break;
		}
	    }
	}

	if ( x()+vx < 0 || x()+vx >= canvas()->width() )
	    vx = 0;
	if ( y()+vy < 0 || y()+vy >= canvas()->height() )
	    vy = 0;

	setVelocity(vx,vy);
      } break;
      case 1:
	QCanvasItem::advance(stage);
	break;
    }
}
예제 #7
0
int main(int argc, char *argv[]){
  double time=0;
  double xOld=0, yOld=0, v_xOld =0, v_yOld=0;
  double xNew=0, yNew=0, v_xNew=0, v_yNew=0;
  double K = 0.2; //k/m = constatnt K in code
  double k_over_m = 0;
  int count = 0, i=0;
  FILE *outp;
  h1 hist;
  const double deltaT = 0.01;
  outp = fopen("resist.dat", "w");
  h1init(&hist, 700, 160., 490., "Distribution of Range with Varying Values of k/m");
  h1labels(&hist, "Range in m", "Number of Occurences");
  double angle = (pi/180)*atof(argv[1]);
  double initVelocity = atof(argv[2]);
  fprintf(outp, "# t     x     y     v_x     v_y\n");
  fprintf(outp, "#--------------------\n");
  v_xOld = initVelocity*cos(angle);
  v_yOld = initVelocity*sin(angle);
  while(yNew>=0){
    v_xNew = xVelocity(v_xOld, deltaT, K);
    v_yNew = yVelocity(v_yOld, deltaT, K);
    xNew = position(xOld, v_xOld, deltaT);
    yNew = position(yOld, v_yOld, deltaT);
    time = deltaT*count;
    fprintf(outp, "%lf   %lf   %lf   %lf   %lf\n", time, xNew, yNew, v_xNew, v_xOld);
    count++;
    v_xOld = v_xNew;
    v_yOld = v_yNew;
    xOld = xNew;
    yOld = yNew;
  }
  
  for(i=0; i<10000; i++){
    k_over_m = randu(0.1, 0.4);
    v_xOld = initVelocity*cos(angle);
    v_yOld = initVelocity*sin(angle);

    while(yNew>=0){
      v_xNew = xVelocity(v_xOld, deltaT, k_over_m);
      v_yNew = yVelocity(v_yOld, deltaT, k_over_m);
      xNew = position(xOld, v_xOld, deltaT);
      yNew = position(yOld, v_yOld, deltaT);
      v_xOld = v_xNew;
      v_yOld = v_yNew;
      xOld = xNew;
      yOld = yNew;     
    }
    h1fill(&hist, xOld, 1.0); 
    xNew =0;
    xOld=0;
    yNew = 1e-8;
    yOld = 1e-8;
  }
    
  h1plot(&hist, "");
  h1plot(&hist, "resist.pdf");
  fclose(outp);
  return 0;
   
}