Beispiel #1
0
        public PointSet method_3(Circle circle)
        {
            if (!circle.IsCoplanarTo(this))
            {
                return(null);
            }
            if (circle == this)
            {
                return(null);
            }
            PointSet result = new PointSet();

            if (circle.point_0 == this.point_0)
            {
                return(result);
            }
            Circle circle2;
            Circle circle3;

            if (this.double_0 > circle.double_0)
            {
                circle2 = this;
                circle3 = circle;
            }
            else
            {
                circle3 = this;
                circle2 = circle;
            }
            Vector3d vector3d = new Vector3d(circle3.point_0 - circle2.point_0);
            double   norm     = vector3d.Norm;
            double   scalar   = (circle2.double_0 * circle2.double_0 - circle3.double_0 * circle3.double_0 + norm * norm) / (2.0 * norm);
            Point    point    = circle2.point_0 + scalar * vector3d.Normalize().ToPoint();
            Line     line     = new Line(point, Vector3d.Cross(vector3d, this.vector3d_0));

            return(this.method_1(line));
        }
Beispiel #2
0
        public List <Line> TangentLines2d(Circle circle)
        {
            if (!circle.IsCoplanarTo(this))
            {
                return(null);
            }
            List <Line> list = new List <Line>();

            if (this.Contains(circle))
            {
                return(list);
            }
            if (circle.Contains(this))
            {
                return(list);
            }
            Vector3d vector3d = new Vector3d(circle.point_0 - this.point_0);

            if (this.Intersects2d(circle))
            {
                if (Global.AlmostEquals(this.double_0, circle.double_0))
                {
                    Vector3d b         = new Vector3d(this.point_0 - circle.point_0);
                    Vector3d vector3d2 = Vector3d.Cross(this.NormalVector, b);
                    vector3d2.Norm = this.double_0;
                    list.Add(new Line(this.point_0, circle.point_0).Move(vector3d2));
                    list.Add(new Line(this.point_0, circle.point_0).Move(-1.0 * vector3d2));
                    return(list);
                }
                double scalar = this.double_0 / (this.double_0 - circle.double_0);
                Point  point  = this.point_0 + scalar * vector3d.ToPoint();
                return(this.TangentLines2d(point));
            }
            else
            {
                if (Global.AlmostEquals(this.double_0, circle.double_0))
                {
                    Vector3d b2        = new Vector3d(this.point_0 - circle.point_0);
                    Vector3d vector3d3 = Vector3d.Cross(this.NormalVector, b2);
                    vector3d3.Norm = this.double_0;
                    list.Add(new Line(this.point_0, circle.point_0).Move(vector3d3));
                    list.Add(new Line(this.point_0, circle.point_0).Move(-1.0 * vector3d3));
                    double      scalar2 = this.double_0 / (this.double_0 + circle.double_0);
                    Point       point2  = this.point_0 + scalar2 * vector3d.ToPoint();
                    List <Line> list2   = this.TangentLines2d(point2);
                    foreach (Line current in list2)
                    {
                        list.Add(current);
                    }
                    return(list);
                }
                double      scalar3 = this.double_0 / (this.double_0 - circle.double_0);
                double      scalar4 = this.double_0 / (this.double_0 + circle.double_0);
                Point       point3  = this.point_0 + scalar3 * vector3d.ToPoint();
                Point       point4  = this.point_0 + scalar4 * vector3d.ToPoint();
                List <Line> list3   = this.TangentLines2d(point3);
                List <Line> list4   = this.TangentLines2d(point4);
                foreach (Line current2 in list3)
                {
                    list.Add(current2);
                }
                foreach (Line current3 in list4)
                {
                    list.Add(current3);
                }
                return(list);
            }
        }
Beispiel #3
0
 public bool IsCoplanarTo(Circle circle)
 {
     return(circle.IsCoplanarTo(this));
 }