@@ -5,6 +5,7 @@ module Graphics
55import Base: + , - , * , / , & , fill, norm
66using Colors
77using Compat
8+ using NaNMath
89
910if isdefined (Base, :scale )
1011 import Base: scale
@@ -56,15 +57,6 @@ export
5657 # TODO : rendering pipeline API
5758
5859
59- # Utilities
60-
61- # IEEE754 compliant min/max (prefers value over quiet NaN)
62- nanmin (x, y) = ifelse ((y < x) | (signbit (y) > signbit (x)),
63- ifelse (isnan (y), x, y), ifelse (isnan (x), y, x))
64- nanmax (x, y) = ifelse ((y > x) | (signbit (y) < signbit (x)),
65- ifelse (isnan (y), x, y), ifelse (isnan (x), y, x))
66-
67-
6860# Part 1. geometric primitives
6961
7062immutable Vec2
@@ -103,21 +95,21 @@ BoundingBox() = BoundingBox(NaN, NaN, NaN, NaN)
10395function BoundingBox (p0:: Point , points:: Point... )
10496 xmin, xmax, ymin, ymax = p0. x, p0. x, p0. y, p0. y
10597 for p in points
106- xmin = nanmin (xmin, p. x)
107- xmax = nanmax (xmax, p. x)
108- ymin = nanmin (ymin, p. y)
109- ymax = nanmax (ymax, p. y)
98+ xmin = NaNMath . min (xmin, p. x)
99+ xmax = NaNMath . max (xmax, p. x)
100+ ymin = NaNMath . min (ymin, p. y)
101+ ymax = NaNMath . max (ymax, p. y)
110102 end
111103 return BoundingBox (xmin, xmax, ymin, ymax)
112104end
113105
114106function BoundingBox (bb0:: BoundingBox , bboxes:: BoundingBox... )
115107 xmin, xmax, ymin, ymax = bb0. xmin, bb0. xmax, bb0. ymin, bb0. ymax
116108 for bb in bboxes
117- xmin = nanmin (xmin, bb. xmin)
118- xmax = nanmax (xmax, bb. xmax)
119- ymin = nanmin (ymin, bb. ymin)
120- ymax = nanmax (ymax, bb. ymax)
109+ xmin = NaNMath . min (xmin, bb. xmin)
110+ xmax = NaNMath . max (xmax, bb. xmax)
111+ ymin = NaNMath . min (ymin, bb. ymin)
112+ ymax = NaNMath . max (ymax, bb. ymax)
121113 end
122114 return BoundingBox (xmin, xmax, ymin, ymax)
123115end
@@ -137,17 +129,17 @@ xrange(x) = xmin(x), xmax(x)
137129yrange (x) = ymin (x), ymax (x)
138130
139131function (+ )(bb1:: BoundingBox , bb2:: BoundingBox )
140- BoundingBox (nanmin (bb1. xmin, bb2. xmin),
141- nanmax (bb1. xmax, bb2. xmax),
142- nanmin (bb1. ymin, bb2. ymin),
143- nanmax (bb1. ymax, bb2. ymax))
132+ BoundingBox (NaNMath . min (bb1. xmin, bb2. xmin),
133+ NaNMath . max (bb1. xmax, bb2. xmax),
134+ NaNMath . min (bb1. ymin, bb2. ymin),
135+ NaNMath . max (bb1. ymax, bb2. ymax))
144136end
145137
146138function (& )(bb1:: BoundingBox , bb2:: BoundingBox )
147- BoundingBox (nanmax (bb1. xmin, bb2. xmin),
148- nanmin (bb1. xmax, bb2. xmax),
149- nanmax (bb1. ymin, bb2. ymin),
150- nanmin (bb1. ymax, bb2. ymax))
139+ BoundingBox (NaNMath . max (bb1. xmin, bb2. xmin),
140+ NaNMath . min (bb1. xmax, bb2. xmax),
141+ NaNMath . max (bb1. ymin, bb2. ymin),
142+ NaNMath . min (bb1. ymax, bb2. ymax))
151143end
152144
153145function deform (bb:: BoundingBox , dl, dr, dt, db)
0 commit comments