Пример #1
0
        public static double GetBrightnessCurve(double percent, int example = 0)
        {
            // P1 = 0,0
            // C1 = 0.49,0.06
            // P2 = 1,1
            // C2 = 0.44,0.98
            double brightness;

            // Some examples of calculating the brightness curve
            switch (example)
            {
            case 0:
                brightness = -3 * Math.Pow((percent - .66), 4) - 1.3653 * (percent - 1.029);
                break;

            case 1:
                brightness = -5 * Math.Pow((percent - .79), 4) - 2.5 * (percent - 0.79);
                break;

            case 2:
                brightness = -1.4 * Math.Pow((percent - 1), 12) - 1.37 * (percent - 1);
                break;

            case 3:
            {
                var points = new[]
                {
                    new Point(1, 1),
                    new Point(0.44, 0.98),
                    new Point(0.49, 0.06),
                    new Point(0, 0)
                };
                brightness = Curves.GetBezierPoint(percent, points).Y;
            }
            break;

            case 4:
            {
                var points = new[]
                {
                    // \draw (0,0) .. controls (0.5,0.0) and (1,2.2) .. (1,0)
                    new Point(0.0, 0.0),
                    new Point(0.5, 0.0),
                    new Point(1.0, 2.2),
                    new Point(1.0, 0.0)
                };
                brightness = Curves.GetBezierPoint(percent, points).Y;
            }
            break;

            case 5:
            {
                var points = new[]
                {
                    new Point(0, 0),
                    new Point(0, 1.3),
                    new Point(1, 1.3),
                    new Point(1, 0)
                };
                brightness = Curves.GetBezierPoint(percent, points).Y;
            }
            break;

            case 6:
            {
                // \draw (0,0) .. controls (0.6,0.1) and (1,2.2) .. (1,0);
                var points = new[]
                {
                    new Point(0.0, 0.0),
                    new Point(0.6, 0.1),
                    new Point(1.0, 2.2),
                    new Point(1.0, 0.0)
                };
                brightness = Curves.GetBezierPoint(percent, points).Y;
                if (brightness > 1 || brightness < 0)
                {
                    Debug.Print("Something went wrong...");
                }
            }
            break;

            case 7:
            {
                // \draw (1,0) .. controls (-0.3,0) and (0.2,1) .. (0,1);
                var points = new[]
                {
                    new Point(1, 0),
                    new Point(-0.3, 0),
                    new Point(0.2, 1),
                    new Point(0, 1)
                };
                brightness = Curves.GetBezierPoint(percent, points).Y;
            }
            break;

            case 99:
            {
                var points = new[]
                {
                    new Point(1, 0.75),
                    new Point(1, 1),
                    new Point(0.44, 0.98),
                    new Point(0.49, 0.06),
                    new Point(0, 0)
                };
                brightness = Curves.GetBezierPoint(percent, points).Y;
            }
            break;

            default:
                brightness = percent;
                break;
            }
            if (brightness > 1)
            {
                brightness = 1;
            }
            if (brightness < 0)
            {
                brightness = 0;
            }
            return(brightness);
        }