-------------------------------------------------
Arithmetic Boundary Checking - Stephen M. Mansour
-------------------------------------------------
A point partitions a line into three disjoint subsets: the set of points to its
left, the point itself and the set of points to its right. Relational functions
produce two results 0 and 1, effectively partitioning a line into only two sub-
sets. A technique, known as arithmetic boundary checking, uses arithmetic funct-
ions instead of relational and Boolean functions to determine where a point lies
in a line or a plane.
Relational Functions
--------------------
Relational functions ask the question: is the statement true or false? If the
statement ⍺<⍵ is true, we have all the information we need, but if it is false,
we don't know whether ⍺=⍵ or ⍺>⍵. To get a complete picture, we need to perform
a second test. The dynamic function bp performs two tests to produce a Boolean
pair:
bp←{⊃(⍺<⍵)(⍺>⍵)} ⍝ Boolean pair (2-vector)
2 3 4 bp 3 ⍝ ⍺<⍵←→1 0 ⋄ ⍺=⍵←→0 0 ⋄ ⍺>⍵←→0 1
1 0 0
0 0 1
While this preserves information, there are two problems. First, it seems some-
what redundant to do two similar comparisons, and second, we would like a scalar
result because it will allow us to work more easily with arrays of data.
Signum Difference
-----------------
The signum function (×) naturally partitions a line into three disjoint subsets,
by producing three results (-1, 0, 1). We can apply signum to the difference
between a value and the boundary point to produce the signum difference, which
asks a more specific question, i.e. what is the relationship between ⍺ and ⍵?
xd←{×⍺-⍵} ⍝ Signum difference
2 3 4 xd 3 ⍝ ⍺<⍵←→¯1 ⋄ ⍺=⍵←→0 ⋄ ⍺>⍵←→1
¯1 0 1
Notice that bp produces the two-bit binary representation of the ones complement
of the result of xd. Alternatively, we could produce the same result as that of
xd by subtracting the left bit from the right bit of the ones complement in the
function bd listed below :
bd←{(⍺>⍵)-(⍺<⍵)} ⍝ Boolean difference
2 3 4 bd 3 ⍝ ⍺<⍵←→¯1 ⋄ ⍺=⍵←→0 ⋄ ⍺>⍵←→1
¯1 0 1
However, a performance test in Dyalog Version 10 shows that xd runs significant-
ly faster than bd:
U←1E¯4×500000-?100⍴1E6
V←1E¯4×500000-?100⍴1E6
cmpx 'U xd V' 'U bd V'
U xd V 2.2E¯5 0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
U bd V 3.4E¯5 +52% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
Intervals
---------
An interval is indicated by two distinct points on the real line. The interval
includes the interior and may include one or both of the end-points. An interval
is open if it excludes the end-points; closed if it includes both of them, and
half-open if it includes only one of them. A half-open interval can be open on
the left or on the right. The four types of intervals can be described by comb-
ining relational functions into the operator rg:
rg←{(⍺[0]⍺⍺ ⍵)∧⍺[1]⍵⍵ ⍵} ⍝ Range Operator
1 3 <rg> ⍳5 ⍝ Open Interval: ○-----------○
0 0 1 0 0
1 3 ≤rg≥ ⍳5 ⍝ Closed Interval: ⍟-----------⍟
0 1 1 1 0
1 3 <rg≥ ⍳5 ⍝ Half-Open Left: ○-----------⍟
0 0 1 1 0
1 3 ≤rg> ⍳5 ⍝ Half-Open Right: ⍟-----------○
0 1 1 0 0
This operator is still limited in that it does not differentiate between an
interior point and a boundary (limit) point.
Partitions
----------
A pair of distinct points on the real line can define two types of partitions:
an interval partition and a range partition.
An "interval partition" divides the real line into three disjoint subsets: the
interior (between the end-points), the boundary (the two end-points themselves),
and the outside (everything else).
Outside Bound Interior Bound Outside
<----------------|--------------------|----------------->
1 0 ¯1 0 1
The product of the signum differences between a specified point and each of the
boundary points will indicate whether the point falls in the interior, the
boundary, or outside. If the point is outside the interval, the differences are
both positive, or both negative so their signum product is +1. If the point is
on the boundary, one of the differences is zero, thus the product is zero. And
if the point is in the interior, the differences have opposite signs, so the
signum product is -1.
A range partition divides the real line into five disjoint regions: below, lower
bound (L.B.), interior, upper bound (U.B.) and above:
Below L.B. Interior U.B. Above
<----------------|--------------------|----------------->
¯2 ¯1 0 +1 +2
┌───────────┬─────────┬─────────┬───────┬───────┐
│ │A←P xd LB│B←P xd UB│xp: A×B│xs: A+B│
├───────────┼─────────┼─────────┼───────┼───────┤
│Below │ ¯1 │ ¯1 │ 1 │ ¯2 │
├───────────┼─────────┼─────────┼───────┼───────┤
│Lower bound│ 0 │ ¯1 │ 0 │ ¯1 │
├───────────┼─────────┼─────────┼───────┼───────┤
│Interior │ 1 │ ¯1 │ ¯1 │ 0 │
├───────────┼─────────┼─────────┼───────┼───────┤
│Upper bound│ 1 │ 0 │ 0 │ 1 │
├───────────┼─────────┼─────────┼───────┼───────┤
│Above │ 1 │ 1 │ 1 │ 2 │
└───────────┴─────────┴─────────┴───────┴───────┘
Table 1: Signum Product and Signum Sum
The sum of the signum differences will produce five distinct values ranging from
-2 to +2 and corresponding to each of the 5 regions in a range partition.
xp←{×/×⍵∘.-⍺} ⍝ Signum product
1 3 xp ⍳5 ⍝ produces interval partition
1 0 ¯1 0 1
xs←{+/×⍵∘.-⍺} ⍝ Signum sum
1 3 xs ⍳5 ⍝ produces range partition
¯2 ¯1 0 1 2
Two-Dimensional Region Checking
-------------------------------
In a GUI application, you may want to know whether the cursor is within a dialog
box. In particular you may want to know whether the cursor is in the interior of
the box, on the boundary, or outside the box.
┌───────────────┐
│ Interior(¯1) │ Outside (1)
Boundary (0)--→│ │
└───────────────┘
Figure 1: Regions in the plane defined by a rectangle
We now extend the concept of arithmetic boundary checking to two dimensions.
In the following example, we have six points in various positions relative to a
rectangular region in the plane. The coordinates of the upper left and lower
right corners of the rectangle are (3,2) and (5,6) respectively. The signum
products of the x and y coordinates must be calculated separately.
· ∘(2,3)
·
·
· Upper Left --→ (3,2)∘───────────────────────∘(3,5)──┐
· │ │
· │ │
· │ ∘(4,4) │
· │ │
· │ │
· (5,2)∘───────────────────────────────∘(5,6) ←-- Lower Right
·
·
· ∘(6,8)
·
·
∘(7,6)
Figure 2: Points in various positions relative to a rectangle in the plane.
If we take the signum product of the x-coordinate with respect to the row coord-
inates and the signum product of the y-coordinate with respect to the column co-
ordinates, we obtain a ordered pair indicating the position in each direction.
The following table shows this for the points in Figure 2.
┌─────┬───────────┬──────┬─────────┬──────────┐
│Point│Description│Row xp│Column xp│Region (⌈)│
├─────┼───────────┼──────┼─────────┼──────────┤
│(6,8)│Outside │ 1 │ 1 │ 1 │
├─────┼───────────┼──────┼─────────┼──────────┤
│(5,2)│Corner │ 0 │ 0 │ 0 │
├─────┼───────────┼──────┼─────────┼──────────┤
│(4,4)│Interior │ ¯1 │ ¯1 │ ¯1 │
├─────┼───────────┼──────┼─────────┼──────────┤
│(7,6)│Below │ 1 │ 0 │ 1 │
├─────┼───────────┼──────┼─────────┼──────────┤
│(3,5)│Edge │ ¯1 │ 0 │ 0 │
├─────┼───────────┼──────┼─────────┼──────────┤
│(2,3)│Above │ 1 │ ¯1 │ 1 │
└─────┴───────────┴──────┴─────────┴──────────┘
Table 2: Various points in the plane with
respect to a defined rectangular region.
In order to be in the interior, both coordinates of the point must be in the
interior of their respective intervals in the x and y directions. If either co-
ordinate is outside, then the point itself is outside. Otherwise, the point is
on the boundary. In general, the region in which the point resides is the great-
er of the partitions in each direction.
xm←{⌈/⊃×⌿×⍺,.-⍉⍵} ⍝ Max Signum
b←⊃(3 2)(5 6) ⍝ Upper Left and Lower Right Corners
b xm⊃(6 8)(5 2)(4 4)(7 6)(3 5)(2 3) ⍝ Various Points
1 0 ¯1 1 0 1
The left argument of the dynamic function xm is a 2 x 2 matrix containing the
coordinates of the upper-left and lower-right corners of a rectangular region.
The right argument is a 2-element vector or 2-column matrix containing the co-
ordinates of various points in the plane.
Sometimes it is necessary to divide the borders of the dialog box into specific
regions. For example when the cursor is over an edge, it will resize the window
in one direction. If it is over a corner, it will resize the window in two dir-
ections. The particular edge or corner selected also determines the position of
the resized window.
A rectangular region naturally subdivides the x-y plane into 25 regions, 5 in
the x direction by 5 in the y direction . The following regions are shown in
Figure 3: 1 interior region, four corners, four edges, and 16 outside regions.
┌───────────┬───────────┬───────────┬───────────┬───────────┐
│Outside (8)│Outside (8)│Outside (8)│Outside (8)│Outside (8)│
├───────────┼───────────┼───────────┼───────────┼───────────┤
│Outside (8)│Upper Left │Upper Edge │Upper Right│Outside (8)│
│ │Corner (¯4)│ (¯3) │Corner (¯2)│ │
├───────────┼───────────┼───────────┼───────────┼───────────┤
│Outside (8)│Left Edge │Interior │Right Edge │Outside (8)│
│ │ (¯1) │ (0) │ (1) │ │
├───────────┼───────────┼───────────┼───────────┼───────────┤
│Outside (8)│Lower Left │Bottom Edge│Lower Right│Outside (8)│
│ │Corner (2) │ (3) │Corner (4) │ │
├───────────┼───────────┼───────────┼───────────┼───────────┤
│Outside (8)│Outside (8)│Outside (8)│Outside (8)│Outside (8)│
└───────────┴───────────┴───────────┴───────────┴───────────┘
Figure 3: 25 Regions defined by a rectangle
The signum sum applied to each coordinate generates an ordered pair. If we wish
to identify all 25 regions uniquely, we can use base value with a root of 5 to
generate the integers -12 to +12 with 0 representing the interior. More likely,
we only wish to identify the 9 relevant regions, disregarding the 14 outside
regions. We can use base value with a root of 3. This will produce the values
-4 to +4 with 0 representing the interior. We will assign the value 8 to the
outside regions. We can identify a point in the outside region if the ordered
pair of its signum sums contains the value 2 or -2. The function xr generates
the appropriate value.
xr←{d←⍉⊃+/×⍵,.-⍉⍺ ⋄ ((2∨.=|d)/d)←2 ⋄ 3⊥d}
b xr ⊃(2 3)(3 5)(4 4)(5 2)(6 8)(7 6)
8 ¯3 0 2 8 8
Theoretical Considerations and Conclusion
-----------------------------------------
Arithmetic boundary checking is based upon the topological properties of the
real line and the Euclidean 2-space [1]. The boundaries of an interval or a
rectangle correspond to limit points in topology. An open interval corresponds
to the interior set, whereas a closed interval corresponds to the union of the
boundary set and the interior set. A k-cell is defined as an closed interval
on the real line where k=1 or a closed rectangle in the plane, where k=2. [2]
While Boolean functions are useful if binary results are adequate, they do not
work as well when more information is required. Location on the real line or in
the plane can be determined arithmetically without the use of Booleans. The
ternary nature of signum is exploited to handle boundary conditions.
References
----------
[1] Jerrold Marsden, "Elementary Classical Analysis" W.H.Freeman & Co. 1974,
Chapter 2, Topology of, pp 32-44.
[2] Walter Rudin, "Principles of Mathematical Analysis, Third Edition", McGraw-
Hill 1976, pp. 31-32 .
See also: kcell kball
Back to: contents
Back to: Workspaces