示例#1
0
        /// <inheritdoc/>
        public override string Print(SineOperNode node)
        {
            switch (node.SineFunction)
            {
            case SineFunction.SINE:
                return($"\\sin{{{node.Child.Print(this)}}}");

            case SineFunction.COSINE:
                return($"\\cos{{{node.Child.Print(this)}}}");

            case SineFunction.TANGENT:
                return($"\\tan{{{node.Child.Print(this)}}}");

            case SineFunction.COSECANT:
                return($"\\csc{{{node.Child.Print(this)}}}");

            case SineFunction.SECANT:
                return($"\\sec{{{node.Child.Print(this)}}}");

            case SineFunction.COTANGENT:
                return($"\\cot{{{node.Child.Print(this)}}}");

            default:
                return(null);
            }
        }
示例#2
0
 private static ExpNode SineTable(SineOperNode node)
 {
     return(node.SineFunction switch
     {
         SineFunction.SINE => new SineOperNode(SineFunction.COSINE)
         {
             Child = node.Child
         },
         SineFunction.COSINE => QuickOpers.Negative(new SineOperNode(SineFunction.SINE)
         {
             Child = node.Child
         }),
         _ => node,
     });
示例#3
0
        /// <inheritdoc/>
        public override ExpNode Execute(SineOperNode node)
        {
            if (node.IsConstantBy(_variable))
            {
                return(QuickOpers.MakeNumericalNode(0));
            }

            // Apply chain rule
            var coefficient = node.Child.Clone().Execute(this);
            // Apply table
            var sinFunc = SineTable(node);

            return(QuickOpers.Multiply(coefficient, sinFunc));
        }
示例#4
0
文件: Integrator.cs 项目: Avid29/Calc
        /// <inheritdoc/>
        public override ExpNode Execute(SineOperNode node)
        {
            if (node.IsConstantBy(_variable))
            {
                return(ConstantRule(node));
            }

            Differentiator diff = new(_variable);
            // Apply ChainRule
            var coefficient = node.Child.Execute(diff);
            // Apply table
            var sinFunc = SineTable(node);

            return(QuickOpers.Multiply(QuickOpers.Reciprical(coefficient), sinFunc));
        }
示例#5
0
        /// <inheritdoc/>
        public override ExpNode Execute(SineOperNode node)
        {
            node.Child = node.Child.Execute(this);

            if (node.Child is NumericalValueNode nvNode)
            {
                double value = 0;
                switch (node.SineFunction)
                {
                case SineFunction.SINE:
                    value = Math.Sin(nvNode.DoubleValue);
                    break;

                case SineFunction.COSINE:
                    value = Math.Cos(nvNode.DoubleValue);
                    break;

                case SineFunction.TANGENT:
                    value = Math.Tan(nvNode.DoubleValue);
                    break;

                case SineFunction.COSECANT:
                    value = 1 / Math.Sin(nvNode.DoubleValue);
                    break;

                case SineFunction.SECANT:
                    value = 1 / Math.Cos(nvNode.DoubleValue);
                    break;

                case SineFunction.COTANGENT:
                    value = 1 / Math.Tan(nvNode.DoubleValue);
                    break;
                }

                return(QuickOpers.MakeNumericalNode(value));
            }

            return(node);
        }
示例#6
0
文件: Operation.cs 项目: Avid29/Calc
 /// <summary>
 /// Executes operation on a <see cref="SineOperNode"/>.
 /// </summary>
 /// <param name="node">The <see cref="SineOperNode"/> to execute operation on.</param>
 /// <returns>The result of the operation on a <see cref="SineOperNode"/>.</returns>
 public virtual ExpNode Execute(SineOperNode node) => Execute((UOperNode)node);
示例#7
0
文件: Printer.cs 项目: Avid29/Calc
 /// <summary>
 /// Prints a <see cref="SineOperNode"/>.
 /// </summary>
 /// <param name="node">The <see cref="SineOperNode"/> to print.</param>
 /// <returns>The <see cref="SineOperNode"/> printed to a string.</returns>
 public virtual string Print(SineOperNode node) => Print((UOperNode)node);