/// <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); }
/// <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; }
/// <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)); }
/// <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; }
/// <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); }
/// <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); }
/// <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); }