Java-Gaming.org Hi !
 Featured games (90) games approved by the League of Dukes Games in Showcase (683) Games in Android Showcase (196) games submitted by our members Games in WIP (751) 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
 Vector math question  (Read 1716 times) 0 Members and 1 Guest are viewing this topic.
kidluff

Senior Newbie

 « Posted 2006-01-20 11:08:57 »

Since its hard to describe, so I drew it out:

Can someone help me code this pleease?
Mr EEK

Senior Newbie

 « Reply #1 - Posted 2006-01-20 11:31:12 »

You could find the "surface normal" vector as a cross b and then rotate a around that normal vector by PI/2.

Using LWJGL's vector classes, something vaguely like:

Vector3f surfaceNormal = new Vector3f();
Vector3f.cross(a, b, surfaceNormal);

Matrix4f rotateAroundNormal = new Matrix4f();
Matrix4f.rotate((float)Math.PI/2.0f, surfaceNormal, rotateAroundNormal);

Vector n = new Vector3f();
Matrix4f.mul(a, rotateAroundNormal, n);

(I don't expect the code above to work first time, I haven't tested (or even compiled) it  ;-)

Junior Devvie

Java games rock!

 « Reply #2 - Posted 2006-01-21 00:52:52 »

Or:

calculate the cross product m := a x b. This is pointing out of the plane you want your vector in. Now you need something to make it perpendicular to both m (so it is in your desired plane) and a. One such candidate is n := a x m.

In total, n = a x (a x b).

Ever heard of the "BAC-CAB" rule? It allows any double cross product (i.e. A x (B x C)) which would ordinarily involve the calculation of around the same complexity as two 3x3 matrices, to be expressed as simple inner products. In general, A x (BxC) = B(A.C) - C(A.B), where "." denotes the inner product (perhaps the term "dot" product is more familiar). Therefore,

n = a(a.b) - b(a.a).
 Games published by our own members! Check 'em out!
Mr EEK

Senior Newbie

 « Reply #3 - Posted 2006-01-21 15:27:53 »

That's a neat solution, much more efficient than mine.

Junior Devvie

Java games rock!

 « Reply #4 - Posted 2006-01-22 03:19:03 »

Hehe, thanks. But really it's less general (and no more simple) than the Gram-Schmidt orthogonalization procedure which would also have been applicable. The cross products are cooler, though, because the method works even if one of the vectors is zero. Basically, the Gram-Schmidt method works by subtracting the projection of b onto a from b (which is not defined if a = 0):

n := b - [projection of b onto a] = b - a (a.b) /(a.a).

Then the previous result would follow directly from multiplying by (a.a). Normally, however, one would divide n by its length to obtain a unit vector. The Gram-Schmidt orthogonalization procedure consists of repeating this method for any number of vectors, so you can slowly form an orthonormal (i.e. all unit vectors and set and all perpendicular) set. Works in (vector) spaces of any (finite) dimension.

Sorry about all the math stuff, but no one ever talks about anything interesting in the physics forum.
arne

Senior Devvie

money is the worst drug- we should not let it rule

 « Reply #5 - Posted 2006-01-22 10:25:09 »

Sorry about all the math stuff, but no one ever talks about anything interesting in the physics forum.
I would, if someone would have nice questions, too.
Maybe you'd like help us with JOODE? There are many parts that have to do with math

the bac-cab trick is nice - I'll remember it

:: JOODE :: Xith3d :: OdeJava ::
Pages: [1]
 ignore  |  Print

You cannot reply to this message, because it is very, very old.

 orrenravid (217 views) 2016-07-16 03:57:23 theagentd (288 views) 2016-07-11 14:28:54 Hydroque (375 views) 2016-07-06 05:56:57 Hydroque (527 views) 2016-07-03 08:52:54 GrandCastle (399 views) 2016-07-01 09:13:47 GrandCastle (392 views) 2016-07-01 09:09:45 CopyableCougar4 (445 views) 2016-06-25 16:56:52 Hydroque (420 views) 2016-06-22 02:17:53 SwampChicken (386 views) 2016-06-20 13:22:57 SwampChicken (306 views) 2016-06-20 13:22:49
 Archive 30x Slyth2727 24x Brynn 23x EgonOlsen 22x orangepascal 22x TritonDreyja 21x orange451 20x DavidBVal 19x Spasi 18x KaiHH 12x Opiop 11x princec 11x LiquidNitrogen 11x Phased 11x Longor1996 10x ziozio 10x
 Making a Dynamic Plugin Systemby Hydroque2016-06-25 00:13:25Java Data structures2016-06-13 21:22:09Java Data structures2016-06-13 21:20:42FPS Camera Tutorialby Hydroque2016-05-22 05:40:58Website offering 3D Models specifically for games for freeby vusman2016-05-18 17:23:09Website offering 3D Models specifically for games for freeby vusman2016-05-09 08:50:56Website offering 3D Models specifically for games for freeby vusman2016-05-06 11:10:21Website offering 3D Models specifically for games for freeby vusman2016-04-29 12:56:17
 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