raSystem  1.0 bata
raCollide.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
6  {
7  raVector3 dist;
8  dist = p1->GetPosition() - p2->GetPosition();
9 
11  {
12  raVector3 v1 = p1->GetVelocity();
13  raVector3 v2 = p2->GetVelocity();
14 
15  float m1 = p1->GetMass();
16  float m2 = p2->GetMass();
17 
18  raVector3 v1New, v2New, a;
19 
20  a = raVector3Normalize(dist);
21 
22  raVector3 n;
23  n = raVector3Cross(p1->GetVelocity(), p2->GetVelocity());
24 
25  if((float)n.x == (float)n.y && (float)n.x == (float)n.z && (float)n.x == 0.0f) // Eindimensional
26  {
27  v1New = ((m1 - m2) * v1 + 2 * m2 * v2) / (m1 + m2);
28  v2New = ((m2 - m1) * v2 + 2 * m1 * v1) / (m1 + m2);
29  }
30  else
31  {
32  n = raVector3Normalize(n);
33 
34  raVector3 b;
35  b = raVector3Cross(n, a);
36 
37  float ab = raVector3Dot(a, b);
38  float v11 = (raVector3Dot(v1, a) - raVector3Dot(v1, b) * ab) /
39  ( 1 - ab * ab);
40  float v12 = (raVector3Dot(v1, b) - raVector3Dot(v1, a) * ab) /
41  ( 1 - ab * ab);
42 
43  float v21 = (raVector3Dot(v2, a) - raVector3Dot(v2, b) * ab) /
44  ( 1 - ab * ab);
45  float v22 = (raVector3Dot(v2, b) - raVector3Dot(v2, a) * ab) /
46  ( 1 - ab * ab);
47 
48  v1New = a * ((m1 - m2) * v11 + 2 * m2 * v21) / (m1 + m2) + b * v12;
49  v2New = a * ((m2 - m1) * v21 + 2 * m1 * v11) / (m1 + m2) + b * v22;
50  }
51 
52  p1->SetVelocity(v1New.x, v1New.y, v1New.z);
53  p2->SetVelocity(v2New.x, v2New.y, v2New.z);
54 
55  return true;
56  }
57  return false;
58  }
59 };
raFloat y
Definition: raVector3.h:13
raFloat x
Definition: raVector3.h:12
raVector3 raVector3Cross(const raVector3 &v1, raVector3 &v2)
Definition: raVector3.h:62
#define RAPI
Definition: raMain.h:11
void SetVelocity(float x, float y, float z)
Definition: raPhysik.cpp:120
raVector3 raVector3Normalize(const raVector3 &v)
Definition: raVector3.h:60
raFloat z
Definition: raVector3.h:14
RAPI bool raColPhisicsObject(raPhysik *p1, raPhysik *p2)
Definition: raCollide.cpp:5
float GetMass()
Definition: raPhysik.cpp:111
float GetBoundingSphereRadius()
Definition: raPhysik.cpp:115
raFloat raVector3Lenght(const raVector3 &v)
Definition: raVector3.h:59
raVector3 GetPosition()
Definition: raPhysik.cpp:100
raVector3 GetVelocity()
Definition: raPhysik.cpp:107
raFloat raVector3Dot(const raVector3 &v1, const raVector3 &v2)
Definition: raVector3.h:64