3DSHAPES.H
上传用户:abcdshs
上传日期:2007-01-07
资源大小:1858k
文件大小:5k
源码类别:

游戏

开发平台:

Visual C++

  1. // (C) Copyright 1996 by Anthony J. Carin.  All Rights Reserved.
  2. #ifndef _3DSHAPES_H
  3. #define _3DSHAPES_H
  4. #include <math.h>
  5. #include <windows.h>
  6. #include "launch.h"
  7. #include "tcdirect.h"
  8. #include "color.h"
  9. class coordinate
  10. {
  11. public:
  12.         coordinate()                            { m_x = m_y = m_z = 0.0f; }
  13.         coordinate(float x, float y, float z)   { setto(x,y,z); }
  14.         coordinate(coordinate& o)               { setto(o.x(),o.y(),o.z()); }
  15. virtual coordinate& operator =(coordinate& o)   { setto(o.x(),o.y(),o.z()); return *this; }
  16. virtual void    setto(coordinate& o)            { setto(o.x(),o.y(),o.z()); }
  17.         void    setto(float x, float y, float z);
  18.         void    stepto(coordinate& o, float step, char stop = TRUE);
  19.         float x()               { return m_x; }
  20.         float y()               { return m_y; }
  21.         float z()               { return m_z; }
  22.         void    setx(float x)      { m_x = x; }
  23.         void    sety(float y)      { m_y = y; }
  24.         void    setz(float z)      { m_z = z; }
  25.         void    operator +=(coordinate& c);
  26.         void    operator -=(coordinate& c);
  27.         direction& xdirectionto(coordinate& b);
  28.         direction& ydirectionto(coordinate& b);
  29.         direction& zdirectionto(coordinate& b);
  30.         float distanceto(coordinate& b);
  31. friend  coordinate& operator+(coordinate& a, coordinate& b);
  32. friend  coordinate& operator-(coordinate& a, coordinate& b);
  33. friend  char       operator!=(coordinate& a, coordinate& b);
  34. friend  char       operator==(coordinate& a, coordinate& b);
  35. protected:
  36.         float m_x;
  37.         float m_y;
  38.         float m_z;
  39. };
  40. inline direction& coordinate::xdirectionto(coordinate& b)
  41. {
  42.    static direction r;
  43.    r = getdirection(m_y,m_z,b.m_y,b.m_z);
  44.    return r;
  45. }
  46. inline direction& coordinate::ydirectionto(coordinate& b)
  47. {
  48.    static direction r;
  49.    r = getdirection(m_x,m_z,b.m_x,b.m_z);
  50.    return r;
  51. }
  52. inline direction& coordinate::zdirectionto(coordinate& b)
  53. {
  54.    static direction r;
  55.    r = getdirection(m_x,m_y,b.m_x,b.m_y);
  56.    return r;
  57. }
  58. inline float coordinate::distanceto(coordinate& b)
  59. {
  60.     double x = m_x - b.m_x;
  61.     double z = m_z - b.m_z;
  62.     return (float) sqrt(x*x+z*z);
  63. }
  64. inline void coordinate::setto(float nx, float ny, float nz)
  65. {
  66.    m_x = nx;
  67.    m_y = ny;
  68.    m_z = nz;
  69. }
  70. inline char operator!=(coordinate& a, coordinate& b)
  71. {
  72.     return (char)!operator==(a,b);
  73. }
  74. class view : public coordinate
  75. {
  76. public:
  77.     view() : coordinate()               { m_xdirection = m_ydirection = m_zdirection = (short) 0; }
  78.     view(coordinate& c) : coordinate(c) { m_xdirection = m_ydirection = m_zdirection = (short) 0; }
  79.     view(view& c);
  80.     void setxdir(direction dir) { m_xdirection = dir; }
  81.     void setydir(direction dir) { m_ydirection = dir; }
  82.     void setzdir(direction dir) { m_zdirection = dir; }
  83.     direction& xdirection()      { return m_xdirection; }
  84.     direction& ydirection()      { return m_ydirection; }
  85.     direction& zdirection()      { return m_zdirection; }
  86.     //view& operator =(view& v);
  87. private:
  88.     direction m_xdirection;
  89.     direction m_ydirection;
  90.     direction m_zdirection;
  91. };
  92. class point : public coordinate
  93. {
  94. public:
  95.     point() : coordinate() {}
  96.     point(coordinate& c) : coordinate(c) {}
  97.     point(float x, float y, float z) : coordinate(x,y,z) {}
  98.     point& operator =(point& o)   { setto(o.x(),o.y(),o.z()); return *this; }
  99.     void  xrotate(direction& d);
  100.     void  yrotate(direction& d);
  101.     void  zrotate(direction& d);
  102. };
  103. class polygon
  104. {
  105. public:
  106.    polygon() { m_linenum = 0; }
  107.    polygon(polygon& p);
  108.    polygon(coordinate& a, coordinate& b, coordinate& c);
  109.    polygon(coordinate& a, coordinate& b, coordinate& c, coordinate& d);
  110.    void setto(coordinate& a, coordinate& b, coordinate& c);
  111.    void setcolor(int c)   { m_color = c; }
  112.    COLORREF color()       { return m_color; }
  113.    coordinate&  getcenter();
  114.    point& a()   { return m_a; }
  115.    point& b()   { return m_b; }
  116.    point& c()   { return m_c; }
  117.    point& d()   { return m_d; }
  118. virtual void setto(coordinate& a, coordinate& b, coordinate& c, coordinate& d);
  119. virtual void operator =(polygon &p);
  120. protected:
  121.    point m_a;
  122.    point m_b;
  123.    point m_c;
  124.    point m_d;
  125.    char  m_linenum;
  126.    tccolor m_color;
  127. private:
  128. };
  129. inline polygon::polygon(coordinate& a, coordinate& b, coordinate& c, coordinate& d)
  130. {
  131.    setto(a,b,c,d);
  132. }
  133. inline polygon::polygon(coordinate& a, coordinate& b, coordinate& c)
  134. {
  135.    setto(a,b,c);
  136. }
  137. inline void polygon::operator =(polygon& p)
  138. {
  139.    m_linenum = p.m_linenum;
  140.    m_a = p.m_a;
  141.    m_b = p.m_b;
  142.    m_c = p.m_c;
  143.    m_d = p.m_d;
  144.    m_color = p.m_color;
  145. }
  146. #endif