Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (477)
Games in Android Showcase (107)
games submitted by our members
Games in WIP (536)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  A little Math  (Read 1270 times)
0 Members and 1 Guest are viewing this topic.
Offline ~Spaceaholic

Senior Member


Medals: 3
Projects: 1



« Posted 2011-11-10 15:37:59 »

I am trying to get a bunch of objects to interact with eachother in such a way that a collection of objects will be repelled from a user controlled object. each individual object should be repelled along the slope between itself and the user object, using the objects centers to determine the slope. The speed at which the object is repelled should be a constant, regardless of the slope.

each object has
float xspeed
float yspeed
float addedxspeed
float addedyspeed

xspeed and yspeed are constant for the lifetime of an object but the added speeds can be changed and are acted upon by a friction constant.
the coordinate plane that I am working with starts with x=0 growing left to right and y=0 growing top to bottom.
I would like to know how to calculate what my addedspeeds should be in order to make the object travel away from the user at a set speed, lets say 3.

if it helps at all to know my objects represent fish and the user is trying to eat them, the fish get scared, and swim away from the user..
Thanks for your help, if any more information is needed I will gladly repost....
Offline ~Spaceaholic

Senior Member


Medals: 3
Projects: 1



« Reply #1 - Posted 2011-11-10 15:59:01 »

The process of trying to explain the problem I was having seems to have helped me work through it...

float distance = (float)Math.sqrt(Math.pow(userFish.x - fish2.x, 2) + Math.pow(userFish.y - fish2.y, 2));

float diffX = userFish.x - fish2.x;
diffX = diffX * (3/distance);
                           
float diffY = userFish.y - fish2.y;
diffY = diffY * (3/distance);
                           
fish2.addedVelocityX = diffX;
fish2.addedVelocityY = diffY;

I believe this solved my problem...
Offline theagentd
« Reply #2 - Posted 2011-11-10 19:02:56 »

You really need to sort out your variable naming. Change in velocity is called acceleration, you know...

Myomyomyo.
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline ~Spaceaholic

Senior Member


Medals: 3
Projects: 1



« Reply #3 - Posted 2011-11-10 19:56:14 »

If you think this is bad you should see the code from when I started, for some odd reason when I am writing code variable names just don't come to me. but it is all in the works, getting better every day...
Offline theagentd
« Reply #4 - Posted 2011-11-11 05:19:14 »

Ah, I see what you're doing now. Don't use pow(x, 2), it is dead slow. Instead calculate diffX = (x1 - x2) and diffY = (y1 - y2) before the distance calculation, and manually square them by writing diffX*diffX +  diffY*diffY. You can also then reuse this value later.
1  
2  
3  
4  
5  
float dx = userFish.x - fish2.x;
float dy = userFish.y - fish2.y;
float distance = (float)Math.sqrt(dx*dx + dy*dy);
fish2.addedVelocityX = dx * 3 / distance;
fish2.addedVelocityY = dy * 3 / distance;

This code does the exact same thing and is a looooot faster.

Myomyomyo.
Offline Kurten

Junior Member


Medals: 3
Exp: 3 years


-w-


« Reply #5 - Posted 2011-11-11 09:28:32 »

If you think this is bad you should see the code from when I started, for some odd reason when I am writing code variable names just don't come to me. but it is all in the works, getting better every day...

This is non-relevant to the original question, but one good way to write good variable names is to use mathematical names for them.

pointX / posX //Point is a point in the coordinate grid, therefore a coordinate.
pointY / posY

velX //velocity is from what i have understood the same thing as speed
velY

accX //acceleration is change in velocity if i remember correctly
accY

That's my way of naming my variables Smiley
Offline ReBirth
« Reply #6 - Posted 2011-11-12 06:19:18 »

Mine more simple

position: X, Y
Velocity: dX, dY
Acceleration: dDY, dDX

Grin

btw, why use float instead double?

Offline sproingie

JGO Kernel


Medals: 202



« Reply #7 - Posted 2011-11-12 06:53:56 »

Floats are a force of habit for OpenGL programmers, because that's all most any GPU handles.  Modern cards do doubles but often much slower.
Offline theagentd
« Reply #8 - Posted 2011-11-12 09:18:07 »

And do you really need that good precision? I mean, for a physics simulation that will run for a long time or that just needs to be precise, sure, but for graphics?

Myomyomyo.
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

CogWheelz (15 views)
2014-07-30 21:08:39

Riven (21 views)
2014-07-29 18:09:19

Riven (14 views)
2014-07-29 18:08:52

Dwinin (12 views)
2014-07-29 10:59:34

E.R. Fleming (32 views)
2014-07-29 03:07:13

E.R. Fleming (12 views)
2014-07-29 03:06:25

pw (42 views)
2014-07-24 01:59:36

Riven (42 views)
2014-07-23 21:16:32

Riven (30 views)
2014-07-23 21:07:15

Riven (31 views)
2014-07-23 20:56:16
HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54

HotSpot Options
by Roquen
2014-05-06 15:03:10

Escape Analysis
by Roquen
2014-04-29 22:16:43

Experimental Toys
by Roquen
2014-04-28 13:24:22
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!