예제 #1
0
        public static double Q(this ScaleFunction scaleFunction, double k, double compression, double n)
        {
            switch (scaleFunction)
            {
            case ScaleFunction.K_0:
                return(2 * k / compression);

            case ScaleFunction.K_1:
                return(0);

            case ScaleFunction.K_1_Fast:
                return(0);

            case ScaleFunction.K_2:
                return(0);

            case ScaleFunction.K_2_NO_NORM:
                return(0);

            case ScaleFunction.K_3:
                return(0);

            case ScaleFunction.K_3_NO_NORM:
                return(0);

            default:
                return(0);
            }
        }
예제 #2
0
        public static double K(this ScaleFunction scaleFunction, double q, double normalizer)
        {
            switch (scaleFunction)
            {
            case ScaleFunction.K_0:
                return(normalizer * q);

            case ScaleFunction.K_1:
                return(0);

            case ScaleFunction.K_1_Fast:
                return(0);

            case ScaleFunction.K_2:
                return(0);

            case ScaleFunction.K_2_NO_NORM:
                return(0);

            case ScaleFunction.K_3:
                return(0);

            case ScaleFunction.K_3_NO_NORM:
                return(0);

            default:
                return(0);
            }
        }
예제 #3
0
        public static double Normalizer(this ScaleFunction scaleFunction, double compresison, double n)
        {
            switch (scaleFunction)
            {
            case ScaleFunction.K_0:
                return(compresison / 2);

            case ScaleFunction.K_1:
                return(0);

            case ScaleFunction.K_1_Fast:
                return(0);

            case ScaleFunction.K_2:
                return(0);

            case ScaleFunction.K_2_NO_NORM:
                return(0);

            case ScaleFunction.K_3:
                return(0);

            case ScaleFunction.K_3_NO_NORM:
                return(0);

            default:
                return(0);
            }
        }
예제 #4
0
        public void DrawBackBuffer(GraphScaleData scaleData)
        {
            if (Hide || _backData == null)
            {
                return;
            }
            float height = ScaleFunction.ScaledHeight(scaleData);

            Matrix4 transform = Matrix4.CreateTranslation(scaleData.XShift, 0, 0) * Matrix4.Scale(2 / scaleData.BaseScale, 2 / height, 1) * Matrix4.CreateTranslation(-1, -1, 0);

            GL.UniformMatrix4(_shaderProgram.UniformTransform, false, ref transform);

            if (_drawMode == BeginMode.Lines || _drawMode == BeginMode.LineLoop || _drawMode == BeginMode.LineStrip)
            {
                GL.LineWidth(2f);
            }
            else if (_drawMode == BeginMode.Points)
            {
                GL.PointSize(2f);
            }

            if (_alphaBlend > 0)
            {
                Color4 col = Color;
                col.A = 1 - _alphaBlend;
                GL.Uniform4(_shaderProgram.UniformColor, col);
            }
            else
            {
                GL.Uniform4(_shaderProgram.UniformColor, Color);
            }

            if (_graphType == GraphType.SolidGraph)
            {
                _backBuffer.SetAttributeInfo(_shaderProgram.AttributeCoord2D, 2);

                _backBuffer.BeginDraw();
                _backBuffer.Draw(_drawMode);
                _backBuffer.EndDraw();

                _backBuffer.SetAttributeInfo(_shaderProgram.AttributeCoord2D, 2, false, 2 * Vector2.SizeInBytes);
                GL.Uniform4(_shaderProgram.UniformColor, Color4.Black);
                GL.LineWidth(1f);

                _backBuffer.BeginDraw();
                _backBuffer.Draw(BeginMode.LineStrip, _backData.Length / 2);
                _backBuffer.EndDraw();
            }
            else
            {
                _backBuffer.BeginDraw();
                _backBuffer.Draw(_drawMode, _backData.Length / 2);
                _backBuffer.EndDraw();
            }
        }
예제 #5
0
        public Position3D Calculate(int row, int col)
        {
            var scaledElementWidth = _elementSize.Width * ScaleFunction.ScaleX(row);
            var elementsFromCenter = (col - ((ElementsPerLine - 1.0) / 2.0));
            var distanceFromCenter = scaledElementWidth * elementsFromCenter;
            var x         = _windowSize.Width / 2 - distanceFromCenter - _elementSize.Width / 2.0;
            var alignment = elementsFromCenter > 0.1
                ? HorizontalAlignment.Right
                : (elementsFromCenter < 0.1 ? HorizontalAlignment.Left : HorizontalAlignment.Center);

            return(new Position3D(x, ScaleFunction.SqueezeFactorY(row) * _elementSize.Height, ScaleFunction.ScaleX(row), ScaleFunction.ScaleY(row), alignment, elementsFromCenter));
        }
예제 #6
0
 public Tout GetValue()
 {
     return(ScaleFunction.Scale(Value));
 }
예제 #7
0
 public Instance(ScaleFunction sf, Vector3 o)
 {
     CalcScale = sf;
     offset = o;
 }
예제 #8
0
        internal double Scale(double value, ScaleFunction scaleFunction)
        {
            /*double non_zero, double abs_sum, double srsos, double column_min, double column_max, double average, double stdev,*/

            var sp = this;

            if (sp == null)
            {
                return(value);
            }

            switch (scaleFunction)
            {
            case ScaleFunction.None: return(value);

            case ScaleFunction.Rescale:


                var x = (RescaleScaleMax - RescaleScaleMin) * (value - sp.ColumnMin);
                var y = sp.ColumnMax - sp.ColumnMin;
                var z = RescaleScaleMin;

                if (y == 0)
                {
                    return(0);
                }

                var rescale = x / y + z;

                return(rescale);

            case ScaleFunction.Normalisation:

                if (sp.ColumnMax - sp.ColumnMin == 0)
                {
                    return(0);
                }

                var meanNorm = (value - sp.Average) / (sp.ColumnMax - sp.ColumnMin);

                return(meanNorm);

            case ScaleFunction.Standardisation:

                if (sp.Stdev == 0)
                {
                    return(0);
                }

                var standardisation = (value - sp.Average) / sp.Stdev;

                return(standardisation);

            case ScaleFunction.L0Norm:

                if (sp.NonZero == 0)
                {
                    return(0);
                }

                return(value / sp.NonZero);

            case ScaleFunction.L1Norm:

                if (sp.AbsSum == 0)
                {
                    return(0);
                }

                return(value / sp.AbsSum);

            case ScaleFunction.L2Norm:

                if (sp.Srsos == 0)
                {
                    return(0);
                }

                return(value / sp.Srsos);

            default: throw new ArgumentOutOfRangeException(nameof(scaleFunction));     //return 0;
            }
        }
예제 #9
0
 internal double[] Scale(double[] values, ScaleFunction scaleFunction)
 {
     return(values == null || values.Length == 0
         ? Array.Empty <double>()
         : values.Select(a => Scale(a, scaleFunction)).ToArray());
 }