Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. std::list<Point> Simulation::BresenhamLine(const double x1, const double y1, const double z1, const double x2, const double y2, const double z2)
  2. {
  3. std::list<Point> lst;
  4. double d, dx, dy, ai, bi, xi, yi;
  5. double x = x1, y = y1, dd = 0.2;
  6. double dz;
  7. if (x1 < x2)
  8. {
  9. xi = dd;
  10. dx = x2 - x1;
  11. }
  12. else
  13. {
  14. xi = -dd;
  15. dx = x1 - x2;
  16. }
  17. if (y1 < y2)
  18. {
  19. yi = dd;
  20. dy = y2 - y1;
  21. }
  22. else
  23. {
  24. yi = -dd;
  25. dy = y1 - y2;
  26. }
  27. dz = (z2 - z1)/std::fmax(dy, dx);
  28. lst.push_back(Point(x, y, z1));
  29. int iterator = 0;
  30. if (dx > dy)
  31. {
  32. ai = (dy - dx) * 2;
  33. bi = dy * 2;
  34. d = bi - dx;
  35. while (!EpsilonEquals(x,x2,dd))
  36. {
  37. iterator++;
  38. if (d >= 0)
  39. {
  40. x += xi;
  41. y += yi;
  42. d += ai;
  43. }
  44. else
  45. {
  46. d += bi;
  47. x += xi;
  48. }
  49. lst.push_back(Point(x, y, z1 + iterator * dz));
  50. }
  51. }
  52. else
  53. {
  54. ai = (dx - dy) * 2;
  55. bi = dx * 2;
  56. d = bi - dy;
  57. while (!EpsilonEquals(y, y2, dd))
  58. {
  59. iterator++;
  60. if (d >= 0)
  61. {
  62. x += xi;
  63. y += yi;
  64. d += ai;
  65. }
  66. else
  67. {
  68. d += bi;
  69. y += yi;
  70. }
  71. lst.push_back(Point(x, y, z1 + iterator * dz));
  72. }
  73. }
  74. return lst;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement