Java-Gaming.org Hi !
 Featured games (90) games approved by the League of Dukes Games in Showcase (753) Games in Android Showcase (228) games submitted by our members Games in WIP (842) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: 1 [2] 3 4 5
 ignore  |  Print
 Mathematical vectors  (Read 43036 times) 0 Members and 1 Guest are viewing this topic.

Junior Devvie

 « Reply #30 - Posted 2011-03-26 04:22:14 »

Alright dishmoth, I think I got the grasp of it, I'd just like a few of my thoughts ironed out.

I understand that direction is a unit vector - and velocity is not since we keep adding the acceleration vector to it.  Does this leave position to be a unit vector also?  Since position doesn't really have a magnitude (unless its the size of the image?).

I'm guessing I can test if it is a unit vector by simply printing out Math.sqrt(position.x * position.x + position.y * position.y).  Is that what this formula is all about? giving the magnitude of a certain vector?

I've changed how the car class works to interact with a Vector2D class but I'm not totally sure that I'm doing things the right way.  I'll post a snippet of what I mean.

This is the mathematical vector class
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21 `public class Vector2D {   private double x;   private double y;      public Vector2D(double x, double y) {      this.x = x;      this.y = y;   }      public static Vector2D add(Vector2D v1, Vector2D v2) {      return new Vector2D(v1.x + v2.x, v1.y + v2.y);   }      public double getX() {      return x;   }      public double getY() {      return y;   }}`

and some implementation in my car's movement method

 1  2  3  4  5 `...direction = new Vector2D(Math.sin(Math.toRadians(carAngle)), -Math.cos(Math.toRadians(carAngle)));velocity = new Vector2D(direction.getX() * currentSpeed * deltaSeconds, direction.getY() * currentSpeed * deltaSeconds);position = Vector2D.add(velocity, position);...`

and I still don't fully understand why everything except velocity can be considered a vector - instead of a Point?  Or maybe a vector is just a Point with a direction? ahhh I'm so confused.  The thing is I know once I can get the theory down the implementation would be no problem.

Oh and by the way, philfrei I understand what you mean, this was taken care of in another thread I posted asking about top down rotation motion - thanks though!
Kieran Newland

Senior Newbie

 « Reply #31 - Posted 2011-03-26 18:58:34 »

Im not sure if you've got the meaning of Vector and Point properly. This is my understanding.

A Point is something with one variable, such as a speed. This can only give a speed of something, not a direction.

Then you have a Vector. These have two variables. Velocity is the common example as it has a magnitude and a direction.

More examples of points: Distance, Mass, Temperature

More examples of Vectors: Displacement, Force, Acceleration

SimonH
 « Reply #32 - Posted 2011-03-26 19:40:04 »

A Point is something with one variable, such as a speed.
A scalar is a single variable, eg speed, distance &c.
A point is a point in space eg (x,y) or (x,y,z).

I think of it this way; a point is where something is, say (1,0) for a knight on a chessboard. A vector tells you how to move the knight, eg (1,2) - one sideways and two forward - so if you add the vector to the point you get a new point (2,2) which gives the new position of the knight.
In your code 'position' is a point (where the car is) and 'velocity' is a vector (how to move it).
BTW, why are you making the cos part of 'direction' negative?

People make games and games make people

Junior Devvie

 « Reply #33 - Posted 2011-03-27 05:11:48 »

@SimonH
The example really helps clear up my misconception of vectors, and if I may be so bold to say so - would a simple

 1  2  3 `public static Point add(Point p, Vector2D v) {    return new Point(p.x + v.x, p.y + v.x);}`

be the conversion to add the vector to the point?

I'd like one thing still cleared up though. Since a vector equals a direction and a magnitude, then isn't the following statement wrong?

 1 `velocity = new Vector2D(direction.getX() * currentSpeed * deltaSeconds, direction.getY() * currentSpeed * deltaSeconds);`

Since there is no magnitude.  Also that leaves me to believe that the constructor for Vector2D would need 3 parameters? Right now I only have x,y.  I would need to add a third parameter that takes magnitude?

@Kieran
Thanks, but I have to be honest and say that SimonH's example was a clear explanation that now should keep making me think that a vector is how you move .  But yea I'm thinking the same thing here when you - well everyone says - when you talk about velocity.  I understand it has a direction but the magnitude is literally the problem.  It is confusing me.

