zoukankan      html  css  js  c++  java
  • 简单基于OPENGL的三维CAD框架(1)工具类

    在vc++中有CDC类,同样也可以开发基于OPENGL的OPenGLDC类,这样可以像调用CDC类一样调用OPenGLDC类

    首先给出两个工具类,点类和向量类

    typedef struct tagVector3D
    {
     double dx;
     double dy;
     double dz;
    } VECTOR3D;

    class CVector3D : public VECTOR3D
    {
    public:
        CVector3D();
        virtual ~CVector3D();
           CVector3D(VECTOR3D v);
        CVector3D(CVector3D &v);
        CVector3D(const double *p);
        CVector3D(double ix, double iy, double iz);
     
    public:
           double GetLength() const;
           void   Normal();
        CVector3D operator*(VECTOR3D v) const;
        CVector3D operator*(CVector3D v) const;
        void operator=(CVector3D v) ;
        void operator-=(VECTOR3D v);     
        void operator-=(CVector3D v);
        CVector3D operator+(VECTOR3D v) const;
        CVector3D operator+(CVector3D v) const;
        CVector3D operator-(VECTOR3D v) const;
        CVector3D operator-(CVector3D v) const;
        CVector3D operator*(double d) const;


    };


    typedef struct tagPoint3D
    {
     double x;
     double y;
     double z;
    } POINT3D;

    class CPoint3D : public POINT3D
    {
    public:
     CPoint3D();
     CPoint3D(double ix,double iy,double iz=0.0);
     CPoint3D(const double *p);
     CPoint3D(POINT3D p);
     virtual ~CPoint3D();

    public:
     CPoint3D operator-(VECTOR3D v) const;
        CPoint3D operator+(VECTOR3D v) const;
     void operator+=(VECTOR3D v);
        void operator-=(VECTOR3D v);

     CPoint3D operator-(CVector3D v) const;
        CPoint3D operator+(CVector3D v) const;
     void operator+=(CVector3D v);
        void operator-=(CVector3D v);
    };

    具体实现如下

    CVector3D::CVector3D()
    {

    }

    CVector3D::~CVector3D()
    {

    }

    CVector3D::CVector3D(VECTOR3D v)
    {
     dx = v.dx;
        dy = v.dy;
     dz = v.dz;
     
    }

    CVector3D::CVector3D(CVector3D &v)
    {
     dx = v.dx;
        dy = v.dy;
     dz = v.dz;
     
    }


    CVector3D::CVector3D(const double *p)
    {
     dx = p[0];
     dy = p[1];
     dz = p[2];
    }

    CVector3D::CVector3D(double ix, double iy, double iz)
    {
     dx = ix;
     dy = iy;
     dz = iz;
    }

    double CVector3D::GetLength() const//向量的长度
    {
     double len = 0;
     len = sqrt(dx * dx + dy * dy + dz * dz);
     return len;
    }

    void CVector3D::Normal()//单位化
    {
     double len = GetLength();

     dx /= len;
     dy /= len;
     dz /= len;
    }

    //向量叉乘,参数为结构或者类
     CVector3D CVector3D::operator*(VECTOR3D v) const
     {
      return CVector3D(dy * v.dz - dz * v.dy, dz * v.dx - dx * v.dz, dx * v.dy - dy * v.dx);
     }

     CVector3D CVector3D::operator*(CVector3D v) const
     {
         return CVector3D(dy * v.dz - dz * v.dy, dz * v.dx - dx * v.dz, dx * v.dy - dy * v.dx);

     }

    void CVector3D::operator-=(VECTOR3D v)
    {
     dx -= v.dx;
     dy -= v.dy;
     dz -= v.dz;
    }

    void CVector3D::operator-=(CVector3D v)
    {
     dx -= v.dx;
     dy -= v.dy;
     dz -= v.dz;
    }

     CVector3D CVector3D::operator+(VECTOR3D v) const
     {
      return CVector3D(dx + v.dx, dy + v.dy, dz + v.dz);
     }

     CVector3D CVector3D::operator+(CVector3D v) const
     {
         return CVector3D(dx + v.dx, dy + v.dy, dz + v.dz);

     }

      CVector3D CVector3D::operator-(VECTOR3D v) const
     {
      return CVector3D(dx - v.dx, dy - v.dy, dz - v.dz);
     }

     CVector3D CVector3D::operator-(CVector3D v) const
     {
         return CVector3D(dx - v.dx, dy - v.dy, dz - v.dz);

     }

     CVector3D CVector3D::operator*(double d) const
    {
     return CVector3D(dx * d, dy * d, dz * d);
    }


    void CVector3D::operator=(CVector3D v)
    {
     dx = v.dx;
     dy = v.dy;
     dz = v.dz;

     
    }

    CPoint3D::CPoint3D()
    {

    }

    CPoint3D::~CPoint3D()
    {

    }

    CPoint3D::CPoint3D(double ix,double iy,double iz)
    {
              x = ix;
        y = iy;
        z = iz;
    }

    CPoint3D::CPoint3D(const double *p)
    {
             x = p[0];
       y = p[1];
       z = p[2];

    }

    CPoint3D::CPoint3D(POINT3D p)
    {
            x = p.x;
      y = p.y;
      z = p.z;
    }

    CPoint3D CPoint3D::operator-(VECTOR3D v) const
    {
     return CPoint3D(x - v.dx, y - v.dy, z - v.dz);
    }

    CPoint3D CPoint3D::operator+(VECTOR3D v) const
    {
     return CPoint3D(x + v.dx, y + v.dy, z + v.dz);
    }

    void CPoint3D::operator+=(VECTOR3D v)
    {
     x += v.dx;
     y += v.dy;
     z += v.dz;
    }

    void CPoint3D::operator-=(VECTOR3D v)
    {
     x -= v.dx;
     y -= v.dy;
     z -= v.dz;
    }

    CPoint3D CPoint3D::operator-(CVector3D v) const
    {
     return CPoint3D(x - v.dx, y - v.dy, z - v.dz);
    }

    CPoint3D CPoint3D::operator+(CVector3D v) const
    {
     return CPoint3D(x + v.dx, y + v.dy, z + v.dz);
    }

    void CPoint3D::operator+=(CVector3D v)
    {
     x += v.dx;
     y += v.dy;
     z += v.dz;
    }

    void CPoint3D::operator-=(CVector3D v)
    {
     x -= v.dx;
     y -= v.dy;
     z -= v.dz;
    }

  • 相关阅读:
    php环境配置中各个模块在网站建设中的功能
    PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置
    August 17th 2017 Week 33rd Thursday
    August 16th 2017 Week 33rd Wednesday
    August 15th 2017 Week 33rd Tuesday
    August 14th 2017 Week 33rd Monday
    August 13th 2017 Week 33rd Sunday
    August 12th 2017 Week 32nd Saturday
    August 11th 2017 Week 32nd Friday
    August 10th 2017 Week 32nd Thursday
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1297858.html
Copyright © 2011-2022 走看看