/// <summary> /// Distance to the line. /// </summary> /// <param name="Line">The line to test.</param> public double Distance(C2DLineBase Line) { if (Lines.Count == 0) { return(0); } var pt1 = new C2DPoint(); var pt2 = new C2DPoint(); double dMin = Lines[0].Distance(Line, pt1, pt2); double dDist; for (var i = 1; i < Lines.Count; i++) { dDist = Lines[i].Distance(Line, pt1, pt2); if (dDist == 0) { return(0); } if (dDist < dMin) { dMin = dDist; } } if (Contains(Line.GetPointFrom())) { return(-dMin); } else { return(dMin); } }
/// <summary> /// True if it entirely contains the line. /// </summary> /// <param name="Line">The line to test.</param> public bool Contains(C2DLineBase Line) { if (!Contains(Line.GetPointFrom())) { return(false); } var Pts = new C2DPointSet(); return(!Crosses(Line, Pts)); }
/// <summary> /// Line entirely inside test. /// </summary> /// <param name="Line">Line to test for.</param> public bool Contains(C2DLineBase Line) { if (!_Rim.Contains(Line)) { return(false); } for (var i = 0; i < _Holes.Count; i++) { if (_Holes[i].Crosses(Line) || _Holes[i].Contains(Line.GetPointFrom())) { return(false); } } return(true); }
/// <summary> /// Creates a random shape. /// </summary> /// <param name="cBoundary">The boundary.</param> /// <param name="nMinPoints">The minimum points.</param> /// <param name="nMaxPoints">The maximum points.</param> public bool CreateRandom(C2DRect cBoundary, int nMinPoints, int nMaxPoints) { C2DPolygon Poly = new C2DPolygon(); if (!Poly.CreateRandom(cBoundary, nMinPoints, nMaxPoints)) { return(false); } CRandomNumber rCenOnRight = new CRandomNumber(0, 1); this.Set(Poly); for (int i = 0; i < Lines.Count; i++) { C2DLineBase pLine = Lines[i]; bool bCenOnRight = (rCenOnRight.GetInt() > 0); double dLength = pLine.GetLength(); CRandomNumber Radius = new CRandomNumber(dLength, dLength * 3); C2DArc pNew = new C2DArc(pLine.GetPointFrom(), pLine.GetPointTo(), Radius.Get(), bCenOnRight, !bCenOnRight); if (!this.Crosses(pNew)) { Lines[i] = pNew; pNew.GetBoundingRect(LineRects[i]); BoundingRect.ExpandToInclude(LineRects[i]); } } // this.MakeLineRects(); // this.MakeBoundingRect(); return(true); }
/// <summary> /// Line entirely inside test. /// </summary> /// <param name="Line">Line to test for.</param> public bool Contains(C2DLineBase Line) { if (!_Rim.Contains(Line)) return false; for ( int i = 0 ; i < _Holes.Count; i++) { if (_Holes[i].Crosses(Line) || _Holes[i].Contains( Line.GetPointFrom())) return false; } return true; }
/// <summary> /// Distance to the line. /// </summary> /// <param name="Line">The line to test.</param> public double Distance(C2DLineBase Line) { if (Lines.Count == 0) return 0; C2DPoint pt1 = new C2DPoint(); C2DPoint pt2 = new C2DPoint(); double dMin = Lines[0].Distance(Line, pt1, pt2); double dDist; for (int i = 1 ; i < Lines.Count; i++) { dDist = Lines[i].Distance(Line, pt1, pt2); if (dDist == 0 ) return 0; if (dDist < dMin) dMin = dDist; } if ( Contains(Line.GetPointFrom())) return -dMin; else return dMin; }
/// <summary> /// True if it entirely contains the line. /// </summary> /// <param name="Line">The line to test.</param> public bool Contains(C2DLineBase Line) { if (!Contains(Line.GetPointFrom())) return false; C2DPointSet Pts = new C2DPointSet(); return !Crosses(Line, Pts); }