Exemplo n.º 1
0
		/**********************************************************
		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;			
		}
Exemplo n.º 2
0
		/********************************************************
		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];
			}
		}