public double MakeValue(VarianceModel variance, double progress) { var isTopHalf = GetRandom() >= 0.5 ? -1 : 1; var randomnessComponent = Math.Pow(GetRandom(), isTopHalf * variance.Randomness); var progressionComponent = Math.Pow(progress, variance.Progression); var desiredValue = randomnessComponent * progressionComponent; var normalizedValue = Math.Min(1, desiredValue); return(normalizedValue); }
public ActionResult UpsertVariance(VarianceModel model) { Guid calculationId; if (!Guid.TryParse(model.calculation.id, out calculationId)) { return(Json(new { model.id, sucess = false }, JsonRequestBehavior.DenyGet)); } var id = model.id; var update = true; var variance = context.Variances.Find(id) ?? context.Variances .FirstOrDefault(v => (v.CalculationId == calculationId) && (v.ColumnName == model.columnName)); if (variance == null) { update = false; variance = context.Variances.Create(); } variance.CalculationId = calculationId; variance.ColumnName = model.columnName; variance.MaxValue = (model.minValue > model.maxValue) ? model.minValue : model.maxValue; variance.MinValue = (model.maxValue < model.minValue) ? model.maxValue : model.minValue; if (!update) { variance = context.Variances.Add(variance); } context.SaveChanges(); return(Json(new { id = variance.Id, sucess = true }, JsonRequestBehavior.DenyGet)); }
public double ProportionAlong(VarianceModel variance, double progress, double minValue, double maxValue) => minValue + MakeValue(variance, progress) * (maxValue - minValue);