regalgebra(7)

RegAlgebra πŸ’– Boolean Algebra on Spatial Regions ✨

okay bestie, welcome to regalgebra(7) β€” it's giving SAORD Documentation energy and honestly? iconic. πŸŽ€


NAME πŸ¦‹

RegAlgebra β€” Boolean Algebra on Spatial Regions

like… math but make it spatial. no cap.


SYNOPSIS 🌸

lowkey this one's a vibe check rather than a command, so here's the whole thing:

This document describes the boolean arithmetic defined for region
expressions.

DESCRIPTION πŸ’…

so basically ✨ this document ✨ is the one that describes the boolean arithmetic defined for region expressions. that's the whole assignment. that's what we're doing here. boolean arithmetic + region expressions = the moment. 🫢

if you came here looking for a command to run, bestie, this is not that β€” it's a manual page that describes stuff. the lore. the rules of the game. iykyk. πŸ’œ


part 1 done, but we are SO not finished β€” more of this page is coming, don't you dare close the tab πŸ”₯

✨ DESCRIPTION ✨

okay so when you're defining a region, several shapes can be combined using boolean operations. the boolean operators are, in order of precedence:

  • ! β€” not, and it associates right to left 🫢
  • & β€” and, and it associates left to right
  • ^ β€” exclusive or, also left to right
  • βŽͺ β€” inclusive or, left to right too

for example, to create a mask consisting of a large circle with a smaller box removed, one can use the and and not operators:

CIRCLE(11,11,15) & !BOX(11,11,3,6)

and the resulting mask is:

                1234567890123456789012345678901234567890
                ----------------------------------------
              1:1111111111111111111111..................
              2:1111111111111111111111..................
              3:11111111111111111111111.................
              4:111111111111111111111111................
              5:111111111111111111111111................
              6:1111111111111111111111111...............
              7:1111111111111111111111111...............
              8:1111111111111111111111111...............
              9:111111111...1111111111111...............
             10:111111111...1111111111111...............
             11:111111111...1111111111111...............
             12:111111111...1111111111111...............
             13:111111111...1111111111111...............
             14:111111111...1111111111111...............
             15:1111111111111111111111111...............
             16:1111111111111111111111111...............
             17:111111111111111111111111................
             18:111111111111111111111111................
             19:11111111111111111111111.................
             20:1111111111111111111111..................
             21:1111111111111111111111..................
             22:111111111111111111111...................
             23:..11111111111111111.....................
             24:...111111111111111......................
             25:.....11111111111........................
             26:........................................
             27:........................................
             28:........................................
             29:........................................
             30:........................................
             31:........................................
             32:........................................
             33:........................................
             34:........................................
             35:........................................
             36:........................................
             37:........................................
             38:........................................
             39:........................................
             40:........................................

a three-quarter circle can be defined as:

CIRCLE(20,20,10) & !PIE(20,20,270,360)

and looks as follows:

                1234567890123456789012345678901234567890
                ----------------------------------------
              1:........................................
              2:........................................
              3:........................................
              4:........................................
              5:........................................
              6:........................................
              7:........................................
              8:........................................
              9:........................................
             10:........................................
             11:...............111111111................
             12:..............11111111111...............
             13:............111111111111111.............
             14:............111111111111111.............
             15:...........11111111111111111............
             16:..........1111111111111111111...........
             17:..........1111111111111111111...........
             18:..........1111111111111111111...........
             19:..........1111111111111111111...........
             20:..........1111111111111111111...........
             21:..........1111111111....................
             22:..........1111111111....................
             23:..........1111111111....................
             24:..........1111111111....................
             25:...........111111111....................
             26:............11111111....................
             27:............11111111....................
             28:..............111111....................
             29:...............11111....................
             30:........................................
             31:........................................
             32:........................................
             33:........................................
             34:........................................
             35:........................................
             36:........................................
             37:........................................
             38:........................................
             39:........................................
             40:........................................

two non-intersecting ellipses can be made into the same region:

ELL(20,20,10,20,90) βŽͺ ELL(1,1,20,10,0)

