Esempio n. 1
0
        public PointSet method_2(Ellipse ellipse)
        {
            if (!ellipse.IsCoplanarTo(this))
            {
                return(null);
            }
            Plane    plane    = new Plane(this.point_0, this.vector3d_0.Normalize(), ellipse.NormalVector.Normalize());
            Edge     edge     = ellipse.method_5(plane);
            PointSet pointSet = new PointSet();

            if (edge == null)
            {
                return(pointSet);
            }
            if (edge.StartPoint == edge.EndPoint)
            {
                pointSet.Add(edge.StartPoint);
            }
            else
            {
                pointSet.Add(edge.StartPoint);
                pointSet.Add(edge.EndPoint);
            }
            return(pointSet);
        }
Esempio n. 2
0
        public PointSet method_1(Circle circle)
        {
            if (!this.IsCoplanarTo(circle))
            {
                return(null);
            }
            PointSet pointSet  = new PointSet();
            Vector3d vector3d  = this.point_0.method_2();
            Vector3d left      = vector3d + this.DirectionVector;
            Vector3d vector3d2 = circle.Center.method_2();
            Vector3d vector3d3 = left - vector3d;
            Vector3d right     = vector3d - vector3d2;
            Edge     edge      = circle.Center.PerpendicularOn(this);

            if (Global.AlmostEquals(edge.Length, circle.Radius))
            {
                pointSet.Add(edge.EndPoint);
                return(pointSet);
            }
            double num  = vector3d3 * vector3d3;
            double num2 = 2.0 * (vector3d3 * right);
            double num3 = vector3d * vector3d - 2.0 * (vector3d * vector3d2) + vector3d2 * vector3d2 - circle.Radius * circle.Radius;
            double num4 = num2 * num2 - 4.0 * num * num3;

            if (Global.AlmostEquals(num2 * num2, 4.0 * num * num3))
            {
                num4 = 0.0;
            }
            if (Math.Abs(num4) < Global.AbsoluteEpsilon)
            {
                double scalar = -num2 / (2.0 * num);
                Point  point  = new Point(vector3d + scalar * vector3d3);
                pointSet.Add(point);
                return(pointSet);
            }
            if (num4 > Global.AbsoluteEpsilon)
            {
                double scalar2 = (-num2 + Math.Sqrt(num4)) / (2.0 * num);
                double scalar3 = (-num2 - Math.Sqrt(num4)) / (2.0 * num);
                Point  point2  = new Point(vector3d + scalar2 * vector3d3);
                Point  point3  = new Point(vector3d + scalar3 * vector3d3);
                pointSet.Add(point2);
                if (point2 != point3)
                {
                    pointSet.Add(point3);
                }
                return(pointSet);
            }
            return(pointSet);
        }
Esempio n. 3
0
        public PointSet DeepCopy()
        {
            PointSet pointSet = new PointSet();

            for (int i = 0; i < base.Count; i++)
            {
                pointSet.Add(new Point(this[i].X, this[i].Y, this[i].Z));
            }
            return(pointSet);
        }
Esempio n. 4
0
        public static PointSet ToPointSet(List <Point> points)
        {
            PointSet pointSet = new PointSet();

            for (int i = 0; i < points.Count; i++)
            {
                pointSet.Add(points[i]);
            }
            return(pointSet);
        }
Esempio n. 5
0
        public PointSet method_0(Plane plane)
        {
            Edge edge = this.ToCircle().method_6(plane);

            if (edge == null)
            {
                return(null);
            }
            PointSet pointSet = new PointSet();

            if (this.ContainsOnCircumference(edge.StartPoint))
            {
                pointSet.Add(edge.StartPoint);
            }
            if (edge.StartPoint == edge.EndPoint)
            {
                return(pointSet);
            }
            if (this.ContainsOnCircumference(edge.EndPoint))
            {
                pointSet.Add(edge.EndPoint);
            }
            return(pointSet);
        }
Esempio n. 6
0
        public void RemoveMultiplePoints3d()
        {
            if (base.Count < 2)
            {
                return;
            }
            base.InnerList.Sort(new PointComparer1());
            PointSet pointSet = new PointSet();

            pointSet.Add(this[base.Count - 1]);
            for (int i = base.Count - 2; i >= 0; i--)
            {
                if (!(this[i] == this[i + 1]))
                {
                    pointSet.Add(this[i]);
                }
            }
            base.Clear();
            for (int j = 0; j < pointSet.Count; j++)
            {
                this.Add(pointSet[j]);
            }
            pointSet.Dispose();
        }
Esempio n. 7
0
        public void RemoveMultiplePoints2d()
        {
            if (base.Count < 2)
            {
                return;
            }
            base.InnerList.Sort(new PointComparer1());
            PointSet pointSet = new PointSet();

            pointSet.Add(this[base.Count - 1]);
            for (int i = base.Count - 2; i >= 0; i--)
            {
                if (Math.Abs(this[i].X - this[i + 1].X) > Global.AbsoluteEpsilon || Math.Abs(this[i].Y - this[i + 1].Y) > Global.AbsoluteEpsilon)
                {
                    pointSet.Add(this[i]);
                }
            }
            base.Clear();
            for (int j = 0; j < pointSet.Count; j++)
            {
                this.Add(pointSet[j]);
            }
            pointSet.Dispose();
        }
Esempio n. 8
0
        public PointSet GeneratePointsOnPerimeter(int n)
        {
            if (n < 2)
            {
                throw new ArgumentException("Can not generate less than two points on perimeter of arc.");
            }
            PointSet pointSet = new PointSet();
            double   num      = this.double_0 / (double)(n - 1);

            for (int i = 0; i < n; i++)
            {
                Matrix3d rotationMatrix = Matrix3d.RotationArbitraryAxis(this.vector3d_0, (double)i * num);
                pointSet.Add(this.StartPoint.Rotate(this.point_0, rotationMatrix));
            }
            return(pointSet);
        }
Esempio n. 9
0
        private PointSet method_0(Ellipse ellipse_2, Point point_0, int int_0)
        {
            PointSet pointSet         = new PointSet();
            double   parameterAtPoint = ellipse_2.GetParameterAtPoint(point_0);
            double   num = 6.2831853071795862 / (double)int_0;

            for (int i = 0; i < int_0; i++)
            {
                double num2 = parameterAtPoint + (double)i * num;
                if (num2 > 6.2831853071795862)
                {
                    num2 -= 6.2831853071795862;
                }
                Point pointAtParameter = ellipse_2.GetPointAtParameter(num2);
                pointSet.Add(pointAtParameter);
            }
            return(pointSet);
        }
Esempio n. 10
0
        public PointSet method_0(Triangle triangle)
        {
            if (!this.IsCoplanarTo(triangle))
            {
                return(null);
            }
            PointSet pointSet = new PointSet();

            foreach (Edge current in triangle.Edges)
            {
                Plane plane = new Plane(current.StartPoint, current.method_9(), triangle.NormalVector);
                Point point = this.getInterSecttion(plane);
                if (!(point == null) && current.CollinearContains(point))
                {
                    pointSet.Add(point);
                }
            }
            pointSet.RemoveMultiplePoints3d();
            return(pointSet);
        }