Advertisement
kalabukdima

ray_drawing

Apr 4th, 2018
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include "segment.h"
  4.  
  5. class Ray : public Segment {
  6. public:
  7.     Ray(Point first, Point second)
  8.         : Segment(
  9.             std::move(first),
  10.             std::move(second)
  11.         ) {}
  12.  
  13.     virtual const Point getFirstPoint(const Painter& p) const override {
  14.         return TwoPointFigure::getFirstPoint(p);
  15.     }
  16.  
  17.     virtual const Point getSecondPoint(const Painter& painter) const override {
  18.         const Point first = getFirstPoint(painter);
  19.         int multiplier = std::numeric_limits<int>::max();
  20.         if (delta.x < 0) {
  21.             multiplier = std::min(
  22.                 multiplier,
  23.                 utils::ceiling(the_center.x, -delta.x)
  24.             );
  25.         }
  26.         if (delta.x > 0) {
  27.             multiplier = std::min(
  28.                 multiplier,
  29.                 utils::ceiling(painter.getWidth() - the_center.x, delta.x)
  30.             );
  31.         }
  32.         if (delta.y < 0) {
  33.             multiplier = std::min(
  34.                 multiplier,
  35.                 utils::ceiling(the_center.y, -delta.y)
  36.             );
  37.         }
  38.         if (delta.y > 0) {
  39.             multiplier = std::min(
  40.                 multiplier,
  41.                 utils::ceiling(painter.getHeight() - the_center.y, delta.y)
  42.             );
  43.         }
  44.         return first + delta * multiplier;
  45.     }
  46. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement