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