static public float GetMultiplierFillByMultiplier(this float item, float target, float multiplier) { return(Mathq.Pow( multiplier, item.GetPowerFillByMultiplier(target, multiplier) )); }
static public IEnumerable <Tuple <int, int, RectF2> > GetCroppedGridChunkInfos(this RectF2 item, VectorF2 cell_size) { int width_in_cells = Mathq.CeilToInt(item.GetWidth() / cell_size.x); int height_in_cells = Mathq.CeilToInt(item.GetHeight() / cell_size.y); for (int y = 0; y < height_in_cells; y++) { for (int x = 0; x < width_in_cells; x++) { yield return(Tuple.New(x, y, item.GetCroppedGridChunk(x, y, cell_size))); } } }
static public IEnumerable <T> SubdividePathToLength <T>(this IEnumerable <T> item, float maximum_inter_length, Operation <float, T, T> distance_operation, Operation <T, T, T, float> interpolate_operation) { return(item.ConvertConnections(delegate(T sub_item1, T sub_item2) { float length = distance_operation(sub_item1, sub_item2); if (length > maximum_inter_length) { int number_divisions = Mathq.CeilToInt(length / maximum_inter_length); return Floats.Line(0.0f, 1.0f, number_divisions, false) .Convert(f => interpolate_operation(sub_item1, sub_item2, f)); } return sub_item1.WrapAsEnumerable(); })); }
static public float CalculateTriangleArea(this VectorF2 point1, VectorF2 point2, VectorF2 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 IGrid <T> SoftCircle <T>(int radius, float hardness, float power, Operation <T, float> operation) { float transition_interval = 1.0f - hardness; return(Circle <T>(radius, delegate(float distance) { float weight = 0.0f; if (distance <= 1.0f) { weight = 1.0f; if (distance > hardness) { float transition_distance = distance - hardness; float transition_percent = transition_distance / transition_interval; weight = Mathq.Pow(transition_percent, power).InterpolateWith(1.0f, 0.0f); } } return operation(weight); })); }
static public int GetPowerFillByMultiplier(this float item, float target, float multiplier) { return(Mathq.FloorToInt( Mathq.Log(multiplier, target / item) )); }
static public float GetMagnitude(this VectorI2 item) { return(Mathq.Sqrt(item.GetSquaredMagnitude())); }
static public float GetFloor(this float item) { return(Mathq.Floor(item)); }
static public float GetCeil(this float item) { return(Mathq.Ceil(item)); }
static public float GetAtPrecision(this float item, int exponent) { return(item.GetQuantizedMin((float)Mathq.Pow(10, exponent))); }
static public decimal GetAtPrecision(this decimal item, int exponent) { return(item.GetQuantizedMin((decimal)Mathq.Pow(10, exponent))); }
static public double GetAtPrecision(this double item, int exponent) { return(item.GetQuantizedMin((double)Mathq.Pow(10, exponent))); }
static public float QuintIn(float x) { return(Mathq.IntPow(x.BindPercent(), 4)); }
static public float CubicIn(float x) { return(Mathq.IntPow(x.BindPercent(), 3)); }
static public float Ramp(float x) { return(x - Mathq.Floor(x)); }