コード例 #1
0
ファイル: Arc.cs プロジェクト: wcatykid/GeoShader
        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;
            }
        }
コード例 #2
0
ファイル: Arc.cs プロジェクト: wcatykid/GeoShader
        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;
            }
        }
コード例 #3
0
ファイル: Sector.cs プロジェクト: wcatykid/GeoShader
        //
        // 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);
        }
コード例 #4
0
ファイル: Arc.cs プロジェクト: wcatykid/GeoShader
 public bool HasMajorSubArc(Arc arc)
 {
     return(Arc.BetweenMajor(arc.endpoint1, this) && Arc.BetweenMajor(arc.endpoint2, this));
 }
コード例 #5
0
 public override bool PointLiesOn(Point pt)
 {
     return(Arc.BetweenMajor(pt, this));
 }