//
//////////////////////////////////////////////////////////////////////
//#if !defined(AFX_POINT3D_H__FC945195_032B_4C98_B1AD_A2AA4C9C7F8A__INCLUDED_)
//#define AFX_POINT3D_H__FC945195_032B_4C98_B1AD_A2AA4C9C7F8A__INCLUDED_
//#if _MSC_VER > 1000
//#pragma once
//#endif // _MSC_VER > 1000
#ifndef STRUCTDEFS_H
#define STRUCTDEFS_H
#include
#define Pi 3.1415926f
class CPoint3D
{
public:
float x,y,z;
CPoint3D();
CPoint3D(double,double,double);
CPoint3D(float,float,float);
CPoint3D(int,int,int);
CPoint3D(float *);
float operator & ( CPoint3D& v );
CPoint3D operator * ( CPoint3D& v );
CPoint3D operator * ( double );
CPoint3D operator * ( float );
CPoint3D operator * ( int );
CPoint3D operator - ( CPoint3D& v );
CPoint3D operator + ( CPoint3D& v );
void operator += ( CPoint3D& v );
bool operator == ( CPoint3D& v ) const;
bool operator == ( const CPoint3D& v ) const;
void Unify();
float Length();
virtual ~CPoint3D();
};
//全局函数
//void VectorToAngle(CPoint3D& vec,float& fPdir,float& fAdir);
struct CAngle
{
float m_fP; //Polar angle极角
float m_fA; //azimuthal angle方位角
CPoint3D m_vPos;
CAngle()
{
m_fP=0.0f;
m_fA=0.0f;
AngleToVector();
}
CAngle(float fP,float fA)
{
m_fP=fP;
m_fA=fA;
AngleToVector();
}
~CAngle(){}
CAngle operator +(CAngle& a)
{
return CAngle(m_fP+a.m_fP,m_fA+a.m_fA);
}
CAngle operator *(float a)
{
return CAngle(m_fP*a,m_fA*a);
}
CAngle operator -(CAngle& a)
{
return CAngle(m_fP-a.m_fP,m_fA-a.m_fA);
}
CAngle::operator =(CAngle& a)
{
m_fP=a.m_fP;
m_fA=a.m_fA;
AngleToVector();
}
void CAngle::SetValue(float fP,float fA)
{
m_fP=fP;
m_fA=fA;
AngleToVector();
}
void AngleToVector()
{
m_vPos.y=float(sin(Pi/2-m_fP));
m_vPos.x=float(cos(Pi/2-m_fP)*cos(m_fA));
m_vPos.z=float(-cos(Pi/2-m_fP)*sin(m_fA));
}
};
#endif // !defined(AFX_POINT3D_H__FC945195_032B_4C98_B1AD_A2AA4C9C7F8A__INCLUDED_)