Пример #1
0
        public override double GetArea(Area_Based_Analyses.KnownMeasurementsAggregator known)
        {
            // Acquire the diagonals.
            if (this.topLeftBottomRightDiagonal == null || this.bottomLeftTopRightDiagonal == null)
            {
                System.Diagnostics.Debug.WriteLine("No-Op");
            }

            double diag1Length = known.GetSegmentLength(this.bottomLeftTopRightDiagonal);
            double diag2Length = known.GetSegmentLength(this.topLeftBottomRightDiagonal);

            // Multiply base * height.
            double thisArea = -1;

            if (diag1Length < 0 || diag2Length < 0)
            {
                thisArea = -1;
            }
            else
            {
                thisArea = 0.5 * diag1Length * diag2Length;
            }

            return(thisArea > 0 ? thisArea : SplitTriangleArea(known));
        }
Пример #2
0
        //
        // Acquire the height of the isosceles trapezoid: h = Sqrt(c^2 - 1/4 (b - a)^2)
        //
        public void CalculateHeight(Area_Based_Analyses.KnownMeasurementsAggregator known)
        {
            // Check if the height has already been calculated.
            if (calculatedHeight > 0)
            {
                return;
            }

            // Calculate the height.
            double base1Length = known.GetSegmentLength(this.baseSegment);
            double base2Length = known.GetSegmentLength(this.oppBaseSegment);

            double isoSideLength = known.GetSegmentLength(this.leftLeg);

            if (isoSideLength < 0)
            {
                isoSideLength = known.GetSegmentLength(this.rightLeg);
            }

            if (base1Length < 0 || base2Length < 0 || isoSideLength < 0)
            {
                return;
            }

            this.calculatedHeight = Math.Sqrt(isoSideLength * isoSideLength - Math.Pow(base1Length - base2Length, 2) / 4.0);
        }
Пример #3
0
        //
        // Compute the area of the trapezoid using the A = 1/2 * (b_1 + b_2) * h
        //
        public double GetBaseBasedArea(double height, Area_Based_Analyses.KnownMeasurementsAggregator known)
        {
            double baseLength1 = known.GetSegmentLength(baseSegment);

            if (baseLength1 < 0)
            {
                return(-1);
            }

            double baseLength2 = known.GetSegmentLength(oppBaseSegment);

            if (baseLength2 < 0)
            {
                return(-1);
            }

            return(0.5 * (baseLength1 + baseLength2) * height);
        }
Пример #4
0
        private double ClassicArea(Area_Based_Analyses.KnownMeasurementsAggregator known)
        {
            foreach (Segment side in orderedSides)
            {
                double sideLength = known.GetSegmentLength(side);

                if (sideLength > 0)
                {
                    return(Area(sideLength));
                }
            }

            return(-1);
        }
Пример #5
0
        //
        // Compute the area of the trapezoid using the A = median * height
        //
        public double GetMedianBasedArea(double height, Area_Based_Analyses.KnownMeasurementsAggregator known)
        {
            if (!IsMedianValid())
            {
                return(-1);
            }

            double medianLength = known.GetSegmentLength(median);

            if (medianLength < 0)
            {
                return(-1);
            }

            return(medianLength * height);
        }
Пример #6
0
        public override double GetArea(Area_Based_Analyses.KnownMeasurementsAggregator known)
        {
            double[] sideVals = new double[orderedSides.Count];

            for (int s = 0; s < orderedSides.Count; s++)
            {
                sideVals[s] = known.GetSegmentLength(orderedSides[s]);
            }

            // One pair of adjacent sides is required for the area computation.
            for (int s = 0; s < sideVals.Length; s++)
            {
                double baseVal   = sideVals[s];
                double heightVal = sideVals[(s + 1) % sideVals.Length];

                if (baseVal > 0 && heightVal > 0)
                {
                    return(Area(baseVal, heightVal));
                }
            }

            return(SplitTriangleArea(known));
        }