I think of velocity in terms of a point.  For example lets say we went ahead and said for a really basic rendering of the move method that x += 5, and y += 5.  This makes me think that velocity = 5px/seconds for example, I don't see the connection to magnitude.
ra4king

JGO Kernel

Medals: 507
Projects: 3
Exp: 5 years

I'm the King!

 « Reply #34 - Posted 2011-03-27 08:29:41 »

@SimonH
The example really helps clear up my misconception of vectors, and if I may be so bold to say so - would a simple

 1  2  3 `public static Point add(Point p, Vector2D v) {    return new Point(p.x + v.x, p.y + v.x);}`

be the conversion to add the vector to the point?
That's correct

I'd like one thing still cleared up though. Since a vector equals a direction and a magnitude, then isn't the following statement wrong?

 1 `velocity = new Vector2D(direction.getX() * currentSpeed * deltaSeconds, direction.getY() * currentSpeed * deltaSeconds);`

Yes that is wrong. It should be:
 1 `velocity = new Vector2D(Math.sin(angle)*(currentSpeed*deltaSeconds),Math.cos(angle)*(currentSpeed*deltaSeconds));`

Since there is no magnitude.  Also that leaves me to believe that the constructor for Vector2D would need 3 parameters? Right now I only have x,y.  I would need to add a third parameter that takes magnitude?

@Kieran
Thanks, but I have to be honest and say that SimonH's example was a clear explanation that now should keep making me think that a vector is how you move .  But yea I'm thinking the same thing here when you - well everyone says - when you talk about velocity.  I understand it has a direction but the magnitude is literally the problem.  It is confusing me.
Magnitude is the hypotenuse of the sides a and b. Direction is the angle.

I think of velocity in terms of a point.  For example lets say we went ahead and said for a really basic rendering of the move method that x += 5, and y += 5.  This makes me think that velocity = 5px/seconds for example, I don't see the connection to magnitude.
The magnitude is sqrt(5*5+5*5) and the direction is 45 degrees.

SimonH
 « Reply #35 - Posted 2011-03-27 12:43:04 »

The example really helps clear up my misconception of vectors, and if I may be so bold to say so - would a simple
 1  2  3 `public static Point add(Point p, Vector2D v) {    return new Point(p.x + v.x, p.y + v.x);}`
be the conversion to add the vector to the point?
Well, you could do it that way, but it's conventional to use Vector2D to hold both points and vectors and use their naming to remind you which is which (ie position is a point, direction is a vector, though they're both stored as Vector2D)

Quote
I'd like one thing still cleared up though. Since a vector equals a direction and a magnitude, then isn't the following statement wrong?
 1 `velocity = new Vector2D(direction.getX() * currentSpeed * deltaSeconds, direction.getY() * currentSpeed * deltaSeconds);`

Since there is no magnitude.  Also that leaves me to believe that the constructor for Vector2D would need 3 parameters? Right now I only have x,y.  I would need to add a third parameter that takes magnitude?
There is magnitude - the 'direction' vector has a magnitude of 1 (from cos,sin) which you multiply by speed*dt, so 'velocity' has a magnitude of 1*speed*dt - which is what you want - the car will move 'speed*dt' units in 'direction's direction (if you follow me!)
Example: Vector2D(2,2) can either be a point at 2,2 or it can be a vector with magnitude sqrt(2*2+2*2) and a direction of 45' from where it starts. So the (5,5) velocity vector you mention has a magnitude of sqrt(5*5+5*5) = sqrt(50) = 7.07, and has a direction of 45'.
I'd be worth you reading up on vectors to get yourself clear on them - you're very nearly there!

People make games and games make people
dishmoth
 « Reply #36 - Posted 2011-03-27 20:21:01 »

My attempt at a very basic summary:

