MirrorShape.cpp
上传用户:hehe2haha
上传日期:2013-08-16
资源大小:161k
文件大小:2k
源码类别:

CAD

开发平台:

Visual C++

  1. // MirrorShape.cpp: implementation of the MirrorShape class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "MirrorShape.h"
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9. CMirrorShape::CMirrorShape()
  10. {
  11. SinAngle = 0;
  12. CosAngle = 0;
  13. TgAngle  = 0;
  14. }
  15. CMirrorShape::~CMirrorShape()
  16. {
  17. }
  18. void CMirrorShape::SetSinCos(POINT BeginPos, POINT EndPos)
  19. {
  20. int Length = CDraw::Distance(BeginPos,EndPos);
  21. if (Length != 0)
  22. {
  23. //求参考线与X轴夹角的正弦、余弦
  24. SinAngle = (double)(EndPos.y - BeginPos.y) / Length;
  25. CosAngle = (double)(EndPos.x - BeginPos.x) / Length;
  26. //参考线与Y轴平行
  27. if (EndPos.x == BeginPos.x && EndPos.y != BeginPos.y);
  28. else
  29. {
  30. //求参考线与X轴夹角的正切
  31. TgAngle = (double)(EndPos.y - BeginPos.y) / (EndPos.x - BeginPos.x);
  32. }
  33. }
  34. }
  35. void CMirrorShape::SetMirrorPos(POINT BeginPos, POINT EndPos)
  36. {
  37. double Length  = 0.0;
  38. double xOffset = 0.0;
  39. double yOffset = 0.0;
  40. MirrorBeginPos = SourceBeginPos;
  41. MirrorEndPos   = SourceEndPos;
  42. //参考线与Y轴平行
  43. if (EndPos.x == BeginPos.x && EndPos.y != BeginPos.y)
  44. {
  45. xOffset = (double)2 * (BeginPos.x - SourceBeginPos.x);
  46. MirrorBeginPos.x += (long)xOffset;
  47. xOffset = (double)2 * (BeginPos.x - SourceEndPos.x);
  48. MirrorEndPos.x += (long)xOffset;
  49. }
  50. else
  51. {
  52. Length = BeginPos.y + TgAngle * (SourceBeginPos.x - BeginPos.x);
  53. Length = SourceBeginPos.y - Length;
  54. Length = Length * CosAngle;
  55. xOffset = 2 * Length * SinAngle;
  56. yOffset = 2 * Length * CosAngle;
  57. MirrorBeginPos.x += (long)xOffset;
  58. MirrorBeginPos.y -= (long)yOffset;
  59. Length = BeginPos.y + TgAngle * (SourceEndPos.x - BeginPos.x);
  60. Length = SourceEndPos.y - Length;
  61. Length = Length * CosAngle;
  62. xOffset = 2 * Length * SinAngle;
  63. yOffset = 2 * Length * CosAngle;
  64. MirrorEndPos.x += (long)xOffset; 
  65. MirrorEndPos.y -= (long)yOffset; 
  66. }
  67. }