⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vector.h

📁 此代码主要用于汽车车身的优化
💻 H
字号:
/**
 * Vector class.
 * Common mathematical operations on vectors in R3.
 *
 **/
#ifndef __VECTOR_H__
#define __VECTOR_H__

#include <math.h>
//#include "StdAfx.h"
/**
 * Vector3
 **/
template <class T>
struct Vector3
{
  // create a vector
  Vector3 (T x_=0, T y_=0, T z_=0) : x(x_), y(y_), z(z_) {}

  // set coordinates
  void set (T x_, T y_, T z_) { x=x_; y=y_; z=z_; }

  // norm
  Vector3	normalize() const { return((*this) / norm()); }
  double norm        () const { return sqrt(normSquared()); }
  T      normSquared () const { return x*x+y*y+z*z; }

  // boolean operators
  bool operator == (const Vector3& v) const { return x==v.x && y==v.y && z==v.z; }
  bool operator != (const Vector3& v) const { return x!=v.x || y!=v.y || z!=v.z; }

  // operators
  Vector3  operator +  (const Vector3 &v) const { return Vector3(x+v.x, y+v.y, z+v.z); }
  Vector3& operator += (const Vector3 &v)       { x+=v.x; y+=v.y; z+=v.z; return *this; }
  Vector3  operator -  () const                 { return Vector3(-x, -y, -z); }
  Vector3  operator -  (const Vector3 &v) const { return Vector3(x-v.x, y-v.y, z-v.z); }
  Vector3& operator -= (const Vector3 &v)       { x-=v.x; y-=v.y; z-=v.z; return *this; }
  Vector3  operator *  (T s) const              { return Vector3(x*s, y*s, z*s); }
  Vector3& operator *= (float s)                { x*=s; y*=s; z*=s; return *this; }
  Vector3  operator /  (float s) const          { ASSERT(s); return (*this)* (1/s); }
  Vector3& operator /= (float s)                { ASSERT(s); return (*this)*=(1/s); }

  // coordinates
  T x, y, z;
};

template <class T> inline
T Dot (const Vector3<T>& l, const Vector3<T>& r)
{
  return l.x*r.x + l.y*r.y + l.z*r.z;
}

// cross product
template <class T> inline
Vector3<T> Cross (const Vector3<T>& l, const Vector3<T>& r)
{
  return Vector3<T>(
    l.y*r.z - l.z*r.y,
    l.z*r.x - l.x*r.z,
    l.x*r.y - l.y*r.x );
}

// blend_product
template <class T> inline
T BlendProduct (const Vector3<T>& l, const Vector3<T>& m, const Vector3<T>& r)
{
  return Dot(Cross(l, m), r);
}

/**
 * types
 **/
typedef Vector3<char>   Vector3c;
typedef Vector3<int>    Vector3i;
typedef Vector3<float>  Vector3f;
typedef Vector3<double> Vector3d;

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -