On Sun, Jul 01, 2012 at 11:21:11PM -0500, Greg Nielsen wrote:
> Hello Tutor,
> 
>      I'm having some trouble with a mathematical function in my code. I am
> attempting to create a realistic acceleration in an object, slower to speed
> up at its min and max speeds and fastest in the middle. To keep the math
> simpl(er), I just wrote this function for a parabola, which models the
> acceleration of the object. Y is the acceleration and X is the current
> speed of the object.
> 
> Y = -.01X^2 * 1.45X

Are you sure that's the expression you want to use for acceleration? It 
certainly isn't a parabola. It simplifies to:

Y = -0.0145*X**3

which says that the DECELERATION is proportional to the CUBE of the 
speed.

Also, that's not a function. This would be a function:

def acceleration(v):
    """Return the acceleration of the object given its current
    velocity.
    """
    return -0.0145*v**3



> Before I came up with this formula, I was using a very inefficient list
> method to do this. The old code is in italics. I still have it in the code
> because it works (sort of). The function is commented out because it
> doesn't work. It's also in bold, so you can see it easily.

Eh, no. There are no italics or bold in plain text emails.


>         if keys[pygame.K_UP] and self.dy < (15 + self.speedMod):
>             if self.dy <= 0:
>                * self.accelPoints += self.accelList[0]*
>                 *#self.dy += 1*
>             else:
>                 *self.accelPoints += self.accelList[self.dy]*
>                 *#self.accelPoints += ((-.1 * (self.dy * self.dy)) + (1.45 * 
> self.dy))*
>             if self.accelPoints >= self.accelGoal:
>                 self.dy += 1
>                 self.nety = self.dy
>                 self.accelPoints = 0

Without explaining what "accelPoints", "nety", "dy" etc. mean, there is 
no real way to tell whether this is a realistic model for a moving body. 
Without more context, I can't tell what it actually does, let alone what 
it is supposed to do.

I'm not an expert on PyGame, but I would expect that the way to model 
movement of a sprite is to calculate the delta-X and delta-Y, where X 
and Y are POSITIONS not speed and acceleration. I don't understand 
what "accelList" is for. Then you call the move() method on the sprite's 
rectangle, and redraw it.


> I did a test, and for some reason, it seems like the output of the function
> is never saved into the self.accelPoints variable, because it always prints
> out as 0.

Of course it does. You set it to 0 with this line:

self.accelPoints = 0


> (For those who don't want to do the math, when dy = 1, the
> function should output something close to 1.55) 

It certainly does not.

In your code, you have this expression:

(-.1 * (self.dy * self.dy)) + (1.45 * self.dy)

When self.dy = 1, that returns 1.35, not 1.55.

The other expression you give, early in this post, doesn't have a dy 
term. But if I put Y = dy instead, it gives -0.0145.



> My best guess is that the
> accelPoints doesn't like the fact that the function outputs a double, 

No.

By the way, in Python we don't talk about doubles. We have floats, which 
are implemented as C doubles, but since we don't have C-singles, we just 
call them floats.



-- 
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to