A (two-dimensional) vector is a pair of numbers (a,b).
Vectors can be added:  (a,b) + (c,d) = (a+c,b+d).
A vector can be multiplied by a scalar:  s*(a,b) = (s*a,s*b).
The magnitude (or length) of vector (a,b) equals sqrt(a*a+b*b).  (The magnitude cannot be less than zero.)
The zero vector is (0,0).  Its magnitude is zero.
If a vector has magnitude equal to one, then it is a unit vector.
You can normalize any vector (except the zero vector) by dividing it by its magnitude: (c,d) = (a,b)/sqrt(a*a+b*b).  The result is a unit vector.
Any unit vector can be represented by an angle: (a,b) = (cos(theta),sin(theta)).  The angle theta equals atan2(b,a).
You can think of both unit vectors and angles as (equivalent) ways of representing direction.
So, for any vector you can calculate its magnitude, and normalize it to find its direction (unit vector).  (The zero vector is the exception; you can't normalize it, it doesn't have a direction.)
I think this is what you mean when you say that "a vector equals a direction and a magnitude".  In fact, any pair of numbers equals a direction and a magnitude if you want to think of it like that.

Are there any bits of that that don't make sense?
Simon

dishmoth
 « Reply #37 - Posted 2011-03-27 20:44:41 »

Does this leave position to be a unit vector also?  Since position doesn't really have a magnitude (unless its the size of the image?).

A position is a vector - but for this to make sense you have to define a special position called the origin.  The origin has coordinates (0,0).  In your game the origin is the position of the top-left corner of the window, since that's where Java2D happens to put it.

A vector for a position is the step you have to take to get from the origin to that position.  The vector's magnitude is the distance from the origin to the position.  The vector's direction is the direction from the origin to the position.

Knowing the magnitude and direction of a position relative to the top-left corner of the window is generally not that useful.  But, useful or not, a position vector still has a magnitude and direction.

Simon

CyanPrime
 « Reply #38 - Posted 2011-03-28 02:23:14 »

This is over my head, can someone explain it to me better? http://mathworld.wolfram.com/Reflection.html
bobjob

JGO Knight

Medals: 12
Projects: 4

David A M

 « Reply #39 - Posted 2011-03-28 03:19:21 »

This is over my head, can someone explain it to me better? http://mathworld.wolfram.com/Reflection.html
cyan this is probably best discussed in another thread, titled reflection, and maybe state what areas dont you understand.
Are you programming in 3D now? Do you understand what "normals" are?

but yeah like I said maybe start it in a new thread and people who have had experience with reflection should be able to help you.
ra4king

JGO Kernel

Medals: 507
Projects: 3
Exp: 5 years

I'm the King!

 « Reply #40 - Posted 2011-03-28 09:14:13 »

Haha, I believe I'm in the same pool as CyanPrime here

Junior Devvie

 « Reply #41 - Posted 2011-04-03 21:15:46 »

Alright, alright, so I think I've got it understood now that I fiddled with it/added it (Vectors and Points) to my code, thus ending up with position as a Point and velocity being a Vector.  Having changed position to being a Point instead of a Vector causes a problem though and I can't seem to find out why.  I think it has to do with setLocation(double x, double y) being converted to integers inside the Point class, but it causes a problem while I try to rotate the car.  When position was a Vector I didn't have this problem, even when type casting and rounding the x and y in my car class.

Here is a snippet of the current code.

This is part of my move function inside the car class.
 1  2 `velocity = new Vector2D(Math.sin(Math.toRadians(carAngle)) * (currentSpeed * deltaSeconds), -Math.cos(Math.toRadians(carAngle)) * (currentSpeed * deltaSeconds));position = Vector2D.add(position, velocity);`

This is the part of the Vector class.
 1  2  3  4  5 `public static Point add(Point p, Vector2D v) {   Point newP = new Point();   newP.setLocation(v.x + p.x, v.y + p.y);   return newP;}`

and this is the part  of the render function within my car class.
 1  2  3  4  5  6 `AffineTransform savedAT = g.getTransform();AffineTransform newAT = AffineTransform.getRotateInstance(Math.toRadians(carAngle),   position.getX(), position.getY());      g.setTransform(newAT);g.drawImage(carImage, (int) Math.round(position.getX()), (int)Math.round(position.getY()), null);g.setTransform(savedAT);`

I'm pretty sure the rotation is messed up because of the getX() and getY() functions of the Point class, or it can be the problem when I use setLocation from the Point class in my car constructor... as follows

 1  2  3  4  5  6  7  8 `public Car() {   health = 100;   score = 0;   startX = 40.0;   startY = 480.0;   position = new Point();   position.setLocation(startX, startY);   }`

Anyone got any thoughts as to why rotation is acting buggy?
ra4king

JGO Kernel

