Esempio n. 1
0
        protected override ProductQuotientSet simplifyFractional <T>(T newSetGeneric)
        {
            if (!(newSetGeneric is SumDifferenceSet))
            {
                return(new ProductQuotientSet(newSetGeneric));
            }
            SumDifferenceSet newSet = newSetGeneric as SumDifferenceSet;

            if (newSet.Count < 2)
            {
                return(new ProductQuotientSet(newSet));
            }

            ProductQuotientSet leftSet = fractionSet(newSet, 0);

            for (int i = 1; i < newSet.Count; i++)
            {
                ProductQuotientSet rightSet = fractionSet(newSet, i);
                IBase unitA = unitSet(leftSet, 0);
                IBase unitB = unitSet(leftSet, 1);
                IBase unitC = unitSet(rightSet, 0);
                IBase unitD = unitSet(rightSet, 1);

                ProductQuotientSet numeratorSetLeft = new ProductQuotientSet(unitA);
                numeratorSetLeft.MultiplyItem(unitD);
                numeratorSetLeft = simplifyNumeric <ProductQuotientSet>(numeratorSetLeft);
                ProductQuotientSet numeratorSetRight = new ProductQuotientSet(unitC);
                numeratorSetRight.MultiplyItem(unitB);
                numeratorSetRight = simplifyNumeric <ProductQuotientSet>(numeratorSetRight);

                ProductQuotientSet denominatorSet = new ProductQuotientSet(unitB);
                denominatorSet.MultiplyItem(unitD);
                denominatorSet = simplifyNumeric <ProductQuotientSet>(denominatorSet);

                SumDifferenceSet numeratorSet = new SumDifferenceSet(numeratorSetLeft);
                if (newSet._unitOperatorPair[i].OperatorEquals(Query.ADD))
                {
                    numeratorSet.SumItem(numeratorSetRight);
                }
                else if (newSet._unitOperatorPair[i].OperatorEquals(Query.SUBTRACT))
                {
                    numeratorSet.SubtractItem(numeratorSetRight);
                }
                numeratorSet = simplifyNumeric <SumDifferenceSet>(numeratorSet);

                leftSet = new ProductQuotientSet(numeratorSet);
                leftSet.DivideItem(denominatorSet);
            }

            string             simplifiedFraction = Query.SimplifiedFraction(leftSet.Label());
            ProductQuotientSet set = new ProductQuotientSet(simplifiedFraction);

            return((ProductQuotientSet)set.SimplifyUnitsOfOne());
        }
Esempio n. 2
0
        public override object Clone()
        {
            IBase            unit   = Count > 0 ? _unitOperatorPair[0].Unit : null;
            SumDifferenceSet newSet = new SumDifferenceSet(unit, _power, SignIsNegative());

            for (int i = 1; i < Count; i++)
            {
                if (_unitOperatorPair[i].OperatorEquals(Query.ADD))
                {
                    newSet.SumItem(_unitOperatorPair[i].Unit);
                }
                if (_unitOperatorPair[i].OperatorEquals(Query.SUBTRACT))
                {
                    newSet.SubtractItem(_unitOperatorPair[i].Unit);
                }
            }

            return(newSet);
        }
Esempio n. 3
0
        protected IBase getBase(bool getAbsolute = false)
        {
            if (Count == 0)
            {
                return(new SumDifferenceSet());
            }
            IBase            unitBase = getUnit(0, getAbsolute);
            SumDifferenceSet newSet   = new SumDifferenceSet(unitBase);

            for (int i = 1; i < Count; i++)
            {
                if (_unitOperatorPair[i].OperatorEquals(Query.ADD))
                {
                    newSet.SumItem(_unitOperatorPair[i].Unit);
                }
                if (_unitOperatorPair[i].OperatorEquals(Query.SUBTRACT))
                {
                    newSet.SubtractItem(_unitOperatorPair[i].Unit);
                }
            }

            return(newSet);
        }