/// <inheritdoc/> public override ExpNode Execute(VectorProjOperNode node) { if (node.LeftChild.AreEqualSizeVectors(node.RightChild, out TensorNode a, out TensorNode b)) { VectorProductOperNode adotb = QuickOpers.DotProduct(a, (TensorNode)b.Clone()); BOperNode bdotb = QuickOpers.DotProduct((TensorNode)b.Clone(), (TensorNode)b.Clone()); return(QuickOpers.Multiply(b, adotb, QuickOpers.Reciprical(bdotb)).Execute(this)); } return(HandleError(new CannotVectorProject(this, node))); }
/// <summary> /// Executes operation on a <see cref="BOperNode"/>. /// </summary> /// <param name="node">The <see cref="BOperNode"/> to execute operation on.</param> /// <returns>The result of the operation on a <see cref="BOperNode"/>.</returns> public virtual ExpNode Execute(BOperNode node) => Execute((OperNode)node);
/// <summary> /// Initializes a new instance of the <see cref="BinaryFuncParser"/> class. /// </summary> /// <param name="node">The node to create.</param> public BinaryFuncParser(BOperNode node) { _state = State.OPENING; _node = node; _childParser = new DefaultParser(); }
/// <summary> /// Initializes a new instance of the <see cref="BOperNodeAlreadyHasChildrenException"/> class. /// </summary> /// <param name="node">The <see cref="BOperNode"/> throwing.</param> public BOperNodeAlreadyHasChildrenException(BOperNode node) : base(node, MESSAGE) { }
/// <summary> /// Prints a <see cref="BOperNode"/>. /// </summary> /// <param name="node">The <see cref="BOperNode"/> to print.</param> /// <returns>The <see cref="BOperNode"/> printed to a string.</returns> public virtual string Print(BOperNode node) => Print((OperNode)node);