public override void FindIntersection(Arc that, out Point inter1, out Point inter2) { // Find the points of intersection this.theCircle.FindIntersection(that.theCircle, out inter1, out inter2); // The points must be on this minor arc. if (this is MinorArc) { if (!Arc.BetweenMinor(inter1, this)) { inter1 = null; } if (!Arc.BetweenMinor(inter2, this)) { inter2 = null; } } else { if (!Arc.BetweenMajor(inter1, this)) { inter1 = null; } if (!Arc.BetweenMajor(inter2, this)) { inter2 = null; } } // The points must be on thatArc if (that is MinorArc) { if (!Arc.BetweenMinor(inter1, that)) { inter1 = null; } if (!Arc.BetweenMinor(inter2, that)) { inter2 = null; } } else { if (!Arc.BetweenMajor(inter1, that)) { inter1 = null; } if (!Arc.BetweenMajor(inter2, that)) { inter2 = null; } } if (inter1 == null && inter2 != null) { inter1 = inter2; inter2 = null; } }
public override void FindIntersection(Segment that, out Point inter1, out Point inter2) { // Find the points of intersection this.theCircle.FindIntersection(that, out inter1, out inter2); // The points must be on this minor arc. if (this is MinorArc) { if (!Arc.BetweenMinor(inter1, this)) { inter1 = null; } if (!Arc.BetweenMinor(inter2, this)) { inter2 = null; } } else if (this is MajorArc) { if (!Arc.BetweenMajor(inter1, this)) { inter1 = null; } if (!Arc.BetweenMajor(inter2, this)) { inter2 = null; } } else if (this is Semicircle) { if (!(this as Semicircle).PointLiesOn(inter1)) { inter1 = null; } if (!(this as Semicircle).PointLiesOn(inter2)) { inter2 = null; } } if (!that.PointLiesOnAndBetweenEndpoints(inter1)) { inter1 = null; } if (!that.PointLiesOnAndBetweenEndpoints(inter2)) { inter2 = null; } if (inter1 == null && inter2 != null) { inter1 = inter2; inter2 = null; } }
// // Point is on the perimeter? // public override bool PointLiesOn(Point pt) { if (pt == null) { return(false); } // Radii KeyValuePair <Segment, Segment> radii = theArc.GetRadii(); if (radii.Key.PointLiesOnAndBetweenEndpoints(pt) || radii.Value.PointLiesOnAndBetweenEndpoints(pt)) { return(true); } // This point must lie on the circle in question, minimally. if (!theArc.theCircle.PointLiesOn(pt)) { return(false); } // Arc if (theArc is MajorArc) { return(Arc.BetweenMajor(pt, theArc as MajorArc)); } else if (theArc is MinorArc) { return(Arc.BetweenMinor(pt, theArc as MinorArc)); } else if (theArc is Semicircle) { Semicircle semi = theArc as Semicircle; // The point in question must lie on the same side of the diameter as the middle point Segment candSeg = new Segment(pt, semi.middlePoint); Point intersection = semi.diameter.FindIntersection(candSeg); return(!candSeg.PointLiesOnAndBetweenEndpoints(intersection)); } return(false); }
public bool HasMajorSubArc(Arc arc) { return(Arc.BetweenMajor(arc.endpoint1, this) && Arc.BetweenMajor(arc.endpoint2, this)); }
public override bool PointLiesOn(Point pt) { return(Arc.BetweenMajor(pt, this)); }