public static bool AcquireCongruences(KnownMeasurementsAggregator known, List <GroundedClause> clauses) { bool addedKnown = false; foreach (GeometryTutorLib.ConcreteAST.GroundedClause clause in clauses) { GeometryTutorLib.ConcreteAST.CongruentSegments cs = clause as GeometryTutorLib.ConcreteAST.CongruentSegments; if (cs != null && !cs.IsReflexive()) { double length1 = known.GetSegmentLength(cs.cs1); double length2 = known.GetSegmentLength(cs.cs2); if (length1 >= 0 && length2 < 0) { if (known.AddSegmentLength(cs.cs2, length1)) { addedKnown = true; } } if (length1 <= 0 && length2 > 0) { if (known.AddSegmentLength(cs.cs1, length2)) { addedKnown = true; } } // else: both known } GeometryTutorLib.ConcreteAST.CongruentAngles cas = clause as GeometryTutorLib.ConcreteAST.CongruentAngles; if (cas != null && !cas.IsReflexive()) { double measure1 = known.GetAngleMeasure(cas.ca1); double measure2 = known.GetAngleMeasure(cas.ca2); if (measure1 >= 0 && measure2 < 0) { if (known.AddAngleMeasureDegree(cas.ca2, measure1)) { addedKnown = true; } } if (measure1 <= 0 && measure2 > 0) { if (known.AddAngleMeasureDegree(cas.ca1, measure2)) { addedKnown = true; } } // else: both known } } return(addedKnown); }
// // All right angles are supplementary. // public static List<EdgeAggregator> InstantiateToSupplementary(CongruentAngles cas) { List<EdgeAggregator> newGrounded = new List<EdgeAggregator>(); if (cas.IsReflexive()) return newGrounded; if (!(cas.ca1 is RightAngle) || !(cas.ca2 is RightAngle)) return newGrounded; Supplementary supp = new Supplementary(cas.ca1, cas.ca2); supp.SetNotASourceNode(); supp.SetNotAGoalNode(); supp.SetClearDefinition(); newGrounded.Add(new EdgeAggregator(Utilities.MakeList<GroundedClause>(cas), supp, annotation)); return newGrounded; }