示例#1
0
        /// <summary>
        /// Returns <see cref="QsVector"/> from to...  with specified interval
        /// </summary>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <param name="step"></param>
        /// <returns></returns>
        public static QsValue Range(QsParameter from, QsParameter to, QsParameter step)
        {
            Contract.Requires(from.QsNativeValue is QsScalar);
            Contract.Requires(to.QsNativeValue is QsScalar);
            Contract.Requires(step.QsNativeValue is QsScalar);


            double fd = ((QsScalar)from.QsNativeValue).NumericalQuantity.Value;
            double td = ((QsScalar)to.QsNativeValue).NumericalQuantity.Value;

            double stepd = ((QsScalar)step.QsNativeValue).NumericalQuantity.Value;

            QsVector vec = new QsVector();

            if (td >= fd)
            {
                for (double vl = fd; vl <= td; vl += stepd)
                {
                    vec.AddComponent(vl);
                }
            }
            else
            {
                for (double vl = fd; vl >= td; vl -= stepd)
                {
                    vec.AddComponent(vl);
                }
            }

            return(vec);
        }
示例#2
0
        public static QsValue Atan2(QsParameter x, QsParameter y)
        {
            var xs = x.QsNativeValue as QsScalar;
            var ys = y.QsNativeValue as QsScalar;

            double r = System.Math.Atan2(ys.NumericalQuantity.Value, xs.NumericalQuantity.Value);

            return(r.ToQuantity().ToScalarValue());
        }
示例#3
0
        public static QsValue Speak(
            [QsParamInfo(QsParamType.Text)] QsParameter text
            )
        {
            System.Speech.Synthesis.SpeechSynthesizer ss = new System.Speech.Synthesis.SpeechSynthesizer();

            ss.SpeakAsync(text.UnknownValueText);

            return(null);
        }
示例#4
0
        public static QsValue Name(QsParameter value)
        {
            QsScalar s = value.QsNativeValue as QsScalar;

            if (s != null)
            {
                return(new QsText(s.Unit.QuantityType.Name.TrimEnd('`', '1').ToString()));
            }

            return(new QsText("Works on scalar quantities"));
        }
示例#5
0
 public static QsValue Transpose(QsParameter matrix)
 {
     if (matrix.QsNativeValue is QsMatrix)
     {
         return(((QsMatrix)matrix.QsNativeValue).Transpose());
     }
     else
     {
         throw new QsInvalidInputException("Expected matrix input");
     }
 }
示例#6
0
 public static QsValue Determinant(QsParameter matrix)
 {
     if (matrix.QsNativeValue is QsMatrix)
     {
         return(QsMatrix.Determinant(((QsMatrix)matrix.QsNativeValue)));
     }
     else
     {
         throw new QsInvalidInputException("Expected matrix input");
     }
 }
示例#7
0
        /// <summary>
        /// Returns the dimension of value quantity.
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static QsValue Dimension(QsParameter value)
        {
            QsScalar s = value.QsNativeValue as QsScalar;

            if (s != null)
            {
                return(new QsText(s.Unit.UnitDimension.ToString()));
            }


            return(new QsText("Works on scalar quantities"));
        }
示例#8
0
        /// <summary>
        /// Returns the name of the quantity associated with this value
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static QsValue FromValue(QsParameter value)
        {
            QsScalar s = value.QsNativeValue as QsScalar;

            if (s != null)
            {
                string qt = s.Unit.QuantityType.Name;
                return(new QsText(qt.Substring(0, qt.Length - 2)));
            }


            return(new QsText("Works on scalar quantities"));
        }
示例#9
0
        /// <summary>
        /// Resturns the name of the quantity associated with this dimension
        /// </summary>
        /// <param name="dimension"></param>
        /// <returns></returns>
        public static QsValue FromDimension(QsParameter dimension)
        {
            string ss = dimension.ParameterRawText;

            if (dimension.QsNativeValue is QsText)
            {
                ss = ((QsText)dimension.QsNativeValue).Text;
            }
            var q = QuantityDimension.Parse(ss);

            string qt = QuantityDimension.GetQuantityTypeFrom(q).Name;

            return(new QsText(qt.Substring(0, qt.Length - 2)));
        }
示例#10
0
        public static QsValue InvertedQuantityName(QsParameter value)
        {
            QsScalar s = value.QsNativeValue as QsScalar;

            if (s != null)
            {
                var InvertedDimension = s.Unit.UnitDimension.Invert();

                var qp = QsParameter.MakeParameter(null, InvertedDimension.ToString());
                return(Quantity.FromDimension(qp));
            }


            return(new QsText("Works on scalar quantities"));
        }
示例#11
0
        public static QsValue MessageBox(QsParameter text)
        {
            IWin32Window fw = null;

            try { fw = ForegroundWindow.Instance; }
            catch { }

            DialogResult d =
                System.Windows.Forms.MessageBox.Show(
                    fw,
                    text.UnknownValueText,
                    "Quantity System"
                    );

            return(((int)d).ToScalarValue());
            //return d;
        }
示例#12
0
        /// <summary>
        /// Returns <see cref="QsVector"/> with constant value
        /// </summary>
        /// <param name="count"></param>
        /// <param name="constant"></param>
        /// <returns></returns>
        public static QsValue ConstantRange(QsParameter count, QsParameter constant)
        {
            Contract.Requires(count.QsNativeValue is QsScalar);
            Contract.Requires(constant.QsNativeValue is QsScalar);

            double countd = ((QsScalar)count.QsNativeValue).NumericalQuantity.Value;

            int icount = (int)countd;

            QsVector v = new QsVector(icount);

            for (int i = 0; i < icount; i++)
            {
                v.AddComponent((QsScalar)constant.QsNativeValue);
            }

            return(v);
        }
