Advertisement
vito-Z80

Intersecting rectangles

Jul 31st, 2020 (edited)
2,989
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //-----------------------------------------
  2.     macro OVERLAY_LINES
  3.     ; not work if (l1 + l2 >= 255)
  4.  
  5.     ; l2--
  6.     ; (c2 + l2) - c1 < l1 + l2
  7.  
  8.     dec d
  9.     ld a,h      ; l1
  10.     add d       ; l2
  11.     ld c,a      ; l1+l2
  12.     ld a,e      ; c2
  13.     add d       ; l2
  14.     sub l       ; c1
  15.     cp c        ; l1+l2
  16.     jr c,overlay
  17.     ; no overlay = A == 0
  18.     xor a
  19.     ret
  20. overlay:
  21.     ; overlay = A > 0
  22.     ld a,1
  23.     ret
  24.     endm
  25. //-----------------------------------------
  26.     macro OVERLAP_RECTANGLES_ANY_SIZE
  27.     ; 58-98tt
  28.     ; 26b
  29.     ; OVERLAY_LINES x 2
  30.  
  31.     ; upload data
  32.     ;   L-x1; H-w1; E-x2; D-w2
  33.     ;   exx
  34.     ;   L-y1; H-h1; E-y2; D-h2
  35.     ;
  36.     ;   ld l,86     ; x1
  37.     ;   ld h,11     ; w1
  38.     ;   ld e,94     ; x2
  39.     ;   ld d,9      ; w2
  40.     ;   exx
  41.     ;   ld l,172    ; y1
  42.     ;   ld h,11     ; h1
  43.     ;   ld e,178    ; y2
  44.     ;   ld d,12     ; h2
  45.     ;   = overlaps (1)
  46.  
  47.     dec d
  48.     ld a,h     
  49.     add d      
  50.     ld c,a     
  51.     ld a,e     
  52.     add d      
  53.     sub l      
  54.     cp c
  55.     jr nc,noOverlayL       
  56.     exx
  57.     dec d
  58.     ld a,h     
  59.     add d      
  60.     ld c,a     
  61.     ld a,e     
  62.     add d      
  63.     sub l      
  64.     cp c
  65.     jr c,overlayL
  66. noOverlayL:
  67.     xor a
  68.     ret
  69. overlayL:
  70.     ld a,1
  71.     ret
  72.     endm
  73. //--------------------------------------------------------------
  74.     macro OVERLAP_RECTANGLES_SAME_SIZE
  75.     ; 82-176tt
  76.     ; 21b
  77.     ; fixed size
  78.     ; HL - address of X1,Y1
  79.     ; DE - address of X2,Y2
  80.     ; C - SIZE
  81.     ld b,2
  82. pass:
  83.     ld a,(de)
  84.     cp (hl)
  85.     jr nc,aGreater 
  86.     ld a,(hl)
  87.     ex de,hl
  88. aGreater:
  89.     sub (hl)
  90.     cp c
  91.     jr nc,noIntersection
  92.     inc hl
  93.     inc de
  94.     djnz pass
  95.     //  a != 0 если было пересечение
  96. intersect:
  97.     ld a,1
  98.     ret
  99. noIntersection:
  100.     xor a
  101.     ret
  102.     endm
  103. //----------------------------------------------------------------------------------------------
  104.     ;   uncomment the required utility
  105. //----------------------------------------------------------------------------------------------
  106. overlaps:
  107. ;   OVERLAP_RECTANGLES_SAME_SIZE
  108. ;   OVERLAP_RECTANGLES_ANY_SIZE
  109. //-----------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement