public Point3D GetValue3D(double d) { //Для вычисления значения в точке нужно знать угол излома в данной точке //Зная угол излома, будем знать какой фильтр применять //Вычисляем сглаженное значение угла в точке d (Значение 1 - соответствует углу 2*PI) var corner = _blurCompiler.GetValue(_cornerInterpolation.GetValue, d); var scale = corner; //corner = GetCornerDerValue(d); //scale = Math.Max(0, 1 - corner); return(_blurCompiler.GetValue3D(_linearCompiler.GetValue3D, d, scale)); }
public BezierCurve Resolve(double d0, double d1) { var p0 = _blurCompiler.GetValue3D(_linearCompiler.GetValue3D, d0); var p3 = _blurCompiler.GetValue3D(_linearCompiler.GetValue3D, d1); var delta = 0.000001D;// *p0.Distance(p3); var s0 = _blurCompiler.GetDerivative(_linearCompiler.GetValue3D, d0, delta); var s1 = _blurCompiler.GetDerivative(_linearCompiler.GetValue3D, d1, delta); var step = (d1 - d0) / 3D; var m0 = _blurCompiler.GetValue3D(_linearCompiler.GetValue3D, d0 + step); var m1 = _blurCompiler.GetValue3D(_linearCompiler.GetValue3D, d0 + step * 2); return(BezierCurve.ResolveXY(p0.ToPointD(), m0.ToPointD(), m1.ToPointD(), p3.ToPointD(), new PointD(s0.X, s0.Y), new PointD(s1.X, s1.Y))); }