Kermer

Intersection inside rectangle

Jan 31st, 2017
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.01 KB | None | 0 0
  1. func _ready():
  2.     var viewport_size = Vector2(X,Y)
  3.     var rect = Rect2(Vector2(),viewport_size) # intersect() probably will support rect position (as offset) later on
  4.     var pos = Vector2(x,y) # first dot position
  5.     var vec = -Vector2(-32,-16) # your vector, but negated
  6.    
  7.     var second_pos = intersect(rect,pos,vec)
  8.     # do something with this second pos
  9.  
  10. func intersect(rect,pos,vec):
  11.     if rect.size==Vector2() or vec==Vector2():
  12.         return pos
  13.    
  14.     var intersect = pos
  15.     var v = vec.normalized()
  16.    
  17.     if (sign(v.x) == 0):
  18.         if (sign(v.y) == -1): intersect.y = 0
  19.         else: intersect.y = rect.size.y
  20.     elif (sign(v.y) == 0):
  21.         if (sign(v.x) == -1): intersect.x = 0
  22.         else: intersect.x = rect.size.x
  23.     else:
  24.         var vmax = Vector2()
  25.         if sign(v.x) == -1: vmax.x = (0-pos.x) / v.x
  26.         else: vmax.x = (rect.size.x-pos.x) / v.x
  27.         if sign(v.y) == -1: vmax.y = (0-pos.y) / v.y
  28.         else: vmax.y = (rect.size.y-pos.y) / v.y
  29.        
  30.         if abs(vmax.x) < abs(vmax.y):
  31.             intersect += v * vmax.x
  32.         else:
  33.             intersect += v * vmax.y
  34.    
  35.     return intersect
Add Comment
Please, Sign In to add comment