buildPlaneVectors function
void
buildPlaneVectors(
- Vector3 planeNormal,
- Vector3 u,
- Vector3 v
Implementation
void buildPlaneVectors(final VM.Vector3 planeNormal, VM.Vector3 u,
VM.Vector3 v) {
if (planeNormal.x.abs() > 0) {
// choose u in x-y plane
final double a =
planeNormal.x * planeNormal.x + planeNormal.y * planeNormal.y;
final double k = 1.0 / Math.sqrt(a); // note: a != 0 because x^2 > 0
u
..x = -planeNormal.y * k
..y = planeNormal.x * k
..z = 0.0;
v
..x = -planeNormal.z * planeNormal.x * k
..y = -planeNormal.z * planeNormal.y * k
..z = a * k;
} else {
// choose u in y-z plane
final double a =
planeNormal.y * planeNormal.y + planeNormal.z * planeNormal.z;
final double k = 1.0 / Math.sqrt(a);
u
..x = 0.0
..y = -planeNormal.z * k
..z = planeNormal.y * k;
v
..x = a * k
..y = -planeNormal.x * (planeNormal.y * k)
..z = planeNormal.x * (-planeNormal.z * k);
}
}