Пример #1
0
 /// <summary>
 /// True if the point is to the right of the line.
 /// </summary>
 /// <param name="OtherPoint">The new point to test.</param>
 public bool IsOnRight(C2DPoint OtherPoint)
 {
     return(C2DTriangle.GetAreaSigned(point, GetPointTo(), OtherPoint) < 0);
 }
Пример #2
0
        /// <summary>
        /// Distance to a another.
        /// </summary>
        /// <param name="Other">The other triangle.</param>
        /// <param name="ptOnThis">Output. The closest point on the triangle.</param>
        /// <param name="ptOnOther">Output. The closest point on the other triangle.</param>
        public double Distance(C2DTriangle Other,  C2DPoint ptOnThis,  C2DPoint ptOnOther)
        {
            C2DPoint ptTemp = new C2DPoint();
            double dMinDist = Distance(Other.P1,  ptOnThis);
            ptOnOther.Set( Other.P1 );

            double dDist = Distance(Other.P2,  ptTemp);
            if (dDist < dMinDist)
            {
                ptOnOther.Set(Other.P2);
                ptOnThis.Set(ptTemp);

                dMinDist = dDist;
            }

            dDist = Distance(Other.P3,  ptTemp);
            if (dDist < dMinDist)
            {
                ptOnOther.Set( Other.P3);
                ptOnThis.Set(ptTemp);
                dMinDist = dDist;
            }

            dDist = Other.Distance(P1,  ptTemp);
            if (dDist < dMinDist)
            {
                ptOnOther.Set(ptTemp);
                ptOnThis.Set(P1);
                dMinDist = dDist;
            }

            dDist = Other.Distance(P2,  ptTemp);
            if (dDist < dMinDist)
            {
                ptOnOther.Set(ptTemp);
                ptOnThis.Set(P2);
                dMinDist = dDist;
            }

            dDist = Other.Distance(P3,  ptTemp);
            if (dDist < dMinDist)
            {
                ptOnOther.Set(ptTemp);
                ptOnThis.Set(P3);
                dMinDist = dDist;
            }

            return dMinDist;
        }
Пример #3
0
        /// <summary>
        /// Sets the circle to be the maximum contained circle within the triangle.
        /// </summary>
        /// <param name="Triangle">The triangle to bound the circle.</param> 
        public void SetInscribed(C2DTriangle Triangle)
        {
            C2DPoint InCen = Triangle.GetInCentre();

            C2DLine Line = new C2DLine( Triangle.P1, Triangle.P2  );

            C2DVector vec = new C2DVector(Line.point, InCen );
            double dProj = vec.Dot(Line.vector);
            double dLength = Line.vector.GetLength();
            dProj /= dLength;

            double dFactor = dProj / dLength;

            C2DVector vProj = new C2DVector(Line.vector);
            vProj.Multiply(dFactor);
            C2DPoint ptOnLine = new C2DPoint(Line.point.x + vProj.i,Line.point.y + vProj.j) ;

            Set(InCen, InCen.Distance( ptOnLine));
        }
Пример #4
0
        /// <summary>
        /// Set to be circle that places all 3 points of the triangle on the edge.
        /// </summary>
        /// <param name="Triangle">The triangle.</param> 
        public bool SetCircumscribed(C2DTriangle Triangle)
        {
            if (Triangle.Collinear())
                return false;

            _Centre.Set(Triangle.GetCircumCentre());
            Radius = _Centre.Distance(Triangle.P1);

            return true;
        }
Пример #5
0
        /// <summary>
        /// Draws a triangle filled.
        /// </summary>
        public void DrawFilled(C2DTriangle Triangle, Graphics graphics, Brush brush)
        {
            System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();

            C2DPoint pt1 = new C2DPoint(Triangle.p1);
            C2DPoint pt2 = new C2DPoint(Triangle.p2);
            C2DPoint pt3 = new C2DPoint(Triangle.p3);

            ScaleAndOffSet(pt1);
            ScaleAndOffSet(pt2);
            ScaleAndOffSet(pt3);

            gp.AddLine((int)pt1.x, (int)pt1.y, (int)pt2.x, (int)pt2.y);
            gp.AddLine((int)pt2.x, (int)pt2.y, (int)pt3.x, (int)pt3.y);
            gp.AddLine((int)pt3.x, (int)pt3.y, (int)pt1.x, (int)pt1.y);

            graphics.FillPath(brush, gp);
        }
Пример #6
0
 /// <summary>
 /// Draws a triangle
 /// </summary>
 public void Draw(C2DTriangle Triangle, Graphics graphics, Pen pen)
 {
     Draw(new C2DLine( Triangle.p1, Triangle.p2), graphics, pen);
     Draw(new C2DLine(Triangle.p2, Triangle.p3), graphics, pen);
     Draw(new C2DLine( Triangle.p3, Triangle.p1), graphics, pen);
 }
Пример #7
0
 /// <summary>
 /// Draws a triangle
 /// </summary>
 public void Draw(C2DTriangle Triangle, Graphics graphics, Pen pen)
 {
     Draw(new C2DLine(Triangle.p1, Triangle.p2), graphics, pen);
     Draw(new C2DLine(Triangle.p2, Triangle.p3), graphics, pen);
     Draw(new C2DLine(Triangle.p3, Triangle.p1), graphics, pen);
 }