POLAR.CXX
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright 1992 - 1997 Microsoft Corporation.
  5. //
  6. //  File:       polar.cxx
  7. //
  8. //  Contents:   routines for converting between polar and cartesian coordinate
  9. //              systems
  10. //
  11. //  Classes:
  12. //
  13. //  Functions:  PolarFromCartesian
  14. //              CartesianFromPolar
  15. //
  16. //  History:    5-04-94   stevebl   Created
  17. //
  18. //----------------------------------------------------------------------------
  19. #include "polar.h"
  20. #include <math.h>
  21. //+---------------------------------------------------------------------------
  22. //
  23. //  Function:   CartesianFromPolar
  24. //
  25. //  Synopsis:   converts from polar coordinates to cartesian coordinates
  26. //
  27. //  Arguments:  [x]     - [out] x position
  28. //              [y]     - [out] y position
  29. //              [r]     - [in] radius
  30. //              [theta] - [in] angle in radians
  31. //
  32. //  Returns:    nothing
  33. //
  34. //  History:    5-04-94   stevebl   Created
  35. //
  36. //----------------------------------------------------------------------------
  37. void CartesianFromPolar(double & x, double & y, double r, double theta)
  38. {
  39.     x = r * cos(theta);
  40.     y = r * sin(theta);
  41. }
  42. //+---------------------------------------------------------------------------
  43. //
  44. //  Function:   PolarFromCartesian
  45. //
  46. //  Synopsis:   converts from cartesian to polar coordinates
  47. //
  48. //  Arguments:  [r]     - [out] radius
  49. //              [theta] - [out] angle in radians
  50. //              [x]     - [in] x position
  51. //              [y]     - [in] y position
  52. //
  53. //  Returns:    nothing
  54. //
  55. //  History:    5-04-94   stevebl   Created
  56. //
  57. //----------------------------------------------------------------------------
  58. void PolarFromCartesian(double & r, double & theta, double x, double y)
  59. {
  60.     r = sqrt(x * x + y * y);
  61.     if (r == 0)
  62.     {
  63.         theta = 0;
  64.         return;
  65.     }
  66.     if (y > 0)
  67.     {
  68.         theta = acos(x / r);
  69.     }
  70.     else
  71.     {
  72.         // acos(0) == pi / 2
  73.         // I'm using the trig functions instead of a constant
  74.         // to ensure that the conversion functions use the
  75.         // same values when going in both directions.
  76.         theta = 4.0 * acos((float)0) - acos(x / r);
  77.     }
  78. }