static public float GetDistance(this Color item, Color other) { item = item.ConvertStraightToPremultiplied(); other = other.ConvertStraightToPremultiplied(); return(Mathq.Sqrt( (item.R - other.R).GetSquared() + (item.G - other.G).GetSquared() + (item.B - other.B).GetSquared() )); }
static public float FindLargestFixedEdgeCircleCast(Vector2 position, Vector2 direction, float distance, float maximum, int layer_mask = IntBits.ALL_BITS, float margin = Mathq.DEFAULT_SOLVE_MARGIN, int max_iterations = Mathq.DEFAULT_SOLVE_MAX_NUMBER_ITERATIONS) { if (Physics2D.Raycast(position, direction, distance, layer_mask).DidHit() == false) { if (Physics2D.CircleCast(position, maximum, direction, distance, layer_mask).DidHit() == false) { return(maximum); } return(Mathq.FindEdge(0.0f, maximum, r => Physics2D.CircleCast(position, r, direction, distance - r, layer_mask).DidHit(), margin, max_iterations) - margin); } return(0.0f); }
static public float FindLargestFixedEdgeCircleFit(Vector2 position, Vector2 direction, float maximum, int layer_mask = IntBits.ALL_BITS, float margin = Mathq.DEFAULT_SOLVE_MARGIN, int max_iterations = Mathq.DEFAULT_SOLVE_MAX_NUMBER_ITERATIONS) { if (Physics2D.OverlapPoint(position, layer_mask) == null) { if (Physics2D.OverlapCircle(position + direction * maximum, maximum, layer_mask) == null) { return(maximum); } return(Mathq.FindEdge(0.0f, maximum, r => Physics2D.OverlapCircle(position + direction * r, r, layer_mask) == null, margin, max_iterations) - margin); } return(0.0f); }
static public float CalculateTriangleArea(this Vector2 point1, Vector2 point2, Vector2 point3) { float a; float b; float c; point1.GetDistanceTo(point2).Order( point2.GetDistanceTo(point3), point3.GetDistanceTo(point1), out c, out b, out a ); float ab = a - b; float t1 = a + (b + c); float t2 = c - ab; float t3 = c + ab; float t4 = a + (b - c); return(0.25f * Mathq.Sqrt(t1 * t2 * t3 * t4)); }
static public float GetMagnitude(this Vector2 item) { return(Mathq.Sqrt(item.GetSquaredMagnitude())); }