www.pudn.com > DrawVector.rar > Draw1.cpp


// Draw1.cpp: implementation of the CDraw class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "Draw.h" 
#include "Draw1.h" 
#include "math.h" 
#define pi 3.1415926 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
//CDraw::CDraw(); 
float GetAngle(float xx,float yy,float m_x,float m_y); 
float GetAngle(float xx,float yy,float m_x,float m_y) 
{ 
	float i; 
	i=(float)acos((m_x-xx)/sqrt((m_y-yy)*(m_y-yy)+(m_x-xx)*(m_x-xx))); 
    return i; 
} 
float CDraw::PointLine(float xx,float yy,float x1,float y1,float x2,float y2) 
{ 
	float a,b,c,ang1,ang2,ang; 
	a=CalDisp(x1,y1,xx,yy); 
	if(a==0.0) 
		return 0.0; 
	b=CalDisp(x2,y2,xx,yy); 
	if(b==0.0) 
		return 0.0; 
	c=CalDisp(x1,y1,x2,y2); 
	if(c==0.0) 
		return 0.0; 
	if(ay2) 
				ang1=(float)pi*2-ang1; 
		} 
		ang2=(float)acos((xx-x1)/a); 
		if(y1>yy) 
			ang2=(float)pi*2-ang2; 
		ang=ang2-ang1; 
		if(ang<0) 
			ang=-ang; 
		if(ang>pi) 
			ang=(float)pi*2-ang; 
		if(ang>pi/2) 
			return a; 
		else 
			return (a*(float)sin(ang)); 
	} 
	else 
	{ 
		if(fabs(y1-y2)<=0.001) 
		{ 
			if(x1y1) 
				ang1=(float)pi*2-ang1; 
		} 
		ang2=(float)acos((xx-x2)/b); 
		if(y2>yy) 
			ang2=(float)pi*2-ang2; 
		ang=ang2-ang1; 
		if(ang<0) 
			ang=-ang; 
		if(ang>pi) 
			ang=(float)pi*2-ang; 
		if(ang>pi/2) 
			return b; 
		else 
			return(b*(float)sin(ang)); 
	} 
} 
 
float CDraw::CalDisp(float x1,float y1,float x2,float y2) 
{ 
	return (float)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 
} 
void CDraw::CalArea() 
{ 
} 
void CDraw::CalLong() 
{ 
} 
BOOL CDraw::PointRgn(float x,float y,int Numble,PointStruct* PointList,float blc) 
{ 
	CRgn rgn; 
	int x1,y1,i; 
	POINT* pPoint; 
	if(Numble<3) 
		return 0; 
	pPoint=new POINT[Numble]; 
	x1=(int)(x/blc); 
	y1=(int)(y/blc); 
	for(i=0;ibaseY) 
			ang=(float)(pi/2); 
		else 
			ang=(float)(pi*3/2); 
		return ang; 
	} 
	else 
	{ 
		r=(float)sqrt((xx-baseX)*(xx-baseX)+(yy-baseY)*(yy-baseY)); 
		double kk=(xx-baseX)/r; 
		ang=(float)acos(kk); 
		if(yy