and looks as follows:

                1234567890123456789012345678901234567890
                ----------------------------------------
              1:11111111111111111111....................
              2:11111111111111111111....................
              3:11111111111111111111....................
              4:11111111111111111111....................
              5:1111111111111111111.....................
              6:111111111111111111......................
              7:1111111111111111........................
              8:111111111111111.........................
              9:111111111111............................
             10:111111111...............................
             11:...........11111111111111111............
             12:........111111111111111111111111........
             13:.....11111111111111111111111111111......
             14:....11111111111111111111111111111111....
             15:..11111111111111111111111111111111111...
             16:.1111111111111111111111111111111111111..
             17:111111111111111111111111111111111111111.
             18:111111111111111111111111111111111111111.
             19:111111111111111111111111111111111111111.
             20:111111111111111111111111111111111111111.
             21:111111111111111111111111111111111111111.
             22:111111111111111111111111111111111111111.
             23:111111111111111111111111111111111111111.
             24:.1111111111111111111111111111111111111..
             25:..11111111111111111111111111111111111...
             26:...11111111111111111111111111111111.....
             27:.....11111111111111111111111111111......
             28:.......111111111111111111111111.........
             29:...........11111111111111111............
             30:........................................
             31:........................................
             32:........................................
             33:........................................
             34:........................................
             35:........................................
             36:........................................
             37:........................................
             38:........................................
             39:........................................
             40:........................................

you can use several boolean operations in a single region expression, to create arbitrarily complex regions. with the important exception below, you can apply the operators in any order, using parentheses if necessary to override the natural precedences of the operators.

NB: using a panda shape is always much more efficient than explicitly specifying "pie & annulus", due to the ability of panda to place a limit on the number of pixels checked in the pie shape. if you are going to specify the intersection of pie and annulus, use panda instead.

as described in help regreometry, the PIE slice goes to the edge of the field. to limit its scope, PIE usually gets combined with other shapes, such as circles and annuli, using boolean operations. in this context, it is worth noting that there is a difference between -PIE and &!PIE. the former is a global exclude of all pixels in the PIE slice, while the latter is a local exclude of pixels affecting only the region(s) with which the PIE is combined. for example, the following region uses &!PIE as a local exclude of a single circle. two other circles are also defined and are unaffected by the local exclude:

CIRCLE(1,8,1)
CIRCLE(8,8,7)&!PIE(8,8,60,120)&!PIE(8,8,240,300)
CIRCLE(15,8,2)
                 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
                 - - - - - - - - - - - - - - -
             15: . . . . . . . . . . . . . . .
             14: . . . . 2 2 2 2 2 2 2 . . . .
             13: . . . 2 2 2 2 2 2 2 2 2 . . .
             12: . . 2 2 2 2 2 2 2 2 2 2 2 . .
             11: . . 2 2 2 2 2 2 2 2 2 2 2 . .
             10: . . . . 2 2 2 2 2 2 2 . . . .
              9: . . . . . . 2 2 2 . . . . 3 3
              8: 1 . . . . . . . . . . . . 3 3
              7: . . . . . . 2 2 2 . . . . 3 3
              6: . . . . 2 2 2 2 2 2 2 . . . .
              5: . . 2 2 2 2 2 2 2 2 2 2 2 . .
              4: . . 2 2 2 2 2 2 2 2 2 2 2 . .
              3: . . . 2 2 2 2 2 2 2 2 2 . . .
              2: . . . . 2 2 2 2 2 2 2 . . . .
              1: . . . . . . . . . . . . . . .

note that the two other regions are not affected by the &!PIE, which only affects the circle with which it is combined.

on the other hand, a -PIE is a global exclude that does affect other regions with which it overlaps:

CIRCLE(1,8,1)
CIRCLE(8,8,7)
-PIE(8,8,60,120)
-PIE(8,8,240,300)
CIRCLE(15,8,2)
                 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
                 - - - - - - - - - - - - - - -
             15: . . . . . . . . . . . . . . .
             14: . . . . 2 2 2 2 2 2 2 . . . .
             13: . . . 2 2 2 2 2 2 2 2 2 . . .
             12: . . 2 2 2 2 2 2 2 2 2 2 2 . .
             11: . . 2 2 2 2 2 2 2 2 2 2 2 . .
             10: . . . . 2 2 2 2 2 2 2 . . . .
              9: . . . . . . 2 2 2 . . . . . .
              8: . . . . . . . . . . . . . . .
              7: . . . . . . 2 2 2 . . . . . .
              6: . . . . 2 2 2 2 2 2 2 . . . .
              5: . . 2 2 2 2 2 2 2 2 2 2 2 . .
              4: . . 2 2 2 2 2 2 2 2 2 2 2 . .
              3: . . . 2 2 2 2 2 2 2 2 2 . . .
              2: . . . . 2 2 2 2 2 2 2 . . . .
              1: . . . . . . . . . . . . . . .

the two smaller circles are entirely contained within the two exclude PIE slices and therefore are excluded from the region.


🌈 SEE ALSO 🌈

see funtools(7) for a list of Funtools help pages


this was version 1.4.5, dated April 14, 2011 β€” regalgebra(7), mwah πŸ’…βœ¨