univcoord.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:3k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // univcoord.cpp
  2. //
  3. // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #include <iostream>
  10. #include <cmath>
  11. #include <celmath/mathlib.h>
  12. #include "univcoord.h"
  13. UniversalCoord::UniversalCoord()
  14. {
  15. }
  16. UniversalCoord::UniversalCoord(BigFix _x, BigFix _y, BigFix _z) :
  17.     x(_x), y(_y), z(_z)
  18. {
  19. }
  20. UniversalCoord::UniversalCoord(double _x, double _y, double _z) :
  21.     x(_x), y(_y), z(_z)
  22. {
  23. }
  24. UniversalCoord::UniversalCoord(const Point3d& p) :
  25.     x(p.x), y(p.y), z(p.z)
  26. {
  27. }
  28. UniversalCoord::UniversalCoord(const Point3f& p) :
  29.     x(p.x), y(p.y), z(p.z)
  30. {
  31. }
  32. UniversalCoord::operator Point3d() const
  33. {
  34.     return Point3d((double) x, (double) y, (double) z);
  35. }
  36. UniversalCoord::operator Point3f() const
  37. {
  38.     return Point3f((float) x, (float) y, (float) z);
  39. }
  40. double UniversalCoord::distanceTo(const UniversalCoord& uc)
  41. {
  42.     return sqrt(square((double) (uc.x - x)) +
  43.                 square((double) (uc.y - y)) +
  44.                 square((double) (uc.z - z)));
  45. }
  46. Vec3d operator-(const UniversalCoord& uc0, const UniversalCoord& uc1)
  47. {
  48.     return Vec3d((double) (uc0.x - uc1.x),
  49.                  (double) (uc0.y - uc1.y),
  50.                  (double) (uc0.z - uc1.z));
  51. }
  52. Vec3d operator-(const UniversalCoord& uc, const Point3d& p)
  53. {
  54.     return Vec3d((double) (uc.x - (BigFix) p.x),
  55.                  (double) (uc.y - (BigFix) p.y),
  56.                  (double) (uc.z - (BigFix) p.z));
  57. }
  58. Vec3d operator-(const Point3d& p, const UniversalCoord& uc)
  59. {
  60.     return Vec3d((double) ((BigFix) p.x - uc.x),
  61.                  (double) ((BigFix) p.y - uc.y),
  62.                  (double) ((BigFix) p.z - uc.z));
  63. }
  64. Vec3f operator-(const UniversalCoord& uc, const Point3f& p)
  65. {
  66.     return Vec3f((float) (uc.x - (BigFix) p.x),
  67.                  (float) (uc.y - (BigFix) p.y),
  68.                  (float) (uc.z - (BigFix) p.z));
  69. }
  70. Vec3f operator-(const Point3f& p, const UniversalCoord& uc)
  71. {
  72.     return Vec3f((float) ((BigFix) p.x - uc.x),
  73.                  (float) ((BigFix) p.y - uc.y),
  74.                  (float) ((BigFix) p.z - uc.z));
  75. }
  76. UniversalCoord operator+(const UniversalCoord& uc, const Vec3d& v)
  77. {
  78.     return UniversalCoord(uc.x + (BigFix) v.x,
  79.                           uc.y + (BigFix) v.y,
  80.                           uc.z + (BigFix) v.z);
  81. }
  82. UniversalCoord operator+(const UniversalCoord& uc, const Vec3f& v)
  83. {
  84.     return UniversalCoord(uc.x + BigFix((double) v.x),
  85.                           uc.y + BigFix((double) v.y),
  86.                           uc.z + BigFix((double) v.z));
  87. }
  88. UniversalCoord operator-(const UniversalCoord& uc, const Vec3d& v)
  89. {
  90.     return UniversalCoord(uc.x - BigFix(v.x),
  91.                           uc.y - BigFix(v.y),
  92.                           uc.z - BigFix(v.z));
  93. }
  94. UniversalCoord operator-(const UniversalCoord& uc, const Vec3f& v)
  95. {
  96.     return UniversalCoord(uc.x - BigFix((double) v.x),
  97.                           uc.y - BigFix((double) v.y),
  98.                           uc.z - BigFix((double) v.z));
  99. }
  100. UniversalCoord operator+(const UniversalCoord& uc0, const UniversalCoord& uc1)
  101. {
  102.     return UniversalCoord(uc0.x + uc1.x, uc0.y + uc1.y, uc0.z + uc1.z);
  103. }
  104. UniversalCoord UniversalCoord::difference(const UniversalCoord& uc) const
  105. {
  106.     return UniversalCoord(x - uc.x, y - uc.y, z - uc.z);
  107. }