blob: 2d975669259f4ed7603ba348128b1e9565aa8b93 [file] [log] [blame]
 // Copyright (c) 2015, Google Inc. Please see the AUTHORS file for details. // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. part of vector_math_64; /// 2D dot product. double dot2(Vector2 x, Vector2 y) => x.dot(y); /// 3D dot product. double dot3(Vector3 x, Vector3 y) => x.dot(y); /// 3D Cross product. void cross3(Vector3 x, Vector3 y, Vector3 out) { x.crossInto(y, out); } /// 2D cross product. vec2 x vec2. double cross2(Vector2 x, Vector2 y) => x.cross(y); /// 2D cross product. double x vec2. void cross2A(double x, Vector2 y, Vector2 out) { final tempy = x * y.x; out ..x = -x * y.y ..y = tempy; } /// 2D cross product. vec2 x double. void cross2B(Vector2 x, double y, Vector2 out) { final tempy = -y * x.x; out ..x = y * x.y ..y = tempy; } /// Sets [u] and [v] to be two vectors orthogonal to each other and /// [planeNormal]. void buildPlaneVectors(final Vector3 planeNormal, Vector3 u, Vector3 v) { if (planeNormal.z.abs() > math.sqrt1_2) { // choose u in y-z plane final a = planeNormal.y * planeNormal.y + planeNormal.z * planeNormal.z; final k = 1.0 / math.sqrt(a); u ..x = 0.0 ..y = -planeNormal.z * k ..z = planeNormal.y * k; v ..x = a * k ..y = -planeNormal[0] * (planeNormal[1] * k) ..z = planeNormal[0] * (-planeNormal[2] * k); } else { // choose u in x-y plane final a = planeNormal.x * planeNormal.x + planeNormal.y * planeNormal.y; final k = 1.0 / math.sqrt(a); u ..x = -planeNormal[1] * k ..y = planeNormal[0] * k ..z = 0.0; v ..x = -planeNormal[2] * (planeNormal[0] * k) ..y = planeNormal[2] * (-planeNormal[1] * k) ..z = a * k; } } /// Base class for vectors abstract class Vector { List get storage; }