Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
Vector3d.cpp
Package: display_list.zip [view]
Upload User: hcfgz168
Upload Date: 2011-09-11
Package Size: 116k
Code Size: 9k
Category:
OpenGL program
Development Platform:
WINDOWS
- //********************************************
- // Vector3d.cpp
- //********************************************
- // class CVector3d
- //********************************************
- // pierre.alliez@cnet.francetelecom.fr
- // Created : 10/12/97
- // Modified : 20/01/98
- //********************************************
- #include "stdafx.h"
- #include <math.h>
- #include "Vector3d.h"
- #include "Base3d.h"
- //////////////////////////////////////////////
- // CONSTRUCTORS
- //////////////////////////////////////////////
- //********************************************
- // Destructor
- //********************************************
- CVector3d::~CVector3d()
- {
- }
- //********************************************
- // Constructor
- //********************************************
- CVector3d::CVector3d(CVector3d &vector)
- {
- Set(&vector);
- }
- //********************************************
- // Constructor
- //********************************************
- CVector3d::CVector3d(CVector3d *pVector)
- {
- Set(pVector);
- }
- //********************************************
- // Constructor
- //********************************************
- CVector3d::CVector3d(const float x,
- const float y,
- const float z)
- {
- Set(x,y,z);
- }
- //********************************************
- // Constructor
- //********************************************
- CVector3d::CVector3d(CVertex3d *pVertex1,
- CVertex3d *pVertex2)
- {
- m_x = pVertex2->x()-pVertex1->x();
- m_y = pVertex2->y()-pVertex1->y();
- m_z = pVertex2->z()-pVertex1->z();
- }
- //********************************************
- // Constructor
- //********************************************
- CVector3d::CVector3d(CVertex3d &vertex1,
- CVertex3d &vertex2)
- {
- m_x = vertex2.x()-vertex1.x();
- m_y = vertex2.y()-vertex1.y();
- m_z = vertex2.z()-vertex1.z();
- }
- //////////////////////////////////////////////
- // DATAS
- //////////////////////////////////////////////
- //********************************************
- // Copy
- //********************************************
- void CVector3d::Copy(CVector3d &vector)
- {
- Set(&vector);
- }
- //********************************************
- // Copy
- //********************************************
- void CVector3d::Copy(CVector3d *pVector)
- {
- Set(pVector);
- }
- //********************************************
- // GetType
- //********************************************
- int CVector3d::GetType()
- {
- return TYPE_VECTOR3D;
- }
- //********************************************
- // Set
- //********************************************
- void CVector3d::Clear(void)
- {
- Set(0.0f,0.0f,0.0f);
- }
- //********************************************
- // Set
- //********************************************
- void CVector3d::Set(const float x,
- const float y,
- const float z)
- {
- m_x = x;
- m_y = y;
- m_z = z;
- }
- //********************************************
- // Set
- //********************************************
- void CVector3d::Set(CVector3d *pVector)
- {
- Set(pVector->x(),pVector->y(),pVector->z());
- }
- //********************************************
- // Set
- //********************************************
- void CVector3d::Set(CVector3d &vector)
- {
- Set(vector.x(),vector.y(),vector.z());
- }
- //********************************************
- // Set
- //********************************************
- void CVector3d::Set(CVertex3d *pVertex1,
- CVertex3d *pVertex2)
- {
- m_x = pVertex2->x()-pVertex1->x();
- m_y = pVertex2->y()-pVertex1->y();
- m_z = pVertex2->z()-pVertex1->z();
- }
- //********************************************
- // Trace
- //********************************************
- void CVector3d::Trace()
- {
- TRACE("n");
- TRACE("** Vector **n");
- TRACE("Adress : %xn",this);
- TRACE("Coordinates : (%g %g %g)n",m_x,m_y,m_z);
- }
- //////////////////////////////////////////////
- // OPERATORS
- //////////////////////////////////////////////
- //********************************************
- // Operator =
- //********************************************
- CVector3d CVector3d::operator=(CVector3d& vector)
- {
- CVector3d v;
- v.Set(vector);
- return v;
- }
- //********************************************
- // Operator +
- //********************************************
- void CVector3d::operator+=(CVector3d* pVector)
- {
- m_x += pVector->x();
- m_y += pVector->y();
- m_z += pVector->z();
- }
- //********************************************
- // Operator /=
- //********************************************
- void CVector3d::operator/=(float factor)
- {
- m_x /= factor;
- m_y /= factor;
- m_z /= factor;
- }
- //********************************************
- // Operator *=
- //********************************************
- void CVector3d::operator*=(float factor)
- {
- m_x *= factor;
- m_y *= factor;
- m_z *= factor;
- }
- //********************************************
- // Inner
- //********************************************
- void CVector3d::Inner(CVector3d& vector)
- {
- double x = (double)m_y*(double)vector.z()-(double)m_z*(double)vector.y();
- double y = (double)m_z*(double)vector.x()-(double)m_x*(double)vector.z();
- double z = (double)m_x*(double)vector.y()-(double)m_y*(double)vector.x();
- Set((float)x,(float)y,(float)z);
- }
- //////////////////////////////////////////////
- //////////////////////////////////////////////
- // PROCESSING
- //////////////////////////////////////////////
- //////////////////////////////////////////////
- //********************************************
- // Normalize
- //********************************************
- void CVector3d::NormalizeL2(void)
- {
- double norm = GetNormL2();
- if(norm != 0.0f)
- {
- m_x = (float)(m_x / norm);
- m_y = (float)(m_y / norm);
- m_z = (float)(m_z / norm);
- }
- //TRACE("norm : %gn",GetNormL2());
- }
- //********************************************
- // Normalize
- //********************************************
- void CVector3d::NormalizeL2(float value)
- {
- double norm = GetNormL2();
- if(norm != 0.0f)
- {
- m_x *= (float)(value/norm);
- m_y *= (float)(value/norm);
- m_z *= (float)(value/norm);
- }
- //TRACE("norm : %g (wanted : %g)n",GetNormL2(),value);
- }
- //********************************************
- // GetNormSquare
- //********************************************
- double CVector3d::GetNormL2Square(void)
- {
- return ((double)m_x*(double)m_x +
- (double)m_y*(double)m_y +
- (double)m_z*(double)m_z);
- }
- //********************************************
- // GetNorm
- //********************************************
- double CVector3d::GetNormL2(void)
- {
- return sqrt((double)m_x*(double)m_x +
- (double)m_y*(double)m_y +
- (double)m_z*(double)m_z);
- }
- //********************************************
- // Collinear
- //********************************************
- int CVector3d::Collinear(CVector3d *pVector)
- {
- float x = pVector->x() / m_x;
- float y = pVector->y() / m_y;
- float z = pVector->z() / m_z;
- return ((x == y) && (y == z));
- }
- //********************************************
- // Collinear
- //********************************************
- int CVector3d::Collinear(CVector3d &vector)
- {
- float x = vector.x() / m_x;
- float y = vector.y() / m_y;
- float z = vector.z() / m_z;
- return ((x == y) && (y == z));
- }
- //////////////////////////////////////////////
- //////////////////////////////////////////////
- // EXTERNAL OPERATORS
- //////////////////////////////////////////////
- //////////////////////////////////////////////
- //********************************************
- // Operator +
- //********************************************
- CVector3d operator+(CVector3d& u,
- CVector3d& v)
- {
- CVector3d w;
- w.Set(u.x()+v.x(),u.y()+v.y(),u.z()+v.z());
- return w;
- }
- //********************************************
- // Operator -
- //********************************************
- CVector3d operator-(CVector3d& u,
- CVector3d& v)
- {
- CVector3d w;
- w.Set(u.x()-v.x(),u.y()-v.y(),u.z()-v.z());
- return w;
- }
- //********************************************
- // Operator ^
- //********************************************
- CVector3d operator^(CVector3d& u,
- CVector3d& v)
- {
- // w = u ^ v
- CVector3d w;
- w.Set(u.y()*v.z()-u.z()*v.y(),
- u.z()*v.x()-u.x()*v.z(),
- u.x()*v.y()-u.y()*v.x());
- return w;
- }
- //********************************************
- // Inner
- //********************************************
- CVector3d CVector3d::Inner(CVector3d* u,
- CVector3d* v)
- {
- // w = u ^ v
- CVector3d w;
- w.Set(u->y()*v->z()-u->z()*v->y(),
- u->z()*v->x()-u->x()*v->z(),
- u->x()*v->y()-u->y()*v->x());
- return w;
- }
- void CVector3d::RotateXZ(float alpha)
- {
- float x = (float)(m_x*cos(alpha)+m_z*sin(alpha));
- float z = (float)(-m_x*sin(alpha)+m_z*cos(alpha));
- m_x = x;
- m_z = z;
- }
- // ** EOF **