buildPlaneVectors function

void buildPlaneVectors(
  1. Vector3 planeNormal,
  2. Vector3 u,
  3. 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);
  }
}