Medals: 507
Projects: 3
Exp: 5 years

I'm the King!

 « Reply #42 - Posted 2011-04-03 23:03:58 »

I think you've found the solution to your problem all by yourself: use double for the position instead of int by using java.awt.geom.Point2D.Double instead of java.awt.Point.

Junior Devvie

 « Reply #43 - Posted 2011-04-04 01:39:47 »

Hahahaha, thanks! works like a charm now , didn't know about Point2D
ra4king

JGO Kernel

Medals: 507
Projects: 3
Exp: 5 years

I'm the King!

 « Reply #44 - Posted 2011-04-04 01:58:30 »

I also learned a lot from this thread too

SimonH
 « Reply #45 - Posted 2011-04-04 03:04:10 »

This is the part of the Vector class.
 1  2  3  4  5 `public static Point add(Point p, Vector2D v) {   Point newP = new Point();   newP.setLocation(v.x + p.x, v.y + p.y);   return newP;}`
Nooo! Don't do this! Vectors and points are abstract concepts, Vector2D and awt.Point are concrete things - they are very different! When I talked about 'points' and 'vectors' I was talking in the abstract, ie how to think about them. I wasn't talking about how you should represent them in code. In most contexts always use Vector2D to store information whether it's a 'location' or a 'vector'. Only convert values to int when you absolutely have to.

People make games and games make people

Junior Devvie

 « Reply #46 - Posted 2011-04-05 04:45:21 »

So you are telling me I should basically keep Points inside the car class itself instead of mixing it up with Vector2D??? or should I use Vector2D to represent position and totally omit Point?
ra4king

JGO Kernel

Medals: 507
Projects: 3
Exp: 5 years

I'm the King!

 « Reply #47 - Posted 2011-04-05 04:56:22 »

Jeez Simon, do you have to confuse us further

Why would you use a Vector to represent a position?

Roquen

JGO Kernel

Medals: 517

 « Reply #48 - Posted 2011-04-05 05:57:03 »

Because it's nice to understand the difference in how things work mathematically so you can work algebraically but (unless there's a good reason) no need to implement them as individual classes (at least in OO).  Or perhaps you do, but the class hierarchy is mathematically illogical simply because it's a better fit from a coding perspective.
dishmoth
 « Reply #49 - Posted 2011-04-05 06:26:48 »

should I use Vector2D to represent position and totally omit Point?
Yes.

Quote from: ra4king
Why would you use a Vector to represent a position?

ra4king

JGO Kernel

Medals: 507
Projects: 3
Exp: 5 years

I'm the King!

 « Reply #50 - Posted 2011-04-05 06:43:20 »

Quote from: ra4king
Why would you use a Vector to represent a position?
Ah yes found it
So magnitude is sqrt(a*a+b*b) and direction is in degrees?

delt0r

JGO Wizard

Medals: 143
Exp: 18 years

Computers can do that?

 « Reply #51 - Posted 2011-04-05 08:42:21 »

I must admit that you guys make for confusing reading. I haven't read everything here so sorry if I missed something.

I think its important to note, that when we do real mathematics, things have a *lot* of context which can be useful in code. We often will represent a position in a coordinate space with a vector (lets call it R). We have a lot of context here (not always explicit and often generic). The coordinate system, the dimension, and most importantly that we are *interpreting* R as a position. In real code we may want to enforce that R is a position with type information so we only use it where it makes sense. ie have a class Position.

Of course in other cases we may just want a generic Vector class. Whats best depends on the use case.

We see this in math programs like R  that allow all sorts of conversions from one type to another.  You can't do everything with a single "type" but you can pretty much convert most things. This makes the cast explicit and perhaps makes the coder think about if what one is doing makes sense.

For my code at least: I have seen my enemy, and he is me. So trying to enforce correct usage where I can is typically worth it.

I have no special talents. I am only passionately curious.--Albert Einstein
ra4king

JGO Kernel

Medals: 507
Projects: 3
Exp: 5 years

I'm the King!

 « Reply #52 - Posted 2011-04-05 08:45:49 »

Thanks delt0r, makes sense

SimonH
 « Reply #53 - Posted 2011-04-05 11:27:02 »

