├── Analyze_artists_2019.ipynb ├── Bilateral_and_guided_SSAO.ipynb ├── Bilinear_bicubic_biquadratic_interpolation_spectrum.ipynb ├── Compare_images.ipynb ├── ConeCulling ├── cone_culling_notebook.nb └── cone_culling_notebook.pdf ├── DitheringPostSeries ├── 1DHighpassAndRemapAndBlueNoise.nb ├── 1DHighpassAndRemapAndBlueNoise.pdf ├── 1DQuantization.nb ├── 1DQuantization.pdf ├── 2ddithering.nb ├── 2ddithering.pdf ├── GoldenNumberSequence.nb └── GoldenNumberSequence.pdf ├── DynamicRange ├── dynamicRange.nb └── dynamicRange.pdf ├── Jax_Void_and_cluster.ipynb ├── PBR_materials_NN_compression_example.ipynb ├── PBR_textures_low_rank_part_1_toy_problem.ipynb ├── PBR_textures_low_rank_part_2_Kodak.ipynb ├── PBR_textures_low_rank_part_3_PBR_materials.ipynb ├── Sliced_optimal_transport_sampling_test.ipynb ├── blue_noise_optimize_fft.ipynb ├── optimization_for_separable_filters.ipynb └── small_floats ├── small_floats.nb └── small_floats.pdf /ConeCulling/cone_culling_notebook.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bartwronski/BlogPostsExtraMaterial/00ad070628a1ffd76a4fc7c07b3180452a530b5d/ConeCulling/cone_culling_notebook.pdf -------------------------------------------------------------------------------- /DitheringPostSeries/1DHighpassAndRemapAndBlueNoise.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bartwronski/BlogPostsExtraMaterial/00ad070628a1ffd76a4fc7c07b3180452a530b5d/DitheringPostSeries/1DHighpassAndRemapAndBlueNoise.pdf -------------------------------------------------------------------------------- /DitheringPostSeries/1DQuantization.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bartwronski/BlogPostsExtraMaterial/00ad070628a1ffd76a4fc7c07b3180452a530b5d/DitheringPostSeries/1DQuantization.pdf -------------------------------------------------------------------------------- /DitheringPostSeries/2ddithering.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bartwronski/BlogPostsExtraMaterial/00ad070628a1ffd76a4fc7c07b3180452a530b5d/DitheringPostSeries/2ddithering.pdf -------------------------------------------------------------------------------- /DitheringPostSeries/GoldenNumberSequence.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bartwronski/BlogPostsExtraMaterial/00ad070628a1ffd76a4fc7c07b3180452a530b5d/DitheringPostSeries/GoldenNumberSequence.pdf -------------------------------------------------------------------------------- /DynamicRange/dynamicRange.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 10.3' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 158, 7] 13 | NotebookDataLength[ 97106, 2165] 14 | NotebookOptionsPosition[ 95109, 2096] 15 | NotebookOutlinePosition[ 95625, 2116] 16 | CellTagsIndexPosition[ 95582, 2113] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | Cell[BoxData[ 22 | RowBox[{ 23 | RowBox[{"(*", " ", 24 | RowBox[{ 25 | "Set", " ", "the", " ", "folder", " ", "for", " ", "saving", " ", "gifs"}], 26 | " ", "*)"}], "\[IndentingNewLine]", 27 | RowBox[{ 28 | RowBox[{"SetDirectory", "@", 29 | RowBox[{"NotebookDirectory", "[", "]"}]}], ";"}]}]], "Input", 30 | CellChangeTimes->{{3.6816777013486395`*^9, 3.681677715471463*^9}, 31 | 3.6816794263465896`*^9}], 32 | 33 | Cell[BoxData[ 34 | RowBox[{ 35 | RowBox[{"(*", " ", 36 | RowBox[{ 37 | "Function", " ", "finding", " ", "EV", " ", "stops", " ", "corresponding", 38 | " ", "to", " ", "min", " ", "and", " ", "max", " ", "values", " ", "and", 39 | " ", "plotting", " ", "them"}], " ", "*)"}], "\[IndentingNewLine]", 40 | RowBox[{ 41 | RowBox[{ 42 | RowBox[{"plotDynamicRange", "[", 43 | RowBox[{ 44 | "f_", ",", "minValFinal_", ",", "maxValFinal_", ",", "plotMinRange_", 45 | ",", "plotMaxRange_"}], "]"}], ":=", 46 | RowBox[{"Module", "[", 47 | RowBox[{ 48 | RowBox[{"{", 49 | RowBox[{"minValue", ",", "maxValue"}], "}"}], ",", 50 | RowBox[{"{", 51 | RowBox[{ 52 | RowBox[{"Set", " ", "@@@", 53 | RowBox[{ 54 | RowBox[{"Solve", "[", 55 | RowBox[{ 56 | RowBox[{"Rationalize", "[", 57 | RowBox[{ 58 | RowBox[{ 59 | RowBox[{"f", "[", 60 | RowBox[{"Power", "[", 61 | RowBox[{"2", ",", "minValue"}], "]"}], "]"}], "==", 62 | "minValFinal"}], "&&", 63 | RowBox[{ 64 | RowBox[{"f", "[", 65 | RowBox[{"Power", "[", 66 | RowBox[{"2", ",", "maxValue"}], "]"}], "]"}], "==", 67 | "maxValFinal"}]}], "]"}], ",", 68 | RowBox[{"{", 69 | RowBox[{"minValue", ",", "maxValue"}], "}"}], ",", "Reals"}], 70 | "]"}], "[", 71 | RowBox[{"[", "1", "]"}], "]"}]}], ";", "\[IndentingNewLine]", 72 | RowBox[{"{", 73 | RowBox[{ 74 | RowBox[{"ListPlot", "[", 75 | RowBox[{ 76 | RowBox[{"Table", "[", 77 | RowBox[{ 78 | RowBox[{"{", 79 | RowBox[{"x", ",", 80 | RowBox[{"f", "[", 81 | RowBox[{"Power", "[", 82 | RowBox[{"2", ",", "x"}], "]"}], "]"}]}], "}"}], ",", 83 | RowBox[{"{", 84 | RowBox[{"x", ",", 85 | RowBox[{"Ceiling", "[", "minValue", "]"}], ",", 86 | RowBox[{"Floor", "[", "maxValue", "]"}]}], "}"}]}], "]"}], 87 | ",", 88 | RowBox[{"PlotStyle", "\[Rule]", 89 | RowBox[{"PointSize", "[", "0.02", "]"}]}], ",", 90 | RowBox[{"PlotRange", "\[Rule]", 91 | RowBox[{"{", 92 | RowBox[{ 93 | RowBox[{"{", 94 | RowBox[{"plotMinRange", ",", "plotMaxRange"}], "}"}], ",", 95 | RowBox[{"{", 96 | RowBox[{ 97 | RowBox[{"-", "0.1"}], ",", "1.1"}], "}"}]}], "}"}]}], ",", 98 | RowBox[{"ImageSize", "\[Rule]", "600"}]}], "]"}], ",", 99 | "\[IndentingNewLine]", 100 | RowBox[{"Graphics", "[", 101 | RowBox[{"Text", "[", 102 | RowBox[{ 103 | RowBox[{"StringForm", "[", 104 | RowBox[{"\"\\"", ",", "f"}], "]"}], 105 | ",", 106 | RowBox[{"{", 107 | RowBox[{"plotMinRange", ",", "0.6"}], "}"}], ",", 108 | RowBox[{"{", 109 | RowBox[{ 110 | RowBox[{"-", "1"}], ",", "0"}], "}"}]}], "]"}], "]"}], ",", 111 | RowBox[{"Graphics", "[", 112 | RowBox[{"Text", "[", 113 | RowBox[{ 114 | RowBox[{"StringForm", "[", 115 | RowBox[{"\"\\"", ",", 116 | RowBox[{"N", "[", "minValue", "]"}]}], "]"}], ",", 117 | RowBox[{"{", 118 | RowBox[{"plotMinRange", ",", "0.5"}], "}"}], ",", 119 | RowBox[{"{", 120 | RowBox[{ 121 | RowBox[{"-", "1"}], ",", "0"}], "}"}]}], "]"}], "]"}], ",", 122 | "\[IndentingNewLine]", 123 | RowBox[{"Graphics", "[", 124 | RowBox[{"Text", "[", 125 | RowBox[{ 126 | RowBox[{"StringForm", "[", 127 | RowBox[{"\"\\"", ",", 128 | RowBox[{"N", "[", "maxValue", "]"}]}], "]"}], ",", 129 | RowBox[{"{", 130 | RowBox[{"plotMinRange", ",", "0.4"}], "}"}], ",", 131 | RowBox[{"{", 132 | RowBox[{ 133 | RowBox[{"-", "1"}], ",", "0"}], "}"}]}], "]"}], "]"}], ",", 134 | "\[IndentingNewLine]", 135 | RowBox[{"Graphics", "[", 136 | RowBox[{"Text", "[", 137 | RowBox[{ 138 | RowBox[{"StringForm", "[", 139 | RowBox[{"\"\\"", ",", 140 | RowBox[{"N", "[", 141 | RowBox[{"maxValue", "-", "minValue"}], "]"}]}], "]"}], ",", 142 | RowBox[{"{", 143 | RowBox[{"plotMinRange", ",", "0.3"}], "}"}], ",", 144 | RowBox[{"{", 145 | RowBox[{ 146 | RowBox[{"-", "1"}], ",", "0"}], "}"}]}], "]"}], "]"}], ",", 147 | "\[IndentingNewLine]", 148 | RowBox[{"Graphics", "[", 149 | RowBox[{"{", 150 | RowBox[{"Red", ",", 151 | RowBox[{"Arrowheads", "[", 152 | RowBox[{"{", 153 | RowBox[{ 154 | RowBox[{"-", "0.03"}], ",", ".03"}], "}"}], "]"}], ",", 155 | RowBox[{"Thickness", "\[Rule]", "0.005"}], ",", 156 | RowBox[{"Arrow", "[", 157 | RowBox[{"{", 158 | RowBox[{ 159 | RowBox[{"{", 160 | RowBox[{"minValue", ",", 161 | RowBox[{"-", "0.05"}]}], "}"}], ",", 162 | RowBox[{"{", 163 | RowBox[{"maxValue", ",", 164 | RowBox[{"-", "0.05"}]}], "}"}]}], "}"}], "]"}]}], "}"}], 165 | "]"}], ",", "\[IndentingNewLine]", 166 | RowBox[{"Table", "[", 167 | RowBox[{ 168 | RowBox[{"Graphics", "[", 169 | RowBox[{"{", 170 | RowBox[{"Green", ",", 171 | RowBox[{"Thickness", "\[Rule]", "0.005"}], ",", 172 | RowBox[{"Line", "[", 173 | RowBox[{"{", 174 | RowBox[{ 175 | RowBox[{"{", 176 | RowBox[{"y", ",", 177 | RowBox[{"-", "0.01"}]}], "}"}], ",", 178 | RowBox[{"{", 179 | RowBox[{"y", ",", "0.03"}], "}"}]}], "}"}], "]"}]}], "}"}], 180 | "]"}], ",", 181 | RowBox[{"{", 182 | RowBox[{"y", ",", 183 | RowBox[{"Ceiling", "[", "minValue", "]"}], ",", 184 | RowBox[{"Floor", "[", "maxValue", "]"}]}], "}"}]}], "]"}], ",", 185 | "\[IndentingNewLine]", 186 | RowBox[{"Table", "[", 187 | RowBox[{ 188 | RowBox[{"Graphics", "[", 189 | RowBox[{"{", 190 | RowBox[{"Blue", ",", 191 | RowBox[{"Thickness", "\[Rule]", "0.005"}], ",", 192 | RowBox[{"Line", "[", 193 | RowBox[{"{", 194 | RowBox[{ 195 | RowBox[{"{", 196 | RowBox[{ 197 | RowBox[{ 198 | RowBox[{"-", 199 | RowBox[{"(", 200 | RowBox[{"plotMaxRange", "-", "plotMinRange"}], ")"}]}], 201 | "/", "100.0"}], ",", 202 | RowBox[{"f", "[", 203 | RowBox[{"Power", "[", 204 | RowBox[{"2", ",", "z"}], "]"}], "]"}]}], "}"}], ",", 205 | RowBox[{"{", 206 | RowBox[{ 207 | RowBox[{ 208 | RowBox[{"(", 209 | RowBox[{"plotMaxRange", "-", "plotMinRange"}], ")"}], "/", 210 | "100.0"}], ",", 211 | RowBox[{"f", "[", 212 | RowBox[{"Power", "[", 213 | RowBox[{"2", ",", "z"}], "]"}], "]"}]}], "}"}]}], "}"}], 214 | "]"}]}], "}"}], "]"}], ",", 215 | RowBox[{"{", 216 | RowBox[{"z", ",", 217 | RowBox[{"Ceiling", "[", "minValue", "]"}], ",", 218 | RowBox[{"Floor", "[", "maxValue", "]"}]}], "}"}]}], "]"}]}], 219 | "\[IndentingNewLine]", "}"}]}], "}"}]}], "]"}]}], 220 | "\[IndentingNewLine]"}]}]], "Input", 221 | CellChangeTimes->{{3.681677727322833*^9, 3.6816777627509174`*^9}, 222 | 3.681678320846593*^9}], 223 | 224 | Cell[CellGroupData[{ 225 | 226 | Cell[BoxData[ 227 | RowBox[{ 228 | RowBox[{"(*", " ", 229 | RowBox[{ 230 | RowBox[{ 231 | "Display", " ", "dynamic", " ", "range", " ", "for", " ", "linear", " ", 232 | "encoding"}], ",", " ", 233 | RowBox[{"no", " ", "gamma"}]}], " ", "*)"}], "\[IndentingNewLine]", 234 | RowBox[{"Show", "[", 235 | RowBox[{"plotDynamicRange", "[", 236 | RowBox[{ 237 | RowBox[{"Function", "[", 238 | RowBox[{"x", ",", "x"}], "]"}], ",", 239 | RowBox[{"1", "/", "256"}], ",", "1", ",", 240 | RowBox[{"-", "10"}], ",", "2"}], "]"}], "]"}]}]], "Input", 241 | CellChangeTimes->{{3.6816777792962255`*^9, 3.681677809212208*^9}}], 242 | 243 | Cell[BoxData[ 244 | GraphicsBox[{{{}, {{}, 245 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 246 | AbsoluteThickness[1.6], 247 | PointBox[{{-8., 0.00390625}, {-7., 0.0078125}, {-6., 0.015625}, {-5., 248 | 0.03125}, {-4., 0.0625}, {-3., 0.125}, {-2., 0.25}, {-1., 0.5}, {0., 249 | 1.}}]}, {}}, {}}, InsetBox[ 250 | InterpretationBox["\<\"Function = \ 251 | \\!\\(\\*FormBox[RowBox[{\\\"x\\\", \\\"\[Function]\\\", \\\"x\\\"}], \ 252 | TraditionalForm]\\)\"\>", 253 | StringForm["Function = `1`", 254 | Function[$CellContext`x, $CellContext`x]], 255 | Editable->False], {-10, 0.6}, {-1, 0}], InsetBox[ 256 | InterpretationBox["\<\"Min value = \\!\\(\\*FormBox[RowBox[{\\\"-\ 257 | \\\", \\\"8.`\\\"}], TraditionalForm]\\)\"\>", 258 | StringForm["Min value = `1`", -8.], 259 | Editable->False], {-10, 0.5}, {-1, 0}], InsetBox[ 260 | InterpretationBox["\<\"Max value = \\!\\(\\*FormBox[\\\"0.`\\\", \ 261 | TraditionalForm]\\)\"\>", 262 | StringForm["Max value = `1`", 0.], 263 | Editable->False], {-10, 0.4}, {-1, 0}], InsetBox[ 264 | InterpretationBox["\<\"Dynamic range = \\!\\(\\*FormBox[\\\"8.`\\\", \ 265 | TraditionalForm]\\)\"\>", 266 | StringForm["Dynamic range = `1`", 8.], 267 | Editable->False], {-10, 0.3}, {-1, 0}], 268 | {RGBColor[1, 0, 0], Thickness[0.005], Arrowheads[{-0.03, 0.03}], 269 | ArrowBox[{{-8, -0.05}, {0, -0.05}}]}, 270 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-8, -0.01}, {-8, 0.03}}]}, 271 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-7, -0.01}, {-7, 0.03}}]}, 272 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-6, -0.01}, {-6, 0.03}}]}, 273 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-5, -0.01}, {-5, 0.03}}]}, 274 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 275 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 276 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 277 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 278 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{0, -0.01}, {0, 0.03}}]}, 279 | {RGBColor[0, 0, 1], Thickness[0.005], 280 | LineBox[NCache[{{-0.12, Rational[1, 256]}, { 281 | 0.12, Rational[1, 256]}}, {{-0.12, 0.00390625}, {0.12, 0.00390625}}]]}, 282 | {RGBColor[0, 0, 1], Thickness[0.005], 283 | LineBox[NCache[{{-0.12, Rational[1, 128]}, { 284 | 0.12, Rational[1, 128]}}, {{-0.12, 0.0078125}, {0.12, 0.0078125}}]]}, 285 | {RGBColor[0, 0, 1], Thickness[0.005], 286 | LineBox[NCache[{{-0.12, Rational[1, 64]}, { 287 | 0.12, Rational[1, 64]}}, {{-0.12, 0.015625}, {0.12, 0.015625}}]]}, 288 | {RGBColor[0, 0, 1], Thickness[0.005], 289 | LineBox[NCache[{{-0.12, Rational[1, 32]}, { 290 | 0.12, Rational[1, 32]}}, {{-0.12, 0.03125}, {0.12, 0.03125}}]]}, 291 | {RGBColor[0, 0, 1], Thickness[0.005], 292 | LineBox[NCache[{{-0.12, Rational[1, 16]}, { 293 | 0.12, Rational[1, 16]}}, {{-0.12, 0.0625}, {0.12, 0.0625}}]]}, 294 | {RGBColor[0, 0, 1], Thickness[0.005], 295 | LineBox[NCache[{{-0.12, Rational[1, 8]}, {0.12, Rational[1, 8]}}, {{-0.12, 296 | 0.125}, {0.12, 0.125}}]]}, 297 | {RGBColor[0, 0, 1], Thickness[0.005], 298 | LineBox[NCache[{{-0.12, Rational[1, 4]}, {0.12, Rational[1, 4]}}, {{-0.12, 299 | 0.25}, {0.12, 0.25}}]]}, 300 | {RGBColor[0, 0, 1], Thickness[0.005], 301 | LineBox[NCache[{{-0.12, Rational[1, 2]}, {0.12, Rational[1, 2]}}, {{-0.12, 302 | 0.5}, {0.12, 0.5}}]]}, 303 | {RGBColor[0, 0, 1], Thickness[0.005], LineBox[{{-0.12, 1}, {0.12, 1}}]}}, 304 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 305 | Axes->{True, True}, 306 | AxesLabel->{None, None}, 307 | AxesOrigin->{0, 0}, 308 | DisplayFunction->Identity, 309 | Frame->{{False, False}, {False, False}}, 310 | FrameLabel->{{None, None}, {None, None}}, 311 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 312 | GridLines->{None, None}, 313 | GridLinesStyle->Directive[ 314 | GrayLevel[0.5, 0.4]], 315 | ImageSize->600, 316 | Method->{}, 317 | PlotRange->{{-10, 2}, {-0.1, 1.1}}, 318 | PlotRangeClipping->True, 319 | PlotRangePadding->{{0, 0}, {0, 0}}, 320 | Ticks->{Automatic, Automatic}]], "Output", 321 | CellChangeTimes->{3.6816787295526247`*^9, 3.6816788853952074`*^9, 322 | 3.6816795863795896`*^9}] 323 | }, Open ]], 324 | 325 | Cell[CellGroupData[{ 326 | 327 | Cell[BoxData[ 328 | RowBox[{ 329 | RowBox[{"(*", " ", 330 | RowBox[{ 331 | "Display", " ", "how", " ", "exposure", " ", "just", " ", "shifts", " ", 332 | "the", " ", "dynamic", " ", "range"}], " ", "*)"}], "\[IndentingNewLine]", 333 | RowBox[{"Animate", "[", 334 | RowBox[{ 335 | RowBox[{ 336 | RowBox[{"y", "=", 337 | RowBox[{"N", "[", 338 | RowBox[{"2", "^", 339 | RowBox[{"-", "a"}]}], "]"}]}], ";", 340 | RowBox[{"Show", "[", 341 | RowBox[{"Quiet", "@", 342 | RowBox[{"plotDynamicRange", "[", 343 | RowBox[{ 344 | RowBox[{"Function", "[", 345 | RowBox[{"x", ",", 346 | RowBox[{"Evaluate", "[", 347 | RowBox[{"y", "*", "x"}], "]"}]}], "]"}], ",", 348 | RowBox[{"1", "/", "256"}], ",", "1", ",", 349 | RowBox[{"-", "10"}], ",", "2"}], "]"}]}], "]"}]}], ",", 350 | RowBox[{"{", 351 | RowBox[{"a", ",", 352 | RowBox[{"-", "2"}], ",", "2", ",", "0.05"}], "}"}]}], "]"}]}]], "Input", 353 | CellChangeTimes->{{3.681677828115988*^9, 3.6816778434130464`*^9}, { 354 | 3.68167944324459*^9, 3.6816794443395896`*^9}}], 355 | 356 | Cell[BoxData[ 357 | TagBox[ 358 | StyleBox[ 359 | DynamicModuleBox[{$CellContext`a$$ = 1.35, Typeset`show$$ = True, 360 | Typeset`bookmarkList$$ = {}, Typeset`bookmarkMode$$ = "Menu", 361 | Typeset`animator$$, Typeset`animvar$$ = 1, Typeset`name$$ = 362 | "\"untitled\"", Typeset`specs$$ = {{ 363 | Hold[$CellContext`a$$], -2, 2, 0.05}}, Typeset`size$$ = { 364 | 600., {180., 184.}}, Typeset`update$$ = 0, Typeset`initDone$$, 365 | Typeset`skipInitDone$$ = True, $CellContext`a$155777$$ = 0}, 366 | DynamicBox[Manipulate`ManipulateBoxes[ 367 | 1, StandardForm, "Variables" :> {$CellContext`a$$ = -2}, 368 | "ControllerVariables" :> { 369 | Hold[$CellContext`a$$, $CellContext`a$155777$$, 0]}, 370 | "OtherVariables" :> { 371 | Typeset`show$$, Typeset`bookmarkList$$, Typeset`bookmarkMode$$, 372 | Typeset`animator$$, Typeset`animvar$$, Typeset`name$$, 373 | Typeset`specs$$, Typeset`size$$, Typeset`update$$, Typeset`initDone$$, 374 | Typeset`skipInitDone$$}, 375 | "Body" :> ($CellContext`y = N[2^(-$CellContext`a$$)]; Show[ 376 | Quiet[ 377 | $CellContext`plotDynamicRange[ 378 | Function[$CellContext`x, 379 | Evaluate[$CellContext`y $CellContext`x]], 1/256, 1, -10, 2]]]), 380 | "Specifications" :> {{$CellContext`a$$, -2, 2, 0.05, 381 | AppearanceElements -> { 382 | "ProgressSlider", "PlayPauseButton", "FasterSlowerButtons", 383 | "DirectionButton"}}}, 384 | "Options" :> { 385 | ControlType -> Animator, AppearanceElements -> None, DefaultBaseStyle -> 386 | "Animate", DefaultLabelStyle -> "AnimateLabel", SynchronousUpdating -> 387 | True, ShrinkingDelay -> 10.}, "DefaultOptions" :> {}], 388 | ImageSizeCache->{647., {215., 222.}}, 389 | SingleEvaluation->True], 390 | Deinitialization:>None, 391 | DynamicModuleValues:>{}, 392 | SynchronousInitialization->True, 393 | UndoTrackedVariables:>{Typeset`show$$, Typeset`bookmarkMode$$}, 394 | UnsavedVariables:>{Typeset`initDone$$}, 395 | UntrackedVariables:>{Typeset`size$$}], "Animate", 396 | Deployed->True, 397 | StripOnInput->False], 398 | Manipulate`InterpretManipulate[1]]], "Output", 399 | CellChangeTimes->{3.6816787296886387`*^9, 3.6816788855332212`*^9, 400 | 3.6816795878525896`*^9}] 401 | }, Open ]], 402 | 403 | Cell[BoxData[ 404 | RowBox[{ 405 | RowBox[{"(*", " ", 406 | RowBox[{"Save", " ", "it", " ", "to", " ", "a", " ", "gif", " ", "file"}], 407 | " ", "*)"}], "\[IndentingNewLine]", 408 | RowBox[{ 409 | RowBox[{"Quiet", "@", 410 | RowBox[{"Export", "[", 411 | RowBox[{"\"\\"", ",", 412 | RowBox[{"Table", "[", 413 | RowBox[{ 414 | RowBox[{ 415 | RowBox[{"y", "=", 416 | RowBox[{"N", "[", 417 | RowBox[{"2", "^", 418 | RowBox[{"-", "a"}]}], "]"}]}], ";", 419 | RowBox[{"Show", "[", 420 | RowBox[{"plotDynamicRange", "[", 421 | RowBox[{ 422 | RowBox[{"Function", "[", 423 | RowBox[{"x", ",", 424 | RowBox[{"Evaluate", "[", 425 | RowBox[{"y", "*", "x"}], "]"}]}], "]"}], ",", 426 | RowBox[{"1", "/", "256"}], ",", "1", ",", 427 | RowBox[{"-", "10"}], ",", "2"}], "]"}], "]"}]}], ",", 428 | RowBox[{"{", 429 | RowBox[{"a", ",", 430 | RowBox[{"-", "2"}], ",", "2", ",", "0.05"}], "}"}]}], "]"}]}], 431 | "]"}]}], ";"}]}]], "Input", 432 | CellChangeTimes->{{3.681677895612484*^9, 3.6816779051543922`*^9}, 433 | 3.681677958359313*^9}], 434 | 435 | Cell[CellGroupData[{ 436 | 437 | Cell[BoxData[ 438 | RowBox[{ 439 | RowBox[{"(*", " ", 440 | RowBox[{ 441 | RowBox[{ 442 | "Display", " ", "how", " ", "gamma", " ", "affects", " ", "dynamic", " ", 443 | "range"}], " ", "-", " ", 444 | RowBox[{"stretching", " ", "and", " ", "squishing", " ", "it"}]}], " ", 445 | "*)"}], "\[IndentingNewLine]", 446 | RowBox[{ 447 | RowBox[{"Animate", "[", 448 | RowBox[{ 449 | RowBox[{"Show", "[", 450 | RowBox[{"plotDynamicRange", "[", 451 | RowBox[{ 452 | RowBox[{"Function", "[", 453 | RowBox[{"x", ",", 454 | RowBox[{"Evaluate", "[", 455 | RowBox[{"Power", "[", 456 | RowBox[{"x", ",", "a"}], "]"}], "]"}]}], "]"}], ",", 457 | RowBox[{"1", "/", "256"}], ",", "1", ",", 458 | RowBox[{"-", "10"}], ",", "2"}], "]"}], "]"}], ",", 459 | RowBox[{"{", 460 | RowBox[{"a", ",", "0.8", ",", "2.0", ",", "0.02"}], "}"}]}], "]"}], 461 | "\[IndentingNewLine]"}]}]], "Input", 462 | CellChangeTimes->{{3.681677937918269*^9, 3.6816779466781454`*^9}, { 463 | 3.6816794625685897`*^9, 3.6816794629605894`*^9}}], 464 | 465 | Cell[BoxData[ 466 | TagBox[ 467 | StyleBox[ 468 | DynamicModuleBox[{$CellContext`a$$ = 1.6600000000000001`, Typeset`show$$ = 469 | True, Typeset`bookmarkList$$ = {}, Typeset`bookmarkMode$$ = "Menu", 470 | Typeset`animator$$, Typeset`animvar$$ = 1, Typeset`name$$ = 471 | "\"untitled\"", Typeset`specs$$ = {{ 472 | Hold[$CellContext`a$$], 0.8, 2., 0.02}}, Typeset`size$$ = { 473 | 600., {180., 184.}}, Typeset`update$$ = 0, Typeset`initDone$$, 474 | Typeset`skipInitDone$$ = True, $CellContext`a$198442$$ = 0}, 475 | DynamicBox[Manipulate`ManipulateBoxes[ 476 | 1, StandardForm, "Variables" :> {$CellContext`a$$ = 0.8}, 477 | "ControllerVariables" :> { 478 | Hold[$CellContext`a$$, $CellContext`a$198442$$, 0]}, 479 | "OtherVariables" :> { 480 | Typeset`show$$, Typeset`bookmarkList$$, Typeset`bookmarkMode$$, 481 | Typeset`animator$$, Typeset`animvar$$, Typeset`name$$, 482 | Typeset`specs$$, Typeset`size$$, Typeset`update$$, Typeset`initDone$$, 483 | Typeset`skipInitDone$$}, "Body" :> Show[ 484 | $CellContext`plotDynamicRange[ 485 | Function[$CellContext`x$, 486 | Evaluate[$CellContext`x$^$CellContext`a$$]], 1/256, 1, -10, 2]], 487 | "Specifications" :> {{$CellContext`a$$, 0.8, 2., 0.02, 488 | AppearanceElements -> { 489 | "ProgressSlider", "PlayPauseButton", "FasterSlowerButtons", 490 | "DirectionButton"}}}, 491 | "Options" :> { 492 | ControlType -> Animator, AppearanceElements -> None, DefaultBaseStyle -> 493 | "Animate", DefaultLabelStyle -> "AnimateLabel", SynchronousUpdating -> 494 | True, ShrinkingDelay -> 10.}, "DefaultOptions" :> {}], 495 | ImageSizeCache->{647., {215., 222.}}, 496 | SingleEvaluation->True], 497 | Deinitialization:>None, 498 | DynamicModuleValues:>{}, 499 | SynchronousInitialization->True, 500 | UndoTrackedVariables:>{Typeset`show$$, Typeset`bookmarkMode$$}, 501 | UnsavedVariables:>{Typeset`initDone$$}, 502 | UntrackedVariables:>{Typeset`size$$}], "Animate", 503 | Deployed->True, 504 | StripOnInput->False], 505 | Manipulate`InterpretManipulate[1]]], "Output", 506 | CellChangeTimes->{3.681678751877857*^9, 3.6816788990955772`*^9, 507 | 3.6816796083645897`*^9}] 508 | }, Open ]], 509 | 510 | Cell[BoxData[ 511 | RowBox[{ 512 | RowBox[{"(*", " ", 513 | RowBox[{"Save", " ", "it", " ", "to", " ", "a", " ", "gif", " ", "file"}], 514 | " ", "*)"}], "\[IndentingNewLine]", 515 | RowBox[{ 516 | RowBox[{"Quiet", "@", 517 | RowBox[{"Export", "[", 518 | RowBox[{"\"\\"", ",", 519 | RowBox[{"Table", "[", 520 | RowBox[{ 521 | RowBox[{"Show", "[", 522 | RowBox[{"plotDynamicRange", "[", 523 | RowBox[{ 524 | RowBox[{"Function", "[", 525 | RowBox[{"x", ",", 526 | RowBox[{"Power", "[", 527 | RowBox[{"x", ",", "a"}], "]"}]}], "]"}], ",", 528 | RowBox[{"1", "/", "256"}], ",", "1", ",", 529 | RowBox[{"-", "10"}], ",", "2"}], "]"}], "]"}], ",", 530 | RowBox[{"{", 531 | RowBox[{"a", ",", "0.8", ",", "2.0", ",", "0.02"}], "}"}]}], "]"}]}], 532 | "]"}]}], ";"}]}]], "Input", 533 | CellChangeTimes->{ 534 | 3.6816779572312*^9, {3.6816794773475895`*^9, 3.68167947771159*^9}}], 535 | 536 | Cell[BoxData[ 537 | RowBox[{ 538 | RowBox[{"(*", " ", 539 | RowBox[{ 540 | RowBox[{"Define", " ", "a", " ", "\"\\"", " ", "function"}], 541 | ",", " ", 542 | RowBox[{"gamma", " ", "+", " ", 543 | RowBox[{"exposure", " ", "shift"}]}], ",", " ", 544 | RowBox[{"so", " ", "a", " ", "contrast", " ", "operation"}]}], " ", 545 | "*)"}], "\[IndentingNewLine]", 546 | RowBox[{ 547 | RowBox[{"gammaShift", "[", 548 | RowBox[{"x_", ",", "g_", ",", "p_"}], "]"}], ":=", 549 | RowBox[{ 550 | RowBox[{ 551 | RowBox[{"Power", "[", 552 | RowBox[{"x", ",", "g"}], "]"}], "/", 553 | RowBox[{"Power", "[", 554 | RowBox[{"p", ",", "g"}], "]"}]}], "*", "p"}]}]}]], "Input", 555 | CellChangeTimes->{ 556 | 3.6816783027205935`*^9, {3.681678342875593*^9, 3.6816783959535933`*^9}, { 557 | 3.6816785388415933`*^9, 3.681678629876593*^9}, 3.6816794919315896`*^9}], 558 | 559 | Cell[CellGroupData[{ 560 | 561 | Cell[BoxData[ 562 | RowBox[{"\[IndentingNewLine]", 563 | RowBox[{"(*", " ", 564 | RowBox[{ 565 | "Show", " ", "an", " ", "example", " ", "of", " ", "increasing", " ", 566 | "the", " ", "contrast"}], "*)"}], "\[IndentingNewLine]", 567 | RowBox[{"Show", "[", 568 | RowBox[{"Quiet", "@", 569 | RowBox[{"plotDynamicRange", "[", 570 | RowBox[{ 571 | RowBox[{"Function", "[", 572 | RowBox[{"x", ",", 573 | RowBox[{"gammaShift", "[", 574 | RowBox[{"x", ",", "2.0", ",", "0.18"}], "]"}]}], "]"}], ",", 575 | RowBox[{"1", "/", "256"}], ",", "1", ",", 576 | RowBox[{"-", "20"}], ",", "2"}], "]"}]}], "]"}]}]], "Input", 577 | CellChangeTimes->{ 578 | 3.6816783027205935`*^9, {3.681678342875593*^9, 3.6816783959535933`*^9}, { 579 | 3.6816785388415933`*^9, 3.681678629876593*^9}, {3.6816794919315896`*^9, 580 | 3.68167951811759*^9}}], 581 | 582 | Cell[BoxData[ 583 | GraphicsBox[{{{}, {{}, 584 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 585 | AbsoluteThickness[1.6], 586 | PointBox[{{-5., 0.005425347222222222}, {-4., 587 | 0.021701388888888888`}, {-3., 0.08680555555555555}, {-2., 588 | 0.3472222222222222}}]}, {}}, {}}, InsetBox[ 589 | InterpretationBox["\<\"Function = \ 590 | \\!\\(\\*FormBox[RowBox[{\\\"x\\\", \\\"\[Function]\\\", \ 591 | RowBox[{\\\"gammaShift\\\", \\\"(\\\", RowBox[{\\\"x\\\", \\\",\\\", \ 592 | \\\"2.`\\\", \\\",\\\", \\\"0.18`\\\"}], \\\")\\\"}]}], TraditionalForm]\\)\"\ 593 | \>", 594 | StringForm["Function = `1`", 595 | Function[$CellContext`x, 596 | $CellContext`gammaShift[$CellContext`x, 2., 0.18]]], 597 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 598 | InterpretationBox["\<\"Min value = \\!\\(\\*FormBox[RowBox[{\\\"-\ 599 | \\\", \\\"5.2369655941662066`\\\"}], TraditionalForm]\\)\"\>", 600 | StringForm["Min value = `1`", -5.2369655941662066`], 601 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 602 | InterpretationBox["\<\"Max value = \\!\\(\\*FormBox[RowBox[{\\\"-\ 603 | \\\", \\\"1.2369655941662059`\\\"}], TraditionalForm]\\)\"\>", 604 | StringForm["Max value = `1`", -1.2369655941662059`], 605 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 606 | InterpretationBox["\<\"Dynamic range = \ 607 | \\!\\(\\*FormBox[\\\"4.000000000000001`\\\", TraditionalForm]\\)\"\>", 608 | StringForm["Dynamic range = `1`", 4.000000000000001], 609 | Editable->False], {-20, 0.3}, {-1, 0}], 610 | {RGBColor[1, 0, 0], Thickness[0.005], Arrowheads[{-0.03, 0.03}], 611 | ArrowBox[NCache[{{ 612 | Rational[1, 2] 613 | Log[2]^(-1) ((-9) Log[2] + 2 Log[3] - 2 Log[5]), -0.05}, { 614 | Rational[1, 2] 615 | Log[2]^(-1) (-Log[2] + 2 Log[3] - 2 616 | Log[5]), -0.05}}, {{-5.2369655941662066`, -0.05}, \ 617 | {-1.2369655941662059`, -0.05}}]]}, 618 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-5, -0.01}, {-5, 0.03}}]}, 619 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 620 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 621 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 622 | {RGBColor[0, 0, 1], Thickness[0.005], 623 | LineBox[{{-0.22, 0.005425347222222222}, {0.22, 0.005425347222222222}}]}, 624 | {RGBColor[0, 0, 1], Thickness[0.005], 625 | LineBox[{{-0.22, 0.021701388888888888`}, {0.22, 0.021701388888888888`}}]}, 626 | {RGBColor[0, 0, 1], Thickness[0.005], 627 | LineBox[{{-0.22, 0.08680555555555555}, {0.22, 0.08680555555555555}}]}, 628 | {RGBColor[0, 0, 1], Thickness[0.005], 629 | LineBox[{{-0.22, 0.3472222222222222}, {0.22, 0.3472222222222222}}]}}, 630 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 631 | Axes->{True, True}, 632 | AxesLabel->{None, None}, 633 | AxesOrigin->{0, 0}, 634 | DisplayFunction->Identity, 635 | Frame->{{False, False}, {False, False}}, 636 | FrameLabel->{{None, None}, {None, None}}, 637 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 638 | GridLines->{None, None}, 639 | GridLinesStyle->Directive[ 640 | GrayLevel[0.5, 0.4]], 641 | ImageSize->600, 642 | Method->{}, 643 | PlotRange->{{-20, 2}, {-0.1, 1.1}}, 644 | PlotRangeClipping->True, 645 | PlotRangePadding->{{0, 0}, {0, 0}}, 646 | Ticks->{Automatic, Automatic}]], "Output", 647 | CellChangeTimes->{3.68167961806059*^9}] 648 | }, Open ]], 649 | 650 | Cell[CellGroupData[{ 651 | 652 | Cell[BoxData[ 653 | RowBox[{"\[IndentingNewLine]", 654 | RowBox[{"(*", " ", 655 | RowBox[{"Animation", " ", "example", " ", "of", " ", "contrast"}], " ", 656 | "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", 657 | RowBox[{"Animate", "[", 658 | RowBox[{ 659 | RowBox[{"Show", "[", 660 | RowBox[{"Quiet", "@", 661 | RowBox[{"plotDynamicRange", "[", 662 | RowBox[{ 663 | RowBox[{"Function", "[", 664 | RowBox[{"x", ",", 665 | RowBox[{"Evaluate", "[", 666 | RowBox[{"gammaShift", "[", 667 | RowBox[{"x", ",", "a", ",", "0.18"}], "]"}], "]"}]}], "]"}], ",", 668 | RowBox[{"1", "/", "256"}], ",", "1", ",", 669 | RowBox[{"-", "10"}], ",", "2"}], "]"}]}], "]"}], ",", 670 | RowBox[{"{", 671 | RowBox[{"a", ",", "1.0", ",", "2.0", ",", "0.02"}], "}"}]}], 672 | "]"}]}]], "Input", 673 | CellChangeTimes->{ 674 | 3.6816783027205935`*^9, {3.681678342875593*^9, 3.6816783959535933`*^9}, { 675 | 3.6816785388415933`*^9, 3.681678629876593*^9}, {3.6816794919315896`*^9, 676 | 3.6816795143895893`*^9}}], 677 | 678 | Cell[BoxData[ 679 | TagBox[ 680 | StyleBox[ 681 | DynamicModuleBox[{$CellContext`a$$ = 1.74, Typeset`show$$ = True, 682 | Typeset`bookmarkList$$ = {}, Typeset`bookmarkMode$$ = "Menu", 683 | Typeset`animator$$, Typeset`animvar$$ = 1, Typeset`name$$ = 684 | "\"untitled\"", Typeset`specs$$ = {{ 685 | Hold[$CellContext`a$$], 1., 2., 0.02}}, Typeset`size$$ = { 686 | 600., {180., 184.}}, Typeset`update$$ = 0, Typeset`initDone$$, 687 | Typeset`skipInitDone$$ = True, $CellContext`a$206920$$ = 0}, 688 | DynamicBox[Manipulate`ManipulateBoxes[ 689 | 1, StandardForm, "Variables" :> {$CellContext`a$$ = 1.}, 690 | "ControllerVariables" :> { 691 | Hold[$CellContext`a$$, $CellContext`a$206920$$, 0]}, 692 | "OtherVariables" :> { 693 | Typeset`show$$, Typeset`bookmarkList$$, Typeset`bookmarkMode$$, 694 | Typeset`animator$$, Typeset`animvar$$, Typeset`name$$, 695 | Typeset`specs$$, Typeset`size$$, Typeset`update$$, Typeset`initDone$$, 696 | Typeset`skipInitDone$$}, "Body" :> Show[ 697 | Quiet[ 698 | $CellContext`plotDynamicRange[ 699 | Function[$CellContext`x$, 700 | Evaluate[ 701 | $CellContext`gammaShift[$CellContext`x$, $CellContext`a$$, 702 | 0.18]]], 1/256, 1, -10, 2]]], 703 | "Specifications" :> {{$CellContext`a$$, 1., 2., 0.02, 704 | AppearanceElements -> { 705 | "ProgressSlider", "PlayPauseButton", "FasterSlowerButtons", 706 | "DirectionButton"}}}, 707 | "Options" :> { 708 | ControlType -> Animator, AppearanceElements -> None, DefaultBaseStyle -> 709 | "Animate", DefaultLabelStyle -> "AnimateLabel", SynchronousUpdating -> 710 | True, ShrinkingDelay -> 10.}, "DefaultOptions" :> {}], 711 | ImageSizeCache->{647., {215., 222.}}, 712 | SingleEvaluation->True], 713 | Deinitialization:>None, 714 | DynamicModuleValues:>{}, 715 | SynchronousInitialization->True, 716 | UndoTrackedVariables:>{Typeset`show$$, Typeset`bookmarkMode$$}, 717 | UnsavedVariables:>{Typeset`initDone$$}, 718 | UntrackedVariables:>{Typeset`size$$}], "Animate", 719 | Deployed->True, 720 | StripOnInput->False], 721 | Manipulate`InterpretManipulate[1]]], "Output", 722 | CellChangeTimes->{3.68167961811759*^9}] 723 | }, Open ]], 724 | 725 | Cell[BoxData[ 726 | RowBox[{"\[IndentingNewLine]", 727 | RowBox[{"(*", " ", 728 | RowBox[{"Save", " ", "it", " ", "to", " ", "a", " ", "gif"}], " ", "*)"}], 729 | "\[IndentingNewLine]", 730 | RowBox[{ 731 | RowBox[{ 732 | RowBox[{"Export", "[", 733 | RowBox[{"\"\\"", ",", 734 | RowBox[{"Table", "[", 735 | RowBox[{ 736 | RowBox[{"Quiet", "@", 737 | RowBox[{"Show", "[", 738 | RowBox[{"plotDynamicRange", "[", 739 | RowBox[{ 740 | RowBox[{"Function", "[", 741 | RowBox[{"x", ",", 742 | RowBox[{"Evaluate", "[", 743 | RowBox[{"gammaShift", "[", 744 | RowBox[{"x", ",", "a", ",", "0.18"}], "]"}], "]"}]}], "]"}], 745 | ",", 746 | RowBox[{"1", "/", "256"}], ",", "1", ",", 747 | RowBox[{"-", "10"}], ",", "2"}], "]"}], "]"}]}], ",", 748 | RowBox[{"{", 749 | RowBox[{"a", ",", "1.0", ",", "2.0", ",", "0.02"}], "}"}]}], "]"}]}], 750 | "]"}], ";"}], "\[IndentingNewLine]"}]}]], "Input", 751 | CellChangeTimes->{ 752 | 3.6816783027205935`*^9, {3.681678342875593*^9, 3.6816783959535933`*^9}, { 753 | 3.6816785388415933`*^9, 3.681678629876593*^9}, {3.6816794919315896`*^9, 754 | 3.6816795087015896`*^9}}], 755 | 756 | Cell[CellGroupData[{ 757 | 758 | Cell[BoxData[ 759 | RowBox[{ 760 | RowBox[{"(*", " ", 761 | RowBox[{ 762 | "Display", " ", "how", " ", "gamma", " ", "2.2", " ", "affects", " ", 763 | "the", " ", "dynamic", " ", "range"}], " ", "*)"}], "\[IndentingNewLine]", 764 | RowBox[{"Show", "[", 765 | RowBox[{"plotDynamicRange", "[", 766 | RowBox[{ 767 | RowBox[{"Function", "[", 768 | RowBox[{"x", ",", 769 | RowBox[{"Power", "[", 770 | RowBox[{"x", ",", 771 | RowBox[{"1", "/", "2.2"}]}], "]"}]}], "]"}], ",", 772 | RowBox[{"1", "/", "256"}], ",", "1", ",", 773 | RowBox[{"-", "20"}], ",", "2"}], "]"}], "]"}]}]], "Input", 774 | CellChangeTimes->{{3.68167952797359*^9, 3.6816795284605894`*^9}}], 775 | 776 | Cell[BoxData[ 777 | GraphicsBox[{{{}, {{}, 778 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 779 | AbsoluteThickness[1.6], 780 | PointBox[{{-17., 0.004719099392204873}, {-16., 781 | 0.006466822499100085}, {-15., 0.008861816579652054}, {-14., 782 | 0.012143799076335308`}, {-13., 0.01664126702249942}, {-12., 783 | 0.0228043766512726}, {-11., 0.03125000000000001}, {-10., 784 | 0.04282346827250387}, {-9., 0.05868318191635665}, {-8., 785 | 0.0804165561255895}, {-7., 0.11019890687450265`}, {-6., 786 | 0.15101118055055593`}, {-5., 0.2069383199712027}, {-4., 787 | 0.28357813054886566`}, {-3., 0.38860157044272986`}, {-2., 788 | 0.5325205447199813}, {-1., 0.7297400528407231}, {0., 1.}}]}, {}}, {}}, 789 | InsetBox[ 790 | InterpretationBox["\<\"Function = \ 791 | \\!\\(\\*FormBox[RowBox[{\\\"x\\\", \\\"\[Function]\\\", SuperscriptBox[\\\"x\ 792 | \\\", RowBox[{\\\"1\\\", \\\"/\\\", \\\"2.2`\\\"}]]}], \ 793 | TraditionalForm]\\)\"\>", 794 | StringForm["Function = `1`", 795 | Function[$CellContext`x, $CellContext`x^(1/2.2)]], 796 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 797 | InterpretationBox["\<\"Min value = \\!\\(\\*FormBox[RowBox[{\\\"-\ 798 | \\\", \\\"17.6`\\\"}], TraditionalForm]\\)\"\>", 799 | StringForm["Min value = `1`", -17.6], 800 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 801 | InterpretationBox["\<\"Max value = \\!\\(\\*FormBox[\\\"0.`\\\", \ 802 | TraditionalForm]\\)\"\>", 803 | StringForm["Max value = `1`", 0.], 804 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 805 | InterpretationBox["\<\"Dynamic range = \\!\\(\\*FormBox[\\\"17.6`\\\", \ 806 | TraditionalForm]\\)\"\>", 807 | StringForm["Dynamic range = `1`", 17.6], 808 | Editable->False], {-20, 0.3}, {-1, 0}], 809 | {RGBColor[1, 0, 0], Thickness[0.005], Arrowheads[{-0.03, 0.03}], 810 | ArrowBox[NCache[{{Rational[-88, 5], -0.05}, { 811 | 0, -0.05}}, {{-17.6, -0.05}, {0, -0.05}}]]}, 812 | {RGBColor[0, 1, 0], Thickness[0.005], 813 | LineBox[{{-17, -0.01}, {-17, 0.03}}]}, 814 | {RGBColor[0, 1, 0], Thickness[0.005], 815 | LineBox[{{-16, -0.01}, {-16, 0.03}}]}, 816 | {RGBColor[0, 1, 0], Thickness[0.005], 817 | LineBox[{{-15, -0.01}, {-15, 0.03}}]}, 818 | {RGBColor[0, 1, 0], Thickness[0.005], 819 | LineBox[{{-14, -0.01}, {-14, 0.03}}]}, 820 | {RGBColor[0, 1, 0], Thickness[0.005], 821 | LineBox[{{-13, -0.01}, {-13, 0.03}}]}, 822 | {RGBColor[0, 1, 0], Thickness[0.005], 823 | LineBox[{{-12, -0.01}, {-12, 0.03}}]}, 824 | {RGBColor[0, 1, 0], Thickness[0.005], 825 | LineBox[{{-11, -0.01}, {-11, 0.03}}]}, 826 | {RGBColor[0, 1, 0], Thickness[0.005], 827 | LineBox[{{-10, -0.01}, {-10, 0.03}}]}, 828 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-9, -0.01}, {-9, 0.03}}]}, 829 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-8, -0.01}, {-8, 0.03}}]}, 830 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-7, -0.01}, {-7, 0.03}}]}, 831 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-6, -0.01}, {-6, 0.03}}]}, 832 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-5, -0.01}, {-5, 0.03}}]}, 833 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 834 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 835 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 836 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 837 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{0, -0.01}, {0, 0.03}}]}, 838 | {RGBColor[0, 0, 1], Thickness[0.005], 839 | LineBox[{{-0.22, 0.004719099392204873}, {0.22, 0.004719099392204873}}]}, 840 | {RGBColor[0, 0, 1], Thickness[0.005], 841 | LineBox[{{-0.22, 0.006466822499100085}, {0.22, 0.006466822499100085}}]}, 842 | {RGBColor[0, 0, 1], Thickness[0.005], 843 | LineBox[{{-0.22, 0.008861816579652054}, {0.22, 0.008861816579652054}}]}, 844 | {RGBColor[0, 0, 1], Thickness[0.005], 845 | LineBox[{{-0.22, 0.012143799076335308`}, {0.22, 0.012143799076335308`}}]}, 846 | {RGBColor[0, 0, 1], Thickness[0.005], 847 | LineBox[{{-0.22, 0.01664126702249942}, {0.22, 0.01664126702249942}}]}, 848 | {RGBColor[0, 0, 1], Thickness[0.005], 849 | LineBox[{{-0.22, 0.0228043766512726}, {0.22, 0.0228043766512726}}]}, 850 | {RGBColor[0, 0, 1], Thickness[0.005], 851 | LineBox[{{-0.22, 0.03125000000000001}, {0.22, 0.03125000000000001}}]}, 852 | {RGBColor[0, 0, 1], Thickness[0.005], 853 | LineBox[{{-0.22, 0.04282346827250387}, {0.22, 0.04282346827250387}}]}, 854 | {RGBColor[0, 0, 1], Thickness[0.005], 855 | LineBox[{{-0.22, 0.05868318191635665}, {0.22, 0.05868318191635665}}]}, 856 | {RGBColor[0, 0, 1], Thickness[0.005], 857 | LineBox[{{-0.22, 0.0804165561255895}, {0.22, 0.0804165561255895}}]}, 858 | {RGBColor[0, 0, 1], Thickness[0.005], 859 | LineBox[{{-0.22, 0.11019890687450265`}, {0.22, 0.11019890687450265`}}]}, 860 | {RGBColor[0, 0, 1], Thickness[0.005], 861 | LineBox[{{-0.22, 0.15101118055055593`}, {0.22, 0.15101118055055593`}}]}, 862 | {RGBColor[0, 0, 1], Thickness[0.005], 863 | LineBox[{{-0.22, 0.2069383199712027}, {0.22, 0.2069383199712027}}]}, 864 | {RGBColor[0, 0, 1], Thickness[0.005], 865 | LineBox[{{-0.22, 0.28357813054886566`}, {0.22, 0.28357813054886566`}}]}, 866 | {RGBColor[0, 0, 1], Thickness[0.005], 867 | LineBox[{{-0.22, 0.38860157044272986`}, {0.22, 0.38860157044272986`}}]}, 868 | {RGBColor[0, 0, 1], Thickness[0.005], 869 | LineBox[{{-0.22, 0.5325205447199813}, {0.22, 0.5325205447199813}}]}, 870 | {RGBColor[0, 0, 1], Thickness[0.005], 871 | LineBox[{{-0.22, 0.7297400528407231}, {0.22, 0.7297400528407231}}]}, 872 | {RGBColor[0, 0, 1], Thickness[0.005], LineBox[{{-0.22, 1.}, {0.22, 1.}}]}}, 873 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 874 | Axes->{True, True}, 875 | AxesLabel->{None, None}, 876 | AxesOrigin->{0, 0}, 877 | DisplayFunction->Identity, 878 | Frame->{{False, False}, {False, False}}, 879 | FrameLabel->{{None, None}, {None, None}}, 880 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 881 | GridLines->{None, None}, 882 | GridLinesStyle->Directive[ 883 | GrayLevel[0.5, 0.4]], 884 | ImageSize->600, 885 | Method->{}, 886 | PlotRange->{{-20, 2}, {-0.1, 1.1}}, 887 | PlotRangeClipping->True, 888 | PlotRangePadding->{{0, 0}, {0, 0}}, 889 | Ticks->{Automatic, Automatic}]], "Output", 890 | CellChangeTimes->{3.681678780233692*^9, 3.68167891812148*^9, 891 | 3.6816796261495895`*^9}] 892 | }, Open ]], 893 | 894 | Cell[CellGroupData[{ 895 | 896 | Cell[BoxData[ 897 | RowBox[{"\[IndentingNewLine]", 898 | RowBox[{"(*", " ", 899 | RowBox[{ 900 | "Display", " ", "the", " ", "difference", " ", "between", " ", "gamma", 901 | " ", "2.2", " ", "and", " ", "2.4"}], " ", "*)"}], "\[IndentingNewLine]", 902 | RowBox[{"ListAnimate", "[", 903 | RowBox[{"Map", "[", 904 | RowBox[{ 905 | RowBox[{"Function", "[", 906 | RowBox[{"y", ",", 907 | RowBox[{"Show", "[", 908 | RowBox[{"plotDynamicRange", "[", 909 | RowBox[{ 910 | RowBox[{"Function", "[", 911 | RowBox[{"x", ",", 912 | RowBox[{"Power", "[", 913 | RowBox[{"x", ",", "y"}], "]"}]}], "]"}], ",", 914 | RowBox[{"1", "/", "256"}], ",", "1", ",", 915 | RowBox[{"-", "20"}], ",", "2"}], "]"}], "]"}]}], "]"}], ",", 916 | RowBox[{"{", 917 | RowBox[{ 918 | RowBox[{"1", "/", "2.2"}], ",", 919 | RowBox[{"1", "/", "2.4"}]}], "}"}]}], "]"}], "]"}]}]], "Input", 920 | CellChangeTimes->{{3.6816780502004967`*^9, 3.68167807594007*^9}, 921 | 3.681678300855593*^9, {3.6816795350695896`*^9, 3.6816795368685894`*^9}}], 922 | 923 | Cell[BoxData[ 924 | TagBox[ 925 | StyleBox[ 926 | DynamicModuleBox[{$CellContext`i1012$$ = 1, Typeset`show$$ = True, 927 | Typeset`bookmarkList$$ = { 928 | "\"min\"" :> {$CellContext`i1012$$ = 1}, 929 | "\"max\"" :> {$CellContext`i1012$$ = 2}}, Typeset`bookmarkMode$$ = 930 | "Menu", Typeset`animator$$, Typeset`animvar$$ = 1, Typeset`name$$ = 931 | "\"untitled\"", Typeset`specs$$ = {{{ 932 | Hold[$CellContext`i1012$$], 1, ""}, 1, 2, 1}}, Typeset`size$$ = 933 | Automatic, Typeset`update$$ = 0, Typeset`initDone$$, 934 | Typeset`skipInitDone$$ = True, $CellContext`i1012$215233$$ = 0}, 935 | PaneBox[ 936 | PanelBox[ 937 | DynamicWrapperBox[GridBox[{ 938 | { 939 | ItemBox[ 940 | ItemBox[ 941 | TagBox[ 942 | StyleBox[GridBox[{ 943 | {"\<\"\"\>", 944 | AnimatorBox[Dynamic[$CellContext`i1012$$], {1, 2, 1}, 945 | AnimationRate->Automatic, 946 | AnimationRunTime->20.43000030517578, 947 | AnimationTimeIndex->0.7600002288818359, 948 | 949 | AppearanceElements->{ 950 | "ProgressSlider", "PlayPauseButton", "FasterSlowerButtons", 951 | "DirectionButton"}, 952 | AutoAction->False, 953 | DisplayAllSteps->True]} 954 | }, 955 | AutoDelete->False, 956 | 957 | GridBoxAlignment->{ 958 | "Columns" -> {Right, {Left}}, "ColumnsIndexed" -> {}, 959 | "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, 960 | 961 | GridBoxItemSize->{ 962 | "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}], 963 | "ListAnimateLabel", 964 | StripOnInput->False], 965 | {"ControlArea", Top}], 966 | Alignment->{Automatic, Inherited}, 967 | StripOnInput->False], 968 | Background->None, 969 | StripOnInput->False]}, 970 | { 971 | ItemBox[ 972 | TagBox[ 973 | StyleBox[ 974 | PaneBox[ 975 | TagBox[ 976 | PaneSelectorBox[{1-> 977 | GraphicsBox[{{{}, {{}, 978 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 979 | AbsoluteThickness[1.6], 980 | PointBox[{{-17., 0.004719099392204873}, {-16., 981 | 0.006466822499100085}, {-15., 982 | 0.008861816579652054}, {-14., 983 | 0.012143799076335308`}, {-13., 984 | 0.01664126702249942}, {-12., 0.0228043766512726}, {-11., 985 | 0.03125000000000001}, {-10., 0.04282346827250387}, {-9., 986 | 0.05868318191635665}, {-8., 0.0804165561255895}, {-7., 987 | 0.11019890687450265`}, {-6., 0.15101118055055593`}, {-5., 988 | 0.2069383199712027}, {-4., 0.28357813054886566`}, {-3., 989 | 0.38860157044272986`}, {-2., 0.5325205447199813}, {-1., 990 | 0.7297400528407231}, {0., 1.}}]}, {}}, {}}, InsetBox[ 991 | 992 | InterpretationBox["\<\"Function = \ 993 | \\!\\(\\*FormBox[RowBox[{\\\"x$\\\", \\\"\[Function]\\\", \ 994 | SuperscriptBox[\\\"x$\\\", \\\"0.45454545454545453`\\\"]}], \ 995 | TraditionalForm]\\)\"\>", 996 | StringForm["Function = `1`", 997 | 998 | Function[$CellContext`x$, \ 999 | $CellContext`x$^0.45454545454545453`]], 1000 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 1001 | 1002 | InterpretationBox["\<\"Min value = \ 1003 | \\!\\(\\*FormBox[RowBox[{\\\"-\\\", \\\"17.6`\\\"}], TraditionalForm]\\)\"\>", 1004 | StringForm["Min value = `1`", -17.6], 1005 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 1006 | 1007 | InterpretationBox["\<\"Max value = \ 1008 | \\!\\(\\*FormBox[\\\"0.`\\\", TraditionalForm]\\)\"\>", 1009 | StringForm["Max value = `1`", 0.], 1010 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 1011 | 1012 | InterpretationBox["\<\"Dynamic range = \\!\\(\\*FormBox[\\\ 1013 | \"17.6`\\\", TraditionalForm]\\)\"\>", 1014 | StringForm["Dynamic range = `1`", 17.6], 1015 | Editable->False], {-20, 0.3}, {-1, 0}], 1016 | {RGBColor[1, 0, 0], Thickness[0.005], 1017 | Arrowheads[{-0.03, 0.03}], 1018 | ArrowBox[ 1019 | NCache[{{Rational[-88, 5], -0.05}, { 1020 | 0, -0.05}}, {{-17.6, -0.05}, {0, -0.05}}]]}, 1021 | {RGBColor[0, 1, 0], Thickness[0.005], 1022 | LineBox[{{-17, -0.01}, {-17, 0.03}}]}, 1023 | {RGBColor[0, 1, 0], Thickness[0.005], 1024 | LineBox[{{-16, -0.01}, {-16, 0.03}}]}, 1025 | {RGBColor[0, 1, 0], Thickness[0.005], 1026 | LineBox[{{-15, -0.01}, {-15, 0.03}}]}, 1027 | {RGBColor[0, 1, 0], Thickness[0.005], 1028 | LineBox[{{-14, -0.01}, {-14, 0.03}}]}, 1029 | {RGBColor[0, 1, 0], Thickness[0.005], 1030 | LineBox[{{-13, -0.01}, {-13, 0.03}}]}, 1031 | {RGBColor[0, 1, 0], Thickness[0.005], 1032 | LineBox[{{-12, -0.01}, {-12, 0.03}}]}, 1033 | {RGBColor[0, 1, 0], Thickness[0.005], 1034 | LineBox[{{-11, -0.01}, {-11, 0.03}}]}, 1035 | {RGBColor[0, 1, 0], Thickness[0.005], 1036 | LineBox[{{-10, -0.01}, {-10, 0.03}}]}, 1037 | {RGBColor[0, 1, 0], Thickness[0.005], 1038 | LineBox[{{-9, -0.01}, {-9, 0.03}}]}, 1039 | {RGBColor[0, 1, 0], Thickness[0.005], 1040 | LineBox[{{-8, -0.01}, {-8, 0.03}}]}, 1041 | {RGBColor[0, 1, 0], Thickness[0.005], 1042 | LineBox[{{-7, -0.01}, {-7, 0.03}}]}, 1043 | {RGBColor[0, 1, 0], Thickness[0.005], 1044 | LineBox[{{-6, -0.01}, {-6, 0.03}}]}, 1045 | {RGBColor[0, 1, 0], Thickness[0.005], 1046 | LineBox[{{-5, -0.01}, {-5, 0.03}}]}, 1047 | {RGBColor[0, 1, 0], Thickness[0.005], 1048 | LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 1049 | {RGBColor[0, 1, 0], Thickness[0.005], 1050 | LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 1051 | {RGBColor[0, 1, 0], Thickness[0.005], 1052 | LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 1053 | {RGBColor[0, 1, 0], Thickness[0.005], 1054 | LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 1055 | {RGBColor[0, 1, 0], Thickness[0.005], 1056 | LineBox[{{0, -0.01}, {0, 0.03}}]}, 1057 | {RGBColor[0, 0, 1], Thickness[0.005], 1058 | LineBox[{{-0.22, 0.004719099392204873}, {0.22, 1059 | 0.004719099392204873}}]}, 1060 | {RGBColor[0, 0, 1], Thickness[0.005], 1061 | LineBox[{{-0.22, 0.006466822499100085}, {0.22, 1062 | 0.006466822499100085}}]}, 1063 | {RGBColor[0, 0, 1], Thickness[0.005], 1064 | LineBox[{{-0.22, 0.008861816579652054}, {0.22, 1065 | 0.008861816579652054}}]}, 1066 | {RGBColor[0, 0, 1], Thickness[0.005], 1067 | LineBox[{{-0.22, 0.012143799076335308`}, {0.22, 1068 | 0.012143799076335308`}}]}, 1069 | {RGBColor[0, 0, 1], Thickness[0.005], 1070 | LineBox[{{-0.22, 0.01664126702249942}, {0.22, 1071 | 0.01664126702249942}}]}, 1072 | {RGBColor[0, 0, 1], Thickness[0.005], 1073 | LineBox[{{-0.22, 0.0228043766512726}, {0.22, 1074 | 0.0228043766512726}}]}, 1075 | {RGBColor[0, 0, 1], Thickness[0.005], 1076 | LineBox[{{-0.22, 0.03125000000000001}, {0.22, 1077 | 0.03125000000000001}}]}, 1078 | {RGBColor[0, 0, 1], Thickness[0.005], 1079 | LineBox[{{-0.22, 0.04282346827250387}, {0.22, 1080 | 0.04282346827250387}}]}, 1081 | {RGBColor[0, 0, 1], Thickness[0.005], 1082 | LineBox[{{-0.22, 0.05868318191635665}, {0.22, 1083 | 0.05868318191635665}}]}, 1084 | {RGBColor[0, 0, 1], Thickness[0.005], 1085 | LineBox[{{-0.22, 0.0804165561255895}, {0.22, 1086 | 0.0804165561255895}}]}, 1087 | {RGBColor[0, 0, 1], Thickness[0.005], 1088 | LineBox[{{-0.22, 0.11019890687450265`}, {0.22, 1089 | 0.11019890687450265`}}]}, 1090 | {RGBColor[0, 0, 1], Thickness[0.005], 1091 | LineBox[{{-0.22, 0.15101118055055593`}, {0.22, 1092 | 0.15101118055055593`}}]}, 1093 | {RGBColor[0, 0, 1], Thickness[0.005], 1094 | LineBox[{{-0.22, 0.2069383199712027}, {0.22, 1095 | 0.2069383199712027}}]}, 1096 | {RGBColor[0, 0, 1], Thickness[0.005], 1097 | LineBox[{{-0.22, 0.28357813054886566`}, {0.22, 1098 | 0.28357813054886566`}}]}, 1099 | {RGBColor[0, 0, 1], Thickness[0.005], 1100 | LineBox[{{-0.22, 0.38860157044272986`}, {0.22, 1101 | 0.38860157044272986`}}]}, 1102 | {RGBColor[0, 0, 1], Thickness[0.005], 1103 | LineBox[{{-0.22, 0.5325205447199813}, {0.22, 1104 | 0.5325205447199813}}]}, 1105 | {RGBColor[0, 0, 1], Thickness[0.005], 1106 | LineBox[{{-0.22, 0.7297400528407231}, {0.22, 1107 | 0.7297400528407231}}]}, 1108 | {RGBColor[0, 0, 1], Thickness[0.005], 1109 | LineBox[{{-0.22, 1.}, {0.22, 1.}}]}}, 1110 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 1111 | Axes->{True, True}, 1112 | AxesLabel->{None, None}, 1113 | AxesOrigin->{0, 0}, 1114 | DisplayFunction->Identity, 1115 | Frame->{{False, False}, {False, False}}, 1116 | FrameLabel->{{None, None}, {None, None}}, 1117 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 1118 | GridLines->{None, None}, 1119 | GridLinesStyle->Directive[ 1120 | GrayLevel[0.5, 0.4]], 1121 | ImageSize->600, 1122 | Method->{}, 1123 | PlotRange->{{-20, 2}, {-0.1, 1.1}}, 1124 | PlotRangeClipping->True, 1125 | PlotRangePadding->{{0, 0}, {0, 0}}, 1126 | Ticks->{Automatic, Automatic}], 2-> 1127 | GraphicsBox[{{{}, {{}, 1128 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 1129 | AbsoluteThickness[1.6], PointBox[CompressedData[" 1130 | 1:eJxTTMoPSmViYGAQAWIQDQHGB5Iqb07q/1xgD+EbHThtXZ82b0EZlG94wElY 1131 | 4Lm5SR2Ub3Cgq6j35yKNFihf78Cay1Ez57/ogvJ1Duy/dvzwrK8ToXytA+vP 1132 | Z1wX+Dkdytc48B8M5kP5agdi33zgaIxeCuWrHNA46Mdu17QGylc6ILrdkOsf 1133 | 22YoX+GATZ7t0n+pO6F8Gaj7D0D5EgfOgN1/DMoXOeAMdv85KF/gQDfY/Veg 1134 | fI4Da8HuvwXlMxw4AHb/Qyj/w/4NYPc/h8lDwQd7AIyHZsI= 1135 | "]]}, {}}, {}}, InsetBox[ 1136 | 1137 | InterpretationBox["\<\"Function = \ 1138 | \\!\\(\\*FormBox[RowBox[{\\\"x$\\\", \\\"\[Function]\\\", \ 1139 | SuperscriptBox[\\\"x$\\\", \\\"0.4166666666666667`\\\"]}], \ 1140 | TraditionalForm]\\)\"\>", 1141 | StringForm["Function = `1`", 1142 | 1143 | Function[$CellContext`x$, \ 1144 | $CellContext`x$^0.4166666666666667]], 1145 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 1146 | 1147 | InterpretationBox["\<\"Min value = \ 1148 | \\!\\(\\*FormBox[RowBox[{\\\"-\\\", \\\"19.2`\\\"}], TraditionalForm]\\)\"\>", 1149 | StringForm["Min value = `1`", -19.2], 1150 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 1151 | 1152 | InterpretationBox["\<\"Max value = \ 1153 | \\!\\(\\*FormBox[\\\"0.`\\\", TraditionalForm]\\)\"\>", 1154 | StringForm["Max value = `1`", 0.], 1155 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 1156 | 1157 | InterpretationBox["\<\"Dynamic range = \\!\\(\\*FormBox[\\\ 1158 | \"19.2`\\\", TraditionalForm]\\)\"\>", 1159 | StringForm["Dynamic range = `1`", 19.2], 1160 | Editable->False], {-20, 0.3}, {-1, 0}], 1161 | {RGBColor[1, 0, 0], Thickness[0.005], 1162 | Arrowheads[{-0.03, 0.03}], 1163 | ArrowBox[ 1164 | NCache[{{Rational[-96, 5], -0.05}, { 1165 | 0, -0.05}}, {{-19.2, -0.05}, {0, -0.05}}]]}, 1166 | {RGBColor[0, 1, 0], Thickness[0.005], 1167 | LineBox[{{-19, -0.01}, {-19, 0.03}}]}, 1168 | {RGBColor[0, 1, 0], Thickness[0.005], 1169 | LineBox[{{-18, -0.01}, {-18, 0.03}}]}, 1170 | {RGBColor[0, 1, 0], Thickness[0.005], 1171 | LineBox[{{-17, -0.01}, {-17, 0.03}}]}, 1172 | {RGBColor[0, 1, 0], Thickness[0.005], 1173 | LineBox[{{-16, -0.01}, {-16, 0.03}}]}, 1174 | {RGBColor[0, 1, 0], Thickness[0.005], 1175 | LineBox[{{-15, -0.01}, {-15, 0.03}}]}, 1176 | {RGBColor[0, 1, 0], Thickness[0.005], 1177 | LineBox[{{-14, -0.01}, {-14, 0.03}}]}, 1178 | {RGBColor[0, 1, 0], Thickness[0.005], 1179 | LineBox[{{-13, -0.01}, {-13, 0.03}}]}, 1180 | {RGBColor[0, 1, 0], Thickness[0.005], 1181 | LineBox[{{-12, -0.01}, {-12, 0.03}}]}, 1182 | {RGBColor[0, 1, 0], Thickness[0.005], 1183 | LineBox[{{-11, -0.01}, {-11, 0.03}}]}, 1184 | {RGBColor[0, 1, 0], Thickness[0.005], 1185 | LineBox[{{-10, -0.01}, {-10, 0.03}}]}, 1186 | {RGBColor[0, 1, 0], Thickness[0.005], 1187 | LineBox[{{-9, -0.01}, {-9, 0.03}}]}, 1188 | {RGBColor[0, 1, 0], Thickness[0.005], 1189 | LineBox[{{-8, -0.01}, {-8, 0.03}}]}, 1190 | {RGBColor[0, 1, 0], Thickness[0.005], 1191 | LineBox[{{-7, -0.01}, {-7, 0.03}}]}, 1192 | {RGBColor[0, 1, 0], Thickness[0.005], 1193 | LineBox[{{-6, -0.01}, {-6, 0.03}}]}, 1194 | {RGBColor[0, 1, 0], Thickness[0.005], 1195 | LineBox[{{-5, -0.01}, {-5, 0.03}}]}, 1196 | {RGBColor[0, 1, 0], Thickness[0.005], 1197 | LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 1198 | {RGBColor[0, 1, 0], Thickness[0.005], 1199 | LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 1200 | {RGBColor[0, 1, 0], Thickness[0.005], 1201 | LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 1202 | {RGBColor[0, 1, 0], Thickness[0.005], 1203 | LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 1204 | {RGBColor[0, 1, 0], Thickness[0.005], 1205 | LineBox[{{0, -0.01}, {0, 0.03}}]}, 1206 | {RGBColor[0, 0, 1], Thickness[0.005], 1207 | LineBox[{{-0.22, 0.0041385277123409964`}, {0.22, 1208 | 0.0041385277123409964`}}]}, 1209 | {RGBColor[0, 0, 1], Thickness[0.005], 1210 | LineBox[{{-0.22, 0.005524271728019901}, {0.22, 1211 | 0.005524271728019901}}]}, 1212 | {RGBColor[0, 0, 1], Thickness[0.005], 1213 | LineBox[{{-0.22, 0.007374018067825729}, {0.22, 1214 | 0.007374018067825729}}]}, 1215 | {RGBColor[0, 0, 1], Thickness[0.005], 1216 | LineBox[{{-0.22, 0.009843133202303695}, {0.22, 1217 | 0.009843133202303695}}]}, 1218 | {RGBColor[0, 0, 1], Thickness[0.005], 1219 | LineBox[{{-0.22, 0.013139006488339287`}, {0.22, 1220 | 0.013139006488339287`}}]}, 1221 | {RGBColor[0, 0, 1], Thickness[0.005], 1222 | LineBox[{{-0.22, 0.01753846950483395}, {0.22, 1223 | 0.01753846950483395}}]}, 1224 | {RGBColor[0, 0, 1], Thickness[0.005], 1225 | LineBox[{{-0.22, 0.023411048076198145`}, {0.22, 1226 | 0.023411048076198145`}}]}, 1227 | {RGBColor[0, 0, 1], Thickness[0.005], 1228 | LineBox[{{-0.22, 0.031249999999999997`}, {0.22, 1229 | 0.031249999999999997`}}]}, 1230 | {RGBColor[0, 0, 1], Thickness[0.005], 1231 | LineBox[{{-0.22, 0.04171374544281357}, {0.22, 1232 | 0.04171374544281357}}]}, 1233 | {RGBColor[0, 0, 1], Thickness[0.005], 1234 | LineBox[{{-0.22, 0.0556811698837712}, {0.22, 1235 | 0.0556811698837712}}]}, 1236 | {RGBColor[0, 0, 1], Thickness[0.005], 1237 | LineBox[{{-0.22, 0.07432544468767006}, {0.22, 1238 | 0.07432544468767006}}]}, 1239 | {RGBColor[0, 0, 1], Thickness[0.005], 1240 | LineBox[{{-0.22, 0.09921256574801246}, {0.22, 1241 | 0.09921256574801246}}]}, 1242 | {RGBColor[0, 0, 1], Thickness[0.005], 1243 | LineBox[{{-0.22, 0.13243288679491189`}, {0.22, 1244 | 0.13243288679491189`}}]}, 1245 | {RGBColor[0, 0, 1], Thickness[0.005], 1246 | LineBox[{{-0.22, 0.17677669529663687`}, {0.22, 1247 | 0.17677669529663687`}}]}, 1248 | {RGBColor[0, 0, 1], Thickness[0.005], 1249 | LineBox[{{-0.22, 0.23596857817042335`}, {0.22, 1250 | 0.23596857817042335`}}]}, 1251 | {RGBColor[0, 0, 1], Thickness[0.005], 1252 | LineBox[{{-0.22, 0.3149802624737183}, {0.22, 1253 | 0.3149802624737183}}]}, 1254 | {RGBColor[0, 0, 1], Thickness[0.005], 1255 | LineBox[{{-0.22, 0.42044820762685725`}, {0.22, 1256 | 0.42044820762685725`}}]}, 1257 | {RGBColor[0, 0, 1], Thickness[0.005], 1258 | LineBox[{{-0.22, 0.5612310241546865}, {0.22, 1259 | 0.5612310241546865}}]}, 1260 | {RGBColor[0, 0, 1], Thickness[0.005], 1261 | LineBox[{{-0.22, 0.7491535384383408}, {0.22, 1262 | 0.7491535384383408}}]}, 1263 | {RGBColor[0, 0, 1], Thickness[0.005], 1264 | LineBox[{{-0.22, 1.}, {0.22, 1.}}]}}, 1265 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 1266 | Axes->{True, True}, 1267 | AxesLabel->{None, None}, 1268 | AxesOrigin->{0, 0}, 1269 | DisplayFunction->Identity, 1270 | Frame->{{False, False}, {False, False}}, 1271 | FrameLabel->{{None, None}, {None, None}}, 1272 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 1273 | GridLines->{None, None}, 1274 | GridLinesStyle->Directive[ 1275 | GrayLevel[0.5, 0.4]], 1276 | ImageSize->600, 1277 | Method->{}, 1278 | PlotRange->{{-20, 2}, {-0.1, 1.1}}, 1279 | PlotRangeClipping->True, 1280 | PlotRangePadding->{{0, 0}, {0, 0}}, 1281 | Ticks->{Automatic, Automatic}]}, 1282 | Dynamic[$CellContext`i1012$$], 1283 | Alignment->Automatic, 1284 | ImageSize->All, 1285 | TransitionDirection->Horizontal, 1286 | TransitionDuration->0.5, 1287 | TransitionEffect->Automatic], 1288 | Identity, 1289 | Editable->True, 1290 | Selectable->True], 1291 | ImageMargins->10], 1292 | Deployed->False, 1293 | StripOnInput->False, 1294 | ScriptLevel->0, 1295 | GraphicsBoxOptions->{PreserveImageOptions->True}, 1296 | Graphics3DBoxOptions->{PreserveImageOptions->True}], 1297 | Identity, 1298 | Editable->False, 1299 | Selectable->False], 1300 | Alignment->{Left, Center}, 1301 | Background->GrayLevel[1], 1302 | Frame->1, 1303 | FrameStyle->GrayLevel[0, 0.2], 1304 | ItemSize->Automatic, 1305 | StripOnInput->False]} 1306 | }, 1307 | AutoDelete->False, 1308 | GridBoxAlignment->{ 1309 | "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Top}}, 1310 | "RowsIndexed" -> {}}, 1311 | GridBoxDividers->{ 1312 | "Columns" -> {{False}}, "ColumnsIndexed" -> {}, "Rows" -> {{False}}, 1313 | "RowsIndexed" -> {}}, 1314 | GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 1315 | GridBoxSpacings->{"Columns" -> { 1316 | Offset[0.7], { 1317 | Offset[0.5599999999999999]}, 1318 | Offset[0.7]}, "ColumnsIndexed" -> {}, "Rows" -> { 1319 | Offset[0.4], { 1320 | Offset[0.8]}, 1321 | Offset[0.4]}, "RowsIndexed" -> {}}], If[ 1322 | And[ 1323 | CurrentValue["NotebookSelected"], 1324 | CurrentValue["SelectionOver"]], 1325 | Manipulate`Dump`ReadControllerState[ 1326 | Map[Manipulate`Dump`updateOneVar[#, 1327 | CurrentValue["PreviousFormatTime"], 1328 | CurrentValue["CurrentFormatTime"]]& , { 1329 | 1330 | Manipulate`Dump`controllerLink[{$CellContext`i1012$$, \ 1331 | $CellContext`i1012$215233$$}, "X1", 1332 | If["DefaultAbsolute", True, "JB1"], False, {1, 2, 1}, 2, 1.]}], 1333 | CurrentValue[{ 1334 | "ControllerData", { 1335 | "Gamepad", "Joystick", "Multi-Axis Controller"}}], {}]], 1336 | ImageSizeCache->{633., {208.75, 215.75}}], 1337 | DefaultBaseStyle->{}, 1338 | FrameMargins->{{5, 5}, {5, 5}}], 1339 | BaselinePosition->Automatic, 1340 | ImageMargins->0], 1341 | Deinitialization:>None, 1342 | DynamicModuleValues:>{}, 1343 | SynchronousInitialization->True, 1344 | UndoTrackedVariables:>{Typeset`show$$, Typeset`bookmarkMode$$}, 1345 | UnsavedVariables:>{Typeset`initDone$$}, 1346 | UntrackedVariables:>{Typeset`size$$}], "ListAnimate", 1347 | Deployed->True, 1348 | StripOnInput->False], 1349 | Manipulate`InterpretManipulate[1]]], "Output", 1350 | CellChangeTimes->{3.681678780347704*^9, 3.681678918271495*^9, 1351 | 3.6816796262535896`*^9}] 1352 | }, Open ]], 1353 | 1354 | Cell[BoxData[ 1355 | RowBox[{ 1356 | RowBox[{"(*", " ", 1357 | RowBox[{"Save", " ", "it", " ", "to", " ", "a", " ", "gif", " ", "file"}], 1358 | " ", "*)"}], "\[IndentingNewLine]", 1359 | RowBox[{ 1360 | RowBox[{ 1361 | RowBox[{"Export", "[", 1362 | RowBox[{"\"\\"", ",", 1363 | RowBox[{"Map", "[", 1364 | RowBox[{ 1365 | RowBox[{"Function", "[", 1366 | RowBox[{"y", ",", 1367 | RowBox[{"Show", "[", 1368 | RowBox[{"plotDynamicRange", "[", 1369 | RowBox[{ 1370 | RowBox[{"Function", "[", 1371 | RowBox[{"x", ",", 1372 | RowBox[{"Power", "[", 1373 | RowBox[{"x", ",", "y"}], "]"}]}], "]"}], ",", 1374 | RowBox[{"1", "/", "256"}], ",", "1", ",", 1375 | RowBox[{"-", "20"}], ",", "2"}], "]"}], "]"}]}], "]"}], ",", 1376 | RowBox[{"{", 1377 | RowBox[{ 1378 | RowBox[{"1", "/", "2.2"}], ",", 1379 | RowBox[{"1", "/", "2.4"}]}], "}"}]}], "]"}], ",", 1380 | RowBox[{"\"\\"", "\[Rule]", "2"}]}], "]"}], ";"}], 1381 | "\[IndentingNewLine]"}]}]], "Input", 1382 | CellChangeTimes->{{3.6816781166261387`*^9, 3.6816781277902546`*^9}}], 1383 | 1384 | Cell[CellGroupData[{ 1385 | 1386 | Cell[BoxData[ 1387 | RowBox[{ 1388 | RowBox[{"(*", " ", 1389 | RowBox[{ 1390 | "Simulate", " ", "poor", " ", "viewing", " ", "conditions", " ", "by", " ", 1391 | "cutting", " ", "off", " ", "bottom", " ", "25", "%", " ", "of", " ", 1392 | "encoding", " ", "range"}], " ", "*)"}], "\[IndentingNewLine]", 1393 | RowBox[{ 1394 | RowBox[{"Show", "[", 1395 | RowBox[{"plotDynamicRange", "[", 1396 | RowBox[{ 1397 | RowBox[{"Function", "[", 1398 | RowBox[{"x", ",", 1399 | RowBox[{"Power", "[", 1400 | RowBox[{"x", ",", 1401 | RowBox[{"1", "/", "2.2"}]}], "]"}]}], "]"}], ",", 1402 | RowBox[{"64", "/", "256"}], ",", "1", ",", 1403 | RowBox[{"-", "20"}], ",", "2"}], "]"}], "]"}], 1404 | "\[IndentingNewLine]"}]}]], "Input", 1405 | CellChangeTimes->{{3.681678140354511*^9, 3.6816781692483997`*^9}}], 1406 | 1407 | Cell[BoxData[ 1408 | GraphicsBox[{{{}, {{}, 1409 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 1410 | AbsoluteThickness[1.6], 1411 | PointBox[{{-4., 0.28357813054886566`}, {-3., 1412 | 0.38860157044272986`}, {-2., 0.5325205447199813}, {-1., 1413 | 0.7297400528407231}, {0., 1.}}]}, {}}, {}}, InsetBox[ 1414 | InterpretationBox["\<\"Function = \ 1415 | \\!\\(\\*FormBox[RowBox[{\\\"x\\\", \\\"\[Function]\\\", SuperscriptBox[\\\"x\ 1416 | \\\", RowBox[{\\\"1\\\", \\\"/\\\", \\\"2.2`\\\"}]]}], \ 1417 | TraditionalForm]\\)\"\>", 1418 | StringForm["Function = `1`", 1419 | Function[$CellContext`x, $CellContext`x^(1/2.2)]], 1420 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 1421 | InterpretationBox["\<\"Min value = \\!\\(\\*FormBox[RowBox[{\\\"-\ 1422 | \\\", \\\"4.4`\\\"}], TraditionalForm]\\)\"\>", 1423 | StringForm["Min value = `1`", -4.4], 1424 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 1425 | InterpretationBox["\<\"Max value = \\!\\(\\*FormBox[\\\"0.`\\\", \ 1426 | TraditionalForm]\\)\"\>", 1427 | StringForm["Max value = `1`", 0.], 1428 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 1429 | InterpretationBox["\<\"Dynamic range = \\!\\(\\*FormBox[\\\"4.4`\\\", \ 1430 | TraditionalForm]\\)\"\>", 1431 | StringForm["Dynamic range = `1`", 4.4], 1432 | Editable->False], {-20, 0.3}, {-1, 0}], 1433 | {RGBColor[1, 0, 0], Thickness[0.005], Arrowheads[{-0.03, 0.03}], 1434 | ArrowBox[NCache[{{Rational[-22, 5], -0.05}, {0, -0.05}}, {{-4.4, -0.05}, { 1435 | 0, -0.05}}]]}, 1436 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 1437 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 1438 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 1439 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 1440 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{0, -0.01}, {0, 0.03}}]}, 1441 | {RGBColor[0, 0, 1], Thickness[0.005], 1442 | LineBox[{{-0.22, 0.28357813054886566`}, {0.22, 0.28357813054886566`}}]}, 1443 | {RGBColor[0, 0, 1], Thickness[0.005], 1444 | LineBox[{{-0.22, 0.38860157044272986`}, {0.22, 0.38860157044272986`}}]}, 1445 | {RGBColor[0, 0, 1], Thickness[0.005], 1446 | LineBox[{{-0.22, 0.5325205447199813}, {0.22, 0.5325205447199813}}]}, 1447 | {RGBColor[0, 0, 1], Thickness[0.005], 1448 | LineBox[{{-0.22, 0.7297400528407231}, {0.22, 0.7297400528407231}}]}, 1449 | {RGBColor[0, 0, 1], Thickness[0.005], LineBox[{{-0.22, 1.}, {0.22, 1.}}]}}, 1450 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 1451 | Axes->{True, True}, 1452 | AxesLabel->{None, None}, 1453 | AxesOrigin->{0, 0}, 1454 | DisplayFunction->Identity, 1455 | Frame->{{False, False}, {False, False}}, 1456 | FrameLabel->{{None, None}, {None, None}}, 1457 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 1458 | GridLines->{None, None}, 1459 | GridLinesStyle->Directive[ 1460 | GrayLevel[0.5, 0.4]], 1461 | ImageSize->600, 1462 | Method->{}, 1463 | PlotRange->{{-20, 2}, {-0.1, 1.1}}, 1464 | PlotRangeClipping->True, 1465 | PlotRangePadding->{{0, 0}, {0, 0}}, 1466 | Ticks->{Automatic, Automatic}]], "Output", 1467 | CellChangeTimes->{3.681678780721741*^9, 3.6816789187205396`*^9, 1468 | 3.6816796266075897`*^9}] 1469 | }, Open ]], 1470 | 1471 | Cell[CellGroupData[{ 1472 | 1473 | Cell[BoxData[ 1474 | RowBox[{ 1475 | RowBox[{"(*", " ", 1476 | RowBox[{ 1477 | "Now", " ", "the", " ", "same", " ", "with", " ", "some", " ", "extra", 1478 | " ", "user", " ", "specified", " ", "gamma", " ", "settings"}], " ", 1479 | "*)"}], "\[IndentingNewLine]", 1480 | RowBox[{"Show", "[", 1481 | RowBox[{"plotDynamicRange", "[", 1482 | RowBox[{ 1483 | RowBox[{"Function", "[", 1484 | RowBox[{"x", ",", 1485 | RowBox[{"Power", "[", 1486 | RowBox[{"x", ",", 1487 | RowBox[{"0.5", "/", "2.2"}]}], "]"}]}], "]"}], ",", 1488 | RowBox[{"64", "/", "256"}], ",", "1", ",", 1489 | RowBox[{"-", "20"}], ",", "2"}], "]"}], "]"}]}]], "Input", 1490 | CellChangeTimes->{{3.6816795550595894`*^9, 3.6816795554835896`*^9}}], 1491 | 1492 | Cell[BoxData[ 1493 | GraphicsBox[{{{}, {{}, 1494 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 1495 | AbsoluteThickness[1.6], 1496 | PointBox[{{-8., 0.28357813054886566`}, {-7., 0.3319622069972765}, {-6., 1497 | 0.38860157044272986`}, {-5., 0.4549047372485834}, {-4., 1498 | 0.5325205447199813}, {-3., 0.6233791546424454}, {-2., 1499 | 0.7297400528407231}, {-1., 0.8542482384182734}, {0., 1.}}]}, {}}, {}}, 1500 | InsetBox[ 1501 | InterpretationBox["\<\"Function = \ 1502 | \\!\\(\\*FormBox[RowBox[{\\\"x\\\", \\\"\[Function]\\\", SuperscriptBox[\\\"x\ 1503 | \\\", RowBox[{\\\"0.5`\\\", \\\"/\\\", \\\"2.2`\\\"}]]}], TraditionalForm]\\)\ 1504 | \"\>", 1505 | StringForm["Function = `1`", 1506 | Function[$CellContext`x, $CellContext`x^(0.5/2.2)]], 1507 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 1508 | InterpretationBox["\<\"Min value = \\!\\(\\*FormBox[RowBox[{\\\"-\ 1509 | \\\", \\\"8.8`\\\"}], TraditionalForm]\\)\"\>", 1510 | StringForm["Min value = `1`", -8.8], 1511 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 1512 | InterpretationBox["\<\"Max value = \\!\\(\\*FormBox[\\\"0.`\\\", \ 1513 | TraditionalForm]\\)\"\>", 1514 | StringForm["Max value = `1`", 0.], 1515 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 1516 | InterpretationBox["\<\"Dynamic range = \\!\\(\\*FormBox[\\\"8.8`\\\", \ 1517 | TraditionalForm]\\)\"\>", 1518 | StringForm["Dynamic range = `1`", 8.8], 1519 | Editable->False], {-20, 0.3}, {-1, 0}], 1520 | {RGBColor[1, 0, 0], Thickness[0.005], Arrowheads[{-0.03, 0.03}], 1521 | ArrowBox[NCache[{{Rational[-44, 5], -0.05}, {0, -0.05}}, {{-8.8, -0.05}, { 1522 | 0, -0.05}}]]}, 1523 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-8, -0.01}, {-8, 0.03}}]}, 1524 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-7, -0.01}, {-7, 0.03}}]}, 1525 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-6, -0.01}, {-6, 0.03}}]}, 1526 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-5, -0.01}, {-5, 0.03}}]}, 1527 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 1528 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 1529 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 1530 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 1531 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{0, -0.01}, {0, 0.03}}]}, 1532 | {RGBColor[0, 0, 1], Thickness[0.005], 1533 | LineBox[{{-0.22, 0.28357813054886566`}, {0.22, 0.28357813054886566`}}]}, 1534 | {RGBColor[0, 0, 1], Thickness[0.005], 1535 | LineBox[{{-0.22, 0.3319622069972765}, {0.22, 0.3319622069972765}}]}, 1536 | {RGBColor[0, 0, 1], Thickness[0.005], 1537 | LineBox[{{-0.22, 0.38860157044272986`}, {0.22, 0.38860157044272986`}}]}, 1538 | {RGBColor[0, 0, 1], Thickness[0.005], 1539 | LineBox[{{-0.22, 0.4549047372485834}, {0.22, 0.4549047372485834}}]}, 1540 | {RGBColor[0, 0, 1], Thickness[0.005], 1541 | LineBox[{{-0.22, 0.5325205447199813}, {0.22, 0.5325205447199813}}]}, 1542 | {RGBColor[0, 0, 1], Thickness[0.005], 1543 | LineBox[{{-0.22, 0.6233791546424454}, {0.22, 0.6233791546424454}}]}, 1544 | {RGBColor[0, 0, 1], Thickness[0.005], 1545 | LineBox[{{-0.22, 0.7297400528407231}, {0.22, 0.7297400528407231}}]}, 1546 | {RGBColor[0, 0, 1], Thickness[0.005], 1547 | LineBox[{{-0.22, 0.8542482384182734}, {0.22, 0.8542482384182734}}]}, 1548 | {RGBColor[0, 0, 1], Thickness[0.005], LineBox[{{-0.22, 1.}, {0.22, 1.}}]}}, 1549 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 1550 | Axes->{True, True}, 1551 | AxesLabel->{None, None}, 1552 | AxesOrigin->{0, 0}, 1553 | DisplayFunction->Identity, 1554 | Frame->{{False, False}, {False, False}}, 1555 | FrameLabel->{{None, None}, {None, None}}, 1556 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 1557 | GridLines->{None, None}, 1558 | GridLinesStyle->Directive[ 1559 | GrayLevel[0.5, 0.4]], 1560 | ImageSize->600, 1561 | Method->{}, 1562 | PlotRange->{{-20, 2}, {-0.1, 1.1}}, 1563 | PlotRangeClipping->True, 1564 | PlotRangePadding->{{0, 0}, {0, 0}}, 1565 | Ticks->{Automatic, Automatic}]], "Output", 1566 | CellChangeTimes->{3.6816787807747464`*^9, 3.6816789188085485`*^9, 1567 | 3.6816796266485896`*^9}] 1568 | }, Open ]], 1569 | 1570 | Cell[CellGroupData[{ 1571 | 1572 | Cell[BoxData[ 1573 | RowBox[{ 1574 | RowBox[{"(*", " ", 1575 | RowBox[{"Compare", " ", "them", " ", "1", " ", "to", " ", "1"}], " ", 1576 | "*)"}], "\[IndentingNewLine]", 1577 | RowBox[{"ListAnimate", "[", 1578 | RowBox[{"Map", "[", 1579 | RowBox[{ 1580 | RowBox[{"Function", "[", 1581 | RowBox[{"y", ",", 1582 | RowBox[{"Show", "[", 1583 | RowBox[{"plotDynamicRange", "[", 1584 | RowBox[{ 1585 | RowBox[{"Function", "[", 1586 | RowBox[{"x", ",", 1587 | RowBox[{"Power", "[", 1588 | RowBox[{"x", ",", "y"}], "]"}]}], "]"}], ",", 1589 | RowBox[{"64", "/", "256"}], ",", "1", ",", 1590 | RowBox[{"-", "20"}], ",", "2"}], "]"}], "]"}]}], "]"}], ",", 1591 | RowBox[{"{", 1592 | RowBox[{ 1593 | RowBox[{"1", "/", "2.2"}], ",", 1594 | RowBox[{"0.7", "/", "2.2"}]}], "}"}]}], "]"}], "]"}]}]], "Input", 1595 | CellChangeTimes->{{3.6816782479535933`*^9, 3.681678259353593*^9}, { 1596 | 3.6816795667465897`*^9, 3.6816795671465893`*^9}}], 1597 | 1598 | Cell[BoxData[ 1599 | TagBox[ 1600 | StyleBox[ 1601 | DynamicModuleBox[{$CellContext`i1013$$ = 2, Typeset`show$$ = True, 1602 | Typeset`bookmarkList$$ = { 1603 | "\"min\"" :> {$CellContext`i1013$$ = 1}, 1604 | "\"max\"" :> {$CellContext`i1013$$ = 2}}, Typeset`bookmarkMode$$ = 1605 | "Menu", Typeset`animator$$, Typeset`animvar$$ = 1, Typeset`name$$ = 1606 | "\"untitled\"", Typeset`specs$$ = {{{ 1607 | Hold[$CellContext`i1013$$], 1, ""}, 1, 2, 1}}, Typeset`size$$ = 1608 | Automatic, Typeset`update$$ = 0, Typeset`initDone$$, 1609 | Typeset`skipInitDone$$ = True, $CellContext`i1013$215816$$ = 0}, 1610 | PaneBox[ 1611 | PanelBox[ 1612 | DynamicWrapperBox[GridBox[{ 1613 | { 1614 | ItemBox[ 1615 | ItemBox[ 1616 | TagBox[ 1617 | StyleBox[GridBox[{ 1618 | {"\<\"\"\>", 1619 | AnimatorBox[Dynamic[$CellContext`i1013$$], {1, 2, 1}, 1620 | AnimationRate->Automatic, 1621 | AnimationRunTime->19.8439998626709, 1622 | AnimationTimeIndex->4.572999954223633, 1623 | 1624 | AppearanceElements->{ 1625 | "ProgressSlider", "PlayPauseButton", "FasterSlowerButtons", 1626 | "DirectionButton"}, 1627 | AutoAction->False, 1628 | DisplayAllSteps->True]} 1629 | }, 1630 | AutoDelete->False, 1631 | 1632 | GridBoxAlignment->{ 1633 | "Columns" -> {Right, {Left}}, "ColumnsIndexed" -> {}, 1634 | "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, 1635 | 1636 | GridBoxItemSize->{ 1637 | "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}], 1638 | "ListAnimateLabel", 1639 | StripOnInput->False], 1640 | {"ControlArea", Top}], 1641 | Alignment->{Automatic, Inherited}, 1642 | StripOnInput->False], 1643 | Background->None, 1644 | StripOnInput->False]}, 1645 | { 1646 | ItemBox[ 1647 | TagBox[ 1648 | StyleBox[ 1649 | PaneBox[ 1650 | TagBox[ 1651 | PaneSelectorBox[{1-> 1652 | GraphicsBox[{{{}, {{}, 1653 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 1654 | AbsoluteThickness[1.6], 1655 | PointBox[{{-4., 0.28357813054886566`}, {-3., 1656 | 0.38860157044272986`}, {-2., 0.5325205447199813}, {-1., 1657 | 0.7297400528407231}, {0., 1.}}]}, {}}, {}}, InsetBox[ 1658 | 1659 | InterpretationBox["\<\"Function = \ 1660 | \\!\\(\\*FormBox[RowBox[{\\\"x$\\\", \\\"\[Function]\\\", \ 1661 | SuperscriptBox[\\\"x$\\\", \\\"0.45454545454545453`\\\"]}], \ 1662 | TraditionalForm]\\)\"\>", 1663 | StringForm["Function = `1`", 1664 | 1665 | Function[$CellContext`x$, \ 1666 | $CellContext`x$^0.45454545454545453`]], 1667 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 1668 | 1669 | InterpretationBox["\<\"Min value = \ 1670 | \\!\\(\\*FormBox[RowBox[{\\\"-\\\", \\\"4.4`\\\"}], TraditionalForm]\\)\"\>", 1671 | StringForm["Min value = `1`", -4.4], 1672 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 1673 | 1674 | InterpretationBox["\<\"Max value = \ 1675 | \\!\\(\\*FormBox[\\\"0.`\\\", TraditionalForm]\\)\"\>", 1676 | StringForm["Max value = `1`", 0.], 1677 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 1678 | 1679 | InterpretationBox["\<\"Dynamic range = \\!\\(\\*FormBox[\\\ 1680 | \"4.4`\\\", TraditionalForm]\\)\"\>", 1681 | StringForm["Dynamic range = `1`", 4.4], 1682 | Editable->False], {-20, 0.3}, {-1, 0}], 1683 | {RGBColor[1, 0, 0], Thickness[0.005], 1684 | Arrowheads[{-0.03, 0.03}], 1685 | ArrowBox[ 1686 | NCache[{{Rational[-22, 5], -0.05}, { 1687 | 0, -0.05}}, {{-4.4, -0.05}, {0, -0.05}}]]}, 1688 | {RGBColor[0, 1, 0], Thickness[0.005], 1689 | LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 1690 | {RGBColor[0, 1, 0], Thickness[0.005], 1691 | LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 1692 | {RGBColor[0, 1, 0], Thickness[0.005], 1693 | LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 1694 | {RGBColor[0, 1, 0], Thickness[0.005], 1695 | LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 1696 | {RGBColor[0, 1, 0], Thickness[0.005], 1697 | LineBox[{{0, -0.01}, {0, 0.03}}]}, 1698 | {RGBColor[0, 0, 1], Thickness[0.005], 1699 | LineBox[{{-0.22, 0.28357813054886566`}, {0.22, 1700 | 0.28357813054886566`}}]}, 1701 | {RGBColor[0, 0, 1], Thickness[0.005], 1702 | LineBox[{{-0.22, 0.38860157044272986`}, {0.22, 1703 | 0.38860157044272986`}}]}, 1704 | {RGBColor[0, 0, 1], Thickness[0.005], 1705 | LineBox[{{-0.22, 0.5325205447199813}, {0.22, 1706 | 0.5325205447199813}}]}, 1707 | {RGBColor[0, 0, 1], Thickness[0.005], 1708 | LineBox[{{-0.22, 0.7297400528407231}, {0.22, 1709 | 0.7297400528407231}}]}, 1710 | {RGBColor[0, 0, 1], Thickness[0.005], 1711 | LineBox[{{-0.22, 1.}, {0.22, 1.}}]}}, 1712 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 1713 | Axes->{True, True}, 1714 | AxesLabel->{None, None}, 1715 | AxesOrigin->{0, 0}, 1716 | DisplayFunction->Identity, 1717 | Frame->{{False, False}, {False, False}}, 1718 | FrameLabel->{{None, None}, {None, None}}, 1719 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 1720 | GridLines->{None, None}, 1721 | GridLinesStyle->Directive[ 1722 | GrayLevel[0.5, 0.4]], 1723 | ImageSize->600, 1724 | Method->{}, 1725 | PlotRange->{{-20, 2}, {-0.1, 1.1}}, 1726 | PlotRangeClipping->True, 1727 | PlotRangePadding->{{0, 0}, {0, 0}}, 1728 | Ticks->{Automatic, Automatic}], 2-> 1729 | GraphicsBox[{{{}, {{}, 1730 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 1731 | AbsoluteThickness[1.6], 1732 | PointBox[{{-6., 0.26626027235999067`}, {-5., 1733 | 0.3319622069972765}, {-4., 0.41387663994240537`}, {-3., 1734 | 0.5160041398671048}, {-2., 0.6433324490047159}, {-1., 1735 | 0.8020800764292277}, {0., 1.}}]}, {}}, {}}, InsetBox[ 1736 | 1737 | InterpretationBox["\<\"Function = \ 1738 | \\!\\(\\*FormBox[RowBox[{\\\"x$\\\", \\\"\[Function]\\\", \ 1739 | SuperscriptBox[\\\"x$\\\", \\\"0.3181818181818182`\\\"]}], \ 1740 | TraditionalForm]\\)\"\>", 1741 | StringForm["Function = `1`", 1742 | 1743 | Function[$CellContext`x$, \ 1744 | $CellContext`x$^0.3181818181818182]], 1745 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 1746 | 1747 | InterpretationBox["\<\"Min value = \ 1748 | \\!\\(\\*FormBox[RowBox[{\\\"-\\\", \\\"6.285714285714286`\\\"}], \ 1749 | TraditionalForm]\\)\"\>", 1750 | StringForm["Min value = `1`", -6.285714285714286], 1751 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 1752 | 1753 | InterpretationBox["\<\"Max value = \ 1754 | \\!\\(\\*FormBox[\\\"0.`\\\", TraditionalForm]\\)\"\>", 1755 | StringForm["Max value = `1`", 0.], 1756 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 1757 | 1758 | InterpretationBox["\<\"Dynamic range = \\!\\(\\*FormBox[\\\ 1759 | \"6.285714285714286`\\\", TraditionalForm]\\)\"\>", 1760 | StringForm["Dynamic range = `1`", 6.285714285714286], 1761 | Editable->False], {-20, 0.3}, {-1, 0}], 1762 | {RGBColor[1, 0, 0], Thickness[0.005], 1763 | Arrowheads[{-0.03, 0.03}], 1764 | ArrowBox[ 1765 | NCache[{{Rational[-44, 7], -0.05}, { 1766 | 0, -0.05}}, {{-6.285714285714286, -0.05}, {0, -0.05}}]]}, 1767 | {RGBColor[0, 1, 0], Thickness[0.005], 1768 | LineBox[{{-6, -0.01}, {-6, 0.03}}]}, 1769 | {RGBColor[0, 1, 0], Thickness[0.005], 1770 | LineBox[{{-5, -0.01}, {-5, 0.03}}]}, 1771 | {RGBColor[0, 1, 0], Thickness[0.005], 1772 | LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 1773 | {RGBColor[0, 1, 0], Thickness[0.005], 1774 | LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 1775 | {RGBColor[0, 1, 0], Thickness[0.005], 1776 | LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 1777 | {RGBColor[0, 1, 0], Thickness[0.005], 1778 | LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 1779 | {RGBColor[0, 1, 0], Thickness[0.005], 1780 | LineBox[{{0, -0.01}, {0, 0.03}}]}, 1781 | {RGBColor[0, 0, 1], Thickness[0.005], 1782 | LineBox[{{-0.22, 0.26626027235999067`}, {0.22, 1783 | 0.26626027235999067`}}]}, 1784 | {RGBColor[0, 0, 1], Thickness[0.005], 1785 | LineBox[{{-0.22, 0.3319622069972765}, {0.22, 1786 | 0.3319622069972765}}]}, 1787 | {RGBColor[0, 0, 1], Thickness[0.005], 1788 | LineBox[{{-0.22, 0.41387663994240537`}, {0.22, 1789 | 0.41387663994240537`}}]}, 1790 | {RGBColor[0, 0, 1], Thickness[0.005], 1791 | LineBox[{{-0.22, 0.5160041398671048}, {0.22, 1792 | 0.5160041398671048}}]}, 1793 | {RGBColor[0, 0, 1], Thickness[0.005], 1794 | LineBox[{{-0.22, 0.6433324490047159}, {0.22, 1795 | 0.6433324490047159}}]}, 1796 | {RGBColor[0, 0, 1], Thickness[0.005], 1797 | LineBox[{{-0.22, 0.8020800764292277}, {0.22, 1798 | 0.8020800764292277}}]}, 1799 | {RGBColor[0, 0, 1], Thickness[0.005], 1800 | LineBox[{{-0.22, 1.}, {0.22, 1.}}]}}, 1801 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 1802 | Axes->{True, True}, 1803 | AxesLabel->{None, None}, 1804 | AxesOrigin->{0, 0}, 1805 | DisplayFunction->Identity, 1806 | Frame->{{False, False}, {False, False}}, 1807 | FrameLabel->{{None, None}, {None, None}}, 1808 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 1809 | GridLines->{None, None}, 1810 | GridLinesStyle->Directive[ 1811 | GrayLevel[0.5, 0.4]], 1812 | ImageSize->600, 1813 | Method->{}, 1814 | PlotRange->{{-20, 2}, {-0.1, 1.1}}, 1815 | PlotRangeClipping->True, 1816 | PlotRangePadding->{{0, 0}, {0, 0}}, 1817 | Ticks->{Automatic, Automatic}]}, 1818 | Dynamic[$CellContext`i1013$$], 1819 | Alignment->Automatic, 1820 | ImageSize->All, 1821 | TransitionDirection->Horizontal, 1822 | TransitionDuration->0.5, 1823 | TransitionEffect->Automatic], 1824 | Identity, 1825 | Editable->True, 1826 | Selectable->True], 1827 | ImageMargins->10], 1828 | Deployed->False, 1829 | StripOnInput->False, 1830 | ScriptLevel->0, 1831 | GraphicsBoxOptions->{PreserveImageOptions->True}, 1832 | Graphics3DBoxOptions->{PreserveImageOptions->True}], 1833 | Identity, 1834 | Editable->False, 1835 | Selectable->False], 1836 | Alignment->{Left, Center}, 1837 | Background->GrayLevel[1], 1838 | Frame->1, 1839 | FrameStyle->GrayLevel[0, 0.2], 1840 | ItemSize->Automatic, 1841 | StripOnInput->False]} 1842 | }, 1843 | AutoDelete->False, 1844 | GridBoxAlignment->{ 1845 | "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Top}}, 1846 | "RowsIndexed" -> {}}, 1847 | GridBoxDividers->{ 1848 | "Columns" -> {{False}}, "ColumnsIndexed" -> {}, "Rows" -> {{False}}, 1849 | "RowsIndexed" -> {}}, 1850 | GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 1851 | GridBoxSpacings->{"Columns" -> { 1852 | Offset[0.7], { 1853 | Offset[0.5599999999999999]}, 1854 | Offset[0.7]}, "ColumnsIndexed" -> {}, "Rows" -> { 1855 | Offset[0.4], { 1856 | Offset[0.8]}, 1857 | Offset[0.4]}, "RowsIndexed" -> {}}], If[ 1858 | And[ 1859 | CurrentValue["NotebookSelected"], 1860 | CurrentValue["SelectionOver"]], 1861 | Manipulate`Dump`ReadControllerState[ 1862 | Map[Manipulate`Dump`updateOneVar[#, 1863 | CurrentValue["PreviousFormatTime"], 1864 | CurrentValue["CurrentFormatTime"]]& , { 1865 | 1866 | Manipulate`Dump`controllerLink[{$CellContext`i1013$$, \ 1867 | $CellContext`i1013$215816$$}, "X1", 1868 | If["DefaultAbsolute", True, "JB1"], False, {1, 2, 1}, 2, 1.]}], 1869 | CurrentValue[{ 1870 | "ControllerData", { 1871 | "Gamepad", "Joystick", "Multi-Axis Controller"}}], {}]], 1872 | ImageSizeCache->{633., {208.75, 215.75}}], 1873 | DefaultBaseStyle->{}, 1874 | FrameMargins->{{5, 5}, {5, 5}}], 1875 | BaselinePosition->Automatic, 1876 | ImageMargins->0], 1877 | Deinitialization:>None, 1878 | DynamicModuleValues:>{}, 1879 | SynchronousInitialization->True, 1880 | UndoTrackedVariables:>{Typeset`show$$, Typeset`bookmarkMode$$}, 1881 | UnsavedVariables:>{Typeset`initDone$$}, 1882 | UntrackedVariables:>{Typeset`size$$}], "ListAnimate", 1883 | Deployed->True, 1884 | StripOnInput->False], 1885 | Manipulate`InterpretManipulate[1]]], "Output", 1886 | CellChangeTimes->{3.6816787808857574`*^9, 3.6816789189495625`*^9, 1887 | 3.6816796267345896`*^9}] 1888 | }, Open ]], 1889 | 1890 | Cell[BoxData[ 1891 | RowBox[{ 1892 | RowBox[{"(*", " ", 1893 | RowBox[{"And", " ", "save", " ", "to", " ", "a", " ", "gif", " ", "file"}], 1894 | " ", "*)"}], "\[IndentingNewLine]", 1895 | RowBox[{ 1896 | RowBox[{"Export", "[", 1897 | RowBox[{"\"\\"", ",", 1898 | RowBox[{"Map", "[", 1899 | RowBox[{ 1900 | RowBox[{"Function", "[", 1901 | RowBox[{"y", ",", 1902 | RowBox[{"Show", "[", 1903 | RowBox[{"plotDynamicRange", "[", 1904 | RowBox[{ 1905 | RowBox[{"Function", "[", 1906 | RowBox[{"x", ",", 1907 | RowBox[{"Power", "[", 1908 | RowBox[{"x", ",", "y"}], "]"}]}], "]"}], ",", 1909 | RowBox[{"64", "/", "256"}], ",", "1", ",", 1910 | RowBox[{"-", "20"}], ",", "2"}], "]"}], "]"}]}], "]"}], ",", 1911 | RowBox[{"{", 1912 | RowBox[{ 1913 | RowBox[{"1", "/", "2.2"}], ",", 1914 | RowBox[{"0.7", "/", "2.2"}]}], "}"}]}], "]"}], ",", 1915 | RowBox[{"\"\\"", "\[Rule]", "2"}]}], "]"}], 1916 | ";"}]}]], "Input", 1917 | CellChangeTimes->{{3.681678230575532*^9, 3.6816782655055933`*^9}}], 1918 | 1919 | Cell[CellGroupData[{ 1920 | 1921 | Cell[BoxData[ 1922 | RowBox[{ 1923 | RowBox[{"(*", " ", 1924 | RowBox[{ 1925 | "Demonstrate", " ", "effect", " ", "of", " ", "Reinhard", " ", "simple", 1926 | " ", 1927 | RowBox[{"x", "/", 1928 | RowBox[{"(", 1929 | RowBox[{"1", "+", "x"}], ")"}]}], " ", "operator", " ", "with", " ", 1930 | "whitepoint", " ", "of", " ", "128"}], " ", "*)"}], "\[IndentingNewLine]", 1931 | "\[IndentingNewLine]", 1932 | RowBox[{"Show", "[", 1933 | RowBox[{"Quiet", "@", 1934 | RowBox[{"plotDynamicRange", "[", 1935 | RowBox[{ 1936 | RowBox[{"Function", "[", 1937 | RowBox[{"x", ",", 1938 | RowBox[{"Power", "[", 1939 | RowBox[{ 1940 | RowBox[{ 1941 | RowBox[{"x", "/", 1942 | RowBox[{"(", 1943 | RowBox[{"1", "+", "x"}], ")"}]}], " ", "*", " ", 1944 | RowBox[{"(", 1945 | RowBox[{"1", "/", 1946 | RowBox[{"(", 1947 | RowBox[{"128", "/", 1948 | RowBox[{"(", 1949 | RowBox[{"128", "+", "1"}], ")"}]}], ")"}]}], ")"}]}], ",", 1950 | RowBox[{"1", "/", "2.2"}]}], "]"}]}], "]"}], ",", 1951 | RowBox[{"1", "/", "256"}], ",", "1", ",", 1952 | RowBox[{"-", "20"}], ",", "8"}], "]"}]}], "]"}]}]], "Input", 1953 | CellChangeTimes->{{3.6816786547121415`*^9, 3.681678684861156*^9}, { 1954 | 3.68167878921059*^9, 3.681678794538123*^9}, {3.6816795760175896`*^9, 1955 | 3.6816795809535894`*^9}}], 1956 | 1957 | Cell[BoxData[ 1958 | GraphicsBox[{{{}, {{}, 1959 | {RGBColor[0.368417, 0.506779, 0.709798], PointSize[0.02], 1960 | AbsoluteThickness[1.6], PointBox[CompressedData[" 1961 | 1:eJxTTMoPSmViYGCQBGIQDQGGByoeH1a4lVpsD+EbHKi46HHy/ZQqKF/vgJaJ 1962 | j1K3WROUr3Pgcp1ho/XXDihf60BWm+vB+ZIToXyNAxLlosU9edOhfLUDd6Y/ 1963 | dp7FuwDKVzlQYecWH/lvKZSvdKBu/balSgrroHyFAxsnrp9XO38LlC9zIGmH 1964 | yN1/pnugfIkDRxQS/v5zOgzlixz4FHjpbpnZKShf4MC2J68SH2y/COVzHDj9 1965 | u3FDyIrrUD7DAb+9Zbwmz+9B+R/2T7Bqv1Zc+xgmz3Dg+p+bZvnPYfL2tjds 1966 | xX23voLJO+R2PTsmxPIWZr6D2vIbD8oL3sHsdxCxqvk32fY9zH0Ol+Z5B19f 1967 | BeNLOJz/pHPb+zGML+MAswcA1Kd6EA== 1968 | "]]}, {}}, {}}, InsetBox[ 1969 | InterpretationBox["\<\"Function = \ 1970 | \\!\\(\\*FormBox[RowBox[{\\\"x\\\", \\\"\[Function]\\\", \ 1971 | SuperscriptBox[RowBox[{\\\"(\\\", FractionBox[\\\"x\\\", \ 1972 | FractionBox[RowBox[{RowBox[{\\\"(\\\", RowBox[{\\\"x\\\", \\\"+\\\", \ 1973 | \\\"1\\\"}], \\\")\\\"}], \\\" \\\", \\\"128\\\"}], RowBox[{\\\"128\\\", \ 1974 | \\\"+\\\", \\\"1\\\"}]]], \\\")\\\"}], RowBox[{\\\"1\\\", \\\"/\\\", \\\"2.2`\ 1975 | \\\"}]]}], TraditionalForm]\\)\"\>", 1976 | StringForm["Function = `1`", 1977 | Function[$CellContext`x, (($CellContext`x/(1 + $CellContext`x)) (1/( 1978 | 128/(128 + 1))))^(1/2.2)]], 1979 | Editable->False], {-20, 0.6}, {-1, 0}], InsetBox[ 1980 | InterpretationBox["\<\"Min value = \\!\\(\\*FormBox[RowBox[{\\\"-\ 1981 | \\\", \\\"17.611220049859597`\\\"}], TraditionalForm]\\)\"\>", 1982 | StringForm["Min value = `1`", -17.611220049859597`], 1983 | Editable->False], {-20, 0.5}, {-1, 0}], InsetBox[ 1984 | InterpretationBox["\<\"Max value = \ 1985 | \\!\\(\\*FormBox[\\\"7.000000000000023`\\\", TraditionalForm]\\)\"\>", 1986 | StringForm["Max value = `1`", 7.000000000000023], 1987 | Editable->False], {-20, 0.4}, {-1, 0}], InsetBox[ 1988 | InterpretationBox["\<\"Dynamic range = \ 1989 | \\!\\(\\*FormBox[\\\"24.611220049859618`\\\", TraditionalForm]\\)\"\>", 1990 | StringForm["Dynamic range = `1`", 24.611220049859618`], 1991 | Editable->False], {-20, 0.3}, {-1, 0}], 1992 | {RGBColor[1, 0, 0], Thickness[0.005], Arrowheads[{-0.03, 0.03}], 1993 | ArrowBox[{{-17.611220049859597`, -0.05}, {7.000000000000023, -0.05}}]}, 1994 | {RGBColor[0, 1, 0], Thickness[0.005], 1995 | LineBox[{{-17, -0.01}, {-17, 0.03}}]}, 1996 | {RGBColor[0, 1, 0], Thickness[0.005], 1997 | LineBox[{{-16, -0.01}, {-16, 0.03}}]}, 1998 | {RGBColor[0, 1, 0], Thickness[0.005], 1999 | LineBox[{{-15, -0.01}, {-15, 0.03}}]}, 2000 | {RGBColor[0, 1, 0], Thickness[0.005], 2001 | LineBox[{{-14, -0.01}, {-14, 0.03}}]}, 2002 | {RGBColor[0, 1, 0], Thickness[0.005], 2003 | LineBox[{{-13, -0.01}, {-13, 0.03}}]}, 2004 | {RGBColor[0, 1, 0], Thickness[0.005], 2005 | LineBox[{{-12, -0.01}, {-12, 0.03}}]}, 2006 | {RGBColor[0, 1, 0], Thickness[0.005], 2007 | LineBox[{{-11, -0.01}, {-11, 0.03}}]}, 2008 | {RGBColor[0, 1, 0], Thickness[0.005], 2009 | LineBox[{{-10, -0.01}, {-10, 0.03}}]}, 2010 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-9, -0.01}, {-9, 0.03}}]}, 2011 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-8, -0.01}, {-8, 0.03}}]}, 2012 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-7, -0.01}, {-7, 0.03}}]}, 2013 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-6, -0.01}, {-6, 0.03}}]}, 2014 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-5, -0.01}, {-5, 0.03}}]}, 2015 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-4, -0.01}, {-4, 0.03}}]}, 2016 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-3, -0.01}, {-3, 0.03}}]}, 2017 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-2, -0.01}, {-2, 0.03}}]}, 2018 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{-1, -0.01}, {-1, 0.03}}]}, 2019 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{0, -0.01}, {0, 0.03}}]}, 2020 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{1, -0.01}, {1, 0.03}}]}, 2021 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{2, -0.01}, {2, 0.03}}]}, 2022 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{3, -0.01}, {3, 0.03}}]}, 2023 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{4, -0.01}, {4, 0.03}}]}, 2024 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{5, -0.01}, {5, 0.03}}]}, 2025 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{6, -0.01}, {6, 0.03}}]}, 2026 | {RGBColor[0, 1, 0], Thickness[0.005], LineBox[{{7, -0.01}, {7, 0.03}}]}, 2027 | {RGBColor[0, 0, 1], Thickness[0.005], 2028 | LineBox[{{-0.28, 0.004735805571038358}, {0.28, 0.004735805571038358}}]}, 2029 | {RGBColor[0, 0, 1], Thickness[0.005], 2030 | LineBox[{{-0.28, 0.006489693322283656}, {0.28, 0.006489693322283656}}]}, 2031 | {RGBColor[0, 0, 1], Thickness[0.005], 2032 | LineBox[{{-0.28, 0.008893095955068448}, {0.28, 0.008893095955068448}}]}, 2033 | {RGBColor[0, 0, 1], Thickness[0.005], 2034 | LineBox[{{-0.28, 0.012186493759315386`}, {0.28, 0.012186493759315386`}}]}, 2035 | {RGBColor[0, 0, 1], Thickness[0.005], 2036 | LineBox[{{-0.28, 0.01669931046615717}, {0.28, 0.01669931046615717}}]}, 2037 | {RGBColor[0, 0, 1], Thickness[0.005], 2038 | LineBox[{{-0.28, 0.022882647060547517`}, {0.28, 0.022882647060547517`}}]}, 2039 | {RGBColor[0, 0, 1], Thickness[0.005], 2040 | LineBox[{{-0.28, 0.03135377958987792}, {0.28, 0.03135377958987792}}]}, 2041 | {RGBColor[0, 0, 1], Thickness[0.005], 2042 | LineBox[{{-0.28, 0.04295615470902886}, {0.28, 0.04295615470902886}}]}, 2043 | {RGBColor[0, 0, 1], Thickness[0.005], 2044 | LineBox[{{-0.28, 0.05883892319556504}, {0.28, 0.05883892319556504}}]}, 2045 | {RGBColor[0, 0, 1], Thickness[0.005], 2046 | LineBox[{{-0.28, 0.0805586349884553}, {0.28, 0.0805586349884553}}]}, 2047 | {RGBColor[0, 0, 1], Thickness[0.005], 2048 | LineBox[{{-0.28, 0.11019890687450265`}, {0.28, 0.11019890687450265`}}]}, 2049 | {RGBColor[0, 0, 1], Thickness[0.005], 2050 | LineBox[{{-0.28, 0.15048205730295738`}, {0.28, 0.15048205730295738`}}]}, 2051 | {RGBColor[0, 0, 1], Thickness[0.005], 2052 | LineBox[{{-0.28, 0.20478711920863152`}, {0.28, 0.20478711920863152`}}]}, 2053 | {RGBColor[0, 0, 1], Thickness[0.005], 2054 | LineBox[{{-0.28, 0.2768479305482957}, {0.28, 0.2768479305482957}}]}, 2055 | {RGBColor[0, 0, 1], Thickness[0.005], 2056 | LineBox[{{-0.28, 0.3696490977962951}, {0.28, 0.3696490977962951}}]}, 2057 | {RGBColor[0, 0, 1], Thickness[0.005], 2058 | LineBox[{{-0.28, 0.48286153139902843`}, {0.28, 0.48286153139902843`}}]}, 2059 | {RGBColor[0, 0, 1], Thickness[0.005], 2060 | LineBox[{{-0.28, 0.609064024925674}, {0.28, 0.609064024925674}}]}, 2061 | {RGBColor[0, 0, 1], Thickness[0.005], 2062 | LineBox[{{-0.28, 0.7323259599277137}, {0.28, 0.7323259599277137}}]}, 2063 | {RGBColor[0, 0, 1], Thickness[0.005], 2064 | LineBox[{{-0.28, 0.8346314863144993}, {0.28, 0.8346314863144993}}]}, 2065 | {RGBColor[0, 0, 1], Thickness[0.005], 2066 | LineBox[{{-0.28, 0.9067472347999918}, {0.28, 0.9067472347999918}}]}, 2067 | {RGBColor[0, 0, 1], Thickness[0.005], 2068 | LineBox[{{-0.28, 0.9512290374306971}, {0.28, 0.9512290374306971}}]}, 2069 | {RGBColor[0, 0, 1], Thickness[0.005], 2070 | LineBox[{{-0.28, 0.9762668581404932}, {0.28, 0.9762668581404932}}]}, 2071 | {RGBColor[0, 0, 1], Thickness[0.005], 2072 | LineBox[{{-0.28, 0.9896046282637718}, {0.28, 0.9896046282637718}}]}, 2073 | {RGBColor[0, 0, 1], Thickness[0.005], 2074 | LineBox[{{-0.28, 0.9964961319706961}, {0.28, 0.9964961319706961}}]}, 2075 | {RGBColor[0, 0, 1], Thickness[0.005], LineBox[{{-0.28, 1.}, {0.28, 1.}}]}}, 2076 | AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], 2077 | Axes->{True, True}, 2078 | AxesLabel->{None, None}, 2079 | AxesOrigin->{0, 0}, 2080 | DisplayFunction->Identity, 2081 | Frame->{{False, False}, {False, False}}, 2082 | FrameLabel->{{None, None}, {None, None}}, 2083 | FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}}, 2084 | GridLines->{None, None}, 2085 | GridLinesStyle->Directive[ 2086 | GrayLevel[0.5, 0.4]], 2087 | ImageSize->600, 2088 | Method->{}, 2089 | PlotRange->{{-20, 8}, {-0.1, 1.1}}, 2090 | PlotRangeClipping->True, 2091 | PlotRangePadding->{{0, 0}, {0, 0}}, 2092 | Ticks->{Automatic, Automatic}]], "Output", 2093 | CellChangeTimes->{{3.6816787815688257`*^9, 3.6816787951361823`*^9}, 2094 | 3.6816789195306206`*^9, 3.6816796271885896`*^9}] 2095 | }, Open ]] 2096 | }, 2097 | WindowSize->{740, 867}, 2098 | WindowMargins->{{Automatic, -1246}, {112, Automatic}}, 2099 | PrintingCopies->1, 2100 | PrintingPageRange->{32000, 32000}, 2101 | PrintingOptions->{"Magnification"->1., 2102 | "PaperOrientation"->"Portrait", 2103 | "PaperSize"->{611.9999999999999, 792.}}, 2104 | FrontEndVersion->"10.3 for Microsoft Windows (64-bit) (December 10, 2015)", 2105 | StyleDefinitions->"Default.nb" 2106 | ] 2107 | (* End of Notebook Content *) 2108 | 2109 | (* Internal cache information *) 2110 | (*CellTagsOutline 2111 | CellTagsIndex->{} 2112 | *) 2113 | (*CellTagsIndex 2114 | CellTagsIndex->{} 2115 | *) 2116 | (*NotebookFileOutline 2117 | Notebook[{ 2118 | Cell[558, 20, 383, 10, 52, "Input"], 2119 | Cell[944, 32, 7702, 189, 592, "Input"], 2120 | Cell[CellGroupData[{ 2121 | Cell[8671, 225, 580, 15, 52, "Input"], 2122 | Cell[9254, 242, 4108, 79, 379, "Output"] 2123 | }, Open ]], 2124 | Cell[CellGroupData[{ 2125 | Cell[13399, 326, 1017, 27, 92, "Input"], 2126 | Cell[14419, 355, 2155, 44, 454, "Output"] 2127 | }, Open ]], 2128 | Cell[16589, 402, 1110, 30, 92, "Input"], 2129 | Cell[CellGroupData[{ 2130 | Cell[17724, 436, 993, 26, 112, "Input"], 2131 | Cell[18720, 464, 2102, 42, 454, "Output"] 2132 | }, Open ]], 2133 | Cell[20837, 509, 914, 24, 92, "Input"], 2134 | Cell[21754, 535, 810, 21, 72, "Input"], 2135 | Cell[CellGroupData[{ 2136 | Cell[22589, 560, 797, 19, 92, "Input"], 2137 | Cell[23389, 581, 3261, 65, 381, "Output"] 2138 | }, Open ]], 2139 | Cell[CellGroupData[{ 2140 | Cell[26687, 651, 989, 24, 132, "Input"], 2141 | Cell[27679, 677, 2110, 44, 454, "Output"] 2142 | }, Open ]], 2143 | Cell[29804, 724, 1168, 29, 152, "Input"], 2144 | Cell[CellGroupData[{ 2145 | Cell[30997, 757, 637, 16, 52, "Input"], 2146 | Cell[31637, 775, 6151, 115, 381, "Output"] 2147 | }, Open ]], 2148 | Cell[CellGroupData[{ 2149 | Cell[37825, 895, 1022, 25, 152, "Input"], 2150 | Cell[38850, 922, 21719, 428, 456, "Output"] 2151 | }, Open ]], 2152 | Cell[60584, 1353, 1102, 28, 132, "Input"], 2153 | Cell[CellGroupData[{ 2154 | Cell[61711, 1385, 759, 19, 92, "Input"], 2155 | Cell[62473, 1406, 3096, 61, 381, "Output"] 2156 | }, Open ]], 2157 | Cell[CellGroupData[{ 2158 | Cell[65606, 1472, 674, 17, 52, "Input"], 2159 | Cell[66283, 1491, 4003, 75, 381, "Output"] 2160 | }, Open ]], 2161 | Cell[CellGroupData[{ 2162 | Cell[70323, 1571, 922, 24, 132, "Input"], 2163 | Cell[71248, 1597, 13735, 289, 456, "Output"] 2164 | }, Open ]], 2165 | Cell[84998, 1889, 1056, 27, 112, "Input"], 2166 | Cell[CellGroupData[{ 2167 | Cell[86079, 1920, 1284, 34, 152, "Input"], 2168 | Cell[87366, 1956, 7727, 137, 414, "Output"] 2169 | }, Open ]] 2170 | } 2171 | ] 2172 | *) 2173 | 2174 | (* End of internal cache information *) 2175 | -------------------------------------------------------------------------------- /DynamicRange/dynamicRange.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bartwronski/BlogPostsExtraMaterial/00ad070628a1ffd76a4fc7c07b3180452a530b5d/DynamicRange/dynamicRange.pdf -------------------------------------------------------------------------------- /Sliced_optimal_transport_sampling_test.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Sliced optimal transport sampling test.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "authorship_tag": "ABX9TyPQ8H/EYW6/nyWVvv4/Io3q", 10 | "include_colab_link": true 11 | }, 12 | "kernelspec": { 13 | "name": "python3", 14 | "display_name": "Python 3" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "markdown", 20 | "metadata": { 21 | "id": "view-in-github", 22 | "colab_type": "text" 23 | }, 24 | "source": [ 25 | "\"Open" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "metadata": { 31 | "id": "7qlI4rkkZT-_", 32 | "colab_type": "code", 33 | "colab": { 34 | "base_uri": "https://localhost:8080/", 35 | "height": 282 36 | }, 37 | "outputId": "9e40f30c-2f76-4c93-8814-95a5c8e7bda4" 38 | }, 39 | "source": [ 40 | "import numpy as np\n", 41 | "import matplotlib.pyplot as plt\n", 42 | "\n", 43 | "def random_sphere_points(num_points):\n", 44 | " a, r = np.random.uniform(0.0, 2.0*np.pi, size=num_points), np.sqrt(np.random.uniform(0.0, 1.0, size=num_points))\n", 45 | " return np.vstack((r * np.sin(a), r * np.cos(a)))\n", 46 | "r = random_sphere_points(256)\n", 47 | "\n", 48 | "def random_project(r):\n", 49 | " a = np.random.uniform(0.0, np.pi)\n", 50 | " m = np.array([[np.sin(a), np.cos(a)],[np.cos(a), -np.sin(a)]])\n", 51 | " return np.dot(m, r)\n", 52 | "r = random_sphere_points(16)\n", 53 | "plt.axes().set_aspect(1.0)\n", 54 | "plt.plot(r[0], r[1],'ro')\n", 55 | "r1 = random_project(r)\n", 56 | "plt.plot(r1[0], r1[1],'bo')\n" 57 | ], 58 | "execution_count": 1, 59 | "outputs": [ 60 | { 61 | "output_type": "execute_result", 62 | "data": { 63 | "text/plain": [ 64 | "[]" 65 | ] 66 | }, 67 | "metadata": { 68 | "tags": [] 69 | }, 70 | "execution_count": 1 71 | }, 72 | { 73 | "output_type": "display_data", 74 | "data": { 75 | "image/png": "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\n", 76 | "text/plain": [ 77 | "
" 78 | ] 79 | }, 80 | "metadata": { 81 | "tags": [], 82 | "needs_background": "light" 83 | } 84 | } 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "metadata": { 90 | "id": "PfTuLqI-bBp0", 91 | "colab_type": "code", 92 | "colab": { 93 | "base_uri": "https://localhost:8080/", 94 | "height": 282 95 | }, 96 | "outputId": "6e68a083-4f43-43b6-b12b-3e0ad4619db7" 97 | }, 98 | "source": [ 99 | "# Radon transform for 2D slice\n", 100 | "x = np.linspace(-1,1,256)\n", 101 | "pdf = np.sqrt(1-x*x)\n", 102 | "cdf = np.cumsum(pdf)\n", 103 | "cdf = cdf / cdf[-1]\n", 104 | "plt.plot(x, cdf, 'ro')" 105 | ], 106 | "execution_count": 2, 107 | "outputs": [ 108 | { 109 | "output_type": "execute_result", 110 | "data": { 111 | "text/plain": [ 112 | "[]" 113 | ] 114 | }, 115 | "metadata": { 116 | "tags": [] 117 | }, 118 | "execution_count": 2 119 | }, 120 | { 121 | "output_type": "display_data", 122 | "data": { 123 | "image/png": "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\n", 124 | "text/plain": [ 125 | "
" 126 | ] 127 | }, 128 | "metadata": { 129 | "tags": [], 130 | "needs_background": "light" 131 | } 132 | } 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "metadata": { 138 | "id": "x0nyAliPdX30", 139 | "colab_type": "code", 140 | "colab": { 141 | "base_uri": "https://localhost:8080/", 142 | "height": 401 143 | }, 144 | "outputId": "4fffb04d-4eb0-498c-b59d-2b92deecbaeb" 145 | }, 146 | "source": [ 147 | "def uniformize_slice(p):\n", 148 | " # Project to CDF\n", 149 | " p[0] = np.interp(p[0], x, cdf)\n", 150 | " inds = np.argsort(p[0])\n", 151 | " # Uniformize\n", 152 | " p[0, inds] = p[0, inds] * 0.5 + 0.5 * np.linspace(0.5/len(p[0]),1-0.5/len(p[0]),len(p[0]))\n", 153 | " # Unproject with inverse CDF\n", 154 | " p[0] = np.interp(p[0], cdf, x)\n", 155 | " return p\n", 156 | "# Test\n", 157 | "ps = random_sphere_points(256)\n", 158 | "orig_ps = ps.copy()\n", 159 | "for _ in range(1000):\n", 160 | " ps = random_project(ps)\n", 161 | " ps = uniformize_slice(ps)\n", 162 | "plt.rcParams['figure.figsize']=12, 12\n", 163 | "plt.plot(np.hstack((ps[0] + 2.2, orig_ps[0])), np.hstack((ps[1], orig_ps[1])), 'bo', markersize=4)\n", 164 | "plt.axes().set_aspect(1.0)\n" 165 | ], 166 | "execution_count": 6, 167 | "outputs": [ 168 | { 169 | "output_type": "stream", 170 | "text": [ 171 | "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:18: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n" 172 | ], 173 | "name": "stderr" 174 | }, 175 | { 176 | "output_type": "display_data", 177 | "data": { 178 | "image/png": "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\n", 179 | "text/plain": [ 180 | "
" 181 | ] 182 | }, 183 | "metadata": { 184 | "tags": [], 185 | "needs_background": "light" 186 | } 187 | } 188 | ] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "metadata": { 193 | "id": "cu-rpiUvkFFw", 194 | "colab_type": "code", 195 | "colab": {} 196 | }, 197 | "source": [ 198 | "" 199 | ], 200 | "execution_count": 0, 201 | "outputs": [] 202 | } 203 | ] 204 | } -------------------------------------------------------------------------------- /small_floats/small_floats.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bartwronski/BlogPostsExtraMaterial/00ad070628a1ffd76a4fc7c07b3180452a530b5d/small_floats/small_floats.pdf --------------------------------------------------------------------------------