Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. struct LineSegment {
  2.     vec2 min;
  3.     vec2 max;
  4. }
  5.  
  6. struct Rectangle {
  7.     vec2 min;
  8.     vec2 max;
  9. };
  10.  
  11. LineSegment clipLineSegmentToRectangle(LineSegment lineSegment, Rectangle rectangle) {
  12.     if lineSegment.min.x < rectangle.min.x {
  13.         if rectangle.min.x < lineSegment.max.x {
  14.             lineSegment.min = intersectLineSegmentWithHorizontalLine(lineSegment, rectangle.min.x);
  15.         } else {
  16.             lineSegment.min.x = rectangle.min.x;
  17.             lineSegment.max.x = rectangle.min.x;
  18.         }
  19.     }
  20.     if rectangle.x.max < lineSegment.max.x {
  21.         if lineSegment.min.x < rectangle.min.x {
  22.             lineSegment.min = intersectLineSegmentWithHorizontalLine(lineSegment, rectangle.max.x);
  23.         } else {
  24.             lineSegment.min.x = rectangle.max.x;
  25.             lineSegment.max.x = rectangle.max.x;
  26.         }
  27.     }
  28.     if lineSegment.min.y < rectangle.min.y {
  29.         if rectangle.min.y < lineSegment.max.y {
  30.             lineSegment.min = intersectLineSegmentWithVerticalLine(lineSegment, rectangle.min.y);
  31.         } else {
  32.             lineSegment.min.y = rectangle.min.y;
  33.             lineSegment.max.y = rectangle.min.y;
  34.         }
  35.     }
  36.     if rectangle.max.y < lineSegment.max.y {
  37.         if lineSegment.min.y < rectangle.max.y {
  38.             lineSegment.max = intersectLineSegmentWithVerticalLine(lineSegment, rectangle.max.y);
  39.         } else {
  40.             lineSegment.min.y = rectangle.max.y;
  41.             lineSegment.max.y = rectangle.max.y;
  42.         }
  43.     }
  44.     return lineSegment;
  45. }
  46.  
  47. vec2 intersectLineSegmentWithHorizontalLine(LineSegment lineSegment, horizontalLineX: float) {
  48.     return vec2(
  49.         horizontalLineX,
  50.         mix(
  51.             lineSegment.min.y,
  52.             lineSegment.max.y,
  53.             (horizontalLineX - lineSegment.min.x) / (lineSegment.max.x - lineSegment.min.x)
  54.         )
  55.     )
  56. }
  57.  
  58. vec2 intersectLineSegmentWithVerticalLine(LineSegment lineSegment, verticalLineY: float) {
  59.     return vec2(
  60.         mix(
  61.             lineSegment.min.x,
  62.             lineSegment.max.x,
  63.             (verticalLineY - lineSegment.min.y) / (lineSegment.max.y - lineSegment.min.y)
  64.         ),
  65.         verticalLineY
  66.     );
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement