82 float xsum = 0.0f, ysum = 0.0f, zsum = 0.0f;;
83 float xxsum = 0.0f, xysum = 0.0f, xzsum = 0.0f;
84 float yysum = 0.0f, yzsum = 0.0f, zzsum = 0.0f;
86 for (i = 0; i < n; i++)
92 xxsum += points[i].X * points[i].X;
93 xysum += points[i].X * points[i].Y;
94 xzsum += points[i].X * points[i].Z;
96 yysum += points[i].Y * points[i].Y;
97 yzsum += points[i].Y * points[i].Z;
98 zzsum += points[i].Z * points[i].Z;
101 float xmean = xsum/n;
102 float ymean = ysum/n;
103 float zmean = zsum/n;
104 float xxcov = xxsum/n - xmean*xmean;
105 float xycov = xysum/n - xmean*ymean;
106 float xzcov = xzsum/n - xmean*zmean;
107 float yycov = yysum/n - ymean*ymean;
108 float yzcov = yzsum/n - ymean*zmean;
109 float zzcov = zzsum/n - zmean*zmean;
114 eig.Matrix(0,0) = xxcov;
115 eig.Matrix(0,1) = xycov;
116 eig.Matrix(0,2) = xzcov;
117 eig.Matrix(1,0) = xycov;
118 eig.Matrix(1,1) = yycov;
119 eig.Matrix(1,2) = yzcov;
120 eig.Matrix(2,0) = xzcov;
121 eig.Matrix(2,1) = yzcov;
122 eig.Matrix(2,2) = zzcov;
127 eig.Eigenvector(0,0),
128 eig.Eigenvector(1,0),
133 eig.Eigenvector(0,1),
134 eig.Eigenvector(1,1),
139 eig.Eigenvector(0,2),
140 eig.Eigenvector(1,2),
145 box.center.x = xmean;
146 box.center.y = ymean;
147 box.center.z = zmean;
158 float amax = 0.0f, bmax = 0.0f, cmax = 0.0f;
159 for (i = 0; i < n; i++)
161 float dx = pt[i].x - box.center.x;
162 float dy = pt[i].y - box.center.y;
163 float dz = pt[i].z - box.center.z;
164 float absdot = float(
WWMath::Fabs(U.x*dx+U.y*dy+U.z*dz));
175 box.axis[0].x = amax*U.x;
176 box.axis[0].y = amax*U.y;
177 box.axis[0].z = amax*U.z;
178 box.axis[1].x = bmax*V.x;
179 box.axis[1].y = bmax*V.y;
180 box.axis[1].z = bmax*V.z;
181 box.axis[2].x = cmax*
W.x;
182 box.axis[2].y = cmax*
W.y;
183 box.axis[2].z = cmax*
W.z;
496 bool intersect =
true;
bool Oriented_Boxes_Collide_On_Axis(const OBBoxClass &box0, const Vector3 &v0, const OBBoxClass &box1, const Vector3 &v1, const Vector3 &axis, float dt)