示例#13
0
        public static QsValue MessageBox(
            QsParameter text,
            [QsParamInfo(QsParamType.Text)] QsParameter caption
            )
        {
            IWin32Window fw = null;

            try { fw = ForegroundWindow.Instance; }
            catch { }

            DialogResult d =
                System.Windows.Forms.MessageBox.Show(
                    fw,
                    text.UnknownValueText,
                    caption.UnknownValueText
                    );

            return(((int)d).ToScalarValue());
        }
示例#14
0
        public static QsValue Min(QsParameter value)
        {
            if (value.QsNativeValue is QsScalar)
            {
                return(value.QsNativeValue);
            }
            if (value.QsNativeValue is QsVector)
            {
                var vector = value.QsNativeValue as QsVector;
                return((QsValue)vector.Min());
            }
            if (value.QsNativeValue is QsMatrix)
            {
                var matrix = value.QsNativeValue as QsMatrix;
                return((QsValue)matrix.ToArray().Min());
            }

            throw new QsException("Not implemented for above matrix");
        }
示例#15
0
        /// <summary>
        /// Returns a value from the dimension of this quantity.
        /// </summary>
        /// <param name="dimension"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static QsValue FromDimension(QsParameter dimension, QsParameter value)
        {
            string ss = dimension.ParameterRawText;

            if (dimension.QsNativeValue is QsText)
            {
                ss = ((QsText)dimension.QsNativeValue).Text;
            }
            var q = QuantityDimension.Parse(ss);

            var unit = QuantitySystem.Units.Unit.DiscoverUnit(q);
            var qval = unit.GetThisUnitQuantity <double>(double.Parse(value.ParameterRawText, CultureInfo.InvariantCulture));

            var qs = new QsScalar(ScalarTypes.NumericalQuantity)
            {
                NumericalQuantity = qval
            };

            return(qs);
        }
示例#16
0
        public static QsValue FromName(QsParameter name, QsParameter value)
        {
            string ss = name.ParameterRawText;

            if (name.QsNativeValue is QsText)
            {
                ss = ((QsText)name.QsNativeValue).Text;
            }

            var qval = AnyQuantity <double> .Parse(ss);

            qval.Unit  = Unit.DiscoverUnit(qval);
            qval.Value = double.Parse(value.ParameterRawText, CultureInfo.InvariantCulture);

            var qs = new QsScalar(ScalarTypes.NumericalQuantity)
            {
                NumericalQuantity = qval
            };

            return(qs);
        }
示例#17
0
        public static QsValue ReadBinaryFile([QsParamInfo(QsParamType.Text)] QsParameter fileName)
        {
            byte[] data = File.ReadAllBytes(fileName.UnknownValueText);

            return(data.ToQsVector());
        }
示例#18
0
 public static QsValue PrintLine([QsParamInfo(QsParamType.Text)] QsParameter val)
 {
     Console.WriteLine(val.UnknownValueText);
     return(null);
 }
示例#19
0
        /// <summary>
        /// Returns the count of vector
        /// </summary>
        /// <param name="vector"></param>
        /// <returns></returns>
        public static QsValue Count(QsParameter vector)
        {
            Contract.Requires(vector.QsNativeValue is QsVector);

            return(((QsVector)vector.QsNativeValue).Count.ToScalarValue());
        }
示例#20
0
        public static QsValue Sqrt(QsParameter x)
        {
            var xs = x.QsNativeValue as QsValue;

            return(xs.PowerOperation("0.5".ToScalar()));
        }
示例#21
0
        public static QsValue Log(QsParameter val, QsParameter newBase)
        {
            if (val.IsQsValue)
            {
                if (val.ParameterValue is QsScalar)
                {
                    AnyQuantity <double> q = ((QsScalar)val.ParameterValue).NumericalQuantity;

                    if (q.Dimension.IsDimensionless)
                    {
                        double r = System.Math.Log(q.Value, ((QsScalar)newBase.ParameterValue).NumericalQuantity.Value);
                        return(r.ToQuantity().ToScalarValue());
                    }
                    else
                    {
                        throw new QsInvalidInputException("Non dimensionless number");
                    }
                }
                else if (val.ParameterValue is QsVector)
                {
                    QsVector vec = (QsVector)val.ParameterValue;

                    QsVector rv = new QsVector(vec.Count);

                    foreach (QsScalar var in vec)
                    {
                        if (var.NumericalQuantity.Dimension.IsDimensionless)
                        {
                            double r = System.Math.Log(var.NumericalQuantity.Value, ((QsScalar)newBase.ParameterValue).NumericalQuantity.Value);
                            rv.AddComponent(r.ToQuantity().ToScalar());
                        }
                        else
                        {
                            throw new QsInvalidInputException("Non dimensionless component");
                        }
                    }

                    return(rv);
                }
                else if (val.ParameterValue is QsMatrix)
                {
                    QsMatrix mat = (QsMatrix)val.ParameterValue;
                    QsMatrix rm  = new QsMatrix();

                    foreach (var vec in mat.Rows)
                    {
                        rm.AddVector((QsVector)Log(QsParameter.MakeParameter(vec, string.Empty)));
                    }
                    return(rm);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                //not known may be ordinary string
                return(null);
            }
        }