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)); }
// // 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); }
// // 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); }
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); }
// // 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); }
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)); }