should I use Vector2D to represent position and totally omit Point?
Yes - it keeps the code a lot cleaner and less error-prone. Simply use sensible variable naming to remind you what things are.
After all, it doesn't really matter how the data is stored, what matters is that you understand what the data represents.
There are other advantages to doing things this way which I won't go into here but which you'll no doubt discover if you start to use vectors a lot!

People make games and games make people
Roquen

JGO Kernel

Medals: 517

 « Reply #54 - Posted 2011-04-05 11:59:49 »

So magnitude is sqrt(a*a+b*b) and direction is in degrees?

Most commonly you'll think about 2D vectors in rectangular form: (a,b), where this is explictly the "direction" and the magnitude (m) is as you've stated.  Another way to think is in polar form: (m,t), where m is the magnitude and "t" in the angle is some measure, of which degrees is one possible choice.
namrog84

JGO Ninja

Medals: 46
Projects: 4

Keep programming!

 « Reply #55 - Posted 2011-04-05 15:09:18 »

I am a mechanical engineer(profession and bachelors). I learned a lot and also use vectors and a lot of 3d spatial things on a daily basis.

Unfortunately, wolfram and many other math and spatial sites often show the "complete" or "advanced" picture of things,  where their examples are far more complex(albeit complete) than what is actually necessary to understand what you actually need it for.

I looked around on the internet a lot, and there is clearly a lot of examples and pictures that I feel are poorly drawn when describing vectors, that would definitely lead to confusion. I would highly recommend just keep at it! It will sink in!

Co-Pilot Roger Murdock(to Capt. Oveur): We have clearance, Clarence.
Capt. Oveur: Roger, Roger. What's our vector, Victor?

"Experience is what you get when you did not get what you wanted"

Junior Devvie

 « Reply #56 - Posted 2011-04-06 21:22:29 »

should I use Vector2D to represent position and totally omit Point?
Yes.

should I use Vector2D to represent position and totally omit Point?
Yes - it keeps the code a lot cleaner and less error-prone. Simply use sensible variable naming to remind you what things are.
After all, it doesn't really matter how the data is stored, what matters is that you understand what the data represents.
There are other advantages to doing things this way which I won't go into here but which you'll no doubt discover if you start to use vectors a lot!

Alright, so I've changed the Vector2D class and the car class to only use Vectors and not Points as mentioned, and it does keep the code much cleaner and less error prone.

So I've been trying to find out the direction in angles, as this is one of the main things that represents a vector! .  My car is moving from the origin which is set through my car constructor Vector2D position = new Vector2D(40,480); and I believe I've hit a road block.  The code is updated in my move method

 1  2  3  4 `...velocity = new Vector2D(Math.sin(Math.toRadians(carAngle)) * (currentSpeed * deltaSeconds), -Math.cos(Math.toRadians(carAngle)) * (currentSpeed * deltaSeconds));position = Vector2D.add(position, velocity);...`

My understanding of the following two statements it seems hasn't sunk in.

Quote
You can normalize any vector (except the zero vector) by dividing it by its magnitude: (c,d) = (a,b)/sqrt(a*a+b*b).  The result is a unit vector.
Any unit vector can be represented by an angle: (a,b) = (cos(theta),sin(theta)).  The angle theta equals atan2(b,a).

To get the angle do I need to normalize the vector first? If so it should be pretty simple giving

 1  2  3  4  5  6  7  8  9  10 `public Vector2D normalize() {   double dummyx, dummyy;   dummyx = x;   dummyy = y;         dummyx /= getMagnitude();   dummyy /= getMagnitude();         return new Vector2D(dummyx, dummyy);}`

the part that gets me confused is the next to get the angle.  This is what I have

 1  2  3 `public double getAngle() {   return Math.atan2(y, x);}`

I'm pretty sure that is the problem with trying to find the angle because I'm getting bogus values. (and if normalization needs to occur first then it  would be return Math.atan2(normalizedVector.y, normalizedVector.x)) ?

In addition to getting the angle, I've been trying to figure out how to reverse the direction of the vector (Which should be simple!).  From what I've read it seems that to reverse the direction a simple scaling operation on the vector with negative 1 should do the trick.  Something around these lines?

 1  2  3  4 `public void scale(int scaleFactor) {   x *= scaleFactor;   y *= scaleFactor;}`

I don't get how that works because if you scale a vector with negative 1 you will just have the resulting negative coordinates.  I think once these two problems are solved I will see a light at then end of the tunnel, but till then I can't seem to figure out what is going on.

