protected void bounceInteractivelyFrom(AdvancedPhysicDrawnObject d, 
			DoublePoint collisionpoint, double bounciness, 
			double frictionmodifier)
	{
		// TODO: It seems like the speed lost isn't equal to the speed gained
		
		// Calculates the direction of the collision
		double oppdir = d.getCollisionForceDirection(collisionpoint.getAsPoint());
		double forcedir = HelpMath.checkDirection(oppdir + 180);
		
		// Calculates the directional momentums of the objects
		Movement dirmovementthis = getMovement().getDirectionalMovement(forcedir);
		Movement dirmovementother = d.getMovement().getDirectionalMovement(oppdir);
		double speedthis = dirmovementthis.getSpeed();
		double speedother = dirmovementother.getSpeed();
		
		Movement rotationmovementthis = 
				getPixelRotationMovement(collisionpoint).getDirectionalMovement(forcedir);
		Movement rotationmovementother = 
				d.getPixelRotationMovement(collisionpoint).getDirectionalMovement(oppdir);
		double rotationspeedthis = rotationmovementthis.getSpeed();
		double rotationspeedother = rotationmovementother.getSpeed();
		// TODO: One might want to add a modifier to the rotationspeed
		
		// if the colliding object doesn't have any speed. Does nothing 
		// (the bounce should be done independently in the other object)
		if (speedthis + rotationspeedthis == 0)
			return;
		
		// Checks that the objects are actually colliding to each other and 
		// not going to opposite directions
		Movement pixmovementthis = Movement.movementSum(dirmovementthis, 
				rotationmovementthis);
		Movement pixmovementother = Movement.movementSum(dirmovementother, 
				rotationmovementother);
		if (HelpMath.getAngleDifference180(pixmovementthis.getDirection(), 
				pixmovementother.getDirection()) >= 90)
			return;
		
		// Changes the signs of the momentums and speeds if needed
		if (HelpMath.getAngleDifference180(dirmovementthis.getDirection(), forcedir) > 90)
			speedthis *= -1;
		if (HelpMath.getAngleDifference180(dirmovementother.getDirection(), oppdir) > 90)
			speedother *= -1;
		if (HelpMath.getAngleDifference180(rotationmovementthis.getDirection(), forcedir) > 90)
			rotationspeedthis *= -1;
		if (HelpMath.getAngleDifference180(rotationmovementother.getDirection(), oppdir) > 90)
			rotationspeedother *= -1;
		
		double massthis = getMass();
		double massother = d.getMass();
		double momentumthis = (speedthis + rotationspeedthis)* massthis;
		double momentumother = (speedother + rotationspeedother) * massother;
		
		// Calculates the maximum momentum the other may apply to the collided 
		// object
		// That is the momentum it would need to gain to start moving with the 
		// colliding object's speed
		double maxMomentumApplied = momentumother + 
				(speedthis + rotationspeedthis) * d.getMass();
		
		// If the object doesn't have that much momentum, it uses all its momentum 
		// to push the object
		if (momentumthis < maxMomentumApplied)
		{
			bounce(collisionpoint, bounciness, frictionmodifier, 
					dirmovementthis, rotationspeedthis, oppdir);
			
			double force = momentumthis / massother;
			d.addForce(force * (1 + bounciness), forcedir, collisionpoint);
		}
		// Otherwise, pushes the other object with the maximum force and leaves 
		// some of the momentum to the pushing object
		else
		{
			//double momentumtransferred = maxMomentumApplied - momentumother;
			double pushforce = maxMomentumApplied / massother;
			d.addForce(pushforce, forcedir, collisionpoint);
			
			//double speedloss = maxMomentumApplied / massthis;
			double rotationspeedloss = maxMomentumApplied / momentumthis 
					* rotationspeedthis;//rotationspeedthis / speedloss;
			double speedloss = maxMomentumApplied / momentumthis * speedthis;
			//speedthis / speedloss;
			
			bounce(collisionpoint, bounciness, frictionmodifier, 
					Movement.createMovement(oppdir, speedloss), 
					rotationspeedloss, oppdir);
		}
	}