/********************************************************** To check the Pt is in the Triangle or not. If the Pt is in the line or is a vertex, then return true. If the Pt is out of the Triangle, then return false. This method is used for triangle only. ***********************************************************/ private bool TriangleContainsPoint(CPoint2D[] trianglePts, CPoint2D pt) { if (trianglePts.Length!=3) return false; for (int i=trianglePts.GetLowerBound(0); i<trianglePts.GetUpperBound(0); i++) { if (pt.EqualsPoint(trianglePts[i])) return true; } bool bIn=false; CLineSegment line0=new CLineSegment(trianglePts[0],trianglePts[1]); CLineSegment line1=new CLineSegment(trianglePts[1],trianglePts[2]); CLineSegment line2=new CLineSegment(trianglePts[2],trianglePts[0]); if (pt.InLine(line0)||pt.InLine(line1) ||pt.InLine(line2)) bIn=true; else //point is not in the lines { double dblArea0=CPolygon.PolygonArea(new CPoint2D[] {trianglePts[0],trianglePts[1], pt}); double dblArea1=CPolygon.PolygonArea(new CPoint2D[] {trianglePts[1],trianglePts[2], pt}); double dblArea2=CPolygon.PolygonArea(new CPoint2D[] {trianglePts[2],trianglePts[0], pt}); if (dblArea0>0) { if ((dblArea1 >0) &&(dblArea2>0)) bIn=true; } else if (dblArea0<0) { if ((dblArea1 < 0) && (dblArea2< 0)) bIn=true; } } return bIn; }
/******************************************************** To update m_aUpdatedPolygonVertices: Take out Vertex from m_aUpdatedPolygonVertices array, add 3 points to the m_aEars **********************************************************/ private void UpdatePolygonVertices(CPoint2D vertex) { System.Collections.ArrayList alTempPts=new System.Collections.ArrayList(); for (int i=0; i< m_aUpdatedPolygonVertices.Length; i++) { if (vertex.EqualsPoint( m_aUpdatedPolygonVertices[i])) //add 3 pts to FEars { CPolygon polygon=new CPolygon(m_aUpdatedPolygonVertices); CPoint2D pti = vertex; CPoint2D ptj = polygon.PreviousPoint(vertex); //previous point CPoint2D ptk = polygon.NextPoint(vertex); //next point CPoint2D[] aEar=new CPoint2D[3]; //3 vertices of each ear aEar[0]=ptj; aEar[1]=pti; aEar[2]=ptk; m_alEars.Add(aEar); } else { alTempPts.Add(m_aUpdatedPolygonVertices[i]); } //not equal points } if (m_aUpdatedPolygonVertices.Length - alTempPts.Count==1) { int nLength=m_aUpdatedPolygonVertices.Length; m_aUpdatedPolygonVertices=new CPoint2D[nLength-1]; for (int i=0; i<alTempPts.Count; i++) m_aUpdatedPolygonVertices[i]=(CPoint2D)alTempPts[i]; } }