Oh, and a quick side note: I've seen so many people use floats instead of doubles for positioning.  Whats the reasoning behind it and should I change the variables to represent floats instead?
DzzD
 « Reply #57 - Posted 2011-04-06 21:26:38 »

 1 `To get the angle do I need to normalize the vector first? If so it should be pretty simple giving`

no, but do you notice it is radian not degree ?

 1 `Oh, and a quick side note: I've seen so many people use floats instead of doubles for positioning.  Whats the reasoning behind it and should I change the variables to represent floats instead?`

nowadays float is better suitable for hardware, but personnaly I prefer double as it give a lot higer resolution than float and enable NaN (matematical unresolvable) gesture

lhkbob

JGO Knight

Medals: 32

 « Reply #58 - Posted 2011-04-06 22:53:06 »

This was code ra4king gave you a bit ago and you've been using it since, but it has a bug in it.
 1  2  3  4 `...velocity = new Vector2D(Math.sin(Math.toRadians(carAngle)) * (currentSpeed * deltaSeconds), -Math.cos(Math.toRadians(carAngle)) * (currentSpeed * deltaSeconds));position = Vector2D.add(position, velocity);...`

If you're creating an (a, b) vector from an angle (in this case, carAngle) and magnitude (in this case, currentSpeed * deltaSeconds) you want to have (a, b) = (magnitude * cos(angle), magnitude * sin(angle)) but right now you have them swapped and are using sin in your x coordinate's equation, and cos in your y's.

As DzzD hinted at, Math.atan2 and Math.atan return angle values in radians and not degrees. If you want degrees, just use Math.toDegrees(Math.atan2(y, x)).

Also, you do not need to normalize the vector before getting the angle.  Math.atan and Math.atan2 both compute the arctan function, which in math takes a single scalar: arctan(y / x).  If m is the magnitude of (x, y), then arctan( (y/m) / (x/m) ) = arctan( (y / x) * (1/m)/(1/m) ) = arctan(y / x)

Math.atan2 separates the arguments so you don't accidentally divide by 0 and you can use the signs on y and x to determine which quadrant the angle should be in.

ra4king

JGO Kernel

Medals: 507
Projects: 3
Exp: 5 years

I'm the King!

 « Reply #59 - Posted 2011-04-07 00:59:16 »

If you're creating an (a, b) vector from an angle (in this case, carAngle) and magnitude (in this case, currentSpeed * deltaSeconds) you want to have (a, b) = (magnitude * cos(angle), magnitude * sin(angle)) but right now you have them swapped and are using sin in your x coordinate's equation, and cos in your y's.
Oh good catch! Didn't notice that silly error.
But, is that a negative I see before the Math.cos? Why?

Pages: 1 [2] 3 4 5
 ignore  |  Print

 nelsongames (12 views) 2018-04-24 18:15:36 nelsongames (10 views) 2018-04-24 18:14:32 ivj94 (586 views) 2018-03-24 14:47:39 ivj94 (49 views) 2018-03-24 14:46:31 ivj94 (383 views) 2018-03-24 14:43:53 Solater (63 views) 2018-03-17 05:04:08 nelsongames (110 views) 2018-03-05 17:56:34 Gornova (159 views) 2018-03-02 22:15:33 buddyBro (706 views) 2018-02-28 16:59:18 buddyBro (93 views) 2018-02-28 16:45:17
 KaiHH 13x ByerN 11x SHC 10x NuclearPixels 10x Zemlaynin 10x Guerra2442 6x Damocles 6x VaTTeRGeR 5x ags1 4x Spasi 4x orangepascal 4x philfrei 4x mesterh 3x princec 3x ndnwarrior15 3x Springrbua 2x
 Java Gaming Resourcesby philfrei2017-12-05 19:38:37Java Gaming Resourcesby philfrei2017-12-05 19:37:39Java Gaming Resourcesby philfrei2017-12-05 19:36:10Java Gaming Resourcesby philfrei2017-12-05 19:33:10List of Learning Resourcesby elect2017-03-13 14:05:44List of Learning Resourcesby elect2017-03-13 14:04:45SF/X Librariesby philfrei2017-03-02 08:45:19SF/X Librariesby philfrei2017-03-02 08:44:05
 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