Dart Documentationutils_math

utils_math library

Properties

final VX_AXIS #

final VX_AXIS = new Vector3(1.0, 0.0, 0.0)

final VY_AXIS #

final VY_AXIS = new Vector3(0.0, 1.0, 0.0)

final VZ_AXIS #

final VZ_AXIS = new Vector3(0.0, 0.0, 1.0)

final VZERO #

final VZERO = new Vector3.zero()

Functions

MinMax extractMinMaxProjection(List<Vector3> vs, Vector3 axis, MinMax out) #

the MinMax use axis as unit vector, and (0,0,0) as origin point.

MinMax extractMinMaxProjection(List<Vector3> vs, Vector3 axis, MinMax out) {
 var p = vs[0].dot(axis);
 out.min = p;
 out.max = p;
 for (int i = 1; i < vs.length; i++) {
   p = vs[i].dot(axis);
   if (p < out.min) out.min = p;
   if (p > out.max) out.max = p;
 }
}

Aabb3 extractAabbPoly2(List<Vector3> vs0, List<Vector3> vs1, Aabb3 out) #

Aabb3 extractAabbPoly2(List<Vector3> vs0, List<Vector3> vs1, Aabb3 out){
 var min = out.min;
 var max = out.max;

 min.setFrom(vs0[0]);
 max.setFrom(vs0[0]);
 var vs = vs0;
 for (int i = vs.length - 1; i > 0 ; --i) {
   var v = vs[i];
   if (min.x > v.x) min.x = v.x;
   if (min.y > v.y) min.y = v.y;
   if (min.z > v.z) min.z = v.z;
   if (max.x < v.x) max.x = v.x;
   if (max.y < v.y) max.y = v.y;
   if (max.z < v.z) max.z = v.z;
 }
 vs = vs1;
 for (int i = vs.length - 1; i >= 0; --i) {
   var v = vs[i];
   if (min.x > v.x) min.x = v.x;
   if (min.y > v.y) min.y = v.y;
   if (min.z > v.z) min.z = v.z;
   if (max.x < v.x) max.x = v.x;
   if (max.y < v.y) max.y = v.y;
   if (max.z < v.z) max.z = v.z;
 }

 return out;
}

Aabb3 extractAabbPoly(List<Vector3> vs, Aabb3 out) #

Aabb3 extractAabbPoly(List<Vector3> vs, Aabb3 out){
 var min = out.min;
 var max = out.max;

 min.setFrom(vs[0]);
 max.setFrom(vs[0]);
 for (int i = vs.length - 1; i > 0 ; --i) {
   var v = vs[i];
   if (min.x > v.x) min.x = v.x;
   if (min.y > v.y) min.y = v.y;
   if (min.z > v.z) min.z = v.z;
   if (max.x < v.x) max.x = v.x;
   if (max.y < v.y) max.y = v.y;
   if (max.z < v.z) max.z = v.z;
 }

 return out;
}

Aabb3 extractAabbDisc2(Vector3 v0, Vector3 v1, double radius, Aabb3 out) #

Aabb3 extractAabbDisc2(Vector3 v0, Vector3 v1, double radius, Aabb3 out){
 var min = out.min;
 var max = out.max;
 if (v0.x < v1.x) {
   min.x = v0.x - radius;
   max.x = v1.x + radius;
 } else {
   min.x = v1.x - radius;
   max.x = v0.x + radius;
 }
 if (v0.y < v1.y) {
   min.y = v0.y - radius;
   max.y = v1.y + radius;
 } else {
   min.y = v1.y - radius;
   max.y = v0.y + radius;
 }
 if (v0.z < v1.z) {
   min.z = v0.z - radius;
   max.z = v1.z + radius;
 } else {
   min.z = v1.z - radius;
   max.z = v0.z + radius;
 }
 //out.min.setValues(math.min(v0.x, v1.x) - radius, math.min(v0.y, v1.y) - radius, math.min(v0.z, v1.z) - radius);
 //out.max.setValues(math.max(v0.x, v1.x) + radius, math.max(v0.y, v1.y) + radius, math.max(v0.z, v1.z) + radius);
}

Aabb3 extractAabbDisc(Vector3 v, double radius, Aabb3 out) #

Aabb3 extractAabbDisc(Vector3 v, double radius, Aabb3 out){
 out.min.setValues(v.x - radius, v.y - radius, v.z - radius);
 out.max.setValues(v.x + radius, v.y + radius, v.z + radius);
}

Vector3 extractCenter(List<Vector3> shape, Vector3 out) #

Vector3 extractCenter(List<Vector3> shape, Vector3 out) {
 out.x = 0.0;
 out.y = 0.0;

 for (int i = 0; i < shape.length; i++) {
   var v = shape[i];
   out.x += v.x;
   out.y += v.y;
 }

 out.x /= shape.length;
 out.y /= shape.length;
 return out;
}

Vector3 lookAt(Vector3 target, Vector3 position3d, Vector3 out, [Vector3 up]) #

return out

Vector3 lookAt(Vector3 target, Vector3 position3d, Vector3 out, [Vector3 up]) {
 up = (up == null) ? VY_AXIS : up;
 var m = makeViewMatrix(position3d, target, up).getRotation();
 // code from (euler order XYZ)
 // https://github.com/mrdoob/three.js/blob/master/src/math/Vector3.js
 out.y = math.asin( clamp(m.row2.x, 1.0, -1.0 ) );
 if ( m.row2.x.abs() < 0.99999 ) {
   out.x = math.atan2( - m.row2.y, m.row2.z );
   out.z = math.atan2( - m.row1.x, m.row0.x );
 } else {
   out.x = math.atan2( m.row1.z, m.row1.y );
   out.z = 0.0;
 }
 return out;
}

bool isSeparated(double minA, double maxA, double minB, double maxB) #

bool isSeparated( double minA, double maxA, double minB, double maxB ) {
 return (maxA < minB) || (maxB < minA);
}

double intervalDistance(double minA, double maxA, double minB, double maxB) #

Calculate the distance between the two intervals

double intervalDistance( double minA, double maxA, double minB, double maxB ) {
 return ( minA < minB ) ? minB - maxA : minA - maxB;
}

double clamp(double v, double max, double min) #

double clamp(double v, double max, double min) => math.min(math.max(v, min), max );

Abstract Classes

Classes