From eb64b2d4fc2b12f2007b65f0b0e56cea74ee2b61 Mon Sep 17 00:00:00 2001 From: benfry Date: Wed, 26 Jan 2011 19:22:19 +0000 Subject: [PATCH] --- java/examples/3D/Camera/MoveEye/MoveEye.pde | 28 + .../3D/Camera/MoveEye/applet/MoveEye.java | 48 + .../3D/Camera/MoveEye/applet/MoveEye.pde | 28 + .../3D/Camera/MoveEye/applet/loading.gif | Bin 0 -> 2232 bytes .../OrthoVSPerspective/OrthoVSPerspective.pde | 42 + .../applet/OrthoVSPerspective.java | 62 + .../applet/OrthoVSPerspective.pde | 42 + .../OrthoVSPerspective/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Camera/Perspective/Perspective.pde | 41 + .../Perspective/applet/Perspective.java | 61 + .../Camera/Perspective/applet/Perspective.pde | 41 + .../3D/Camera/Perspective/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Form/BrickTower/BrickTower.pde | 59 + java/examples/3D/Form/BrickTower/Cube.pde | 60 + .../3D/Form/BrickTower/applet/BrickTower.java | 152 + .../3D/Form/BrickTower/applet/BrickTower.pde | 61 + .../3D/Form/BrickTower/applet/Cube.pde | 60 + .../3D/Form/BrickTower/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Form/CubicGrid/CubicGrid.pde | 47 + .../3D/Form/CubicGrid/applet/CubicGrid.java | 67 + .../3D/Form/CubicGrid/applet/CubicGrid.pde | 47 + .../3D/Form/CubicGrid/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Form/Icosahedra/Dimension3D.pde | 10 + .../3D/Form/Icosahedra/Icosahedra.pde | 52 + .../3D/Form/Icosahedra/Icosahedron.pde | 159 + java/examples/3D/Form/Icosahedra/Shape3D.pde | 82 + .../3D/Form/Icosahedra/applet/Dimension3D.pde | 10 + .../3D/Form/Icosahedra/applet/Icosahedra.java | 416 + .../3D/Form/Icosahedra/applet/Icosahedra.pde | 53 + .../3D/Form/Icosahedra/applet/Icosahedron.pde | 160 + .../3D/Form/Icosahedra/applet/Shape3D.pde | 81 + .../3D/Form/Icosahedra/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Form/Primitives3D/Primitives3D.pde | 30 + .../Primitives3D/applet/Primitives3D.java | 51 + .../Form/Primitives3D/applet/Primitives3D.pde | 30 + .../3D/Form/Primitives3D/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Form/RGBCube/RGBCube.pde | 74 + .../3D/Form/RGBCube/applet/RGBCube.java | 94 + .../3D/Form/RGBCube/applet/RGBCube.pde | 74 + .../3D/Form/RGBCube/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Form/RunAmuck/Legs.pde | 162 + java/examples/3D/Form/RunAmuck/RunAmuck.pde | 45 + .../examples/3D/Form/RunAmuck/applet/Legs.pde | 162 + .../3D/Form/RunAmuck/applet/RunAmuck.java | 228 + .../3D/Form/RunAmuck/applet/RunAmuck.pde | 45 + .../3D/Form/RunAmuck/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Form/ShapeTransform/ShapeTransform.pde | 116 + .../ShapeTransform/applet/ShapeTransform.java | 147 + .../ShapeTransform/applet/ShapeTransform.pde | 114 + .../3D/Form/ShapeTransform/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Form/Toroid/Toroid.pde | 182 + .../3D/Form/Toroid/applet/Toroid.java | 215 + .../examples/3D/Form/Toroid/applet/Toroid.pde | 182 + .../3D/Form/Toroid/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Form/Vertices/Vertices.pde | 67 + .../3D/Form/Vertices/applet/Vertices.java | 87 + .../3D/Form/Vertices/applet/Vertices.pde | 67 + .../3D/Form/Vertices/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Image/Explode/Explode.pde | 43 + .../3D/Image/Explode/applet/Explode.java | 63 + .../3D/Image/Explode/applet/Explode.pde | 43 + .../3D/Image/Explode/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Image/Explode/data/eames.jpg.tmp | Bin 0 -> 44496 bytes .../examples/3D/Image/Extrusion/Extrusion.pde | 46 + .../3D/Image/Extrusion/applet/Extrusion.java | 67 + .../3D/Image/Extrusion/applet/Extrusion.pde | 46 + .../3D/Image/Extrusion/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Image/Zoom/Zoom.pde | 89 + java/examples/3D/Image/Zoom/applet/Zoom.java | 109 + java/examples/3D/Image/Zoom/applet/Zoom.pde | 89 + .../examples/3D/Image/Zoom/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Lights/Directional/Directional.pde | 28 + .../Directional/applet/Directional.java | 48 + .../Lights/Directional/applet/Directional.pde | 28 + .../3D/Lights/Directional/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Lights/Lights1/Lights1.pde | 29 + .../3D/Lights/Lights1/applet/Lights1.java | 49 + .../3D/Lights/Lights1/applet/Lights1.pde | 29 + .../3D/Lights/Lights1/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Lights/Lights2/Lights2.pde | 36 + .../3D/Lights/Lights2/applet/Lights2.java | 56 + .../3D/Lights/Lights2/applet/Lights2.pde | 36 + .../3D/Lights/Lights2/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Lights/Reflection/Reflection.pde | 25 + .../Lights/Reflection/applet/Reflection.java | 45 + .../Lights/Reflection/applet/Reflection.pde | 25 + .../3D/Lights/Reflection/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Lights/Spot/Spot.pde | 35 + java/examples/3D/Lights/Spot/applet/Spot.java | 55 + java/examples/3D/Lights/Spot/applet/Spot.pde | 35 + .../3D/Lights/Spot/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Textures/Texture1/Texture1.pde | 28 + .../3D/Textures/Texture1/applet/Texture1.java | 48 + .../3D/Textures/Texture1/applet/Texture1.pde | 28 + .../3D/Textures/Texture1/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Textures/Texture2/Texture2.pde | 25 + .../3D/Textures/Texture2/applet/Texture2.java | 45 + .../3D/Textures/Texture2/applet/Texture2.pde | 25 + .../3D/Textures/Texture2/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Textures/Texture3/Texture3.pde | 46 + .../3D/Textures/Texture3/applet/Texture3.java | 66 + .../3D/Textures/Texture3/applet/Texture3.pde | 46 + .../3D/Textures/Texture3/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Textures/TextureCube/TextureCube.pde | 91 + .../TextureCube/applet/TextureCube.java | 111 + .../TextureCube/applet/TextureCube.pde | 91 + .../Textures/TextureCube/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Transform/Bird/Bird.pde | 63 + .../3D/Transform/Bird/applet/Bird.java | 83 + .../3D/Transform/Bird/applet/Bird.pde | 63 + .../3D/Transform/Bird/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Transform/Birds/Bird.pde | 99 + java/examples/3D/Transform/Birds/Birds.pde | 53 + .../3D/Transform/Birds/applet/Bird.pde | 99 + .../3D/Transform/Birds/applet/Birds.java | 172 + .../3D/Transform/Birds/applet/Birds.pde | 53 + .../3D/Transform/Birds/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Transform/CubesWithinCube/Cube.pde | 72 + .../CubesWithinCube/CubesWithinCube.pde | 117 + .../Transform/CubesWithinCube/applet/Cube.pde | 72 + .../applet/CubesWithinCube.java | 226 + .../applet/CubesWithinCube.pde | 117 + .../CubesWithinCube/applet/loading.gif | Bin 0 -> 2232 bytes .../Transform/PushPopCubes/PushPopCubes.pde | 144 + .../PushPopCubes/applet/PushPopCubes.java | 164 + .../PushPopCubes/applet/PushPopCubes.pde | 144 + .../Transform/PushPopCubes/applet/loading.gif | Bin 0 -> 2232 bytes .../examples/3D/Transform/Rotate1/Rotate1.pde | 38 + .../3D/Transform/Rotate1/applet/Rotate1.java | 58 + .../3D/Transform/Rotate1/applet/Rotate1.pde | 38 + .../3D/Transform/Rotate1/applet/loading.gif | Bin 0 -> 2232 bytes .../examples/3D/Transform/Rotate2/Rotate2.pde | 42 + .../3D/Transform/Rotate2/applet/Rotate2.java | 62 + .../3D/Transform/Rotate2/applet/Rotate2.pde | 42 + .../3D/Transform/Rotate2/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Typography/KineticType/KineticType.pde | 64 + .../3D/Typography/KineticType/Letter.pde | 13 + .../3D/Typography/KineticType/Line.pde | 28 + .../3D/Typography/KineticType/Word.pde | 10 + .../KineticType/applet/KineticType.java | 137 + .../KineticType/applet/KineticType.pde | 66 + .../Typography/KineticType/applet/Letter.pde | 13 + .../3D/Typography/KineticType/applet/Line.pde | 28 + .../3D/Typography/KineticType/applet/Word.pde | 10 + .../Typography/KineticType/applet/loading.gif | Bin 0 -> 2232 bytes .../KineticType/data/Univers-66.vlw | Bin 0 -> 116537 bytes .../3D/Typography/LetterK/LetterK.pde | 125 + .../3D/Typography/LetterK/applet/LetterK.java | 145 + .../3D/Typography/LetterK/applet/LetterK.pde | 125 + .../3D/Typography/LetterK/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/3D/Typography/Typing/Typing.pde | 82 + .../3D/Typography/Typing/applet/Typing.java | 101 + .../3D/Typography/Typing/applet/Typing.pde | 81 + .../3D/Typography/Typing/applet/loading.gif | Bin 0 -> 2232 bytes .../3D/Typography/Typing/data/Univers45.vlw | Bin 0 -> 95193 bytes java/examples/Basics/Arrays/Array/Array.pde | 35 + .../Basics/Arrays/Array/applet/Array.java | 56 + .../Basics/Arrays/Array/applet/Array.pde | 35 + .../Basics/Arrays/Array/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Arrays/Array2D/Array2D.pde | 32 + .../Basics/Arrays/Array2D/applet/Array2D.java | 53 + .../Basics/Arrays/Array2D/applet/Array2D.pde | 32 + .../Basics/Arrays/Array2D/applet/loading.gif | Bin 0 -> 2232 bytes .../Arrays/ArrayObjects/ArrayObjects.pde | 39 + .../Basics/Arrays/ArrayObjects/Module.pde | 38 + .../ArrayObjects/applet/ArrayObjects.java | 94 + .../ArrayObjects/applet/ArrayObjects.pde | 74 + .../Arrays/ArrayObjects/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Color/Brightness/Brightness.pde | 29 + .../Color/Brightness/applet/Brightness.java | 51 + .../Color/Brightness/applet/Brightness.pde | 31 + .../Color/Brightness/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Color/ColorWheel/ColorWheel.pde | 88 + .../Color/ColorWheel/applet/ColorWheel.java | 99 + .../Color/ColorWheel/applet/ColorWheel.pde | 79 + .../Color/ColorWheel/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Color/Creating/Creating.pde | 26 + .../Color/Creating/applet/Creating.java | 47 + .../Basics/Color/Creating/applet/Creating.pde | 26 + .../Basics/Color/Creating/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Color/Hue/Hue.pde | 31 + .../examples/Basics/Color/Hue/applet/Hue.java | 51 + java/examples/Basics/Color/Hue/applet/Hue.pde | 31 + .../Basics/Color/Hue/applet/loading.gif | Bin 0 -> 2232 bytes .../Color/LinearGradient/LinearGradient.pde | 73 + .../LinearGradient/applet/LinearGradient.java | 93 + .../LinearGradient/applet/LinearGradient.pde | 73 + .../Color/LinearGradient/applet/loading.gif | Bin 0 -> 2232 bytes .../Color/RadialGradient/RadialGradient.pde | 58 + .../RadialGradient/applet/RadialGradient.java | 78 + .../RadialGradient/applet/RadialGradient.pde | 58 + .../Color/RadialGradient/applet/loading.gif | Bin 0 -> 2232 bytes .../Color/RadialGradient2/RadialGradient2.pde | 43 + .../examples/Basics/Color/Reading/Reading.pde | 46 + .../Basics/Color/Reading/applet/Reading.java | 63 + .../Basics/Color/Reading/applet/Reading.pde | 42 + .../Basics/Color/Reading/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Color/Relativity/Relativity.pde | 42 + .../Color/Relativity/applet/Relativity.java | 62 + .../Color/Relativity/applet/Relativity.pde | 42 + .../Color/Relativity/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Color/Saturation/Saturation.pde | 29 + .../Color/Saturation/applet/Saturation.java | 52 + .../Color/Saturation/applet/Saturation.pde | 32 + .../Color/Saturation/applet/loading.gif | Bin 0 -> 2232 bytes .../Color/WaveGradient/WaveGradient.pde | 39 + .../WaveGradient/applet/WaveGradient.java | 59 + .../WaveGradient/applet/WaveGradient.pde | 39 + .../Color/WaveGradient/applet/loading.gif | Bin 0 -> 2232 bytes .../Control/Conditionals1/Conditionals1.pde | 26 + .../Conditionals1/applet/Conditionals1.java | 47 + .../Conditionals1/applet/Conditionals1.pde | 26 + .../Control/Conditionals1/applet/loading.gif | Bin 0 -> 2232 bytes .../Control/Conditionals2/Conditionals2.pde | 26 + .../Conditionals2/applet/Conditionals2.java | 47 + .../Conditionals2/applet/Conditionals2.pde | 26 + .../Control/Conditionals2/applet/loading.gif | Bin 0 -> 2232 bytes .../EmbeddedIteration/EmbeddedIteration.pde | 27 + .../applet/EmbeddedIteration.java | 48 + .../applet/EmbeddedIteration.pde | 27 + .../EmbeddedIteration/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Control/Iteration/Iteration.pde | 45 + .../Control/Iteration/applet/Iteration.java | 66 + .../Control/Iteration/applet/Iteration.pde | 45 + .../Control/Iteration/applet/loading.gif | Bin 0 -> 2232 bytes .../LogicalOperators/LogicalOperators.pde | 45 + .../applet/LogicalOperators.java | 66 + .../applet/LogicalOperators.pde | 45 + .../LogicalOperators/applet/loading.gif | Bin 0 -> 2232 bytes .../CharactersStrings/CharactersStrings.pde | 82 + .../applet/CharactersStrings.java | 101 + .../applet/CharactersStrings.pde | 81 + .../Data/CharactersStrings/applet/loading.gif | Bin 0 -> 2232 bytes .../Data/CharactersStrings/data/Eureka-90.vlw | Bin 0 -> 433385 bytes .../DatatypeConversion/DatatypeConversion.pde | 28 + .../applet/DatatypeConversion.java | 49 + .../applet/DatatypeConversion.pde | 28 + .../DatatypeConversion/applet/loading.gif | Bin 0 -> 2232 bytes .../Data/IntegersFloats/IntegersFloats.pde | 36 + .../IntegersFloats/applet/IntegersFloats.java | 56 + .../IntegersFloats/applet/IntegersFloats.pde | 36 + .../Data/IntegersFloats/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Data/TrueFalse/TrueFalse.pde | 34 + .../Data/TrueFalse/applet/TrueFalse.java | 55 + .../Data/TrueFalse/applet/TrueFalse.pde | 34 + .../Basics/Data/TrueFalse/applet/loading.gif | Bin 0 -> 2232 bytes .../Data/VariableScope/VariableScope.pde | 61 + .../VariableScope/applet/VariableScope.java | 81 + .../VariableScope/applet/VariableScope.pde | 61 + .../Data/VariableScope/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Data/Variables/Variables.pde | 23 + .../Data/Variables/applet/Variables.java | 44 + .../Data/Variables/applet/Variables.pde | 23 + .../Basics/Data/Variables/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Form/Bezier/Bezier.pde | 18 + .../Basics/Form/Bezier/applet/Bezier.java | 39 + .../Basics/Form/Bezier/applet/Bezier.pde | 18 + .../Basics/Form/Bezier/applet/loading.gif | Bin 0 -> 2232 bytes .../Form/BezierEllipse/BezierEllipse.pde | 103 + .../BezierEllipse/applet/BezierEllipse.java | 123 + .../BezierEllipse/applet/BezierEllipse.pde | 103 + .../Form/BezierEllipse/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Form/PieChart/PieChart.pde | 23 + .../Basics/Form/PieChart/applet/PieChart.java | 44 + .../Basics/Form/PieChart/applet/PieChart.pde | 23 + .../Basics/Form/PieChart/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Form/PointsLines/PointsLines.pde | 32 + .../Form/PointsLines/applet/PointsLines.java | 53 + .../Form/PointsLines/applet/PointsLines.pde | 32 + .../Form/PointsLines/applet/loading.gif | Bin 0 -> 2232 bytes .../Form/ShapePrimitives/ShapePrimitives.pde | 21 + .../applet/ShapePrimitives.java | 42 + .../applet/ShapePrimitives.pde | 21 + .../Form/ShapePrimitives/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Form/SimpleCurves/SimpleCurves.pde | 81 + .../SimpleCurves/applet/SimpleCurves.java | 101 + .../Form/SimpleCurves/applet/SimpleCurves.pde | 81 + .../Form/SimpleCurves/applet/loading.gif | Bin 0 -> 2232 bytes .../Form/TriangleStrip/TriangleStrip.pde | 36 + .../TriangleStrip/applet/TriangleStrip.java | 57 + .../TriangleStrip/applet/TriangleStrip.pde | 36 + .../Form/TriangleStrip/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Form/Vertices/Vertices.pde | 47 + .../Basics/Form/Vertices/applet/Vertices.java | 68 + .../Basics/Form/Vertices/applet/Vertices.pde | 47 + .../Basics/Form/Vertices/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Image/Alphamask/Alphamask.pde | 24 + .../Image/Alphamask/applet/Alphamask.java | 45 + .../Image/Alphamask/applet/Alphamask.pde | 25 + .../Basics/Image/Alphamask/applet/loading.gif | Bin 0 -> 2232 bytes .../Image/BackgroundImage/BackgroundImage.pde | 30 + .../applet/BackgroundImage.java | 50 + .../applet/BackgroundImage.pde | 30 + .../Image/BackgroundImage/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Image/CreateImage/CreateImage.pde | 24 + .../Image/CreateImage/applet/CreateImage.java | 44 + .../Image/CreateImage/applet/CreateImage.pde | 24 + .../Image/CreateImage/applet/loading.gif | Bin 0 -> 2232 bytes .../LoadDisplayImage/LoadDisplayImage.pde | 23 + .../applet/LoadDisplayImage.java | 44 + .../applet/LoadDisplayImage.pde | 23 + .../Image/LoadDisplayImage/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Image/Pointillism/Pointillism.pde | 38 + .../Image/Pointillism/applet/Pointillism.java | 49 + .../Image/Pointillism/applet/Pointillism.pde | 29 + .../Image/Pointillism/applet/loading.gif | Bin 0 -> 2232 bytes .../Image/RequestImage/RequestImage.pde | 91 + java/examples/Basics/Image/Sprite/Sprite.pde | 38 + .../Basics/Image/Sprite/applet/Sprite.java | 61 + .../Basics/Image/Sprite/applet/Sprite.pde | 41 + .../Basics/Image/Sprite/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Image/Sprite/data/teddy.gif | Bin 0 -> 746 bytes .../examples/Basics/Image/Sprite2/Sprite2.pde | 45 + .../Basics/Image/Sprite2/data/teddy.gif | Bin 0 -> 746 bytes .../Image/Transparency/Transparency.pde | 29 + .../Transparency/applet/Transparency.java | 50 + .../Transparency/applet/Transparency.pde | 30 + .../Image/Transparency/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Input/Clock/Clock.pde | 64 + .../Basics/Input/Clock/applet/Clock.java | 59 + .../Basics/Input/Clock/applet/Clock.pde | 39 + .../Basics/Input/Clock/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Input/Constrain/Constrain.pde | 41 + .../Input/Constrain/applet/Constrain.java | 60 + .../Input/Constrain/applet/Constrain.pde | 40 + .../Basics/Input/Constrain/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Input/Easing/Easing.pde | 41 + .../Basics/Input/Easing/applet/Easing.java | 61 + .../Basics/Input/Easing/applet/Easing.pde | 41 + .../Basics/Input/Easing/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Input/Keyboard/Keyboard.pde | 39 + .../Input/Keyboard/applet/Keyboard.java | 60 + .../Basics/Input/Keyboard/applet/Keyboard.pde | 40 + .../Basics/Input/Keyboard/applet/loading.gif | Bin 0 -> 2232 bytes .../KeyboardFunctions/KeyboardFunctions.pde | 89 + .../applet/KeyboardFunctions.java | 109 + .../applet/KeyboardFunctions.pde | 89 + .../KeyboardFunctions/applet/loading.gif | Bin 0 -> 2232 bytes .../Input/Milliseconds/Milliseconds.pde | 26 + .../Milliseconds/applet/Milliseconds.java | 46 + .../Milliseconds/applet/Milliseconds.pde | 26 + .../Input/Milliseconds/applet/loading.gif | Bin 0 -> 2232 bytes .../examples/Basics/Input/Mouse1D/Mouse1D.pde | 47 + .../Basics/Input/Mouse1D/applet/Mouse1D.java | 70 + .../Basics/Input/Mouse1D/applet/Mouse1D.pde | 50 + .../Basics/Input/Mouse1D/applet/loading.gif | Bin 0 -> 2232 bytes .../examples/Basics/Input/Mouse2D/Mouse2D.pde | 24 + .../Basics/Input/Mouse2D/applet/Mouse2D.java | 45 + .../Basics/Input/Mouse2D/applet/Mouse2D.pde | 25 + .../Basics/Input/Mouse2D/applet/loading.gif | Bin 0 -> 2232 bytes .../Input/MouseFunctions/MouseFunctions.pde | 68 + .../MouseFunctions/applet/MouseFunctions.java | 88 + .../MouseFunctions/applet/MouseFunctions.pde | 68 + .../Input/MouseFunctions/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Input/MousePress/MousePress.pde | 23 + .../Input/MousePress/applet/MousePress.java | 43 + .../Input/MousePress/applet/MousePress.pde | 23 + .../Input/MousePress/applet/loading.gif | Bin 0 -> 2232 bytes .../Input/MouseSignals/MouseSignals.pde | 54 + .../MouseSignals/applet/MouseSignals.java | 74 + .../MouseSignals/applet/MouseSignals.pde | 54 + .../Input/MouseSignals/applet/loading.gif | Bin 0 -> 2232 bytes .../Input/StoringInput/StoringInput.pde | 38 + .../StoringInput/applet/StoringInput.java | 60 + .../StoringInput/applet/StoringInput.pde | 40 + .../Input/StoringInput/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Math/AdditiveWave/AdditiveWave.pde | 69 + .../AdditiveWave/applet/AdditiveWave.java | 89 + .../Math/AdditiveWave/applet/AdditiveWave.pde | 69 + .../Math/AdditiveWave/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Math/Arctangent/Arctangent.pde | 67 + .../Math/Arctangent/applet/Arctangent.java | 87 + .../Math/Arctangent/applet/Arctangent.pde | 67 + .../Basics/Math/Arctangent/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Math/Distance1D/Distance1D.pde | 51 + .../Math/Distance1D/applet/Distance1D.java | 71 + .../Math/Distance1D/applet/Distance1D.pde | 51 + .../Basics/Math/Distance1D/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Math/Distance2D/Distance2D.pde | 29 + .../Math/Distance2D/applet/Distance2D.java | 49 + .../Math/Distance2D/applet/Distance2D.pde | 29 + .../Basics/Math/Distance2D/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Math/DoubleRandom/DoubleRandom.pde | 20 + .../DoubleRandom/applet/DoubleRandom.java | 41 + .../Math/DoubleRandom/applet/DoubleRandom.pde | 20 + .../Math/DoubleRandom/applet/loading.gif | Bin 0 -> 2232 bytes .../Graphing2DEquation/Graphing2DEquation.pde | 40 + .../applet/Graphing2DEquation.java | 60 + .../applet/Graphing2DEquation.pde | 40 + .../Graphing2DEquation/applet/loading.gif | Bin 0 -> 2232 bytes .../IncrementDecrement/IncrementDecrement.pde | 46 + .../applet/IncrementDecrement.java | 66 + .../applet/IncrementDecrement.pde | 46 + .../IncrementDecrement/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Math/Modulo/Modulo.pde | 31 + .../Basics/Math/Modulo/applet/Modulo.java | 51 + .../Basics/Math/Modulo/applet/Modulo.pde | 31 + .../Basics/Math/Modulo/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Math/Noise1D/Noise1D.pde | 37 + .../Basics/Math/Noise1D/applet/Noise1D.java | 57 + .../Basics/Math/Noise1D/applet/Noise1D.pde | 37 + .../Basics/Math/Noise1D/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Math/Noise2D/Noise2D.pde | 47 + .../Basics/Math/Noise2D/applet/Noise2D.java | 67 + .../Basics/Math/Noise2D/applet/Noise2D.pde | 47 + .../Basics/Math/Noise2D/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Math/Noise3D/Noise3D.pde | 54 + .../Basics/Math/Noise3D/applet/Noise3D.java | 74 + .../Basics/Math/Noise3D/applet/Noise3D.pde | 54 + .../Basics/Math/Noise3D/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Math/NoiseWave/NoiseWave.pde | 60 + .../Math/NoiseWave/applet/NoiseWave.java | 80 + .../Math/NoiseWave/applet/NoiseWave.pde | 60 + .../Basics/Math/NoiseWave/applet/loading.gif | Bin 0 -> 2232 bytes .../OperatorPrecedence/OperatorPrecedence.pde | 58 + .../applet/OperatorPrecedence.java | 79 + .../applet/OperatorPrecedence.pde | 58 + .../OperatorPrecedence/applet/loading.gif | Bin 0 -> 2232 bytes .../PolarToCartesian/PolarToCartesian.pde | 52 + .../applet/PolarToCartesian.java | 72 + .../applet/PolarToCartesian.pde | 52 + .../Math/PolarToCartesian/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Math/Random/Random.pde | 19 + .../Basics/Math/Random/applet/Random.java | 40 + .../Basics/Math/Random/applet/Random.pde | 19 + .../Basics/Math/Random/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Math/Sine/Sine.pde | 46 + .../Basics/Math/Sine/applet/Sine.java | 66 + .../examples/Basics/Math/Sine/applet/Sine.pde | 46 + .../Basics/Math/Sine/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Math/SineCosine/SineCosine.pde | 59 + .../Math/SineCosine/applet/SineCosine.java | 79 + .../Math/SineCosine/applet/SineCosine.pde | 59 + .../Basics/Math/SineCosine/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Math/SineWave/SineWave.pde | 55 + .../Basics/Math/SineWave/applet/SineWave.java | 75 + .../Basics/Math/SineWave/applet/SineWave.pde | 55 + .../Basics/Math/SineWave/applet/loading.gif | Bin 0 -> 2232 bytes .../CompositeObjects/CompositeObjects.pde | 24 + .../Basics/Objects/CompositeObjects/Egg.pde | 36 + .../Objects/CompositeObjects/EggRing.pde | 19 + .../Basics/Objects/CompositeObjects/Ring.pde | 27 + .../applet/CompositeObjects.java | 125 + .../applet/CompositeObjects.pde | 105 + .../CompositeObjects/applet/loading.gif | Bin 0 -> 2232 bytes .../Objects/Inheritance/Inheritance.pde | 78 + .../Inheritance/applet/Inheritance.java | 98 + .../Inheritance/applet/Inheritance.pde | 78 + .../Objects/Inheritance/applet/loading.gif | Bin 0 -> 2232 bytes .../MultipleConstructors.pde | 47 + .../applet/MultipleConstructors.java | 67 + .../applet/MultipleConstructors.pde | 47 + .../MultipleConstructors/applet/loading.gif | Bin 0 -> 2232 bytes .../Objects/Neighborhood/Neighborhood.pde | 303 + .../Neighborhood/applet/Neighborhood.java | 323 + .../Neighborhood/applet/Neighborhood.pde | 303 + .../Objects/Neighborhood/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Objects/Objects/Objects.pde | 71 + .../Objects/Objects/applet/Objects.java | 91 + .../Basics/Objects/Objects/applet/Objects.pde | 71 + .../Basics/Objects/Objects/applet/loading.gif | Bin 0 -> 2232 bytes .../Shape/DisableStyle/DisableStyle.pde | 34 + .../DisableStyle/applet/DisableStyle.java | 55 + .../DisableStyle/applet/DisableStyle.pde | 34 + .../Shape/DisableStyle/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Shape/DisableStyle/data/bot1.svg | 160 + .../Basics/Shape/GetChild/GetChild.pde | 45 + .../Shape/GetChild/applet/GetChild.java | 66 + .../Basics/Shape/GetChild/applet/GetChild.pde | 45 + .../Basics/Shape/GetChild/applet/loading.gif | Bin 0 -> 2232 bytes .../Shape/GetChild/data/usa-wikipedia.svg | 452 + .../LoadDisplayShape/LoadDisplayShape.pde | 26 + .../applet/LoadDisplayShape.java | 47 + .../applet/LoadDisplayShape.pde | 26 + .../Shape/LoadDisplayShape/applet/loading.gif | Bin 0 -> 2232 bytes .../Shape/LoadDisplayShape/data/bot1.svg | 160 + .../Basics/Shape/ScaleShape/ScaleShape.pde | 26 + .../Shape/ScaleShape/applet/ScaleShape.java | 47 + .../Shape/ScaleShape/applet/ScaleShape.pde | 26 + .../Shape/ScaleShape/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Shape/ScaleShape/data/bot1.svg | 160 + .../Structure/Coordinates/Coordinates.pde | 41 + .../Coordinates/applet/Coordinates.java | 62 + .../Coordinates/applet/Coordinates.pde | 41 + .../Structure/Coordinates/applet/loading.gif | Bin 0 -> 2232 bytes .../CreateGraphics/CreateGraphics.pde | 33 + .../CreateGraphics/applet/CreateGraphics.java | 53 + .../CreateGraphics/applet/CreateGraphics.pde | 33 + .../CreateGraphics/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Structure/Functions/Functions.pde | 33 + .../Structure/Functions/applet/Functions.java | 53 + .../Structure/Functions/applet/Functions.pde | 33 + .../Structure/Functions/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Structure/Loop/Loop.pde | 40 + .../Basics/Structure/Loop/applet/Loop.java | 60 + .../Basics/Structure/Loop/applet/Loop.pde | 40 + .../Basics/Structure/Loop/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Structure/NoLoop/NoLoop.pde | 33 + .../Structure/NoLoop/applet/NoLoop.java | 53 + .../Basics/Structure/NoLoop/applet/NoLoop.pde | 33 + .../Structure/NoLoop/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Structure/Recursion/Recursion.pde | 32 + .../Structure/Recursion/applet/Recursion.java | 52 + .../Structure/Recursion/applet/Recursion.pde | 32 + .../Structure/Recursion/applet/loading.gif | Bin 0 -> 2232 bytes .../Structure/Recursion2/Recursion2.pde | 32 + .../Recursion2/applet/Recursion2.java | 52 + .../Recursion2/applet/Recursion2.pde | 32 + .../Structure/Recursion2/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Structure/Redraw/Redraw.pde | 37 + .../Structure/Redraw/applet/Redraw.java | 57 + .../Basics/Structure/Redraw/applet/Redraw.pde | 37 + .../Structure/Redraw/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Structure/SetupDraw/SetupDraw.pde | 30 + .../Structure/SetupDraw/applet/SetupDraw.java | 50 + .../Structure/SetupDraw/applet/SetupDraw.pde | 30 + .../Structure/SetupDraw/applet/loading.gif | Bin 0 -> 2232 bytes .../StatementsComments/StatementsComments.pde | 20 + .../applet/StatementsComments.java | 41 + .../applet/StatementsComments.pde | 20 + .../StatementsComments/applet/loading.gif | Bin 0 -> 2232 bytes .../Structure/WidthHeight/WidthHeight.pde | 16 + .../WidthHeight/applet/WidthHeight.java | 37 + .../WidthHeight/applet/WidthHeight.pde | 16 + .../Structure/WidthHeight/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Basics/Transform/Arm/Arm.pde | 39 + .../Basics/Transform/Arm/applet/Arm.java | 59 + .../Basics/Transform/Arm/applet/Arm.pde | 39 + .../Basics/Transform/Arm/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Transform/Rotate/Rotate.pde | 36 + .../Transform/Rotate/applet/Rotate.java | 58 + .../Basics/Transform/Rotate/applet/Rotate.pde | 38 + .../Transform/Rotate/applet/loading.gif | Bin 0 -> 2232 bytes .../examples/Basics/Transform/Scale/Scale.pde | 38 + .../Basics/Transform/Scale/applet/Scale.java | 58 + .../Basics/Transform/Scale/applet/Scale.pde | 38 + .../Basics/Transform/Scale/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Transform/Translate/Translate.pde | 41 + .../Transform/Translate/applet/Translate.java | 61 + .../Transform/Translate/applet/Translate.pde | 41 + .../Transform/Translate/applet/loading.gif | Bin 0 -> 2232 bytes .../TriangleFlower/TriangleFlower.pde | 47 + .../TriangleFlower/applet/TriangleFlower.java | 63 + .../TriangleFlower/applet/TriangleFlower.pde | 43 + .../TriangleFlower/applet/loading.gif | Bin 0 -> 2232 bytes .../Basics/Typography/Letters/Letters.pde | 72 + .../Typography/Letters/applet/Letters.java | 86 + .../Typography/Letters/applet/Letters.pde | 66 + .../Typography/Letters/applet/loading.gif | Bin 0 -> 2232 bytes .../Typography/Letters/data/CourierNew36.vlw | Bin 0 -> 114920 bytes .../Basics/Typography/Words/Words.pde | 39 + .../Basics/Typography/Words/applet/Words.java | 62 + .../Basics/Typography/Words/applet/Words.pde | 42 + .../Typography/Words/applet/loading.gif | Bin 0 -> 2232 bytes .../Words/data/Ziggurat-HTF-Black-32.vlw | Bin 0 -> 118799 bytes .../Web/EmbeddedLinks/EmbeddedLinks.pde | 67 + .../EmbeddedLinks/applet/EmbeddedLinks.java | 93 + .../EmbeddedLinks/applet/EmbeddedLinks.pde | 73 + .../Web/EmbeddedLinks/applet/loading.gif | Bin 0 -> 2232 bytes .../Web/LoadingImages/LoadingImages.pde | 16 + .../LoadingImages/applet/LoadingImages.java | 37 + .../LoadingImages/applet/LoadingImages.pde | 16 + .../Web/LoadingImages/applet/loading.gif | Bin 0 -> 2232 bytes .../Chapter02/Ex_02_01/Ex_02_01.pde | 4 + .../Chapter02/Ex_02_02/Ex_02_02.pde | 17 + .../Chapter03/Ex_03_01/Ex_03_01.pde | 4 + .../Chapter03/Ex_03_02/Ex_03_02.pde | 5 + .../Chapter03/Ex_03_03/Ex_03_03.pde | 5 + .../Chapter03/Ex_03_04/Ex_03_04.pde | 7 + .../Chapter03/Ex_03_05/Ex_03_05.pde | 5 + .../Chapter03/Ex_03_06/Ex_03_06.pde | 7 + .../Chapter03/Ex_03_07/Ex_03_07.pde | 8 + .../Chapter03/Ex_03_08/Ex_03_08.pde | 8 + .../Chapter03/Ex_03_09/Ex_03_09.pde | 8 + .../Chapter03/Ex_03_10/Ex_03_10.pde | 8 + .../Chapter03/Ex_03_11/Ex_03_11.pde | 8 + .../Chapter03/Ex_03_12/Ex_03_12.pde | 11 + .../Chapter03/Ex_03_13/Ex_03_13.pde | 14 + .../Chapter03/Ex_03_14/Ex_03_14.pde | 12 + .../Chapter03/Ex_03_15/Ex_03_15.pde | 11 + .../Chapter03/Ex_03_16/Ex_03_16.pde | 13 + .../Chapter03/Ex_03_17/Ex_03_17.pde | 13 + .../Chapter03/Ex_03_18/Ex_03_18.pde | 13 + .../Chapter03/Ex_03_19/Ex_03_19.pde | 13 + .../Chapter03/Ex_03_20/Ex_03_20.pde | 38 + .../Chapter04/Ex_04_01/Ex_04_01.pde | 10 + .../Chapter04/Ex_04_02/Ex_04_02.pde | 10 + .../Chapter04/Ex_04_03/Ex_04_03.pde | 8 + .../Chapter04/Ex_04_04/Ex_04_04.pde | 12 + .../Chapter04/Ex_04_05/Ex_04_05.pde | 13 + .../Chapter04/Ex_04_06/Ex_04_06.pde | 10 + .../Chapter04/Ex_04_07/Ex_04_07.pde | 10 + .../Chapter04/Ex_04_08/Ex_04_08.pde | 10 + .../Chapter04/Ex_04_09/Ex_04_09.pde | 11 + .../Chapter04/Ex_04_10/Ex_04_10.pde | 14 + .../Chapter04/Ex_04_11/Ex_04_11.pde | 16 + .../Chapter04/Ex_04_12/Ex_04_12.pde | 16 + .../Chapter04/Ex_04_13/Ex_04_13.pde | 12 + .../Chapter05/Ex_05_01/Ex_05_01.pde | 9 + .../Chapter05/Ex_05_02/Ex_05_02.pde | 11 + .../Chapter05/Ex_05_03/Ex_05_03.pde | 18 + .../Chapter05/Ex_05_04/Ex_05_04.pde | 15 + .../Chapter05/Ex_05_05/Ex_05_05.pde | 15 + .../Chapter05/Ex_05_06/Ex_05_06.pde | 14 + .../Chapter05/Ex_05_07/Ex_05_07.pde | 15 + .../Chapter05/Ex_05_08/Ex_05_08.pde | 18 + .../Chapter05/Ex_05_09/Ex_05_09.pde | 27 + .../Chapter05/Ex_05_10/Ex_05_10.pde | 18 + .../Chapter05/Ex_05_11/Ex_05_11.pde | 18 + .../Chapter05/Ex_05_12/Ex_05_12.pde | 19 + .../Chapter05/Ex_05_13/Ex_05_13.pde | 21 + .../Chapter05/Ex_05_14/Ex_05_14.pde | 23 + .../Chapter05/Ex_05_15/Ex_05_15.pde | 28 + .../Chapter05/Ex_05_16/Ex_05_16.pde | 25 + .../Chapter05/Ex_05_17/Ex_05_17.pde | 24 + .../Chapter05/Ex_05_18/Ex_05_18.pde | 16 + .../Chapter05/Ex_05_19/Ex_05_19.pde | 14 + .../Chapter05/Ex_05_20/Ex_05_20.pde | 22 + .../Chapter05/Ex_05_21/Ex_05_21.pde | 21 + .../Chapter06/Ex_06_01/Ex_06_01.pde | 14 + .../Chapter06/Ex_06_02/Ex_06_02.pde | 18 + .../Chapter06/Ex_06_03/Ex_06_03.pde | 15 + .../Chapter06/Ex_06_04/Ex_06_04.pde | 16 + .../Chapter06/Ex_06_04/data/clouds.gif | Bin 0 -> 138979 bytes .../Chapter06/Ex_06_05/Ex_06_05.pde | 16 + .../Chapter06/Ex_06_06/Ex_06_06.pde | 20 + .../Chapter06/Ex_06_06/data/AndaleMono-36.vlw | Bin 0 -> 128059 bytes .../Chapter06/Ex_06_07/Ex_06_07.pde | 18 + .../Chapter06/Ex_06_07/data/AndaleMono-24.vlw | Bin 0 -> 66629 bytes .../Chapter06/Ex_06_08/Ex_06_08.pde | 17 + .../Chapter06/Ex_06_08/data/AndaleMono-24.vlw | Bin 0 -> 66629 bytes .../Chapter06/Ex_06_09/Ex_06_09.pde | 17 + .../Chapter06/Ex_06_09/data/network.svg | 4056 ++++ .../Chapter06/Ex_06_10/Ex_06_10.pde | 18 + .../Chapter06/Ex_06_10/data/network.svg | 4056 ++++ .../Chapter07/Ex_07_01/Ex_07_01.pde | 7 + .../Chapter07/Ex_07_02/Ex_07_02.pde | 15 + .../Chapter07/Ex_07_03/Ex_07_03.pde | 19 + .../Chapter07/Ex_07_04/Ex_07_04.pde | 22 + .../Chapter07/Ex_07_05/Ex_07_05.pde | 27 + .../Chapter07/Ex_07_06/Ex_07_06.pde | 27 + .../Chapter07/Ex_07_07/Ex_07_07.pde | 8 + .../Chapter07/Ex_07_08/Ex_07_08.pde | 18 + .../Chapter07/Ex_07_09/Ex_07_09.pde | 21 + .../Chapter07/Ex_07_10/Ex_07_10.pde | 8 + .../Chapter07/Ex_07_11/Ex_07_11.pde | 23 + .../Chapter07/Ex_07_12/Ex_07_12.pde | 13 + .../Chapter07/Ex_07_13/Ex_07_13.pde | 24 + .../Chapter07/Ex_07_14/Ex_07_14.pde | 20 + .../Chapter07/Ex_07_15/Ex_07_15.pde | 22 + .../Chapter07/Ex_07_16/Ex_07_16.pde | 12 + .../Chapter07/Ex_07_17/Ex_07_17.pde | 14 + .../Chapter07/Ex_07_18/Ex_07_18.pde | 16 + .../Chapter07/Ex_07_19/Ex_07_19.pde | 17 + .../Chapter07/Ex_07_20/Ex_07_20.pde | 17 + .../Chapter07/Ex_07_21/Ex_07_21.pde | 17 + .../Chapter07/Ex_07_22/Ex_07_22.pde | 19 + .../Chapter07/Ex_07_23/Ex_07_23.pde | 33 + .../Chapter08/Ex_08_01/Ex_08_01.pde | 16 + .../Chapter08/Ex_08_02/Ex_08_02.pde | 14 + .../Chapter08/Ex_08_03/Ex_08_03.pde | 25 + .../Chapter08/Ex_08_04/Ex_08_04.pde | 42 + .../Chapter08/Ex_08_05/Ex_08_05.pde | 32 + .../Chapter08/Ex_08_06/Ex_08_06.pde | 33 + .../Chapter08/Ex_08_07/Ex_08_07.pde | 37 + .../Chapter08/Ex_08_08/Ex_08_08.pde | 14 + .../Chapter09/Ex_09_01/Ex_09_01.pde | 40 + .../Chapter09/Ex_09_02/Ex_09_02.pde | 45 + .../Chapter10/Ex_10_01/Ex_10_01.pde | 20 + .../Chapter10/Ex_10_02/Ex_10_02.pde | 29 + .../Chapter10/Ex_10_03/Ex_10_03.pde | 24 + .../Chapter10/Ex_10_04/Ex_10_04.pde | 12 + .../Chapter10/Ex_10_05/Ex_10_05.pde | 11 + .../Chapter10/Ex_10_06/Ex_10_06.pde | 9 + .../Chapter10/Ex_10_07/Ex_10_07.pde | 19 + .../Chapter10/Ex_10_08/Ex_10_08.pde | 20 + .../Chapter10/Ex_10_09/Ex_10_09.pde | 28 + .../Chapter10/Ex_10_10/Ex_10_10.pde | 47 + .../Chapter10/Ex_10_11/Ex_10_11.pde | 24 + .../Chapter11/Ex_11_01/Ex_11_01.pde | 29 + .../Chapter11/Ex_11_02/Ex_11_02.pde | 36 + .../Chapter11/Ex_11_03/Ex_11_03.pde | 29 + .../Chapter11/Ex_11_04/Ex_11_04.pde | 27 + .../Chapter11/Ex_11_05/Ex_11_05.pde | 25 + .../Chapter11/Ex_11_06/Ex_11_06.pde | 17 + .../Chapter11/Ex_11_07/Ex_11_07.pde | 30 + .../Chapter11/Ex_11_08/Ex_11_08.pde | 44 + .../Chapter11/Ex_11_09/Ex_11_09.pde | 41 + .../Robots/Robot1_Draw/Robot1_Draw.pde | 41 + .../Robot2_Variables/Robot2_Variables.pde | 54 + .../Robot3_Response/Robot3_Response.pde | 59 + .../Robots/Robot4_Media/Robot4_Media.pde | 43 + .../Robots/Robot4_Media/data/robot1.svg | 1033 + .../Robots/Robot4_Media/data/robot2.svg | 92 + .../Robots/Robot4_Media/data/robot3.svg | 78 + .../Robots/Robot5_Motion/Robot5_Motion.pde | 57 + .../Robot6_Functions/Robot6_Functions.pde | 63 + .../Robots/Robot7_Objects/Robot7_Objects.pde | 53 + .../Robots/Robot7_Objects/data/robot1.svg | 1033 + .../Robots/Robot7_Objects/data/robot2.svg | 92 + .../Robots/Robot8_Arrays/Robot8_Arrays.pde | 58 + .../Robots/Robot8_Arrays/data/robot1.svg | 1033 + .../media/AndaleMono-24.vlw | Bin 0 -> 66629 bytes .../media/AndaleMono-36.vlw | Bin 0 -> 128059 bytes .../GettingStartedBook/media/clouds.gif | Bin 0 -> 138979 bytes .../GettingStartedBook/media/network.svg | 4056 ++++ .../GettingStartedBook/media/robot1.svg | 1033 + .../GettingStartedBook/media/robot2.svg | 1033 + .../DXF Export/SimpleExport/SimpleExport.pde | 48 + .../Minim (Sound)/AddListener/AddListener.pde | 42 + .../Minim (Sound)/AddListener/Waveform.pde | 76 + .../Minim (Sound)/AddListener/data/groove.mp3 | Bin 0 -> 433788 bytes .../BandPassFilter/BandPassFilter.pde | 71 + .../BandPassFilter/data/groove.mp3 | Bin 0 -> 433788 bytes .../Minim (Sound)/ForwardFFT/ForwardFFT.pde | 75 + .../Minim (Sound)/ForwardFFT/data/jingle.mp3 | Bin 0 -> 154366 bytes .../FrequencyEnergy/BeatListener.pde | 22 + .../FrequencyEnergy/FrequencyEnergy.pde | 82 + .../data/marcus_kellis_theme.mp3 | Bin 0 -> 3050972 bytes .../Minim (Sound)/GetLineIn/GetLineIn.pde | 70 + .../Minim (Sound)/GetLineOut/GetLineOut.pde | 72 + .../Minim (Sound)/GetMetaData/GetMetaData.pde | 66 + .../Minim (Sound)/GetMetaData/data/groove.mp3 | Bin 0 -> 434176 bytes .../Minim (Sound)/GetMetaData/data/serif.vlw | Bin 0 -> 22500 bytes .../Minim (Sound)/GetSetPan/GetSetPan.pde | 77 + .../Minim (Sound)/GetSetPan/Waveform.pde | 76 + .../LinearAverages/LinearAverages.pde | 58 + .../LinearAverages/data/jingle.mp3 | Bin 0 -> 154366 bytes .../Minim (Sound)/LoadFile/LoadFile.pde | 67 + .../Minim (Sound)/LoadFile/data/groove.mp3 | Bin 0 -> 433788 bytes .../Minim (Sound)/LoadSample/LoadSample.pde | 77 + .../Minim (Sound)/LoadSample/data/BD.mp3 | Bin 0 -> 6047 bytes .../Minim (Sound)/LoadSnippet/LoadSnippet.pde | 68 + .../Minim (Sound)/LoadSnippet/data/groove.mp3 | Bin 0 -> 433788 bytes .../RecordLineIn/RecordLineIn.pde | 101 + .../SineWaveSignal/SineWaveSignal.pde | 80 + .../UserDefinedEffect/ReverseEffect.pde | 23 + .../UserDefinedEffect/UserDefinedEffect.pde | 50 + .../UserDefinedEffect/data/groove.mp3 | Bin 0 -> 433788 bytes .../UserDefinedSignal/MouseSaw.pde | 24 + .../UserDefinedSignal/UserDefinedSignal.pde | 48 + .../CarnivoreClient/CarnivoreClient.pde | 85 + .../CarnivoreClient/data/CourierNew-12.vlw | Bin 0 -> 20170 bytes .../Library/Network/ChatServer/ChatServer.pde | 52 + .../ChatServer/data/ScalaSans-Caps-32.vlw | Bin 0 -> 59597 bytes .../Library/Network/HTTPClient/HTTPClient.pde | 29 + .../SharedCanvasClient/SharedCanvasClient.pde | 46 + .../SharedCanvasServer/SharedCanvasServer.pde | 50 + .../Network/YahooSearch/YahooSearch.pde | 50 + .../examples/Library/OpenGL/Esfera/Esfera.pde | 87 + .../OpenGL/ExtrusionGL/ExtrusionGL.pde | 52 + .../Library/OpenGL/Geometry/Geometry.pde | 165 + .../Library/OpenGL/LightsGL/LightsGL.pde | 48 + .../Library/OpenGL/SpaceJunk/Cube.pde | 67 + .../Library/OpenGL/SpaceJunk/SpaceJunk.pde | 65 + .../OpenGL/TexturedSphere/TexturedSphere.pde | 174 + .../Library/OpenGL/Yellowtail/Gesture.pde | 256 + .../Library/OpenGL/Yellowtail/Vec3f.pde | 19 + .../Library/OpenGL/Yellowtail/Yellowtail.pde | 190 + .../PDF Export/Complex3D/Complex3D.pde | 194 + .../PDF Export/LargePage/LargePage.pde | 30 + .../Library/PDF Export/ManyPDFs/ManyPDFs.pde | 38 + .../PDF Export/ManyPages/ManyPages.pde | 31 + .../PDF Export/MousePress/MousePress.pde | 37 + .../MultipleFrames/MultipleFrames.pde | 33 + .../Library/PDF Export/OneFrame/OneFrame.pde | 23 + .../PDF Export/RandomBook/RandomBook.pde | 45 + .../SerialCallResponse/SerialCallResponse.pde | 150 + .../Serial/SerialDuplex/SerialDuplex.pde | 50 + .../SerialDuplex/data/CourierNewPSMT-24.vlw | Bin 0 -> 48653 bytes .../Serial/SerialMultiple/SerialMultiple.pde | 86 + .../Library/Serial/SimpleRead/SimpleRead.pde | 64 + .../Serial/SimpleWrite/SimpleWrite.pde | 67 + .../Video (Capture)/AsciiVideo/AsciiVideo.pde | 134 + .../AsciiVideo/data/UniversLTStd-Light-48.vlw | Bin 0 -> 168251 bytes .../BackgroundSubtraction.pde | 69 + .../BrightnessThresholding.pde | 57 + .../BrightnessTracking/BrightnessTracking.pde | 52 + .../ColorSorting/ColorSorting.pde | 145 + .../Video (Capture)/ColorSorting/Tuple.pde | 29 + .../FrameDifferencing/FrameDifferencing.pde | 64 + .../Video (Capture)/Framingham/Framingham.pde | 58 + .../GettingStartedCapture.pde | 38 + .../Video (Capture)/HsvSpace/HsvSpace.pde | 206 + .../Video (Capture)/HsvSpace/Tuple.pde | 33 + .../Video (Capture)/LivePocky/LivePocky.pde | 53 + .../Library/Video (Capture)/Mirror/Mirror.pde | 72 + .../Video (Capture)/Mirror2/Mirror2.pde | 59 + .../RadialPocky/RadialPocky.pde | 74 + .../Video (Capture)/SlitScan/SlitScan.pde | 54 + .../Library/Video (Movie)/Loop/Loop.pde | 27 + .../Video (Movie)/Pixelate/Pixelate.pde | 48 + .../DrawingMovie/DrawingMovie.pde | 48 + .../ArrayListClass/ArrayListClass.pde | 52 + .../Advanced Data/ArrayListClass/Ball.pde | 50 + .../ArrayListClass/applet/ArrayListClass.java | 122 + .../ArrayListClass/applet/ArrayListClass.pde | 52 + .../ArrayListClass/applet/Ball.pde | 50 + .../ArrayListClass/applet/loading.gif | Bin 0 -> 2232 bytes .../DirectoryList/DirectoryList.pde | 105 + .../HashMapClass/HashMapClass.pde | 89 + .../Advanced Data/HashMapClass/Word.pde | 15 + .../HashMapClass/applet/HashMapClass.java | 126 + .../HashMapClass/applet/HashMapClass.pde | 91 + .../HashMapClass/applet/Word.pde | 15 + .../HashMapClass/applet/loading.gif | Bin 0 -> 2232 bytes .../HashMapClass/data/dracula.txt | 16624 ++++++++++++++++ .../HashMapClass/data/hamlet.txt | 6771 +++++++ .../AnimatedSprite/AnimatedSprite.pde | 39 + .../Animation/AnimatedSprite/Animation.pde | 27 + .../AnimatedSprite/applet/AnimatedSprite.java | 86 + .../AnimatedSprite/applet/AnimatedSprite.pde | 39 + .../AnimatedSprite/applet/Animation.pde | 27 + .../AnimatedSprite/applet/loading.gif | Bin 0 -> 2232 bytes .../AnimatedSprite/data/PT_Shifty_0000.gif | Bin 0 -> 314 bytes .../AnimatedSprite/data/PT_Shifty_0001.gif | Bin 0 -> 314 bytes .../AnimatedSprite/data/PT_Shifty_0002.gif | Bin 0 -> 318 bytes .../AnimatedSprite/data/PT_Shifty_0003.gif | Bin 0 -> 328 bytes .../AnimatedSprite/data/PT_Shifty_0004.gif | Bin 0 -> 343 bytes .../AnimatedSprite/data/PT_Shifty_0005.gif | Bin 0 -> 379 bytes .../AnimatedSprite/data/PT_Shifty_0006.gif | Bin 0 -> 420 bytes .../AnimatedSprite/data/PT_Shifty_0007.gif | Bin 0 -> 501 bytes .../AnimatedSprite/data/PT_Shifty_0008.gif | Bin 0 -> 615 bytes .../AnimatedSprite/data/PT_Shifty_0009.gif | Bin 0 -> 733 bytes .../AnimatedSprite/data/PT_Shifty_0010.gif | Bin 0 -> 806 bytes .../AnimatedSprite/data/PT_Shifty_0011.gif | Bin 0 -> 842 bytes .../AnimatedSprite/data/PT_Shifty_0012.gif | Bin 0 -> 877 bytes .../AnimatedSprite/data/PT_Shifty_0013.gif | Bin 0 -> 877 bytes .../AnimatedSprite/data/PT_Shifty_0014.gif | Bin 0 -> 951 bytes .../AnimatedSprite/data/PT_Shifty_0015.gif | Bin 0 -> 934 bytes .../AnimatedSprite/data/PT_Shifty_0016.gif | Bin 0 -> 917 bytes .../AnimatedSprite/data/PT_Shifty_0017.gif | Bin 0 -> 907 bytes .../AnimatedSprite/data/PT_Shifty_0018.gif | Bin 0 -> 907 bytes .../AnimatedSprite/data/PT_Shifty_0019.gif | Bin 0 -> 892 bytes .../AnimatedSprite/data/PT_Shifty_0020.gif | Bin 0 -> 854 bytes .../AnimatedSprite/data/PT_Shifty_0021.gif | Bin 0 -> 841 bytes .../AnimatedSprite/data/PT_Shifty_0022.gif | Bin 0 -> 886 bytes .../AnimatedSprite/data/PT_Shifty_0023.gif | Bin 0 -> 805 bytes .../AnimatedSprite/data/PT_Shifty_0024.gif | Bin 0 -> 733 bytes .../AnimatedSprite/data/PT_Shifty_0025.gif | Bin 0 -> 667 bytes .../AnimatedSprite/data/PT_Shifty_0026.gif | Bin 0 -> 596 bytes .../AnimatedSprite/data/PT_Shifty_0027.gif | Bin 0 -> 539 bytes .../AnimatedSprite/data/PT_Shifty_0028.gif | Bin 0 -> 503 bytes .../AnimatedSprite/data/PT_Shifty_0029.gif | Bin 0 -> 451 bytes .../AnimatedSprite/data/PT_Shifty_0030.gif | Bin 0 -> 392 bytes .../AnimatedSprite/data/PT_Shifty_0031.gif | Bin 0 -> 351 bytes .../AnimatedSprite/data/PT_Shifty_0032.gif | Bin 0 -> 333 bytes .../AnimatedSprite/data/PT_Shifty_0033.gif | Bin 0 -> 323 bytes .../AnimatedSprite/data/PT_Shifty_0034.gif | Bin 0 -> 316 bytes .../AnimatedSprite/data/PT_Shifty_0035.gif | Bin 0 -> 316 bytes .../AnimatedSprite/data/PT_Shifty_0036.gif | Bin 0 -> 315 bytes .../AnimatedSprite/data/PT_Shifty_0037.gif | Bin 0 -> 312 bytes .../AnimatedSprite/data/PT_Teddy_0000.gif | Bin 0 -> 305 bytes .../AnimatedSprite/data/PT_Teddy_0001.gif | Bin 0 -> 309 bytes .../AnimatedSprite/data/PT_Teddy_0002.gif | Bin 0 -> 310 bytes .../AnimatedSprite/data/PT_Teddy_0003.gif | Bin 0 -> 310 bytes .../AnimatedSprite/data/PT_Teddy_0004.gif | Bin 0 -> 315 bytes .../AnimatedSprite/data/PT_Teddy_0005.gif | Bin 0 -> 329 bytes .../AnimatedSprite/data/PT_Teddy_0006.gif | Bin 0 -> 339 bytes .../AnimatedSprite/data/PT_Teddy_0007.gif | Bin 0 -> 354 bytes .../AnimatedSprite/data/PT_Teddy_0008.gif | Bin 0 -> 390 bytes .../AnimatedSprite/data/PT_Teddy_0009.gif | Bin 0 -> 415 bytes .../AnimatedSprite/data/PT_Teddy_0010.gif | Bin 0 -> 451 bytes .../AnimatedSprite/data/PT_Teddy_0011.gif | Bin 0 -> 482 bytes .../AnimatedSprite/data/PT_Teddy_0012.gif | Bin 0 -> 546 bytes .../AnimatedSprite/data/PT_Teddy_0013.gif | Bin 0 -> 566 bytes .../AnimatedSprite/data/PT_Teddy_0014.gif | Bin 0 -> 607 bytes .../AnimatedSprite/data/PT_Teddy_0015.gif | Bin 0 -> 692 bytes .../AnimatedSprite/data/PT_Teddy_0016.gif | Bin 0 -> 778 bytes .../AnimatedSprite/data/PT_Teddy_0017.gif | Bin 0 -> 853 bytes .../AnimatedSprite/data/PT_Teddy_0018.gif | Bin 0 -> 914 bytes .../AnimatedSprite/data/PT_Teddy_0019.gif | Bin 0 -> 936 bytes .../AnimatedSprite/data/PT_Teddy_0020.gif | Bin 0 -> 968 bytes .../AnimatedSprite/data/PT_Teddy_0021.gif | Bin 0 -> 971 bytes .../AnimatedSprite/data/PT_Teddy_0022.gif | Bin 0 -> 987 bytes .../AnimatedSprite/data/PT_Teddy_0023.gif | Bin 0 -> 1013 bytes .../AnimatedSprite/data/PT_Teddy_0024.gif | Bin 0 -> 1014 bytes .../AnimatedSprite/data/PT_Teddy_0025.gif | Bin 0 -> 1002 bytes .../AnimatedSprite/data/PT_Teddy_0026.gif | Bin 0 -> 976 bytes .../AnimatedSprite/data/PT_Teddy_0027.gif | Bin 0 -> 984 bytes .../AnimatedSprite/data/PT_Teddy_0028.gif | Bin 0 -> 936 bytes .../AnimatedSprite/data/PT_Teddy_0029.gif | Bin 0 -> 891 bytes .../AnimatedSprite/data/PT_Teddy_0030.gif | Bin 0 -> 826 bytes .../AnimatedSprite/data/PT_Teddy_0031.gif | Bin 0 -> 717 bytes .../AnimatedSprite/data/PT_Teddy_0032.gif | Bin 0 -> 625 bytes .../AnimatedSprite/data/PT_Teddy_0033.gif | Bin 0 -> 543 bytes .../AnimatedSprite/data/PT_Teddy_0034.gif | Bin 0 -> 486 bytes .../AnimatedSprite/data/PT_Teddy_0035.gif | Bin 0 -> 468 bytes .../AnimatedSprite/data/PT_Teddy_0036.gif | Bin 0 -> 453 bytes .../AnimatedSprite/data/PT_Teddy_0037.gif | Bin 0 -> 440 bytes .../AnimatedSprite/data/PT_Teddy_0038.gif | Bin 0 -> 428 bytes .../AnimatedSprite/data/PT_Teddy_0039.gif | Bin 0 -> 410 bytes .../AnimatedSprite/data/PT_Teddy_0040.gif | Bin 0 -> 387 bytes .../AnimatedSprite/data/PT_Teddy_0041.gif | Bin 0 -> 351 bytes .../AnimatedSprite/data/PT_Teddy_0042.gif | Bin 0 -> 329 bytes .../AnimatedSprite/data/PT_Teddy_0043.gif | Bin 0 -> 322 bytes .../AnimatedSprite/data/PT_Teddy_0044.gif | Bin 0 -> 318 bytes .../AnimatedSprite/data/PT_Teddy_0045.gif | Bin 0 -> 315 bytes .../AnimatedSprite/data/PT_Teddy_0046.gif | Bin 0 -> 310 bytes .../AnimatedSprite/data/PT_Teddy_0047.gif | Bin 0 -> 311 bytes .../AnimatedSprite/data/PT_Teddy_0048.gif | Bin 0 -> 311 bytes .../AnimatedSprite/data/PT_Teddy_0049.gif | Bin 0 -> 312 bytes .../AnimatedSprite/data/PT_Teddy_0050.gif | Bin 0 -> 312 bytes .../AnimatedSprite/data/PT_Teddy_0051.gif | Bin 0 -> 311 bytes .../AnimatedSprite/data/PT_Teddy_0052.gif | Bin 0 -> 308 bytes .../AnimatedSprite/data/PT_Teddy_0053.gif | Bin 0 -> 306 bytes .../AnimatedSprite/data/PT_Teddy_0054.gif | Bin 0 -> 303 bytes .../AnimatedSprite/data/PT_Teddy_0055.gif | Bin 0 -> 303 bytes .../AnimatedSprite/data/PT_Teddy_0056.gif | Bin 0 -> 306 bytes .../AnimatedSprite/data/PT_Teddy_0057.gif | Bin 0 -> 308 bytes .../AnimatedSprite/data/PT_Teddy_0058.gif | Bin 0 -> 306 bytes .../AnimatedSprite/data/PT_Teddy_0059.gif | Bin 0 -> 306 bytes .../Animation/Sequential/Sequential.pde | 46 + .../Sequential/applet/Sequential.java | 66 + .../Sequential/applet/Sequential.pde | 46 + .../Animation/Sequential/applet/loading.gif | Bin 0 -> 2232 bytes .../Animation/Sequential/data/PT_anim0000.gif | Bin 0 -> 3840 bytes .../Animation/Sequential/data/PT_anim0001.gif | Bin 0 -> 3819 bytes .../Animation/Sequential/data/PT_anim0002.gif | Bin 0 -> 3910 bytes .../Animation/Sequential/data/PT_anim0003.gif | Bin 0 -> 3750 bytes .../Animation/Sequential/data/PT_anim0004.gif | Bin 0 -> 3681 bytes .../Animation/Sequential/data/PT_anim0005.gif | Bin 0 -> 3657 bytes .../Animation/Sequential/data/PT_anim0006.gif | Bin 0 -> 3437 bytes .../Animation/Sequential/data/PT_anim0007.gif | Bin 0 -> 3547 bytes .../Animation/Sequential/data/PT_anim0008.gif | Bin 0 -> 3631 bytes .../Animation/Sequential/data/PT_anim0009.gif | Bin 0 -> 3651 bytes .../Animation/Sequential/data/PT_anim0010.gif | Bin 0 -> 3695 bytes .../Animation/Sequential/data/PT_anim0011.gif | Bin 0 -> 3827 bytes .../Cellular Automata/Conway/Conway.pde | 80 + .../Conway/applet/Conway.java | 101 + .../Conway/applet/Conway.pde | 81 + .../Conway/applet/loading.gif | Bin 0 -> 2232 bytes .../Cellular Automata/Spore1/Spore1.pde | 133 + .../Spore1/applet/Spore1.java | 153 + .../Spore1/applet/Spore1.pde | 133 + .../Spore1/applet/loading.gif | Bin 0 -> 2232 bytes .../Cellular Automata/Spore2/Spore2.pde | 174 + .../Spore2/applet/Spore2.java | 196 + .../Spore2/applet/Spore2.pde | 176 + .../Spore2/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Cellular Automata/Wolfram/CA.pde | 94 + .../Cellular Automata/Wolfram/Wolfram.pde | 38 + .../Cellular Automata/Wolfram/applet/CA.pde | 94 + .../Wolfram/applet/Wolfram.java | 152 + .../Wolfram/applet/Wolfram.pde | 38 + .../Wolfram/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Drawing/Animator/Animator.pde | 49 + .../Drawing/Animator/applet/Animator.java | 69 + .../Drawing/Animator/applet/Animator.pde | 49 + .../Drawing/Animator/applet/loading.gif | Bin 0 -> 2232 bytes .../ContinuousLines/ContinuousLines.pde | 17 + .../applet/ContinuousLines.java | 37 + .../applet/ContinuousLines.pde | 17 + .../ContinuousLines/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Drawing/CustomTool/CustomTool.pde | 84 + .../Drawing/CustomTool/applet/CustomTool.java | 104 + .../Drawing/CustomTool/applet/CustomTool.pde | 84 + .../Drawing/CustomTool/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Drawing/Pattern/Pattern.pde | 34 + .../Drawing/Pattern/applet/Pattern.java | 54 + .../Topics/Drawing/Pattern/applet/Pattern.pde | 34 + .../Topics/Drawing/Pattern/applet/loading.gif | Bin 0 -> 2232 bytes .../examples/Topics/Drawing/Pulses/Pulses.pde | 33 + .../Topics/Drawing/Pulses/applet/Pulses.java | 53 + .../Topics/Drawing/Pulses/applet/Pulses.pde | 33 + .../Topics/Drawing/Pulses/applet/loading.gif | Bin 0 -> 2232 bytes .../ScribblePlotter/ScribblePlotter.pde | 91 + .../applet/ScribblePlotter.java | 111 + .../applet/ScribblePlotter.pde | 91 + .../ScribblePlotter/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Effects/FireCube/FireCube.pde | 112 + .../Effects/FireCube/applet/FireCube.java | 132 + .../Effects/FireCube/applet/FireCube.pde | 112 + .../Effects/FireCube/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/Effects/Lens/Lens.pde | 105 + .../Topics/Effects/Lens/applet/Lens.java | 125 + .../Topics/Effects/Lens/applet/Lens.pde | 105 + .../Topics/Effects/Lens/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Effects/Metaball/Metaball.pde | 76 + .../Effects/Metaball/applet/Metaball.java | 96 + .../Effects/Metaball/applet/Metaball.pde | 76 + .../Effects/Metaball/applet/loading.gif | Bin 0 -> 2232 bytes .../examples/Topics/Effects/Plasma/Plasma.pde | 60 + .../Topics/Effects/Plasma/applet/Plasma.java | 80 + .../Topics/Effects/Plasma/applet/Plasma.pde | 60 + .../Topics/Effects/Plasma/applet/loading.gif | Bin 0 -> 2232 bytes .../examples/Topics/Effects/Tunnel/Tunnel.pde | 114 + .../Topics/Effects/Tunnel/applet/Tunnel.java | 133 + .../Topics/Effects/Tunnel/applet/Tunnel.pde | 113 + .../Topics/Effects/Tunnel/applet/loading.gif | Bin 0 -> 2232 bytes .../UnlimitedSprites/UnlimitedSprites.pde | 60 + .../applet/UnlimitedSprites.java | 80 + .../applet/UnlimitedSprites.pde | 60 + .../UnlimitedSprites/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Effects/Wormhole/Wormhole.pde | 70 + .../Effects/Wormhole/applet/Wormhole.java | 90 + .../Effects/Wormhole/applet/Wormhole.pde | 70 + .../Effects/Wormhole/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Effects/Wormhole/data/texture.gif | Bin 0 -> 95 bytes .../Topics/File IO/LoadFile1/LoadFile1.pde | 30 + .../File IO/LoadFile1/data/positions.txt | 206 + .../Topics/File IO/LoadFile2/LoadFile2.pde | 72 + .../LoadFile2/data/TheSans-Plain-12.vlw | Bin 0 -> 18476 bytes .../Topics/File IO/LoadFile2/data/cars2.tsv | 1 + .../Topics/File IO/SaveFile1/SaveFile1.pde | 49 + .../Topics/File IO/SaveFile2/SaveFile2.pde | 34 + .../File IO/SaveManyImages/SaveManyImages.pde | 28 + .../File IO/SaveOneImage/SaveOneImage.pde | 25 + .../Topics/File IO/TileImages/TileImages.pde | 39 + .../Fractals and L-Systems/Koch/Koch.pde | 176 + .../Koch/applet/Koch.java | 195 + .../Koch/applet/Koch.pde | 175 + .../Koch/applet/loading.gif | Bin 0 -> 2232 bytes .../Mandelbrot/Mandelbrot.pde | 75 + .../Mandelbrot/applet/Mandelbrot.java | 95 + .../Mandelbrot/applet/Mandelbrot.pde | 75 + .../Mandelbrot/applet/loading.gif | Bin 0 -> 2232 bytes .../PenroseSnowflake/LSystem.pde | 76 + .../PenroseSnowflake/PenroseSnowflake.pde | 24 + .../PenroseSnowflakeLSystem.pde | 100 + .../PenroseSnowflake/applet/LSystem.pde | 76 + .../applet/PenroseSnowflake.java | 220 + .../applet/PenroseSnowflake.pde | 24 + .../applet/PenroseSnowflakeLSystem.pde | 100 + .../PenroseSnowflake/applet/loading.gif | Bin 0 -> 2232 bytes .../PenroseTile/LSystem.pde | 74 + .../PenroseTile/PenroseLSystem.pde | 128 + .../PenroseTile/PenroseTile.pde | 28 + .../PenroseTile/applet/LSystem.pde | 74 + .../PenroseTile/applet/PenroseLSystem.pde | 128 + .../PenroseTile/applet/PenroseTile.java | 250 + .../PenroseTile/applet/PenroseTile.pde | 28 + .../PenroseTile/applet/loading.gif | Bin 0 -> 2232 bytes .../Pentigree/LSystem.pde | 76 + .../Pentigree/Pentigree.pde | 23 + .../Pentigree/PentigreeLSystem.pde | 71 + .../Pentigree/applet/LSystem.pde | 76 + .../Pentigree/applet/Pentigree.java | 190 + .../Pentigree/applet/Pentigree.pde | 23 + .../Pentigree/applet/PentigreeLSystem.pde | 71 + .../Pentigree/applet/loading.gif | Bin 0 -> 2232 bytes .../Fractals and L-Systems/Tree/Tree.pde | 61 + .../Tree/applet/Tree.java | 79 + .../Tree/applet/Tree.pde | 59 + .../Tree/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/GUI/Button/Button.pde | 100 + .../Topics/GUI/Button/applet/Button.java | 120 + .../Topics/GUI/Button/applet/Button.pde | 100 + .../Topics/GUI/Button/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/GUI/Buttons/Buttons.pde | 220 + .../Topics/GUI/Buttons/applet/Buttons.java | 240 + .../Topics/GUI/Buttons/applet/Buttons.pde | 220 + .../Topics/GUI/Buttons/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/GUI/Handles/Handles.pde | 139 + .../Topics/GUI/Handles/applet/Handles.java | 159 + .../Topics/GUI/Handles/applet/Handles.pde | 139 + .../Topics/GUI/Handles/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/GUI/ImageButton/ImageButton.pde | 108 + .../GUI/ImageButton/applet/ImageButton.java | 128 + .../GUI/ImageButton/applet/ImageButton.pde | 108 + .../Topics/GUI/ImageButton/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/GUI/ImageButton/data/base.gif | Bin 0 -> 774 bytes .../Topics/GUI/ImageButton/data/down.gif | Bin 0 -> 656 bytes .../Topics/GUI/ImageButton/data/roll.gif | Bin 0 -> 774 bytes .../examples/Topics/GUI/Rollover/Rollover.pde | 88 + .../Topics/GUI/Rollover/applet/Rollover.java | 108 + .../Topics/GUI/Rollover/applet/Rollover.pde | 88 + .../Topics/GUI/Rollover/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/GUI/Scrollbar/Scrollbar.pde | 122 + .../GUI/Scrollbar/applet/Scrollbar.java | 142 + .../Topics/GUI/Scrollbar/applet/Scrollbar.pde | 122 + .../Topics/GUI/Scrollbar/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Image Processing/Blur/Blur.pde | 43 + .../Image Processing/Blur/applet/Blur.java | 65 + .../Image Processing/Blur/applet/Blur.pde | 44 + .../Image Processing/Blur/applet/loading.gif | Bin 0 -> 2232 bytes .../Brightness/Brightness.pde | 49 + .../Brightness/applet/Brightness.java | 66 + .../Brightness/applet/Brightness.pde | 46 + .../Brightness/applet/loading.gif | Bin 0 -> 2232 bytes .../Convolution/Convolution.pde | 74 + .../Convolution/applet/Convolution.java | 94 + .../Convolution/applet/Convolution.pde | 74 + .../Convolution/applet/loading.gif | Bin 0 -> 2232 bytes .../EdgeDetection/EdgeDetection.pde | 39 + .../EdgeDetection/applet/EdgeDetection.java | 60 + .../EdgeDetection/applet/EdgeDetection.pde | 39 + .../EdgeDetection/applet/loading.gif | Bin 0 -> 2232 bytes .../Image Processing/Histogram/Histogram.pde | 42 + .../Histogram/applet/Histogram.java | 67 + .../Histogram/applet/Histogram.pde | 46 + .../Histogram/applet/loading.gif | Bin 0 -> 2232 bytes .../LinearImage/LinearImage.pde | 43 + .../LinearImage/applet/LinearImage.java | 73 + .../LinearImage/applet/LinearImage.pde | 53 + .../LinearImage/applet/loading.gif | Bin 0 -> 2232 bytes .../PixelArray/PixelArray.pde | 48 + .../PixelArray/applet/PixelArray.java | 83 + .../PixelArray/applet/PixelArray.pde | 63 + .../PixelArray/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Interaction/Follow1/Follow1.pde | 39 + .../Interaction/Follow1/applet/Follow1.java | 59 + .../Interaction/Follow1/applet/Follow1.pde | 39 + .../Interaction/Follow1/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Interaction/Follow2/Follow2.pde | 42 + .../Interaction/Follow2/applet/Follow2.java | 62 + .../Interaction/Follow2/applet/Follow2.pde | 42 + .../Interaction/Follow2/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Interaction/Follow3/Follow3.pde | 44 + .../Interaction/Follow3/applet/Follow3.java | 64 + .../Interaction/Follow3/applet/Follow3.pde | 44 + .../Interaction/Follow3/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Interaction/Reach1/Reach1.pde | 49 + .../Interaction/Reach1/applet/Reach1.java | 69 + .../Interaction/Reach1/applet/Reach1.pde | 49 + .../Interaction/Reach1/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Interaction/Reach2/Reach2.pde | 60 + .../Interaction/Reach2/applet/Reach2.java | 80 + .../Interaction/Reach2/applet/Reach2.pde | 60 + .../Interaction/Reach2/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Interaction/Reach3/Reach3.pde | 77 + .../Interaction/Reach3/applet/Reach3.java | 97 + .../Interaction/Reach3/applet/Reach3.pde | 77 + .../Interaction/Reach3/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Interaction/Tickle/Tickle.pde | 37 + .../Interaction/Tickle/applet/Tickle.java | 52 + .../Interaction/Tickle/applet/Tickle.pde | 32 + .../Interaction/Tickle/applet/loading.gif | Bin 0 -> 2232 bytes .../Tickle/data/AmericanTypewriter-24.vlw | Bin 0 -> 58300 bytes java/examples/Topics/Motion/Bounce/Bounce.pde | 47 + .../Topics/Motion/Bounce/applet/Bounce.java | 67 + .../Topics/Motion/Bounce/applet/Bounce.pde | 47 + .../Topics/Motion/Bounce/applet/loading.gif | Bin 0 -> 2232 bytes .../Motion/BouncyBubbles/BouncyBubbles.pde | 97 + .../BouncyBubbles/applet/BouncyBubbles.java | 118 + .../BouncyBubbles/applet/BouncyBubbles.pde | 97 + .../Motion/BouncyBubbles/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Motion/Brownian/Brownian.pde | 48 + .../Motion/Brownian/applet/Brownian.java | 68 + .../Motion/Brownian/applet/Brownian.pde | 48 + .../Topics/Motion/Brownian/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Motion/CircleCollision/Ball.pde | 16 + .../CircleCollision/CircleCollision.pde | 136 + .../Motion/CircleCollision/applet/Ball.pde | 16 + .../applet/CircleCollision.java | 173 + .../applet/CircleCollision.pde | 136 + .../Motion/CircleCollision/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Motion/Collision/Collision.pde | 85 + .../Motion/Collision/applet/Collision.java | 105 + .../Motion/Collision/applet/Collision.pde | 85 + .../Motion/Collision/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/Motion/Linear/Linear.pde | 26 + .../Topics/Motion/Linear/applet/Linear.java | 46 + .../Topics/Motion/Linear/applet/Linear.pde | 26 + .../Topics/Motion/Linear/applet/loading.gif | Bin 0 -> 2232 bytes .../Motion/MovingOnCurves/MovingOnCurves.pde | 50 + .../MovingOnCurves/applet/MovingOnCurves.java | 70 + .../MovingOnCurves/applet/MovingOnCurves.pde | 50 + .../Motion/MovingOnCurves/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/Motion/Puff/Puff.pde | 91 + .../Topics/Motion/Puff/applet/Puff.java | 111 + .../Topics/Motion/Puff/applet/Puff.pde | 91 + .../Topics/Motion/Puff/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Motion/Reflection1/Reflection1.pde | 129 + .../Reflection1/applet/Reflection1.java | 149 + .../Motion/Reflection1/applet/Reflection1.pde | 129 + .../Motion/Reflection1/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Motion/Reflection2/Ground.pde | 20 + .../Topics/Motion/Reflection2/Orb.pde | 14 + .../Topics/Motion/Reflection2/Reflection2.pde | 128 + .../Motion/Reflection2/applet/Ground.pde | 20 + .../Topics/Motion/Reflection2/applet/Orb.pde | 14 + .../Reflection2/applet/Reflection2.java | 183 + .../Motion/Reflection2/applet/Reflection2.pde | 128 + .../Motion/Reflection2/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/Simulate/Chain/Chain.pde | 68 + .../Topics/Simulate/Chain/applet/Chain.java | 88 + .../Topics/Simulate/Chain/applet/Chain.pde | 68 + .../Topics/Simulate/Chain/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Simulate/Flocking/Boid.pde | 196 + .../Topics/Simulate/Flocking/Flock.pde | 22 + .../Topics/Simulate/Flocking/Flocking.pde | 32 + .../Topics/Simulate/Flocking/applet/Boid.pde | 196 + .../Topics/Simulate/Flocking/applet/Flock.pde | 22 + .../Simulate/Flocking/applet/Flocking.java | 271 + .../Simulate/Flocking/applet/Flocking.pde | 32 + .../Simulate/Flocking/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/Simulate/Fluid/Fluid.pde | 208 + .../Topics/Simulate/Fluid/applet/Fluid.java | 228 + .../Topics/Simulate/Fluid/applet/Fluid.pde | 208 + .../Topics/Simulate/Fluid/applet/loading.gif | Bin 0 -> 2232 bytes .../MultipleParticleSystems/CrazyParticle.pde | 47 + .../MultipleParticleSystems.pde | 50 + .../MultipleParticleSystems/Particle.pde | 57 + .../ParticleSystem.pde | 51 + .../applet/CrazyParticle.pde | 47 + .../applet/MultipleParticleSystems.java | 387 + .../applet/MultipleParticleSystems.pde | 50 + .../applet/Particle.pde | 57 + .../applet/ParticleSystem.pde | 51 + .../applet/loading.gif | Bin 0 -> 2232 bytes .../SimpleParticleSystem/Particle.pde | 67 + .../SimpleParticleSystem/ParticleSystem.pde | 50 + .../SimpleParticleSystem.pde | 27 + .../SimpleParticleSystem/applet/Particle.pde | 49 + .../applet/ParticleSystem.pde | 50 + .../applet/SimpleParticleSystem.java | 308 + .../applet/SimpleParticleSystem.pde | 27 + .../SimpleParticleSystem/applet/loading.gif | Bin 0 -> 2232 bytes java/examples/Topics/Simulate/Smoke/Smoke.pde | 264 + .../Topics/Simulate/Smoke/applet/Smoke.java | 284 + .../Topics/Simulate/Smoke/applet/Smoke.pde | 264 + .../Topics/Simulate/Smoke/applet/loading.gif | Bin 0 -> 2232 bytes .../Simulate/SmokeParticleSystem/Particle.pde | 69 + .../SmokeParticleSystem/ParticleSystem.pde | 57 + .../SmokeParticleSystem.pde | 69 + .../SmokeParticleSystem/applet/Particle.pde | 69 + .../applet/ParticleSystem.pde | 57 + .../applet/SmokeParticleSystem.java | 360 + .../applet/SmokeParticleSystem.pde | 52 + .../SmokeParticleSystem/applet/loading.gif | Bin 0 -> 2232 bytes .../SmokeParticleSystem/data/texture.gif | Bin 0 -> 1829 bytes .../Topics/Simulate/SoftBody/SoftBody.pde | 99 + .../Simulate/SoftBody/applet/SoftBody.java | 119 + .../Simulate/SoftBody/applet/SoftBody.pde | 99 + .../Simulate/SoftBody/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Simulate/Spring/Spring.pde | 97 + .../Topics/Simulate/Spring/applet/Spring.java | 117 + .../Topics/Simulate/Spring/applet/Spring.pde | 97 + .../Topics/Simulate/Spring/applet/loading.gif | Bin 0 -> 2232 bytes .../Topics/Simulate/Springs/Springs.pde | 162 + .../Simulate/Springs/applet/Springs.java | 182 + .../Simulate/Springs/applet/Springs.pde | 162 + .../Simulate/Springs/applet/loading.gif | Bin 0 -> 2232 bytes 1234 files changed, 96518 insertions(+) create mode 100644 java/examples/3D/Camera/MoveEye/MoveEye.pde create mode 100644 java/examples/3D/Camera/MoveEye/applet/MoveEye.java create mode 100644 java/examples/3D/Camera/MoveEye/applet/MoveEye.pde create mode 100644 java/examples/3D/Camera/MoveEye/applet/loading.gif create mode 100644 java/examples/3D/Camera/OrthoVSPerspective/OrthoVSPerspective.pde create mode 100644 java/examples/3D/Camera/OrthoVSPerspective/applet/OrthoVSPerspective.java create mode 100644 java/examples/3D/Camera/OrthoVSPerspective/applet/OrthoVSPerspective.pde create mode 100644 java/examples/3D/Camera/OrthoVSPerspective/applet/loading.gif create mode 100644 java/examples/3D/Camera/Perspective/Perspective.pde create mode 100644 java/examples/3D/Camera/Perspective/applet/Perspective.java create mode 100644 java/examples/3D/Camera/Perspective/applet/Perspective.pde create mode 100644 java/examples/3D/Camera/Perspective/applet/loading.gif create mode 100644 java/examples/3D/Form/BrickTower/BrickTower.pde create mode 100644 java/examples/3D/Form/BrickTower/Cube.pde create mode 100644 java/examples/3D/Form/BrickTower/applet/BrickTower.java create mode 100644 java/examples/3D/Form/BrickTower/applet/BrickTower.pde create mode 100644 java/examples/3D/Form/BrickTower/applet/Cube.pde create mode 100644 java/examples/3D/Form/BrickTower/applet/loading.gif create mode 100644 java/examples/3D/Form/CubicGrid/CubicGrid.pde create mode 100644 java/examples/3D/Form/CubicGrid/applet/CubicGrid.java create mode 100644 java/examples/3D/Form/CubicGrid/applet/CubicGrid.pde create mode 100644 java/examples/3D/Form/CubicGrid/applet/loading.gif create mode 100755 java/examples/3D/Form/Icosahedra/Dimension3D.pde create mode 100755 java/examples/3D/Form/Icosahedra/Icosahedra.pde create mode 100755 java/examples/3D/Form/Icosahedra/Icosahedron.pde create mode 100755 java/examples/3D/Form/Icosahedra/Shape3D.pde create mode 100644 java/examples/3D/Form/Icosahedra/applet/Dimension3D.pde create mode 100644 java/examples/3D/Form/Icosahedra/applet/Icosahedra.java create mode 100644 java/examples/3D/Form/Icosahedra/applet/Icosahedra.pde create mode 100644 java/examples/3D/Form/Icosahedra/applet/Icosahedron.pde create mode 100644 java/examples/3D/Form/Icosahedra/applet/Shape3D.pde create mode 100644 java/examples/3D/Form/Icosahedra/applet/loading.gif create mode 100644 java/examples/3D/Form/Primitives3D/Primitives3D.pde create mode 100644 java/examples/3D/Form/Primitives3D/applet/Primitives3D.java create mode 100644 java/examples/3D/Form/Primitives3D/applet/Primitives3D.pde create mode 100644 java/examples/3D/Form/Primitives3D/applet/loading.gif create mode 100644 java/examples/3D/Form/RGBCube/RGBCube.pde create mode 100644 java/examples/3D/Form/RGBCube/applet/RGBCube.java create mode 100644 java/examples/3D/Form/RGBCube/applet/RGBCube.pde create mode 100644 java/examples/3D/Form/RGBCube/applet/loading.gif create mode 100644 java/examples/3D/Form/RunAmuck/Legs.pde create mode 100644 java/examples/3D/Form/RunAmuck/RunAmuck.pde create mode 100644 java/examples/3D/Form/RunAmuck/applet/Legs.pde create mode 100644 java/examples/3D/Form/RunAmuck/applet/RunAmuck.java create mode 100644 java/examples/3D/Form/RunAmuck/applet/RunAmuck.pde create mode 100644 java/examples/3D/Form/RunAmuck/applet/loading.gif create mode 100644 java/examples/3D/Form/ShapeTransform/ShapeTransform.pde create mode 100644 java/examples/3D/Form/ShapeTransform/applet/ShapeTransform.java create mode 100644 java/examples/3D/Form/ShapeTransform/applet/ShapeTransform.pde create mode 100644 java/examples/3D/Form/ShapeTransform/applet/loading.gif create mode 100644 java/examples/3D/Form/Toroid/Toroid.pde create mode 100644 java/examples/3D/Form/Toroid/applet/Toroid.java create mode 100644 java/examples/3D/Form/Toroid/applet/Toroid.pde create mode 100644 java/examples/3D/Form/Toroid/applet/loading.gif create mode 100644 java/examples/3D/Form/Vertices/Vertices.pde create mode 100644 java/examples/3D/Form/Vertices/applet/Vertices.java create mode 100644 java/examples/3D/Form/Vertices/applet/Vertices.pde create mode 100644 java/examples/3D/Form/Vertices/applet/loading.gif create mode 100644 java/examples/3D/Image/Explode/Explode.pde create mode 100644 java/examples/3D/Image/Explode/applet/Explode.java create mode 100644 java/examples/3D/Image/Explode/applet/Explode.pde create mode 100644 java/examples/3D/Image/Explode/applet/loading.gif create mode 100644 java/examples/3D/Image/Explode/data/eames.jpg.tmp create mode 100644 java/examples/3D/Image/Extrusion/Extrusion.pde create mode 100644 java/examples/3D/Image/Extrusion/applet/Extrusion.java create mode 100644 java/examples/3D/Image/Extrusion/applet/Extrusion.pde create mode 100644 java/examples/3D/Image/Extrusion/applet/loading.gif create mode 100644 java/examples/3D/Image/Zoom/Zoom.pde create mode 100644 java/examples/3D/Image/Zoom/applet/Zoom.java create mode 100644 java/examples/3D/Image/Zoom/applet/Zoom.pde create mode 100644 java/examples/3D/Image/Zoom/applet/loading.gif create mode 100644 java/examples/3D/Lights/Directional/Directional.pde create mode 100644 java/examples/3D/Lights/Directional/applet/Directional.java create mode 100644 java/examples/3D/Lights/Directional/applet/Directional.pde create mode 100644 java/examples/3D/Lights/Directional/applet/loading.gif create mode 100644 java/examples/3D/Lights/Lights1/Lights1.pde create mode 100644 java/examples/3D/Lights/Lights1/applet/Lights1.java create mode 100644 java/examples/3D/Lights/Lights1/applet/Lights1.pde create mode 100644 java/examples/3D/Lights/Lights1/applet/loading.gif create mode 100644 java/examples/3D/Lights/Lights2/Lights2.pde create mode 100644 java/examples/3D/Lights/Lights2/applet/Lights2.java create mode 100644 java/examples/3D/Lights/Lights2/applet/Lights2.pde create mode 100644 java/examples/3D/Lights/Lights2/applet/loading.gif create mode 100644 java/examples/3D/Lights/Reflection/Reflection.pde create mode 100644 java/examples/3D/Lights/Reflection/applet/Reflection.java create mode 100644 java/examples/3D/Lights/Reflection/applet/Reflection.pde create mode 100644 java/examples/3D/Lights/Reflection/applet/loading.gif create mode 100644 java/examples/3D/Lights/Spot/Spot.pde create mode 100644 java/examples/3D/Lights/Spot/applet/Spot.java create mode 100644 java/examples/3D/Lights/Spot/applet/Spot.pde create mode 100644 java/examples/3D/Lights/Spot/applet/loading.gif create mode 100644 java/examples/3D/Textures/Texture1/Texture1.pde create mode 100644 java/examples/3D/Textures/Texture1/applet/Texture1.java create mode 100644 java/examples/3D/Textures/Texture1/applet/Texture1.pde create mode 100644 java/examples/3D/Textures/Texture1/applet/loading.gif create mode 100644 java/examples/3D/Textures/Texture2/Texture2.pde create mode 100644 java/examples/3D/Textures/Texture2/applet/Texture2.java create mode 100644 java/examples/3D/Textures/Texture2/applet/Texture2.pde create mode 100644 java/examples/3D/Textures/Texture2/applet/loading.gif create mode 100644 java/examples/3D/Textures/Texture3/Texture3.pde create mode 100644 java/examples/3D/Textures/Texture3/applet/Texture3.java create mode 100644 java/examples/3D/Textures/Texture3/applet/Texture3.pde create mode 100644 java/examples/3D/Textures/Texture3/applet/loading.gif create mode 100644 java/examples/3D/Textures/TextureCube/TextureCube.pde create mode 100644 java/examples/3D/Textures/TextureCube/applet/TextureCube.java create mode 100644 java/examples/3D/Textures/TextureCube/applet/TextureCube.pde create mode 100644 java/examples/3D/Textures/TextureCube/applet/loading.gif create mode 100644 java/examples/3D/Transform/Bird/Bird.pde create mode 100644 java/examples/3D/Transform/Bird/applet/Bird.java create mode 100644 java/examples/3D/Transform/Bird/applet/Bird.pde create mode 100644 java/examples/3D/Transform/Bird/applet/loading.gif create mode 100644 java/examples/3D/Transform/Birds/Bird.pde create mode 100644 java/examples/3D/Transform/Birds/Birds.pde create mode 100644 java/examples/3D/Transform/Birds/applet/Bird.pde create mode 100644 java/examples/3D/Transform/Birds/applet/Birds.java create mode 100644 java/examples/3D/Transform/Birds/applet/Birds.pde create mode 100644 java/examples/3D/Transform/Birds/applet/loading.gif create mode 100644 java/examples/3D/Transform/CubesWithinCube/Cube.pde create mode 100644 java/examples/3D/Transform/CubesWithinCube/CubesWithinCube.pde create mode 100644 java/examples/3D/Transform/CubesWithinCube/applet/Cube.pde create mode 100644 java/examples/3D/Transform/CubesWithinCube/applet/CubesWithinCube.java create mode 100644 java/examples/3D/Transform/CubesWithinCube/applet/CubesWithinCube.pde create mode 100644 java/examples/3D/Transform/CubesWithinCube/applet/loading.gif create mode 100644 java/examples/3D/Transform/PushPopCubes/PushPopCubes.pde create mode 100644 java/examples/3D/Transform/PushPopCubes/applet/PushPopCubes.java create mode 100644 java/examples/3D/Transform/PushPopCubes/applet/PushPopCubes.pde create mode 100644 java/examples/3D/Transform/PushPopCubes/applet/loading.gif create mode 100644 java/examples/3D/Transform/Rotate1/Rotate1.pde create mode 100644 java/examples/3D/Transform/Rotate1/applet/Rotate1.java create mode 100644 java/examples/3D/Transform/Rotate1/applet/Rotate1.pde create mode 100644 java/examples/3D/Transform/Rotate1/applet/loading.gif create mode 100644 java/examples/3D/Transform/Rotate2/Rotate2.pde create mode 100644 java/examples/3D/Transform/Rotate2/applet/Rotate2.java create mode 100644 java/examples/3D/Transform/Rotate2/applet/Rotate2.pde create mode 100644 java/examples/3D/Transform/Rotate2/applet/loading.gif create mode 100644 java/examples/3D/Typography/KineticType/KineticType.pde create mode 100644 java/examples/3D/Typography/KineticType/Letter.pde create mode 100644 java/examples/3D/Typography/KineticType/Line.pde create mode 100644 java/examples/3D/Typography/KineticType/Word.pde create mode 100644 java/examples/3D/Typography/KineticType/applet/KineticType.java create mode 100644 java/examples/3D/Typography/KineticType/applet/KineticType.pde create mode 100644 java/examples/3D/Typography/KineticType/applet/Letter.pde create mode 100644 java/examples/3D/Typography/KineticType/applet/Line.pde create mode 100644 java/examples/3D/Typography/KineticType/applet/Word.pde create mode 100644 java/examples/3D/Typography/KineticType/applet/loading.gif create mode 100644 java/examples/3D/Typography/KineticType/data/Univers-66.vlw create mode 100644 java/examples/3D/Typography/LetterK/LetterK.pde create mode 100644 java/examples/3D/Typography/LetterK/applet/LetterK.java create mode 100644 java/examples/3D/Typography/LetterK/applet/LetterK.pde create mode 100644 java/examples/3D/Typography/LetterK/applet/loading.gif create mode 100644 java/examples/3D/Typography/Typing/Typing.pde create mode 100644 java/examples/3D/Typography/Typing/applet/Typing.java create mode 100644 java/examples/3D/Typography/Typing/applet/Typing.pde create mode 100644 java/examples/3D/Typography/Typing/applet/loading.gif create mode 100644 java/examples/3D/Typography/Typing/data/Univers45.vlw create mode 100644 java/examples/Basics/Arrays/Array/Array.pde create mode 100644 java/examples/Basics/Arrays/Array/applet/Array.java create mode 100644 java/examples/Basics/Arrays/Array/applet/Array.pde create mode 100644 java/examples/Basics/Arrays/Array/applet/loading.gif create mode 100644 java/examples/Basics/Arrays/Array2D/Array2D.pde create mode 100644 java/examples/Basics/Arrays/Array2D/applet/Array2D.java create mode 100644 java/examples/Basics/Arrays/Array2D/applet/Array2D.pde create mode 100644 java/examples/Basics/Arrays/Array2D/applet/loading.gif create mode 100644 java/examples/Basics/Arrays/ArrayObjects/ArrayObjects.pde create mode 100644 java/examples/Basics/Arrays/ArrayObjects/Module.pde create mode 100644 java/examples/Basics/Arrays/ArrayObjects/applet/ArrayObjects.java create mode 100644 java/examples/Basics/Arrays/ArrayObjects/applet/ArrayObjects.pde create mode 100644 java/examples/Basics/Arrays/ArrayObjects/applet/loading.gif create mode 100644 java/examples/Basics/Color/Brightness/Brightness.pde create mode 100644 java/examples/Basics/Color/Brightness/applet/Brightness.java create mode 100644 java/examples/Basics/Color/Brightness/applet/Brightness.pde create mode 100644 java/examples/Basics/Color/Brightness/applet/loading.gif create mode 100644 java/examples/Basics/Color/ColorWheel/ColorWheel.pde create mode 100644 java/examples/Basics/Color/ColorWheel/applet/ColorWheel.java create mode 100644 java/examples/Basics/Color/ColorWheel/applet/ColorWheel.pde create mode 100644 java/examples/Basics/Color/ColorWheel/applet/loading.gif create mode 100644 java/examples/Basics/Color/Creating/Creating.pde create mode 100644 java/examples/Basics/Color/Creating/applet/Creating.java create mode 100644 java/examples/Basics/Color/Creating/applet/Creating.pde create mode 100644 java/examples/Basics/Color/Creating/applet/loading.gif create mode 100644 java/examples/Basics/Color/Hue/Hue.pde create mode 100644 java/examples/Basics/Color/Hue/applet/Hue.java create mode 100644 java/examples/Basics/Color/Hue/applet/Hue.pde create mode 100644 java/examples/Basics/Color/Hue/applet/loading.gif create mode 100644 java/examples/Basics/Color/LinearGradient/LinearGradient.pde create mode 100644 java/examples/Basics/Color/LinearGradient/applet/LinearGradient.java create mode 100644 java/examples/Basics/Color/LinearGradient/applet/LinearGradient.pde create mode 100644 java/examples/Basics/Color/LinearGradient/applet/loading.gif create mode 100644 java/examples/Basics/Color/RadialGradient/RadialGradient.pde create mode 100644 java/examples/Basics/Color/RadialGradient/applet/RadialGradient.java create mode 100644 java/examples/Basics/Color/RadialGradient/applet/RadialGradient.pde create mode 100644 java/examples/Basics/Color/RadialGradient/applet/loading.gif create mode 100644 java/examples/Basics/Color/RadialGradient2/RadialGradient2.pde create mode 100644 java/examples/Basics/Color/Reading/Reading.pde create mode 100644 java/examples/Basics/Color/Reading/applet/Reading.java create mode 100644 java/examples/Basics/Color/Reading/applet/Reading.pde create mode 100644 java/examples/Basics/Color/Reading/applet/loading.gif create mode 100644 java/examples/Basics/Color/Relativity/Relativity.pde create mode 100644 java/examples/Basics/Color/Relativity/applet/Relativity.java create mode 100644 java/examples/Basics/Color/Relativity/applet/Relativity.pde create mode 100644 java/examples/Basics/Color/Relativity/applet/loading.gif create mode 100644 java/examples/Basics/Color/Saturation/Saturation.pde create mode 100644 java/examples/Basics/Color/Saturation/applet/Saturation.java create mode 100644 java/examples/Basics/Color/Saturation/applet/Saturation.pde create mode 100644 java/examples/Basics/Color/Saturation/applet/loading.gif create mode 100644 java/examples/Basics/Color/WaveGradient/WaveGradient.pde create mode 100644 java/examples/Basics/Color/WaveGradient/applet/WaveGradient.java create mode 100644 java/examples/Basics/Color/WaveGradient/applet/WaveGradient.pde create mode 100644 java/examples/Basics/Color/WaveGradient/applet/loading.gif create mode 100644 java/examples/Basics/Control/Conditionals1/Conditionals1.pde create mode 100644 java/examples/Basics/Control/Conditionals1/applet/Conditionals1.java create mode 100644 java/examples/Basics/Control/Conditionals1/applet/Conditionals1.pde create mode 100644 java/examples/Basics/Control/Conditionals1/applet/loading.gif create mode 100644 java/examples/Basics/Control/Conditionals2/Conditionals2.pde create mode 100644 java/examples/Basics/Control/Conditionals2/applet/Conditionals2.java create mode 100644 java/examples/Basics/Control/Conditionals2/applet/Conditionals2.pde create mode 100644 java/examples/Basics/Control/Conditionals2/applet/loading.gif create mode 100644 java/examples/Basics/Control/EmbeddedIteration/EmbeddedIteration.pde create mode 100644 java/examples/Basics/Control/EmbeddedIteration/applet/EmbeddedIteration.java create mode 100644 java/examples/Basics/Control/EmbeddedIteration/applet/EmbeddedIteration.pde create mode 100644 java/examples/Basics/Control/EmbeddedIteration/applet/loading.gif create mode 100644 java/examples/Basics/Control/Iteration/Iteration.pde create mode 100644 java/examples/Basics/Control/Iteration/applet/Iteration.java create mode 100644 java/examples/Basics/Control/Iteration/applet/Iteration.pde create mode 100644 java/examples/Basics/Control/Iteration/applet/loading.gif create mode 100644 java/examples/Basics/Control/LogicalOperators/LogicalOperators.pde create mode 100644 java/examples/Basics/Control/LogicalOperators/applet/LogicalOperators.java create mode 100644 java/examples/Basics/Control/LogicalOperators/applet/LogicalOperators.pde create mode 100644 java/examples/Basics/Control/LogicalOperators/applet/loading.gif create mode 100644 java/examples/Basics/Data/CharactersStrings/CharactersStrings.pde create mode 100644 java/examples/Basics/Data/CharactersStrings/applet/CharactersStrings.java create mode 100644 java/examples/Basics/Data/CharactersStrings/applet/CharactersStrings.pde create mode 100644 java/examples/Basics/Data/CharactersStrings/applet/loading.gif create mode 100644 java/examples/Basics/Data/CharactersStrings/data/Eureka-90.vlw create mode 100644 java/examples/Basics/Data/DatatypeConversion/DatatypeConversion.pde create mode 100644 java/examples/Basics/Data/DatatypeConversion/applet/DatatypeConversion.java create mode 100644 java/examples/Basics/Data/DatatypeConversion/applet/DatatypeConversion.pde create mode 100644 java/examples/Basics/Data/DatatypeConversion/applet/loading.gif create mode 100644 java/examples/Basics/Data/IntegersFloats/IntegersFloats.pde create mode 100644 java/examples/Basics/Data/IntegersFloats/applet/IntegersFloats.java create mode 100644 java/examples/Basics/Data/IntegersFloats/applet/IntegersFloats.pde create mode 100644 java/examples/Basics/Data/IntegersFloats/applet/loading.gif create mode 100644 java/examples/Basics/Data/TrueFalse/TrueFalse.pde create mode 100644 java/examples/Basics/Data/TrueFalse/applet/TrueFalse.java create mode 100644 java/examples/Basics/Data/TrueFalse/applet/TrueFalse.pde create mode 100644 java/examples/Basics/Data/TrueFalse/applet/loading.gif create mode 100644 java/examples/Basics/Data/VariableScope/VariableScope.pde create mode 100644 java/examples/Basics/Data/VariableScope/applet/VariableScope.java create mode 100644 java/examples/Basics/Data/VariableScope/applet/VariableScope.pde create mode 100644 java/examples/Basics/Data/VariableScope/applet/loading.gif create mode 100644 java/examples/Basics/Data/Variables/Variables.pde create mode 100644 java/examples/Basics/Data/Variables/applet/Variables.java create mode 100644 java/examples/Basics/Data/Variables/applet/Variables.pde create mode 100644 java/examples/Basics/Data/Variables/applet/loading.gif create mode 100644 java/examples/Basics/Form/Bezier/Bezier.pde create mode 100644 java/examples/Basics/Form/Bezier/applet/Bezier.java create mode 100644 java/examples/Basics/Form/Bezier/applet/Bezier.pde create mode 100644 java/examples/Basics/Form/Bezier/applet/loading.gif create mode 100644 java/examples/Basics/Form/BezierEllipse/BezierEllipse.pde create mode 100644 java/examples/Basics/Form/BezierEllipse/applet/BezierEllipse.java create mode 100644 java/examples/Basics/Form/BezierEllipse/applet/BezierEllipse.pde create mode 100644 java/examples/Basics/Form/BezierEllipse/applet/loading.gif create mode 100644 java/examples/Basics/Form/PieChart/PieChart.pde create mode 100644 java/examples/Basics/Form/PieChart/applet/PieChart.java create mode 100644 java/examples/Basics/Form/PieChart/applet/PieChart.pde create mode 100644 java/examples/Basics/Form/PieChart/applet/loading.gif create mode 100644 java/examples/Basics/Form/PointsLines/PointsLines.pde create mode 100644 java/examples/Basics/Form/PointsLines/applet/PointsLines.java create mode 100644 java/examples/Basics/Form/PointsLines/applet/PointsLines.pde create mode 100644 java/examples/Basics/Form/PointsLines/applet/loading.gif create mode 100644 java/examples/Basics/Form/ShapePrimitives/ShapePrimitives.pde create mode 100644 java/examples/Basics/Form/ShapePrimitives/applet/ShapePrimitives.java create mode 100644 java/examples/Basics/Form/ShapePrimitives/applet/ShapePrimitives.pde create mode 100644 java/examples/Basics/Form/ShapePrimitives/applet/loading.gif create mode 100644 java/examples/Basics/Form/SimpleCurves/SimpleCurves.pde create mode 100644 java/examples/Basics/Form/SimpleCurves/applet/SimpleCurves.java create mode 100644 java/examples/Basics/Form/SimpleCurves/applet/SimpleCurves.pde create mode 100644 java/examples/Basics/Form/SimpleCurves/applet/loading.gif create mode 100644 java/examples/Basics/Form/TriangleStrip/TriangleStrip.pde create mode 100644 java/examples/Basics/Form/TriangleStrip/applet/TriangleStrip.java create mode 100644 java/examples/Basics/Form/TriangleStrip/applet/TriangleStrip.pde create mode 100644 java/examples/Basics/Form/TriangleStrip/applet/loading.gif create mode 100644 java/examples/Basics/Form/Vertices/Vertices.pde create mode 100644 java/examples/Basics/Form/Vertices/applet/Vertices.java create mode 100644 java/examples/Basics/Form/Vertices/applet/Vertices.pde create mode 100644 java/examples/Basics/Form/Vertices/applet/loading.gif create mode 100644 java/examples/Basics/Image/Alphamask/Alphamask.pde create mode 100644 java/examples/Basics/Image/Alphamask/applet/Alphamask.java create mode 100644 java/examples/Basics/Image/Alphamask/applet/Alphamask.pde create mode 100644 java/examples/Basics/Image/Alphamask/applet/loading.gif create mode 100644 java/examples/Basics/Image/BackgroundImage/BackgroundImage.pde create mode 100644 java/examples/Basics/Image/BackgroundImage/applet/BackgroundImage.java create mode 100644 java/examples/Basics/Image/BackgroundImage/applet/BackgroundImage.pde create mode 100644 java/examples/Basics/Image/BackgroundImage/applet/loading.gif create mode 100644 java/examples/Basics/Image/CreateImage/CreateImage.pde create mode 100644 java/examples/Basics/Image/CreateImage/applet/CreateImage.java create mode 100644 java/examples/Basics/Image/CreateImage/applet/CreateImage.pde create mode 100644 java/examples/Basics/Image/CreateImage/applet/loading.gif create mode 100644 java/examples/Basics/Image/LoadDisplayImage/LoadDisplayImage.pde create mode 100644 java/examples/Basics/Image/LoadDisplayImage/applet/LoadDisplayImage.java create mode 100644 java/examples/Basics/Image/LoadDisplayImage/applet/LoadDisplayImage.pde create mode 100644 java/examples/Basics/Image/LoadDisplayImage/applet/loading.gif create mode 100644 java/examples/Basics/Image/Pointillism/Pointillism.pde create mode 100644 java/examples/Basics/Image/Pointillism/applet/Pointillism.java create mode 100644 java/examples/Basics/Image/Pointillism/applet/Pointillism.pde create mode 100644 java/examples/Basics/Image/Pointillism/applet/loading.gif create mode 100644 java/examples/Basics/Image/RequestImage/RequestImage.pde create mode 100644 java/examples/Basics/Image/Sprite/Sprite.pde create mode 100644 java/examples/Basics/Image/Sprite/applet/Sprite.java create mode 100644 java/examples/Basics/Image/Sprite/applet/Sprite.pde create mode 100644 java/examples/Basics/Image/Sprite/applet/loading.gif create mode 100644 java/examples/Basics/Image/Sprite/data/teddy.gif create mode 100644 java/examples/Basics/Image/Sprite2/Sprite2.pde create mode 100644 java/examples/Basics/Image/Sprite2/data/teddy.gif create mode 100644 java/examples/Basics/Image/Transparency/Transparency.pde create mode 100644 java/examples/Basics/Image/Transparency/applet/Transparency.java create mode 100644 java/examples/Basics/Image/Transparency/applet/Transparency.pde create mode 100644 java/examples/Basics/Image/Transparency/applet/loading.gif create mode 100644 java/examples/Basics/Input/Clock/Clock.pde create mode 100644 java/examples/Basics/Input/Clock/applet/Clock.java create mode 100644 java/examples/Basics/Input/Clock/applet/Clock.pde create mode 100644 java/examples/Basics/Input/Clock/applet/loading.gif create mode 100644 java/examples/Basics/Input/Constrain/Constrain.pde create mode 100644 java/examples/Basics/Input/Constrain/applet/Constrain.java create mode 100644 java/examples/Basics/Input/Constrain/applet/Constrain.pde create mode 100644 java/examples/Basics/Input/Constrain/applet/loading.gif create mode 100644 java/examples/Basics/Input/Easing/Easing.pde create mode 100644 java/examples/Basics/Input/Easing/applet/Easing.java create mode 100644 java/examples/Basics/Input/Easing/applet/Easing.pde create mode 100644 java/examples/Basics/Input/Easing/applet/loading.gif create mode 100644 java/examples/Basics/Input/Keyboard/Keyboard.pde create mode 100644 java/examples/Basics/Input/Keyboard/applet/Keyboard.java create mode 100644 java/examples/Basics/Input/Keyboard/applet/Keyboard.pde create mode 100644 java/examples/Basics/Input/Keyboard/applet/loading.gif create mode 100644 java/examples/Basics/Input/KeyboardFunctions/KeyboardFunctions.pde create mode 100644 java/examples/Basics/Input/KeyboardFunctions/applet/KeyboardFunctions.java create mode 100644 java/examples/Basics/Input/KeyboardFunctions/applet/KeyboardFunctions.pde create mode 100644 java/examples/Basics/Input/KeyboardFunctions/applet/loading.gif create mode 100644 java/examples/Basics/Input/Milliseconds/Milliseconds.pde create mode 100644 java/examples/Basics/Input/Milliseconds/applet/Milliseconds.java create mode 100644 java/examples/Basics/Input/Milliseconds/applet/Milliseconds.pde create mode 100644 java/examples/Basics/Input/Milliseconds/applet/loading.gif create mode 100644 java/examples/Basics/Input/Mouse1D/Mouse1D.pde create mode 100644 java/examples/Basics/Input/Mouse1D/applet/Mouse1D.java create mode 100644 java/examples/Basics/Input/Mouse1D/applet/Mouse1D.pde create mode 100644 java/examples/Basics/Input/Mouse1D/applet/loading.gif create mode 100644 java/examples/Basics/Input/Mouse2D/Mouse2D.pde create mode 100644 java/examples/Basics/Input/Mouse2D/applet/Mouse2D.java create mode 100644 java/examples/Basics/Input/Mouse2D/applet/Mouse2D.pde create mode 100644 java/examples/Basics/Input/Mouse2D/applet/loading.gif create mode 100644 java/examples/Basics/Input/MouseFunctions/MouseFunctions.pde create mode 100644 java/examples/Basics/Input/MouseFunctions/applet/MouseFunctions.java create mode 100644 java/examples/Basics/Input/MouseFunctions/applet/MouseFunctions.pde create mode 100644 java/examples/Basics/Input/MouseFunctions/applet/loading.gif create mode 100644 java/examples/Basics/Input/MousePress/MousePress.pde create mode 100644 java/examples/Basics/Input/MousePress/applet/MousePress.java create mode 100644 java/examples/Basics/Input/MousePress/applet/MousePress.pde create mode 100644 java/examples/Basics/Input/MousePress/applet/loading.gif create mode 100644 java/examples/Basics/Input/MouseSignals/MouseSignals.pde create mode 100644 java/examples/Basics/Input/MouseSignals/applet/MouseSignals.java create mode 100644 java/examples/Basics/Input/MouseSignals/applet/MouseSignals.pde create mode 100644 java/examples/Basics/Input/MouseSignals/applet/loading.gif create mode 100644 java/examples/Basics/Input/StoringInput/StoringInput.pde create mode 100644 java/examples/Basics/Input/StoringInput/applet/StoringInput.java create mode 100644 java/examples/Basics/Input/StoringInput/applet/StoringInput.pde create mode 100644 java/examples/Basics/Input/StoringInput/applet/loading.gif create mode 100644 java/examples/Basics/Math/AdditiveWave/AdditiveWave.pde create mode 100644 java/examples/Basics/Math/AdditiveWave/applet/AdditiveWave.java create mode 100644 java/examples/Basics/Math/AdditiveWave/applet/AdditiveWave.pde create mode 100644 java/examples/Basics/Math/AdditiveWave/applet/loading.gif create mode 100644 java/examples/Basics/Math/Arctangent/Arctangent.pde create mode 100644 java/examples/Basics/Math/Arctangent/applet/Arctangent.java create mode 100644 java/examples/Basics/Math/Arctangent/applet/Arctangent.pde create mode 100644 java/examples/Basics/Math/Arctangent/applet/loading.gif create mode 100644 java/examples/Basics/Math/Distance1D/Distance1D.pde create mode 100644 java/examples/Basics/Math/Distance1D/applet/Distance1D.java create mode 100644 java/examples/Basics/Math/Distance1D/applet/Distance1D.pde create mode 100644 java/examples/Basics/Math/Distance1D/applet/loading.gif create mode 100644 java/examples/Basics/Math/Distance2D/Distance2D.pde create mode 100644 java/examples/Basics/Math/Distance2D/applet/Distance2D.java create mode 100644 java/examples/Basics/Math/Distance2D/applet/Distance2D.pde create mode 100644 java/examples/Basics/Math/Distance2D/applet/loading.gif create mode 100644 java/examples/Basics/Math/DoubleRandom/DoubleRandom.pde create mode 100644 java/examples/Basics/Math/DoubleRandom/applet/DoubleRandom.java create mode 100644 java/examples/Basics/Math/DoubleRandom/applet/DoubleRandom.pde create mode 100644 java/examples/Basics/Math/DoubleRandom/applet/loading.gif create mode 100644 java/examples/Basics/Math/Graphing2DEquation/Graphing2DEquation.pde create mode 100644 java/examples/Basics/Math/Graphing2DEquation/applet/Graphing2DEquation.java create mode 100644 java/examples/Basics/Math/Graphing2DEquation/applet/Graphing2DEquation.pde create mode 100644 java/examples/Basics/Math/Graphing2DEquation/applet/loading.gif create mode 100644 java/examples/Basics/Math/IncrementDecrement/IncrementDecrement.pde create mode 100644 java/examples/Basics/Math/IncrementDecrement/applet/IncrementDecrement.java create mode 100644 java/examples/Basics/Math/IncrementDecrement/applet/IncrementDecrement.pde create mode 100644 java/examples/Basics/Math/IncrementDecrement/applet/loading.gif create mode 100644 java/examples/Basics/Math/Modulo/Modulo.pde create mode 100644 java/examples/Basics/Math/Modulo/applet/Modulo.java create mode 100644 java/examples/Basics/Math/Modulo/applet/Modulo.pde create mode 100644 java/examples/Basics/Math/Modulo/applet/loading.gif create mode 100644 java/examples/Basics/Math/Noise1D/Noise1D.pde create mode 100644 java/examples/Basics/Math/Noise1D/applet/Noise1D.java create mode 100644 java/examples/Basics/Math/Noise1D/applet/Noise1D.pde create mode 100644 java/examples/Basics/Math/Noise1D/applet/loading.gif create mode 100644 java/examples/Basics/Math/Noise2D/Noise2D.pde create mode 100644 java/examples/Basics/Math/Noise2D/applet/Noise2D.java create mode 100644 java/examples/Basics/Math/Noise2D/applet/Noise2D.pde create mode 100644 java/examples/Basics/Math/Noise2D/applet/loading.gif create mode 100644 java/examples/Basics/Math/Noise3D/Noise3D.pde create mode 100644 java/examples/Basics/Math/Noise3D/applet/Noise3D.java create mode 100644 java/examples/Basics/Math/Noise3D/applet/Noise3D.pde create mode 100644 java/examples/Basics/Math/Noise3D/applet/loading.gif create mode 100644 java/examples/Basics/Math/NoiseWave/NoiseWave.pde create mode 100644 java/examples/Basics/Math/NoiseWave/applet/NoiseWave.java create mode 100644 java/examples/Basics/Math/NoiseWave/applet/NoiseWave.pde create mode 100644 java/examples/Basics/Math/NoiseWave/applet/loading.gif create mode 100644 java/examples/Basics/Math/OperatorPrecedence/OperatorPrecedence.pde create mode 100644 java/examples/Basics/Math/OperatorPrecedence/applet/OperatorPrecedence.java create mode 100644 java/examples/Basics/Math/OperatorPrecedence/applet/OperatorPrecedence.pde create mode 100644 java/examples/Basics/Math/OperatorPrecedence/applet/loading.gif create mode 100644 java/examples/Basics/Math/PolarToCartesian/PolarToCartesian.pde create mode 100644 java/examples/Basics/Math/PolarToCartesian/applet/PolarToCartesian.java create mode 100644 java/examples/Basics/Math/PolarToCartesian/applet/PolarToCartesian.pde create mode 100644 java/examples/Basics/Math/PolarToCartesian/applet/loading.gif create mode 100644 java/examples/Basics/Math/Random/Random.pde create mode 100644 java/examples/Basics/Math/Random/applet/Random.java create mode 100644 java/examples/Basics/Math/Random/applet/Random.pde create mode 100644 java/examples/Basics/Math/Random/applet/loading.gif create mode 100644 java/examples/Basics/Math/Sine/Sine.pde create mode 100644 java/examples/Basics/Math/Sine/applet/Sine.java create mode 100644 java/examples/Basics/Math/Sine/applet/Sine.pde create mode 100644 java/examples/Basics/Math/Sine/applet/loading.gif create mode 100644 java/examples/Basics/Math/SineCosine/SineCosine.pde create mode 100644 java/examples/Basics/Math/SineCosine/applet/SineCosine.java create mode 100644 java/examples/Basics/Math/SineCosine/applet/SineCosine.pde create mode 100644 java/examples/Basics/Math/SineCosine/applet/loading.gif create mode 100644 java/examples/Basics/Math/SineWave/SineWave.pde create mode 100644 java/examples/Basics/Math/SineWave/applet/SineWave.java create mode 100644 java/examples/Basics/Math/SineWave/applet/SineWave.pde create mode 100644 java/examples/Basics/Math/SineWave/applet/loading.gif create mode 100644 java/examples/Basics/Objects/CompositeObjects/CompositeObjects.pde create mode 100644 java/examples/Basics/Objects/CompositeObjects/Egg.pde create mode 100644 java/examples/Basics/Objects/CompositeObjects/EggRing.pde create mode 100644 java/examples/Basics/Objects/CompositeObjects/Ring.pde create mode 100644 java/examples/Basics/Objects/CompositeObjects/applet/CompositeObjects.java create mode 100644 java/examples/Basics/Objects/CompositeObjects/applet/CompositeObjects.pde create mode 100644 java/examples/Basics/Objects/CompositeObjects/applet/loading.gif create mode 100644 java/examples/Basics/Objects/Inheritance/Inheritance.pde create mode 100644 java/examples/Basics/Objects/Inheritance/applet/Inheritance.java create mode 100644 java/examples/Basics/Objects/Inheritance/applet/Inheritance.pde create mode 100644 java/examples/Basics/Objects/Inheritance/applet/loading.gif create mode 100644 java/examples/Basics/Objects/MultipleConstructors/MultipleConstructors.pde create mode 100644 java/examples/Basics/Objects/MultipleConstructors/applet/MultipleConstructors.java create mode 100644 java/examples/Basics/Objects/MultipleConstructors/applet/MultipleConstructors.pde create mode 100644 java/examples/Basics/Objects/MultipleConstructors/applet/loading.gif create mode 100644 java/examples/Basics/Objects/Neighborhood/Neighborhood.pde create mode 100644 java/examples/Basics/Objects/Neighborhood/applet/Neighborhood.java create mode 100644 java/examples/Basics/Objects/Neighborhood/applet/Neighborhood.pde create mode 100644 java/examples/Basics/Objects/Neighborhood/applet/loading.gif create mode 100644 java/examples/Basics/Objects/Objects/Objects.pde create mode 100644 java/examples/Basics/Objects/Objects/applet/Objects.java create mode 100644 java/examples/Basics/Objects/Objects/applet/Objects.pde create mode 100644 java/examples/Basics/Objects/Objects/applet/loading.gif create mode 100644 java/examples/Basics/Shape/DisableStyle/DisableStyle.pde create mode 100644 java/examples/Basics/Shape/DisableStyle/applet/DisableStyle.java create mode 100644 java/examples/Basics/Shape/DisableStyle/applet/DisableStyle.pde create mode 100644 java/examples/Basics/Shape/DisableStyle/applet/loading.gif create mode 100644 java/examples/Basics/Shape/DisableStyle/data/bot1.svg create mode 100644 java/examples/Basics/Shape/GetChild/GetChild.pde create mode 100644 java/examples/Basics/Shape/GetChild/applet/GetChild.java create mode 100644 java/examples/Basics/Shape/GetChild/applet/GetChild.pde create mode 100644 java/examples/Basics/Shape/GetChild/applet/loading.gif create mode 100644 java/examples/Basics/Shape/GetChild/data/usa-wikipedia.svg create mode 100644 java/examples/Basics/Shape/LoadDisplayShape/LoadDisplayShape.pde create mode 100644 java/examples/Basics/Shape/LoadDisplayShape/applet/LoadDisplayShape.java create mode 100644 java/examples/Basics/Shape/LoadDisplayShape/applet/LoadDisplayShape.pde create mode 100644 java/examples/Basics/Shape/LoadDisplayShape/applet/loading.gif create mode 100644 java/examples/Basics/Shape/LoadDisplayShape/data/bot1.svg create mode 100644 java/examples/Basics/Shape/ScaleShape/ScaleShape.pde create mode 100644 java/examples/Basics/Shape/ScaleShape/applet/ScaleShape.java create mode 100644 java/examples/Basics/Shape/ScaleShape/applet/ScaleShape.pde create mode 100644 java/examples/Basics/Shape/ScaleShape/applet/loading.gif create mode 100644 java/examples/Basics/Shape/ScaleShape/data/bot1.svg create mode 100644 java/examples/Basics/Structure/Coordinates/Coordinates.pde create mode 100644 java/examples/Basics/Structure/Coordinates/applet/Coordinates.java create mode 100644 java/examples/Basics/Structure/Coordinates/applet/Coordinates.pde create mode 100644 java/examples/Basics/Structure/Coordinates/applet/loading.gif create mode 100644 java/examples/Basics/Structure/CreateGraphics/CreateGraphics.pde create mode 100644 java/examples/Basics/Structure/CreateGraphics/applet/CreateGraphics.java create mode 100644 java/examples/Basics/Structure/CreateGraphics/applet/CreateGraphics.pde create mode 100644 java/examples/Basics/Structure/CreateGraphics/applet/loading.gif create mode 100644 java/examples/Basics/Structure/Functions/Functions.pde create mode 100644 java/examples/Basics/Structure/Functions/applet/Functions.java create mode 100644 java/examples/Basics/Structure/Functions/applet/Functions.pde create mode 100644 java/examples/Basics/Structure/Functions/applet/loading.gif create mode 100644 java/examples/Basics/Structure/Loop/Loop.pde create mode 100644 java/examples/Basics/Structure/Loop/applet/Loop.java create mode 100644 java/examples/Basics/Structure/Loop/applet/Loop.pde create mode 100644 java/examples/Basics/Structure/Loop/applet/loading.gif create mode 100644 java/examples/Basics/Structure/NoLoop/NoLoop.pde create mode 100644 java/examples/Basics/Structure/NoLoop/applet/NoLoop.java create mode 100644 java/examples/Basics/Structure/NoLoop/applet/NoLoop.pde create mode 100644 java/examples/Basics/Structure/NoLoop/applet/loading.gif create mode 100644 java/examples/Basics/Structure/Recursion/Recursion.pde create mode 100644 java/examples/Basics/Structure/Recursion/applet/Recursion.java create mode 100644 java/examples/Basics/Structure/Recursion/applet/Recursion.pde create mode 100644 java/examples/Basics/Structure/Recursion/applet/loading.gif create mode 100644 java/examples/Basics/Structure/Recursion2/Recursion2.pde create mode 100644 java/examples/Basics/Structure/Recursion2/applet/Recursion2.java create mode 100644 java/examples/Basics/Structure/Recursion2/applet/Recursion2.pde create mode 100644 java/examples/Basics/Structure/Recursion2/applet/loading.gif create mode 100644 java/examples/Basics/Structure/Redraw/Redraw.pde create mode 100644 java/examples/Basics/Structure/Redraw/applet/Redraw.java create mode 100644 java/examples/Basics/Structure/Redraw/applet/Redraw.pde create mode 100644 java/examples/Basics/Structure/Redraw/applet/loading.gif create mode 100644 java/examples/Basics/Structure/SetupDraw/SetupDraw.pde create mode 100644 java/examples/Basics/Structure/SetupDraw/applet/SetupDraw.java create mode 100644 java/examples/Basics/Structure/SetupDraw/applet/SetupDraw.pde create mode 100644 java/examples/Basics/Structure/SetupDraw/applet/loading.gif create mode 100644 java/examples/Basics/Structure/StatementsComments/StatementsComments.pde create mode 100644 java/examples/Basics/Structure/StatementsComments/applet/StatementsComments.java create mode 100644 java/examples/Basics/Structure/StatementsComments/applet/StatementsComments.pde create mode 100644 java/examples/Basics/Structure/StatementsComments/applet/loading.gif create mode 100644 java/examples/Basics/Structure/WidthHeight/WidthHeight.pde create mode 100644 java/examples/Basics/Structure/WidthHeight/applet/WidthHeight.java create mode 100644 java/examples/Basics/Structure/WidthHeight/applet/WidthHeight.pde create mode 100644 java/examples/Basics/Structure/WidthHeight/applet/loading.gif create mode 100644 java/examples/Basics/Transform/Arm/Arm.pde create mode 100644 java/examples/Basics/Transform/Arm/applet/Arm.java create mode 100644 java/examples/Basics/Transform/Arm/applet/Arm.pde create mode 100644 java/examples/Basics/Transform/Arm/applet/loading.gif create mode 100644 java/examples/Basics/Transform/Rotate/Rotate.pde create mode 100644 java/examples/Basics/Transform/Rotate/applet/Rotate.java create mode 100644 java/examples/Basics/Transform/Rotate/applet/Rotate.pde create mode 100644 java/examples/Basics/Transform/Rotate/applet/loading.gif create mode 100644 java/examples/Basics/Transform/Scale/Scale.pde create mode 100644 java/examples/Basics/Transform/Scale/applet/Scale.java create mode 100644 java/examples/Basics/Transform/Scale/applet/Scale.pde create mode 100644 java/examples/Basics/Transform/Scale/applet/loading.gif create mode 100644 java/examples/Basics/Transform/Translate/Translate.pde create mode 100644 java/examples/Basics/Transform/Translate/applet/Translate.java create mode 100644 java/examples/Basics/Transform/Translate/applet/Translate.pde create mode 100644 java/examples/Basics/Transform/Translate/applet/loading.gif create mode 100644 java/examples/Basics/Transform/TriangleFlower/TriangleFlower.pde create mode 100644 java/examples/Basics/Transform/TriangleFlower/applet/TriangleFlower.java create mode 100644 java/examples/Basics/Transform/TriangleFlower/applet/TriangleFlower.pde create mode 100644 java/examples/Basics/Transform/TriangleFlower/applet/loading.gif create mode 100644 java/examples/Basics/Typography/Letters/Letters.pde create mode 100644 java/examples/Basics/Typography/Letters/applet/Letters.java create mode 100644 java/examples/Basics/Typography/Letters/applet/Letters.pde create mode 100644 java/examples/Basics/Typography/Letters/applet/loading.gif create mode 100644 java/examples/Basics/Typography/Letters/data/CourierNew36.vlw create mode 100644 java/examples/Basics/Typography/Words/Words.pde create mode 100644 java/examples/Basics/Typography/Words/applet/Words.java create mode 100644 java/examples/Basics/Typography/Words/applet/Words.pde create mode 100644 java/examples/Basics/Typography/Words/applet/loading.gif create mode 100644 java/examples/Basics/Typography/Words/data/Ziggurat-HTF-Black-32.vlw create mode 100644 java/examples/Basics/Web/EmbeddedLinks/EmbeddedLinks.pde create mode 100644 java/examples/Basics/Web/EmbeddedLinks/applet/EmbeddedLinks.java create mode 100644 java/examples/Basics/Web/EmbeddedLinks/applet/EmbeddedLinks.pde create mode 100644 java/examples/Basics/Web/EmbeddedLinks/applet/loading.gif create mode 100644 java/examples/Basics/Web/LoadingImages/LoadingImages.pde create mode 100644 java/examples/Basics/Web/LoadingImages/applet/LoadingImages.java create mode 100644 java/examples/Basics/Web/LoadingImages/applet/LoadingImages.pde create mode 100644 java/examples/Basics/Web/LoadingImages/applet/loading.gif create mode 100644 java/examples/GettingStartedBook/Chapter02/Ex_02_01/Ex_02_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter02/Ex_02_02/Ex_02_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_01/Ex_03_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_02/Ex_03_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_03/Ex_03_03.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_04/Ex_03_04.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_05/Ex_03_05.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_06/Ex_03_06.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_07/Ex_03_07.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_08/Ex_03_08.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_09/Ex_03_09.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_10/Ex_03_10.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_11/Ex_03_11.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_12/Ex_03_12.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_13/Ex_03_13.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_14/Ex_03_14.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_15/Ex_03_15.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_16/Ex_03_16.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_17/Ex_03_17.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_18/Ex_03_18.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_19/Ex_03_19.pde create mode 100644 java/examples/GettingStartedBook/Chapter03/Ex_03_20/Ex_03_20.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_01/Ex_04_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_02/Ex_04_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_03/Ex_04_03.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_04/Ex_04_04.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_05/Ex_04_05.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_06/Ex_04_06.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_07/Ex_04_07.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_08/Ex_04_08.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_09/Ex_04_09.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_10/Ex_04_10.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_11/Ex_04_11.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_12/Ex_04_12.pde create mode 100644 java/examples/GettingStartedBook/Chapter04/Ex_04_13/Ex_04_13.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_01/Ex_05_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_02/Ex_05_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_03/Ex_05_03.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_04/Ex_05_04.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_05/Ex_05_05.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_06/Ex_05_06.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_07/Ex_05_07.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_08/Ex_05_08.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_09/Ex_05_09.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_10/Ex_05_10.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_11/Ex_05_11.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_12/Ex_05_12.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_13/Ex_05_13.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_14/Ex_05_14.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_15/Ex_05_15.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_16/Ex_05_16.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_17/Ex_05_17.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_18/Ex_05_18.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_19/Ex_05_19.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_20/Ex_05_20.pde create mode 100644 java/examples/GettingStartedBook/Chapter05/Ex_05_21/Ex_05_21.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_01/Ex_06_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_02/Ex_06_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_03/Ex_06_03.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_04/Ex_06_04.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_04/data/clouds.gif create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_05/Ex_06_05.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_06/Ex_06_06.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_06/data/AndaleMono-36.vlw create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_07/Ex_06_07.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_07/data/AndaleMono-24.vlw create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_08/Ex_06_08.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_08/data/AndaleMono-24.vlw create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_09/Ex_06_09.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_09/data/network.svg create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_10/Ex_06_10.pde create mode 100644 java/examples/GettingStartedBook/Chapter06/Ex_06_10/data/network.svg create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_01/Ex_07_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_02/Ex_07_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_03/Ex_07_03.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_04/Ex_07_04.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_05/Ex_07_05.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_06/Ex_07_06.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_07/Ex_07_07.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_08/Ex_07_08.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_09/Ex_07_09.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_10/Ex_07_10.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_11/Ex_07_11.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_12/Ex_07_12.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_13/Ex_07_13.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_14/Ex_07_14.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_15/Ex_07_15.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_16/Ex_07_16.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_17/Ex_07_17.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_18/Ex_07_18.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_19/Ex_07_19.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_20/Ex_07_20.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_21/Ex_07_21.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_22/Ex_07_22.pde create mode 100644 java/examples/GettingStartedBook/Chapter07/Ex_07_23/Ex_07_23.pde create mode 100644 java/examples/GettingStartedBook/Chapter08/Ex_08_01/Ex_08_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter08/Ex_08_02/Ex_08_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter08/Ex_08_03/Ex_08_03.pde create mode 100644 java/examples/GettingStartedBook/Chapter08/Ex_08_04/Ex_08_04.pde create mode 100644 java/examples/GettingStartedBook/Chapter08/Ex_08_05/Ex_08_05.pde create mode 100644 java/examples/GettingStartedBook/Chapter08/Ex_08_06/Ex_08_06.pde create mode 100644 java/examples/GettingStartedBook/Chapter08/Ex_08_07/Ex_08_07.pde create mode 100644 java/examples/GettingStartedBook/Chapter08/Ex_08_08/Ex_08_08.pde create mode 100644 java/examples/GettingStartedBook/Chapter09/Ex_09_01/Ex_09_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter09/Ex_09_02/Ex_09_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_01/Ex_10_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_02/Ex_10_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_03/Ex_10_03.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_04/Ex_10_04.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_05/Ex_10_05.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_06/Ex_10_06.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_07/Ex_10_07.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_08/Ex_10_08.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_09/Ex_10_09.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_10/Ex_10_10.pde create mode 100644 java/examples/GettingStartedBook/Chapter10/Ex_10_11/Ex_10_11.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_01/Ex_11_01.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_02/Ex_11_02.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_03/Ex_11_03.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_04/Ex_11_04.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_05/Ex_11_05.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_06/Ex_11_06.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_07/Ex_11_07.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_08/Ex_11_08.pde create mode 100644 java/examples/GettingStartedBook/Chapter11/Ex_11_09/Ex_11_09.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot1_Draw/Robot1_Draw.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot2_Variables/Robot2_Variables.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot3_Response/Robot3_Response.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot4_Media/Robot4_Media.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot1.svg create mode 100644 java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot2.svg create mode 100644 java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot3.svg create mode 100644 java/examples/GettingStartedBook/Robots/Robot5_Motion/Robot5_Motion.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot6_Functions/Robot6_Functions.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot7_Objects/Robot7_Objects.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot7_Objects/data/robot1.svg create mode 100644 java/examples/GettingStartedBook/Robots/Robot7_Objects/data/robot2.svg create mode 100644 java/examples/GettingStartedBook/Robots/Robot8_Arrays/Robot8_Arrays.pde create mode 100644 java/examples/GettingStartedBook/Robots/Robot8_Arrays/data/robot1.svg create mode 100644 java/examples/GettingStartedBook/media/AndaleMono-24.vlw create mode 100644 java/examples/GettingStartedBook/media/AndaleMono-36.vlw create mode 100644 java/examples/GettingStartedBook/media/clouds.gif create mode 100644 java/examples/GettingStartedBook/media/network.svg create mode 100644 java/examples/GettingStartedBook/media/robot1.svg create mode 100644 java/examples/GettingStartedBook/media/robot2.svg create mode 100644 java/examples/Library/DXF Export/SimpleExport/SimpleExport.pde create mode 100755 java/examples/Library/Minim (Sound)/AddListener/AddListener.pde create mode 100755 java/examples/Library/Minim (Sound)/AddListener/Waveform.pde create mode 100755 java/examples/Library/Minim (Sound)/AddListener/data/groove.mp3 create mode 100755 java/examples/Library/Minim (Sound)/BandPassFilter/BandPassFilter.pde create mode 100755 java/examples/Library/Minim (Sound)/BandPassFilter/data/groove.mp3 create mode 100755 java/examples/Library/Minim (Sound)/ForwardFFT/ForwardFFT.pde create mode 100755 java/examples/Library/Minim (Sound)/ForwardFFT/data/jingle.mp3 create mode 100755 java/examples/Library/Minim (Sound)/FrequencyEnergy/BeatListener.pde create mode 100755 java/examples/Library/Minim (Sound)/FrequencyEnergy/FrequencyEnergy.pde create mode 100755 java/examples/Library/Minim (Sound)/FrequencyEnergy/data/marcus_kellis_theme.mp3 create mode 100755 java/examples/Library/Minim (Sound)/GetLineIn/GetLineIn.pde create mode 100755 java/examples/Library/Minim (Sound)/GetLineOut/GetLineOut.pde create mode 100755 java/examples/Library/Minim (Sound)/GetMetaData/GetMetaData.pde create mode 100755 java/examples/Library/Minim (Sound)/GetMetaData/data/groove.mp3 create mode 100755 java/examples/Library/Minim (Sound)/GetMetaData/data/serif.vlw create mode 100755 java/examples/Library/Minim (Sound)/GetSetPan/GetSetPan.pde create mode 100755 java/examples/Library/Minim (Sound)/GetSetPan/Waveform.pde create mode 100755 java/examples/Library/Minim (Sound)/LinearAverages/LinearAverages.pde create mode 100755 java/examples/Library/Minim (Sound)/LinearAverages/data/jingle.mp3 create mode 100755 java/examples/Library/Minim (Sound)/LoadFile/LoadFile.pde create mode 100755 java/examples/Library/Minim (Sound)/LoadFile/data/groove.mp3 create mode 100755 java/examples/Library/Minim (Sound)/LoadSample/LoadSample.pde create mode 100755 java/examples/Library/Minim (Sound)/LoadSample/data/BD.mp3 create mode 100755 java/examples/Library/Minim (Sound)/LoadSnippet/LoadSnippet.pde create mode 100755 java/examples/Library/Minim (Sound)/LoadSnippet/data/groove.mp3 create mode 100755 java/examples/Library/Minim (Sound)/RecordLineIn/RecordLineIn.pde create mode 100755 java/examples/Library/Minim (Sound)/SineWaveSignal/SineWaveSignal.pde create mode 100755 java/examples/Library/Minim (Sound)/UserDefinedEffect/ReverseEffect.pde create mode 100755 java/examples/Library/Minim (Sound)/UserDefinedEffect/UserDefinedEffect.pde create mode 100755 java/examples/Library/Minim (Sound)/UserDefinedEffect/data/groove.mp3 create mode 100755 java/examples/Library/Minim (Sound)/UserDefinedSignal/MouseSaw.pde create mode 100755 java/examples/Library/Minim (Sound)/UserDefinedSignal/UserDefinedSignal.pde create mode 100644 java/examples/Library/Network/CarnivoreClient/CarnivoreClient.pde create mode 100644 java/examples/Library/Network/CarnivoreClient/data/CourierNew-12.vlw create mode 100644 java/examples/Library/Network/ChatServer/ChatServer.pde create mode 100644 java/examples/Library/Network/ChatServer/data/ScalaSans-Caps-32.vlw create mode 100644 java/examples/Library/Network/HTTPClient/HTTPClient.pde create mode 100644 java/examples/Library/Network/SharedCanvasClient/SharedCanvasClient.pde create mode 100644 java/examples/Library/Network/SharedCanvasServer/SharedCanvasServer.pde create mode 100644 java/examples/Library/Network/YahooSearch/YahooSearch.pde create mode 100644 java/examples/Library/OpenGL/Esfera/Esfera.pde create mode 100644 java/examples/Library/OpenGL/ExtrusionGL/ExtrusionGL.pde create mode 100644 java/examples/Library/OpenGL/Geometry/Geometry.pde create mode 100644 java/examples/Library/OpenGL/LightsGL/LightsGL.pde create mode 100644 java/examples/Library/OpenGL/SpaceJunk/Cube.pde create mode 100644 java/examples/Library/OpenGL/SpaceJunk/SpaceJunk.pde create mode 100644 java/examples/Library/OpenGL/TexturedSphere/TexturedSphere.pde create mode 100644 java/examples/Library/OpenGL/Yellowtail/Gesture.pde create mode 100644 java/examples/Library/OpenGL/Yellowtail/Vec3f.pde create mode 100644 java/examples/Library/OpenGL/Yellowtail/Yellowtail.pde create mode 100644 java/examples/Library/PDF Export/Complex3D/Complex3D.pde create mode 100644 java/examples/Library/PDF Export/LargePage/LargePage.pde create mode 100644 java/examples/Library/PDF Export/ManyPDFs/ManyPDFs.pde create mode 100644 java/examples/Library/PDF Export/ManyPages/ManyPages.pde create mode 100644 java/examples/Library/PDF Export/MousePress/MousePress.pde create mode 100644 java/examples/Library/PDF Export/MultipleFrames/MultipleFrames.pde create mode 100644 java/examples/Library/PDF Export/OneFrame/OneFrame.pde create mode 100644 java/examples/Library/PDF Export/RandomBook/RandomBook.pde create mode 100644 java/examples/Library/Serial/SerialCallResponse/SerialCallResponse.pde create mode 100644 java/examples/Library/Serial/SerialDuplex/SerialDuplex.pde create mode 100644 java/examples/Library/Serial/SerialDuplex/data/CourierNewPSMT-24.vlw create mode 100644 java/examples/Library/Serial/SerialMultiple/SerialMultiple.pde create mode 100644 java/examples/Library/Serial/SimpleRead/SimpleRead.pde create mode 100644 java/examples/Library/Serial/SimpleWrite/SimpleWrite.pde create mode 100644 java/examples/Library/Video (Capture)/AsciiVideo/AsciiVideo.pde create mode 100644 java/examples/Library/Video (Capture)/AsciiVideo/data/UniversLTStd-Light-48.vlw create mode 100644 java/examples/Library/Video (Capture)/BackgroundSubtraction/BackgroundSubtraction.pde create mode 100644 java/examples/Library/Video (Capture)/BrightnessThresholding/BrightnessThresholding.pde create mode 100644 java/examples/Library/Video (Capture)/BrightnessTracking/BrightnessTracking.pde create mode 100644 java/examples/Library/Video (Capture)/ColorSorting/ColorSorting.pde create mode 100644 java/examples/Library/Video (Capture)/ColorSorting/Tuple.pde create mode 100644 java/examples/Library/Video (Capture)/FrameDifferencing/FrameDifferencing.pde create mode 100644 java/examples/Library/Video (Capture)/Framingham/Framingham.pde create mode 100644 java/examples/Library/Video (Capture)/GettingStartedCapture/GettingStartedCapture.pde create mode 100644 java/examples/Library/Video (Capture)/HsvSpace/HsvSpace.pde create mode 100644 java/examples/Library/Video (Capture)/HsvSpace/Tuple.pde create mode 100644 java/examples/Library/Video (Capture)/LivePocky/LivePocky.pde create mode 100644 java/examples/Library/Video (Capture)/Mirror/Mirror.pde create mode 100644 java/examples/Library/Video (Capture)/Mirror2/Mirror2.pde create mode 100644 java/examples/Library/Video (Capture)/RadialPocky/RadialPocky.pde create mode 100644 java/examples/Library/Video (Capture)/SlitScan/SlitScan.pde create mode 100644 java/examples/Library/Video (Movie)/Loop/Loop.pde create mode 100644 java/examples/Library/Video (Movie)/Pixelate/Pixelate.pde create mode 100755 java/examples/Library/Video (MovieMaker)/DrawingMovie/DrawingMovie.pde create mode 100644 java/examples/Topics/Advanced Data/ArrayListClass/ArrayListClass.pde create mode 100644 java/examples/Topics/Advanced Data/ArrayListClass/Ball.pde create mode 100644 java/examples/Topics/Advanced Data/ArrayListClass/applet/ArrayListClass.java create mode 100644 java/examples/Topics/Advanced Data/ArrayListClass/applet/ArrayListClass.pde create mode 100644 java/examples/Topics/Advanced Data/ArrayListClass/applet/Ball.pde create mode 100644 java/examples/Topics/Advanced Data/ArrayListClass/applet/loading.gif create mode 100644 java/examples/Topics/Advanced Data/DirectoryList/DirectoryList.pde create mode 100644 java/examples/Topics/Advanced Data/HashMapClass/HashMapClass.pde create mode 100644 java/examples/Topics/Advanced Data/HashMapClass/Word.pde create mode 100644 java/examples/Topics/Advanced Data/HashMapClass/applet/HashMapClass.java create mode 100644 java/examples/Topics/Advanced Data/HashMapClass/applet/HashMapClass.pde create mode 100644 java/examples/Topics/Advanced Data/HashMapClass/applet/Word.pde create mode 100644 java/examples/Topics/Advanced Data/HashMapClass/applet/loading.gif create mode 100644 java/examples/Topics/Advanced Data/HashMapClass/data/dracula.txt create mode 100644 java/examples/Topics/Advanced Data/HashMapClass/data/hamlet.txt create mode 100644 java/examples/Topics/Animation/AnimatedSprite/AnimatedSprite.pde create mode 100644 java/examples/Topics/Animation/AnimatedSprite/Animation.pde create mode 100644 java/examples/Topics/Animation/AnimatedSprite/applet/AnimatedSprite.java create mode 100644 java/examples/Topics/Animation/AnimatedSprite/applet/AnimatedSprite.pde create mode 100644 java/examples/Topics/Animation/AnimatedSprite/applet/Animation.pde create mode 100644 java/examples/Topics/Animation/AnimatedSprite/applet/loading.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0000.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0001.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0002.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0003.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0004.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0005.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0006.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0007.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0008.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0009.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0010.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0011.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0012.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0013.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0014.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0015.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0016.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0017.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0018.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0019.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0020.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0021.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0022.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0023.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0024.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0025.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0026.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0027.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0028.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0029.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0030.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0031.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0032.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0033.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0034.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0035.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0036.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Shifty_0037.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0000.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0001.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0002.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0003.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0004.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0005.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0006.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0007.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0008.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0009.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0010.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0011.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0012.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0013.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0014.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0015.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0016.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0017.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0018.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0019.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0020.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0021.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0022.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0023.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0024.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0025.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0026.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0027.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0028.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0029.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0030.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0031.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0032.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0033.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0034.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0035.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0036.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0037.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0038.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0039.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0040.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0041.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0042.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0043.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0044.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0045.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0046.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0047.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0048.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0049.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0050.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0051.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0052.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0053.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0054.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0055.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0056.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0057.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0058.gif create mode 100644 java/examples/Topics/Animation/AnimatedSprite/data/PT_Teddy_0059.gif create mode 100644 java/examples/Topics/Animation/Sequential/Sequential.pde create mode 100644 java/examples/Topics/Animation/Sequential/applet/Sequential.java create mode 100644 java/examples/Topics/Animation/Sequential/applet/Sequential.pde create mode 100644 java/examples/Topics/Animation/Sequential/applet/loading.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0000.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0001.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0002.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0003.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0004.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0005.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0006.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0007.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0008.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0009.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0010.gif create mode 100644 java/examples/Topics/Animation/Sequential/data/PT_anim0011.gif create mode 100644 java/examples/Topics/Cellular Automata/Conway/Conway.pde create mode 100644 java/examples/Topics/Cellular Automata/Conway/applet/Conway.java create mode 100644 java/examples/Topics/Cellular Automata/Conway/applet/Conway.pde create mode 100644 java/examples/Topics/Cellular Automata/Conway/applet/loading.gif create mode 100644 java/examples/Topics/Cellular Automata/Spore1/Spore1.pde create mode 100644 java/examples/Topics/Cellular Automata/Spore1/applet/Spore1.java create mode 100644 java/examples/Topics/Cellular Automata/Spore1/applet/Spore1.pde create mode 100644 java/examples/Topics/Cellular Automata/Spore1/applet/loading.gif create mode 100644 java/examples/Topics/Cellular Automata/Spore2/Spore2.pde create mode 100644 java/examples/Topics/Cellular Automata/Spore2/applet/Spore2.java create mode 100644 java/examples/Topics/Cellular Automata/Spore2/applet/Spore2.pde create mode 100644 java/examples/Topics/Cellular Automata/Spore2/applet/loading.gif create mode 100644 java/examples/Topics/Cellular Automata/Wolfram/CA.pde create mode 100644 java/examples/Topics/Cellular Automata/Wolfram/Wolfram.pde create mode 100644 java/examples/Topics/Cellular Automata/Wolfram/applet/CA.pde create mode 100644 java/examples/Topics/Cellular Automata/Wolfram/applet/Wolfram.java create mode 100644 java/examples/Topics/Cellular Automata/Wolfram/applet/Wolfram.pde create mode 100644 java/examples/Topics/Cellular Automata/Wolfram/applet/loading.gif create mode 100644 java/examples/Topics/Drawing/Animator/Animator.pde create mode 100644 java/examples/Topics/Drawing/Animator/applet/Animator.java create mode 100644 java/examples/Topics/Drawing/Animator/applet/Animator.pde create mode 100644 java/examples/Topics/Drawing/Animator/applet/loading.gif create mode 100644 java/examples/Topics/Drawing/ContinuousLines/ContinuousLines.pde create mode 100644 java/examples/Topics/Drawing/ContinuousLines/applet/ContinuousLines.java create mode 100644 java/examples/Topics/Drawing/ContinuousLines/applet/ContinuousLines.pde create mode 100644 java/examples/Topics/Drawing/ContinuousLines/applet/loading.gif create mode 100644 java/examples/Topics/Drawing/CustomTool/CustomTool.pde create mode 100644 java/examples/Topics/Drawing/CustomTool/applet/CustomTool.java create mode 100644 java/examples/Topics/Drawing/CustomTool/applet/CustomTool.pde create mode 100644 java/examples/Topics/Drawing/CustomTool/applet/loading.gif create mode 100644 java/examples/Topics/Drawing/Pattern/Pattern.pde create mode 100644 java/examples/Topics/Drawing/Pattern/applet/Pattern.java create mode 100644 java/examples/Topics/Drawing/Pattern/applet/Pattern.pde create mode 100644 java/examples/Topics/Drawing/Pattern/applet/loading.gif create mode 100644 java/examples/Topics/Drawing/Pulses/Pulses.pde create mode 100644 java/examples/Topics/Drawing/Pulses/applet/Pulses.java create mode 100644 java/examples/Topics/Drawing/Pulses/applet/Pulses.pde create mode 100644 java/examples/Topics/Drawing/Pulses/applet/loading.gif create mode 100644 java/examples/Topics/Drawing/ScribblePlotter/ScribblePlotter.pde create mode 100644 java/examples/Topics/Drawing/ScribblePlotter/applet/ScribblePlotter.java create mode 100644 java/examples/Topics/Drawing/ScribblePlotter/applet/ScribblePlotter.pde create mode 100644 java/examples/Topics/Drawing/ScribblePlotter/applet/loading.gif create mode 100644 java/examples/Topics/Effects/FireCube/FireCube.pde create mode 100644 java/examples/Topics/Effects/FireCube/applet/FireCube.java create mode 100644 java/examples/Topics/Effects/FireCube/applet/FireCube.pde create mode 100644 java/examples/Topics/Effects/FireCube/applet/loading.gif create mode 100644 java/examples/Topics/Effects/Lens/Lens.pde create mode 100644 java/examples/Topics/Effects/Lens/applet/Lens.java create mode 100644 java/examples/Topics/Effects/Lens/applet/Lens.pde create mode 100644 java/examples/Topics/Effects/Lens/applet/loading.gif create mode 100644 java/examples/Topics/Effects/Metaball/Metaball.pde create mode 100644 java/examples/Topics/Effects/Metaball/applet/Metaball.java create mode 100644 java/examples/Topics/Effects/Metaball/applet/Metaball.pde create mode 100644 java/examples/Topics/Effects/Metaball/applet/loading.gif create mode 100644 java/examples/Topics/Effects/Plasma/Plasma.pde create mode 100644 java/examples/Topics/Effects/Plasma/applet/Plasma.java create mode 100644 java/examples/Topics/Effects/Plasma/applet/Plasma.pde create mode 100644 java/examples/Topics/Effects/Plasma/applet/loading.gif create mode 100644 java/examples/Topics/Effects/Tunnel/Tunnel.pde create mode 100644 java/examples/Topics/Effects/Tunnel/applet/Tunnel.java create mode 100644 java/examples/Topics/Effects/Tunnel/applet/Tunnel.pde create mode 100644 java/examples/Topics/Effects/Tunnel/applet/loading.gif create mode 100644 java/examples/Topics/Effects/UnlimitedSprites/UnlimitedSprites.pde create mode 100644 java/examples/Topics/Effects/UnlimitedSprites/applet/UnlimitedSprites.java create mode 100644 java/examples/Topics/Effects/UnlimitedSprites/applet/UnlimitedSprites.pde create mode 100644 java/examples/Topics/Effects/UnlimitedSprites/applet/loading.gif create mode 100644 java/examples/Topics/Effects/Wormhole/Wormhole.pde create mode 100644 java/examples/Topics/Effects/Wormhole/applet/Wormhole.java create mode 100644 java/examples/Topics/Effects/Wormhole/applet/Wormhole.pde create mode 100644 java/examples/Topics/Effects/Wormhole/applet/loading.gif create mode 100644 java/examples/Topics/Effects/Wormhole/data/texture.gif create mode 100644 java/examples/Topics/File IO/LoadFile1/LoadFile1.pde create mode 100644 java/examples/Topics/File IO/LoadFile1/data/positions.txt create mode 100644 java/examples/Topics/File IO/LoadFile2/LoadFile2.pde create mode 100644 java/examples/Topics/File IO/LoadFile2/data/TheSans-Plain-12.vlw create mode 100644 java/examples/Topics/File IO/LoadFile2/data/cars2.tsv create mode 100644 java/examples/Topics/File IO/SaveFile1/SaveFile1.pde create mode 100644 java/examples/Topics/File IO/SaveFile2/SaveFile2.pde create mode 100644 java/examples/Topics/File IO/SaveManyImages/SaveManyImages.pde create mode 100644 java/examples/Topics/File IO/SaveOneImage/SaveOneImage.pde create mode 100644 java/examples/Topics/File IO/TileImages/TileImages.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Koch/Koch.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Koch/applet/Koch.java create mode 100644 java/examples/Topics/Fractals and L-Systems/Koch/applet/Koch.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Koch/applet/loading.gif create mode 100644 java/examples/Topics/Fractals and L-Systems/Mandelbrot/Mandelbrot.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Mandelbrot/applet/Mandelbrot.java create mode 100644 java/examples/Topics/Fractals and L-Systems/Mandelbrot/applet/Mandelbrot.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Mandelbrot/applet/loading.gif create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseSnowflake/LSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseSnowflake/PenroseSnowflake.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseSnowflake/PenroseSnowflakeLSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseSnowflake/applet/LSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseSnowflake/applet/PenroseSnowflake.java create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseSnowflake/applet/PenroseSnowflake.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseSnowflake/applet/PenroseSnowflakeLSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseSnowflake/applet/loading.gif create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseTile/LSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseTile/PenroseLSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseTile/PenroseTile.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseTile/applet/LSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseTile/applet/PenroseLSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseTile/applet/PenroseTile.java create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseTile/applet/PenroseTile.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/PenroseTile/applet/loading.gif create mode 100644 java/examples/Topics/Fractals and L-Systems/Pentigree/LSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Pentigree/Pentigree.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Pentigree/PentigreeLSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Pentigree/applet/LSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Pentigree/applet/Pentigree.java create mode 100644 java/examples/Topics/Fractals and L-Systems/Pentigree/applet/Pentigree.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Pentigree/applet/PentigreeLSystem.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Pentigree/applet/loading.gif create mode 100644 java/examples/Topics/Fractals and L-Systems/Tree/Tree.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Tree/applet/Tree.java create mode 100644 java/examples/Topics/Fractals and L-Systems/Tree/applet/Tree.pde create mode 100644 java/examples/Topics/Fractals and L-Systems/Tree/applet/loading.gif create mode 100644 java/examples/Topics/GUI/Button/Button.pde create mode 100644 java/examples/Topics/GUI/Button/applet/Button.java create mode 100644 java/examples/Topics/GUI/Button/applet/Button.pde create mode 100644 java/examples/Topics/GUI/Button/applet/loading.gif create mode 100644 java/examples/Topics/GUI/Buttons/Buttons.pde create mode 100644 java/examples/Topics/GUI/Buttons/applet/Buttons.java create mode 100644 java/examples/Topics/GUI/Buttons/applet/Buttons.pde create mode 100644 java/examples/Topics/GUI/Buttons/applet/loading.gif create mode 100644 java/examples/Topics/GUI/Handles/Handles.pde create mode 100644 java/examples/Topics/GUI/Handles/applet/Handles.java create mode 100644 java/examples/Topics/GUI/Handles/applet/Handles.pde create mode 100644 java/examples/Topics/GUI/Handles/applet/loading.gif create mode 100644 java/examples/Topics/GUI/ImageButton/ImageButton.pde create mode 100644 java/examples/Topics/GUI/ImageButton/applet/ImageButton.java create mode 100644 java/examples/Topics/GUI/ImageButton/applet/ImageButton.pde create mode 100644 java/examples/Topics/GUI/ImageButton/applet/loading.gif create mode 100644 java/examples/Topics/GUI/ImageButton/data/base.gif create mode 100644 java/examples/Topics/GUI/ImageButton/data/down.gif create mode 100644 java/examples/Topics/GUI/ImageButton/data/roll.gif create mode 100644 java/examples/Topics/GUI/Rollover/Rollover.pde create mode 100644 java/examples/Topics/GUI/Rollover/applet/Rollover.java create mode 100644 java/examples/Topics/GUI/Rollover/applet/Rollover.pde create mode 100644 java/examples/Topics/GUI/Rollover/applet/loading.gif create mode 100644 java/examples/Topics/GUI/Scrollbar/Scrollbar.pde create mode 100644 java/examples/Topics/GUI/Scrollbar/applet/Scrollbar.java create mode 100644 java/examples/Topics/GUI/Scrollbar/applet/Scrollbar.pde create mode 100644 java/examples/Topics/GUI/Scrollbar/applet/loading.gif create mode 100644 java/examples/Topics/Image Processing/Blur/Blur.pde create mode 100644 java/examples/Topics/Image Processing/Blur/applet/Blur.java create mode 100644 java/examples/Topics/Image Processing/Blur/applet/Blur.pde create mode 100644 java/examples/Topics/Image Processing/Blur/applet/loading.gif create mode 100644 java/examples/Topics/Image Processing/Brightness/Brightness.pde create mode 100644 java/examples/Topics/Image Processing/Brightness/applet/Brightness.java create mode 100644 java/examples/Topics/Image Processing/Brightness/applet/Brightness.pde create mode 100644 java/examples/Topics/Image Processing/Brightness/applet/loading.gif create mode 100644 java/examples/Topics/Image Processing/Convolution/Convolution.pde create mode 100644 java/examples/Topics/Image Processing/Convolution/applet/Convolution.java create mode 100644 java/examples/Topics/Image Processing/Convolution/applet/Convolution.pde create mode 100644 java/examples/Topics/Image Processing/Convolution/applet/loading.gif create mode 100644 java/examples/Topics/Image Processing/EdgeDetection/EdgeDetection.pde create mode 100644 java/examples/Topics/Image Processing/EdgeDetection/applet/EdgeDetection.java create mode 100644 java/examples/Topics/Image Processing/EdgeDetection/applet/EdgeDetection.pde create mode 100644 java/examples/Topics/Image Processing/EdgeDetection/applet/loading.gif create mode 100644 java/examples/Topics/Image Processing/Histogram/Histogram.pde create mode 100644 java/examples/Topics/Image Processing/Histogram/applet/Histogram.java create mode 100644 java/examples/Topics/Image Processing/Histogram/applet/Histogram.pde create mode 100644 java/examples/Topics/Image Processing/Histogram/applet/loading.gif create mode 100644 java/examples/Topics/Image Processing/LinearImage/LinearImage.pde create mode 100644 java/examples/Topics/Image Processing/LinearImage/applet/LinearImage.java create mode 100644 java/examples/Topics/Image Processing/LinearImage/applet/LinearImage.pde create mode 100644 java/examples/Topics/Image Processing/LinearImage/applet/loading.gif create mode 100644 java/examples/Topics/Image Processing/PixelArray/PixelArray.pde create mode 100644 java/examples/Topics/Image Processing/PixelArray/applet/PixelArray.java create mode 100644 java/examples/Topics/Image Processing/PixelArray/applet/PixelArray.pde create mode 100644 java/examples/Topics/Image Processing/PixelArray/applet/loading.gif create mode 100644 java/examples/Topics/Interaction/Follow1/Follow1.pde create mode 100644 java/examples/Topics/Interaction/Follow1/applet/Follow1.java create mode 100644 java/examples/Topics/Interaction/Follow1/applet/Follow1.pde create mode 100644 java/examples/Topics/Interaction/Follow1/applet/loading.gif create mode 100644 java/examples/Topics/Interaction/Follow2/Follow2.pde create mode 100644 java/examples/Topics/Interaction/Follow2/applet/Follow2.java create mode 100644 java/examples/Topics/Interaction/Follow2/applet/Follow2.pde create mode 100644 java/examples/Topics/Interaction/Follow2/applet/loading.gif create mode 100644 java/examples/Topics/Interaction/Follow3/Follow3.pde create mode 100644 java/examples/Topics/Interaction/Follow3/applet/Follow3.java create mode 100644 java/examples/Topics/Interaction/Follow3/applet/Follow3.pde create mode 100644 java/examples/Topics/Interaction/Follow3/applet/loading.gif create mode 100644 java/examples/Topics/Interaction/Reach1/Reach1.pde create mode 100644 java/examples/Topics/Interaction/Reach1/applet/Reach1.java create mode 100644 java/examples/Topics/Interaction/Reach1/applet/Reach1.pde create mode 100644 java/examples/Topics/Interaction/Reach1/applet/loading.gif create mode 100644 java/examples/Topics/Interaction/Reach2/Reach2.pde create mode 100644 java/examples/Topics/Interaction/Reach2/applet/Reach2.java create mode 100644 java/examples/Topics/Interaction/Reach2/applet/Reach2.pde create mode 100644 java/examples/Topics/Interaction/Reach2/applet/loading.gif create mode 100644 java/examples/Topics/Interaction/Reach3/Reach3.pde create mode 100644 java/examples/Topics/Interaction/Reach3/applet/Reach3.java create mode 100644 java/examples/Topics/Interaction/Reach3/applet/Reach3.pde create mode 100644 java/examples/Topics/Interaction/Reach3/applet/loading.gif create mode 100644 java/examples/Topics/Interaction/Tickle/Tickle.pde create mode 100644 java/examples/Topics/Interaction/Tickle/applet/Tickle.java create mode 100644 java/examples/Topics/Interaction/Tickle/applet/Tickle.pde create mode 100644 java/examples/Topics/Interaction/Tickle/applet/loading.gif create mode 100644 java/examples/Topics/Interaction/Tickle/data/AmericanTypewriter-24.vlw create mode 100644 java/examples/Topics/Motion/Bounce/Bounce.pde create mode 100644 java/examples/Topics/Motion/Bounce/applet/Bounce.java create mode 100644 java/examples/Topics/Motion/Bounce/applet/Bounce.pde create mode 100644 java/examples/Topics/Motion/Bounce/applet/loading.gif create mode 100644 java/examples/Topics/Motion/BouncyBubbles/BouncyBubbles.pde create mode 100644 java/examples/Topics/Motion/BouncyBubbles/applet/BouncyBubbles.java create mode 100644 java/examples/Topics/Motion/BouncyBubbles/applet/BouncyBubbles.pde create mode 100644 java/examples/Topics/Motion/BouncyBubbles/applet/loading.gif create mode 100644 java/examples/Topics/Motion/Brownian/Brownian.pde create mode 100644 java/examples/Topics/Motion/Brownian/applet/Brownian.java create mode 100644 java/examples/Topics/Motion/Brownian/applet/Brownian.pde create mode 100644 java/examples/Topics/Motion/Brownian/applet/loading.gif create mode 100644 java/examples/Topics/Motion/CircleCollision/Ball.pde create mode 100644 java/examples/Topics/Motion/CircleCollision/CircleCollision.pde create mode 100644 java/examples/Topics/Motion/CircleCollision/applet/Ball.pde create mode 100644 java/examples/Topics/Motion/CircleCollision/applet/CircleCollision.java create mode 100644 java/examples/Topics/Motion/CircleCollision/applet/CircleCollision.pde create mode 100644 java/examples/Topics/Motion/CircleCollision/applet/loading.gif create mode 100644 java/examples/Topics/Motion/Collision/Collision.pde create mode 100644 java/examples/Topics/Motion/Collision/applet/Collision.java create mode 100644 java/examples/Topics/Motion/Collision/applet/Collision.pde create mode 100644 java/examples/Topics/Motion/Collision/applet/loading.gif create mode 100644 java/examples/Topics/Motion/Linear/Linear.pde create mode 100644 java/examples/Topics/Motion/Linear/applet/Linear.java create mode 100644 java/examples/Topics/Motion/Linear/applet/Linear.pde create mode 100644 java/examples/Topics/Motion/Linear/applet/loading.gif create mode 100644 java/examples/Topics/Motion/MovingOnCurves/MovingOnCurves.pde create mode 100644 java/examples/Topics/Motion/MovingOnCurves/applet/MovingOnCurves.java create mode 100644 java/examples/Topics/Motion/MovingOnCurves/applet/MovingOnCurves.pde create mode 100644 java/examples/Topics/Motion/MovingOnCurves/applet/loading.gif create mode 100644 java/examples/Topics/Motion/Puff/Puff.pde create mode 100644 java/examples/Topics/Motion/Puff/applet/Puff.java create mode 100644 java/examples/Topics/Motion/Puff/applet/Puff.pde create mode 100644 java/examples/Topics/Motion/Puff/applet/loading.gif create mode 100644 java/examples/Topics/Motion/Reflection1/Reflection1.pde create mode 100644 java/examples/Topics/Motion/Reflection1/applet/Reflection1.java create mode 100644 java/examples/Topics/Motion/Reflection1/applet/Reflection1.pde create mode 100644 java/examples/Topics/Motion/Reflection1/applet/loading.gif create mode 100644 java/examples/Topics/Motion/Reflection2/Ground.pde create mode 100644 java/examples/Topics/Motion/Reflection2/Orb.pde create mode 100644 java/examples/Topics/Motion/Reflection2/Reflection2.pde create mode 100644 java/examples/Topics/Motion/Reflection2/applet/Ground.pde create mode 100644 java/examples/Topics/Motion/Reflection2/applet/Orb.pde create mode 100644 java/examples/Topics/Motion/Reflection2/applet/Reflection2.java create mode 100644 java/examples/Topics/Motion/Reflection2/applet/Reflection2.pde create mode 100644 java/examples/Topics/Motion/Reflection2/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/Chain/Chain.pde create mode 100644 java/examples/Topics/Simulate/Chain/applet/Chain.java create mode 100644 java/examples/Topics/Simulate/Chain/applet/Chain.pde create mode 100644 java/examples/Topics/Simulate/Chain/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/Flocking/Boid.pde create mode 100644 java/examples/Topics/Simulate/Flocking/Flock.pde create mode 100644 java/examples/Topics/Simulate/Flocking/Flocking.pde create mode 100644 java/examples/Topics/Simulate/Flocking/applet/Boid.pde create mode 100644 java/examples/Topics/Simulate/Flocking/applet/Flock.pde create mode 100644 java/examples/Topics/Simulate/Flocking/applet/Flocking.java create mode 100644 java/examples/Topics/Simulate/Flocking/applet/Flocking.pde create mode 100644 java/examples/Topics/Simulate/Flocking/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/Fluid/Fluid.pde create mode 100644 java/examples/Topics/Simulate/Fluid/applet/Fluid.java create mode 100644 java/examples/Topics/Simulate/Fluid/applet/Fluid.pde create mode 100644 java/examples/Topics/Simulate/Fluid/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/CrazyParticle.pde create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/MultipleParticleSystems.pde create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/Particle.pde create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/ParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/applet/CrazyParticle.pde create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/applet/MultipleParticleSystems.java create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/applet/MultipleParticleSystems.pde create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/applet/Particle.pde create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/applet/ParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/MultipleParticleSystems/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/SimpleParticleSystem/Particle.pde create mode 100644 java/examples/Topics/Simulate/SimpleParticleSystem/ParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/SimpleParticleSystem/SimpleParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/SimpleParticleSystem/applet/Particle.pde create mode 100644 java/examples/Topics/Simulate/SimpleParticleSystem/applet/ParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/SimpleParticleSystem/applet/SimpleParticleSystem.java create mode 100644 java/examples/Topics/Simulate/SimpleParticleSystem/applet/SimpleParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/SimpleParticleSystem/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/Smoke/Smoke.pde create mode 100644 java/examples/Topics/Simulate/Smoke/applet/Smoke.java create mode 100644 java/examples/Topics/Simulate/Smoke/applet/Smoke.pde create mode 100644 java/examples/Topics/Simulate/Smoke/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/Particle.pde create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/ParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/SmokeParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/applet/Particle.pde create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/applet/ParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/applet/SmokeParticleSystem.java create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/applet/SmokeParticleSystem.pde create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/SmokeParticleSystem/data/texture.gif create mode 100644 java/examples/Topics/Simulate/SoftBody/SoftBody.pde create mode 100644 java/examples/Topics/Simulate/SoftBody/applet/SoftBody.java create mode 100644 java/examples/Topics/Simulate/SoftBody/applet/SoftBody.pde create mode 100644 java/examples/Topics/Simulate/SoftBody/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/Spring/Spring.pde create mode 100644 java/examples/Topics/Simulate/Spring/applet/Spring.java create mode 100644 java/examples/Topics/Simulate/Spring/applet/Spring.pde create mode 100644 java/examples/Topics/Simulate/Spring/applet/loading.gif create mode 100644 java/examples/Topics/Simulate/Springs/Springs.pde create mode 100644 java/examples/Topics/Simulate/Springs/applet/Springs.java create mode 100644 java/examples/Topics/Simulate/Springs/applet/Springs.pde create mode 100644 java/examples/Topics/Simulate/Springs/applet/loading.gif diff --git a/java/examples/3D/Camera/MoveEye/MoveEye.pde b/java/examples/3D/Camera/MoveEye/MoveEye.pde new file mode 100644 index 000000000..6a6384640 --- /dev/null +++ b/java/examples/3D/Camera/MoveEye/MoveEye.pde @@ -0,0 +1,28 @@ +/** + * Move Eye. + * by Simon Greenwold. + * + * The camera lifts up (controlled by mouseY) while looking at the same point. + */ + +void setup() { + size(640, 360, P3D); + fill(204); +} + +void draw() { + lights(); + background(0); + + // Change height of the camera with mouseY + camera(30.0, mouseY, 220.0, // eyeX, eyeY, eyeZ + 0.0, 0.0, 0.0, // centerX, centerY, centerZ + 0.0, 1.0, 0.0); // upX, upY, upZ + + noStroke(); + box(90); + stroke(255); + line(-100, 0, 0, 100, 0, 0); + line(0, -100, 0, 0, 100, 0); + line(0, 0, -100, 0, 0, 100); +} diff --git a/java/examples/3D/Camera/MoveEye/applet/MoveEye.java b/java/examples/3D/Camera/MoveEye/applet/MoveEye.java new file mode 100644 index 000000000..a99b32dba --- /dev/null +++ b/java/examples/3D/Camera/MoveEye/applet/MoveEye.java @@ -0,0 +1,48 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class MoveEye extends PApplet { + +/** + * Move Eye. + * by Simon Greenwold. + * + * The camera lifts up (controlled by mouseY) while looking at the same point. + */ + +public void setup() { + size(640, 360, P3D); + fill(204); +} + +public void draw() { + lights(); + background(0); + + // Change height of the camera with mouseY + camera(30.0f, mouseY, 220.0f, // eyeX, eyeY, eyeZ + 0.0f, 0.0f, 0.0f, // centerX, centerY, centerZ + 0.0f, 1.0f, 0.0f); // upX, upY, upZ + + noStroke(); + box(90); + stroke(255); + line(-100, 0, 0, 100, 0, 0); + line(0, -100, 0, 0, 100, 0); + line(0, 0, -100, 0, 0, 100); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "MoveEye" }); + } +} diff --git a/java/examples/3D/Camera/MoveEye/applet/MoveEye.pde b/java/examples/3D/Camera/MoveEye/applet/MoveEye.pde new file mode 100644 index 000000000..6a6384640 --- /dev/null +++ b/java/examples/3D/Camera/MoveEye/applet/MoveEye.pde @@ -0,0 +1,28 @@ +/** + * Move Eye. + * by Simon Greenwold. + * + * The camera lifts up (controlled by mouseY) while looking at the same point. + */ + +void setup() { + size(640, 360, P3D); + fill(204); +} + +void draw() { + lights(); + background(0); + + // Change height of the camera with mouseY + camera(30.0, mouseY, 220.0, // eyeX, eyeY, eyeZ + 0.0, 0.0, 0.0, // centerX, centerY, centerZ + 0.0, 1.0, 0.0); // upX, upY, upZ + + noStroke(); + box(90); + stroke(255); + line(-100, 0, 0, 100, 0, 0); + line(0, -100, 0, 0, 100, 0); + line(0, 0, -100, 0, 0, 100); +} diff --git a/java/examples/3D/Camera/MoveEye/applet/loading.gif b/java/examples/3D/Camera/MoveEye/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Camera/OrthoVSPerspective/OrthoVSPerspective.pde b/java/examples/3D/Camera/OrthoVSPerspective/OrthoVSPerspective.pde new file mode 100644 index 000000000..f91fec7b7 --- /dev/null +++ b/java/examples/3D/Camera/OrthoVSPerspective/OrthoVSPerspective.pde @@ -0,0 +1,42 @@ +/** + * Ortho vs Perspective. + * + * Click to see the difference between orthographic projection + * and perspective projection as applied to a simple box. + * The ortho() function sets an orthographic projection and + * defines a parallel clipping volume. All objects with the + * same dimension appear the same size, regardless of whether + * they are near or far from the camera. The parameters to this + * function specify the clipping volume where left and right + * are the minimum and maximum x values, top and bottom are the + * minimum and maximum y values, and near and far are the minimum + * and maximum z values. + */ + +void setup() +{ + size(640, 360, P3D); + noStroke(); + fill(204); +} + +void draw() +{ + background(0); + lights(); + + if(mousePressed) { + float fov = PI/3.0; + float cameraZ = (height/2.0) / tan(PI * fov / 360.0); + perspective(fov, float(width)/float(height), + cameraZ/2.0, cameraZ*2.0); + } else { + ortho(-width/2, width/2, -height/2, height/2, -10, 10); + } + + translate(width/2, height/2, 0); + rotateX(-PI/6); + rotateY(PI/3); + box(160); +} + diff --git a/java/examples/3D/Camera/OrthoVSPerspective/applet/OrthoVSPerspective.java b/java/examples/3D/Camera/OrthoVSPerspective/applet/OrthoVSPerspective.java new file mode 100644 index 000000000..f6c2dcd1e --- /dev/null +++ b/java/examples/3D/Camera/OrthoVSPerspective/applet/OrthoVSPerspective.java @@ -0,0 +1,62 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class OrthoVSPerspective extends PApplet { + +/** + * Ortho vs Perspective. + * + * Click to see the difference between orthographic projection + * and perspective projection as applied to a simple box. + * The ortho() function sets an orthographic projection and + * defines a parallel clipping volume. All objects with the + * same dimension appear the same size, regardless of whether + * they are near or far from the camera. The parameters to this + * function specify the clipping volume where left and right + * are the minimum and maximum x values, top and bottom are the + * minimum and maximum y values, and near and far are the minimum + * and maximum z values. + */ + +public void setup() +{ + size(640, 360, P3D); + noStroke(); + fill(204); +} + +public void draw() +{ + background(0); + lights(); + + if(mousePressed) { + float fov = PI/3.0f; + float cameraZ = (height/2.0f) / tan(PI * fov / 360.0f); + perspective(fov, PApplet.parseFloat(width)/PApplet.parseFloat(height), + cameraZ/2.0f, cameraZ*2.0f); + } else { + ortho(-width/2, width/2, -height/2, height/2, -10, 10); + } + + translate(width/2, height/2, 0); + rotateX(-PI/6); + rotateY(PI/3); + box(160); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "OrthoVSPerspective" }); + } +} diff --git a/java/examples/3D/Camera/OrthoVSPerspective/applet/OrthoVSPerspective.pde b/java/examples/3D/Camera/OrthoVSPerspective/applet/OrthoVSPerspective.pde new file mode 100644 index 000000000..f91fec7b7 --- /dev/null +++ b/java/examples/3D/Camera/OrthoVSPerspective/applet/OrthoVSPerspective.pde @@ -0,0 +1,42 @@ +/** + * Ortho vs Perspective. + * + * Click to see the difference between orthographic projection + * and perspective projection as applied to a simple box. + * The ortho() function sets an orthographic projection and + * defines a parallel clipping volume. All objects with the + * same dimension appear the same size, regardless of whether + * they are near or far from the camera. The parameters to this + * function specify the clipping volume where left and right + * are the minimum and maximum x values, top and bottom are the + * minimum and maximum y values, and near and far are the minimum + * and maximum z values. + */ + +void setup() +{ + size(640, 360, P3D); + noStroke(); + fill(204); +} + +void draw() +{ + background(0); + lights(); + + if(mousePressed) { + float fov = PI/3.0; + float cameraZ = (height/2.0) / tan(PI * fov / 360.0); + perspective(fov, float(width)/float(height), + cameraZ/2.0, cameraZ*2.0); + } else { + ortho(-width/2, width/2, -height/2, height/2, -10, 10); + } + + translate(width/2, height/2, 0); + rotateX(-PI/6); + rotateY(PI/3); + box(160); +} + diff --git a/java/examples/3D/Camera/OrthoVSPerspective/applet/loading.gif b/java/examples/3D/Camera/OrthoVSPerspective/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Camera/Perspective/Perspective.pde b/java/examples/3D/Camera/Perspective/Perspective.pde new file mode 100644 index 000000000..46695397d --- /dev/null +++ b/java/examples/3D/Camera/Perspective/Perspective.pde @@ -0,0 +1,41 @@ +/** + * Perspective. + * + * Move the mouse left and right to change the field of view (fov). + * Click to modify the aspect ratio. The perspective() function + * sets a perspective projection applying foreshortening, making + * distant objects appear smaller than closer ones. The parameters + * define a viewing volume with the shape of truncated pyramid. + * Objects near to the front of the volume appear their actual size, + * while farther objects appear smaller. This projection simulates + * the perspective of the world more accurately than orthographic projection. + * The version of perspective without parameters sets the default + * perspective and the version with four parameters allows the programmer + * to set the area precisely. + */ + +void setup() { + size(640, 360, P3D); + noStroke(); +} + +void draw() { + lights(); + background(204); + float cameraY = height/2.0; + float fov = mouseX/float(width) * PI/2; + float cameraZ = cameraY / tan(fov / 2.0); + float aspect = float(width)/float(height); + if (mousePressed) { + aspect = aspect / 2.0; + } + perspective(fov, aspect, cameraZ/10.0, cameraZ*10.0); + + translate(width/2+30, height/2, 0); + rotateX(-PI/6); + rotateY(PI/3 + mouseY/float(height) * PI); + box(45); + translate(0, 0, -50); + box(30); +} + diff --git a/java/examples/3D/Camera/Perspective/applet/Perspective.java b/java/examples/3D/Camera/Perspective/applet/Perspective.java new file mode 100644 index 000000000..82d32937c --- /dev/null +++ b/java/examples/3D/Camera/Perspective/applet/Perspective.java @@ -0,0 +1,61 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Perspective extends PApplet { + +/** + * Perspective. + * + * Move the mouse left and right to change the field of view (fov). + * Click to modify the aspect ratio. The perspective() function + * sets a perspective projection applying foreshortening, making + * distant objects appear smaller than closer ones. The parameters + * define a viewing volume with the shape of truncated pyramid. + * Objects near to the front of the volume appear their actual size, + * while farther objects appear smaller. This projection simulates + * the perspective of the world more accurately than orthographic projection. + * The version of perspective without parameters sets the default + * perspective and the version with four parameters allows the programmer + * to set the area precisely. + */ + +public void setup() { + size(640, 360, P3D); + noStroke(); +} + +public void draw() { + lights(); + background(204); + float cameraY = height/2.0f; + float fov = mouseX/PApplet.parseFloat(width) * PI/2; + float cameraZ = cameraY / tan(fov / 2.0f); + float aspect = PApplet.parseFloat(width)/PApplet.parseFloat(height); + if (mousePressed) { + aspect = aspect / 2.0f; + } + perspective(fov, aspect, cameraZ/10.0f, cameraZ*10.0f); + + translate(width/2+30, height/2, 0); + rotateX(-PI/6); + rotateY(PI/3 + mouseY/PApplet.parseFloat(height) * PI); + box(45); + translate(0, 0, -50); + box(30); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Perspective" }); + } +} diff --git a/java/examples/3D/Camera/Perspective/applet/Perspective.pde b/java/examples/3D/Camera/Perspective/applet/Perspective.pde new file mode 100644 index 000000000..46695397d --- /dev/null +++ b/java/examples/3D/Camera/Perspective/applet/Perspective.pde @@ -0,0 +1,41 @@ +/** + * Perspective. + * + * Move the mouse left and right to change the field of view (fov). + * Click to modify the aspect ratio. The perspective() function + * sets a perspective projection applying foreshortening, making + * distant objects appear smaller than closer ones. The parameters + * define a viewing volume with the shape of truncated pyramid. + * Objects near to the front of the volume appear their actual size, + * while farther objects appear smaller. This projection simulates + * the perspective of the world more accurately than orthographic projection. + * The version of perspective without parameters sets the default + * perspective and the version with four parameters allows the programmer + * to set the area precisely. + */ + +void setup() { + size(640, 360, P3D); + noStroke(); +} + +void draw() { + lights(); + background(204); + float cameraY = height/2.0; + float fov = mouseX/float(width) * PI/2; + float cameraZ = cameraY / tan(fov / 2.0); + float aspect = float(width)/float(height); + if (mousePressed) { + aspect = aspect / 2.0; + } + perspective(fov, aspect, cameraZ/10.0, cameraZ*10.0); + + translate(width/2+30, height/2, 0); + rotateX(-PI/6); + rotateY(PI/3 + mouseY/float(height) * PI); + box(45); + translate(0, 0, -50); + box(30); +} + diff --git a/java/examples/3D/Camera/Perspective/applet/loading.gif b/java/examples/3D/Camera/Perspective/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/BrickTower/BrickTower.pde b/java/examples/3D/Form/BrickTower/BrickTower.pde new file mode 100644 index 000000000..c40186498 --- /dev/null +++ b/java/examples/3D/Form/BrickTower/BrickTower.pde @@ -0,0 +1,59 @@ +/** + * Brick Tower + * by Ira Greenberg. + * + * 3D castle tower constructed out of individual bricks. + * Uses the PVector and Cube classes. + */ + +float bricksPerLayer = 16.0; +float brickLayers = 18.0; +Cube brick; +float brickWidth = 60, brickHeight = 25, brickDepth = 25; +float radius = 175.0; +float angle = 0; + +void setup(){ + size(640, 360, P3D); + brick = new Cube(brickWidth, brickHeight, brickDepth); +} + +void draw(){ + background(0); + float tempX = 0, tempY = 0, tempZ = 0; + fill(182, 62, 29); + noStroke(); + // Add basic light setup + lights(); + translate(width/2, height*1.2, -380); + // Tip tower to see inside + rotateX(radians(-45)); + // Slowly rotate tower + rotateY(frameCount * PI/600); + for (int i = 0; i < brickLayers; i++){ + // Increment rows + tempY-=brickHeight; + // Alternate brick seams + angle = 360.0 / bricksPerLayer * i/2; + for (int j = 0; j < bricksPerLayer; j++){ + tempZ = cos(radians(angle))*radius; + tempX = sin(radians(angle))*radius; + pushMatrix(); + translate(tempX, tempY, tempZ); + rotateY(radians(angle)); + // Add crenelation + if (i==brickLayers-1){ + if (j%2 == 0){ + brick.create(); + } + } + // Create main tower + else { + brick.create(); + } + popMatrix(); + angle += 360.0/bricksPerLayer; + } + } +} + diff --git a/java/examples/3D/Form/BrickTower/Cube.pde b/java/examples/3D/Form/BrickTower/Cube.pde new file mode 100644 index 000000000..ba4fdb361 --- /dev/null +++ b/java/examples/3D/Form/BrickTower/Cube.pde @@ -0,0 +1,60 @@ +class Cube { + + PVector[] vertices = new PVector[24]; + float w, h, d; + + Cube(){ } + + Cube(float w, float h, float d){ + this.w = w; + this.h = h; + this.d = d; + + // Cube composed of 6 quads + // Front + vertices[0] = new PVector(-w/2, -h/2, d/2); + vertices[1] = new PVector(w/2, -h/2, d/2); + vertices[2] = new PVector(w/2, h/2, d/2); + vertices[3] = new PVector(-w/2, h/2, d/2); + + // Left + vertices[4] = new PVector(-w/2, -h/2, d/2); + vertices[5] = new PVector(-w/2, -h/2, -d/2); + vertices[6] = new PVector(-w/2, h/2, -d/2); + vertices[7] = new PVector(-w/2, h/2, d/2); + + // Right + vertices[8] = new PVector(w/2, -h/2, d/2); + vertices[9] = new PVector(w/2, -h/2, -d/2); + vertices[10] = new PVector(w/2, h/2, -d/2); + vertices[11] = new PVector(w/2, h/2, d/2); + + // Back + vertices[12] = new PVector(-w/2, -h/2, -d/2); + vertices[13] = new PVector(w/2, -h/2, -d/2); + vertices[14] = new PVector(w/2, h/2, -d/2); + vertices[15] = new PVector(-w/2, h/2, -d/2); + + // Top + vertices[16] = new PVector(-w/2, -h/2, d/2); + vertices[17] = new PVector(-w/2, -h/2, -d/2); + vertices[18] = new PVector(w/2, -h/2, -d/2); + vertices[19] = new PVector(w/2, -h/2, d/2); + + // Bottom + vertices[20] = new PVector(-w/2, h/2, d/2); + vertices[21] = new PVector(-w/2, h/2, -d/2); + vertices[22] = new PVector(w/2, h/2, -d/2); + vertices[23] = new PVector(w/2, h/2, d/2); + } + + void create(){ + for (int i=0; i<6; i++){ + beginShape(QUADS); + for (int j = 0; j < 4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } +} diff --git a/java/examples/3D/Form/BrickTower/applet/BrickTower.java b/java/examples/3D/Form/BrickTower/applet/BrickTower.java new file mode 100644 index 000000000..54ac70f76 --- /dev/null +++ b/java/examples/3D/Form/BrickTower/applet/BrickTower.java @@ -0,0 +1,152 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class BrickTower extends PApplet { + +/** + * Brick Tower + * by Ira Greenberg. + * + * 3D castle tower constructed out of individual bricks. + * Uses the Point3D and Cube classes. + */ + + +float bricksPerLayer = 16.0f; +float brickLayers = 18.0f; +Cube brick; +float brickWidth = 60, brickHeight = 25, brickDepth = 25; +float radius = 175.0f; +float angle = 0; + +public void setup(){ + size(640, 360, P3D); + brick = new Cube(brickWidth, brickHeight, brickDepth); +} + +public void draw(){ + background(0); + float tempX = 0, tempY = 0, tempZ = 0; + fill(182, 62, 29); + noStroke(); + // Add basic light setup + lights(); + translate(width/2, height*1.2f, -380); + // Tip tower to see inside + rotateX(radians(-45)); + // Slowly rotate tower + rotateY(frameCount * PI/600); + for (int i = 0; i < brickLayers; i++){ + // Increment rows + tempY-=brickHeight; + // Alternate brick seams + angle = 360.0f / bricksPerLayer * i/2; + for (int j = 0; j < bricksPerLayer; j++){ + tempZ = cos(radians(angle))*radius; + tempX = sin(radians(angle))*radius; + pushMatrix(); + translate(tempX, tempY, tempZ); + rotateY(radians(angle)); + // Add crenelation + if (i==brickLayers-1){ + if (j%2 == 0){ + brick.create(); + } + } + // Create main tower + else { + brick.create(); + } + popMatrix(); + angle += 360.0f/bricksPerLayer; + } + } +} + + +class Cube { + + Point3D[] vertices = new Point3D[24]; + float w, h, d; + + Cube(){ } + + Cube(float w, float h, float d){ + this.w = w; + this.h = h; + this.d = d; + + // Cube composed of 6 quads + // Front + vertices[0] = new Point3D(-w/2,-h/2,d/2); + vertices[1] = new Point3D(w/2,-h/2,d/2); + vertices[2] = new Point3D(w/2,h/2,d/2); + vertices[3] = new Point3D(-w/2,h/2,d/2); + + // Left + vertices[4] = new Point3D(-w/2,-h/2,d/2); + vertices[5] = new Point3D(-w/2,-h/2,-d/2); + vertices[6] = new Point3D(-w/2,h/2,-d/2); + vertices[7] = new Point3D(-w/2,h/2,d/2); + + // Right + vertices[8] = new Point3D(w/2,-h/2,d/2); + vertices[9] = new Point3D(w/2,-h/2,-d/2); + vertices[10] = new Point3D(w/2,h/2,-d/2); + vertices[11] = new Point3D(w/2,h/2,d/2); + + // Back + vertices[12] = new Point3D(-w/2,-h/2,-d/2); + vertices[13] = new Point3D(w/2,-h/2,-d/2); + vertices[14] = new Point3D(w/2,h/2,-d/2); + vertices[15] = new Point3D(-w/2,h/2,-d/2); + + // Top + vertices[16] = new Point3D(-w/2,-h/2,d/2); + vertices[17] = new Point3D(-w/2,-h/2,-d/2); + vertices[18] = new Point3D(w/2,-h/2,-d/2); + vertices[19] = new Point3D(w/2,-h/2,d/2); + + // Bottom + vertices[20] = new Point3D(-w/2,h/2,d/2); + vertices[21] = new Point3D(-w/2,h/2,-d/2); + vertices[22] = new Point3D(w/2,h/2,-d/2); + vertices[23] = new Point3D(w/2,h/2,d/2); + } + + public void create(){ + for (int i=0; i<6; i++){ + beginShape(QUADS); + for (int j = 0; j < 4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } +} +class Point3D { + float x, y, z; + + Point3D(){ } + + Point3D(float x, float y, float z){ + this.x = x; + this.y = y; + this.z = z; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "BrickTower" }); + } +} diff --git a/java/examples/3D/Form/BrickTower/applet/BrickTower.pde b/java/examples/3D/Form/BrickTower/applet/BrickTower.pde new file mode 100644 index 000000000..997c9774a --- /dev/null +++ b/java/examples/3D/Form/BrickTower/applet/BrickTower.pde @@ -0,0 +1,61 @@ +/** + * Brick Tower + * by Ira Greenberg. + * + * 3D castle tower constructed out of individual bricks. + * Uses the Point3D and Cube classes. + */ + + +float bricksPerLayer = 16.0; +float brickLayers = 18.0; +Cube brick; +float brickWidth = 60, brickHeight = 25, brickDepth = 25; +float radius = 175.0; +float angle = 0; + +void setup(){ + size(640, 360, P3D); + brick = new Cube(brickWidth, brickHeight, brickDepth); +} + +void draw(){ + background(0); + float tempX = 0, tempY = 0, tempZ = 0; + fill(182, 62, 29); + noStroke(); + // Add basic light setup + lights(); + translate(width/2, height*1.2, -380); + // Tip tower to see inside + rotateX(radians(-45)); + // Slowly rotate tower + rotateY(frameCount * PI/600); + for (int i = 0; i < brickLayers; i++){ + // Increment rows + tempY-=brickHeight; + // Alternate brick seams + angle = 360.0 / bricksPerLayer * i/2; + for (int j = 0; j < bricksPerLayer; j++){ + tempZ = cos(radians(angle))*radius; + tempX = sin(radians(angle))*radius; + pushMatrix(); + translate(tempX, tempY, tempZ); + rotateY(radians(angle)); + // Add crenelation + if (i==brickLayers-1){ + if (j%2 == 0){ + brick.create(); + } + } + // Create main tower + else { + brick.create(); + } + popMatrix(); + angle += 360.0/bricksPerLayer; + } + } +} + + diff --git a/java/examples/3D/Form/BrickTower/applet/Cube.pde b/java/examples/3D/Form/BrickTower/applet/Cube.pde new file mode 100644 index 000000000..acdabcaad --- /dev/null +++ b/java/examples/3D/Form/BrickTower/applet/Cube.pde @@ -0,0 +1,60 @@ +class Cube { + + Point3D[] vertices = new Point3D[24]; + float w, h, d; + + Cube(){ } + + Cube(float w, float h, float d){ + this.w = w; + this.h = h; + this.d = d; + + // Cube composed of 6 quads + // Front + vertices[0] = new Point3D(-w/2,-h/2,d/2); + vertices[1] = new Point3D(w/2,-h/2,d/2); + vertices[2] = new Point3D(w/2,h/2,d/2); + vertices[3] = new Point3D(-w/2,h/2,d/2); + + // Left + vertices[4] = new Point3D(-w/2,-h/2,d/2); + vertices[5] = new Point3D(-w/2,-h/2,-d/2); + vertices[6] = new Point3D(-w/2,h/2,-d/2); + vertices[7] = new Point3D(-w/2,h/2,d/2); + + // Right + vertices[8] = new Point3D(w/2,-h/2,d/2); + vertices[9] = new Point3D(w/2,-h/2,-d/2); + vertices[10] = new Point3D(w/2,h/2,-d/2); + vertices[11] = new Point3D(w/2,h/2,d/2); + + // Back + vertices[12] = new Point3D(-w/2,-h/2,-d/2); + vertices[13] = new Point3D(w/2,-h/2,-d/2); + vertices[14] = new Point3D(w/2,h/2,-d/2); + vertices[15] = new Point3D(-w/2,h/2,-d/2); + + // Top + vertices[16] = new Point3D(-w/2,-h/2,d/2); + vertices[17] = new Point3D(-w/2,-h/2,-d/2); + vertices[18] = new Point3D(w/2,-h/2,-d/2); + vertices[19] = new Point3D(w/2,-h/2,d/2); + + // Bottom + vertices[20] = new Point3D(-w/2,h/2,d/2); + vertices[21] = new Point3D(-w/2,h/2,-d/2); + vertices[22] = new Point3D(w/2,h/2,-d/2); + vertices[23] = new Point3D(w/2,h/2,d/2); + } + + void create(){ + for (int i=0; i<6; i++){ + beginShape(QUADS); + for (int j = 0; j < 4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } +} diff --git a/java/examples/3D/Form/BrickTower/applet/loading.gif b/java/examples/3D/Form/BrickTower/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/CubicGrid/CubicGrid.pde b/java/examples/3D/Form/CubicGrid/CubicGrid.pde new file mode 100644 index 000000000..111cd3f3f --- /dev/null +++ b/java/examples/3D/Form/CubicGrid/CubicGrid.pde @@ -0,0 +1,47 @@ +/** + * Cubic Grid + * by Ira Greenberg. + * + * 3D translucent colored grid uses nested pushMatrix() + * and popMatrix() functions. + */ + +float boxSize = 40; +float margin = boxSize*2; +float depth = 400; +color boxFill; + +void setup() { + size(640, 360, P3D); + noStroke(); +} + +void draw() { + background(255); + + // Center and spin grid + translate(width/2, height/2, -depth); + rotateY(frameCount * 0.01); + rotateX(frameCount * 0.01); + + // Build grid using multiple translations + for (float i =- depth/2+margin; i <= depth/2-margin; i += boxSize){ + pushMatrix(); + for (float j =- height+margin; j <= height-margin; j += boxSize){ + pushMatrix(); + for (float k =- width+margin; k <= width-margin; k += boxSize){ + // Base fill color on counter values, abs function + // ensures values stay within legal range + boxFill = color(abs(i), abs(j), abs(k), 50); + pushMatrix(); + translate(k, j, i); + fill(boxFill); + box(boxSize, boxSize, boxSize); + popMatrix(); + } + popMatrix(); + } + popMatrix(); + } +} + diff --git a/java/examples/3D/Form/CubicGrid/applet/CubicGrid.java b/java/examples/3D/Form/CubicGrid/applet/CubicGrid.java new file mode 100644 index 000000000..9cfd7d6b7 --- /dev/null +++ b/java/examples/3D/Form/CubicGrid/applet/CubicGrid.java @@ -0,0 +1,67 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class CubicGrid extends PApplet { + +/** + * Cubic Grid + * by Ira Greenberg. + * + * 3D translucent colored grid uses nested pushMatrix() + * and popMatrix() functions. + */ + +float boxSize = 40; +float margin = boxSize*2; +float depth = 400; +int boxFill; + +public void setup() { + size(640, 360, P3D); + noStroke(); +} + +public void draw() { + background(255); + + // Center and spin grid + translate(width/2, height/2, -depth); + rotateY(frameCount * 0.01f); + rotateX(frameCount * 0.01f); + + // Build grid using multiple translations + for (float i =- depth/2+margin; i <= depth/2-margin; i += boxSize){ + pushMatrix(); + for (float j =- height+margin; j <= height-margin; j += boxSize){ + pushMatrix(); + for (float k =- width+margin; k <= width-margin; k += boxSize){ + // Base fill color on counter values, abs function + // ensures values stay within legal range + boxFill = color(abs(i), abs(j), abs(k), 50); + pushMatrix(); + translate(k, j, i); + fill(boxFill); + box(boxSize, boxSize, boxSize); + popMatrix(); + } + popMatrix(); + } + popMatrix(); + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "CubicGrid" }); + } +} diff --git a/java/examples/3D/Form/CubicGrid/applet/CubicGrid.pde b/java/examples/3D/Form/CubicGrid/applet/CubicGrid.pde new file mode 100644 index 000000000..111cd3f3f --- /dev/null +++ b/java/examples/3D/Form/CubicGrid/applet/CubicGrid.pde @@ -0,0 +1,47 @@ +/** + * Cubic Grid + * by Ira Greenberg. + * + * 3D translucent colored grid uses nested pushMatrix() + * and popMatrix() functions. + */ + +float boxSize = 40; +float margin = boxSize*2; +float depth = 400; +color boxFill; + +void setup() { + size(640, 360, P3D); + noStroke(); +} + +void draw() { + background(255); + + // Center and spin grid + translate(width/2, height/2, -depth); + rotateY(frameCount * 0.01); + rotateX(frameCount * 0.01); + + // Build grid using multiple translations + for (float i =- depth/2+margin; i <= depth/2-margin; i += boxSize){ + pushMatrix(); + for (float j =- height+margin; j <= height-margin; j += boxSize){ + pushMatrix(); + for (float k =- width+margin; k <= width-margin; k += boxSize){ + // Base fill color on counter values, abs function + // ensures values stay within legal range + boxFill = color(abs(i), abs(j), abs(k), 50); + pushMatrix(); + translate(k, j, i); + fill(boxFill); + box(boxSize, boxSize, boxSize); + popMatrix(); + } + popMatrix(); + } + popMatrix(); + } +} + diff --git a/java/examples/3D/Form/CubicGrid/applet/loading.gif b/java/examples/3D/Form/CubicGrid/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/Icosahedra/Dimension3D.pde b/java/examples/3D/Form/Icosahedra/Dimension3D.pde new file mode 100755 index 000000000..90c949967 --- /dev/null +++ b/java/examples/3D/Form/Icosahedra/Dimension3D.pde @@ -0,0 +1,10 @@ +class Dimension3D{ + float w, h, d; + + Dimension3D(float w, float h, float d){ + this.w=w; + this.h=h; + this.d=d; + } +} + diff --git a/java/examples/3D/Form/Icosahedra/Icosahedra.pde b/java/examples/3D/Form/Icosahedra/Icosahedra.pde new file mode 100755 index 000000000..0c046b726 --- /dev/null +++ b/java/examples/3D/Form/Icosahedra/Icosahedra.pde @@ -0,0 +1,52 @@ +/** + * I Like Icosahedra + * by Ira Greenberg. + * + * This example plots icosahedra. The Icosahdron is a regular + * polyhedron composed of twenty equalateral triangles. + */ + +Icosahedron ico1; +Icosahedron ico2; +Icosahedron ico3; + +void setup(){ + size(640, 360, P3D); + ico1 = new Icosahedron(75); + ico2 = new Icosahedron(75); + ico3 = new Icosahedron(75); +} + +void draw(){ + background(0); + lights(); + translate(width/2, height/2); + + pushMatrix(); + translate(-width/3.5, 0); + rotateX(frameCount*PI/185); + rotateY(frameCount*PI/-200); + stroke(170, 0, 0); + noFill(); + ico1.create(); + popMatrix(); + + pushMatrix(); + rotateX(frameCount*PI/200); + rotateY(frameCount*PI/300); + stroke(150, 0, 180); + fill(170, 170, 0); + ico2.create(); + popMatrix(); + + pushMatrix(); + translate(width/3.5, 0); + rotateX(frameCount*PI/-200); + rotateY(frameCount*PI/200); + noStroke(); + fill(0, 0, 185); + ico3.create(); + popMatrix(); +} + + diff --git a/java/examples/3D/Form/Icosahedra/Icosahedron.pde b/java/examples/3D/Form/Icosahedra/Icosahedron.pde new file mode 100755 index 000000000..3a7f89453 --- /dev/null +++ b/java/examples/3D/Form/Icosahedra/Icosahedron.pde @@ -0,0 +1,159 @@ +class Icosahedron extends Shape3D{ + + // icosahedron + PVector topPoint; + PVector[] topPent = new PVector[5]; + PVector bottomPoint; + PVector[] bottomPent = new PVector[5]; + float angle = 0, radius = 150; + float triDist; + float triHt; + float a, b, c; + + // constructor + Icosahedron(float radius){ + this.radius = radius; + init(); + } + + Icosahedron(PVector v, float radius){ + super(v); + this.radius = radius; + init(); + } + + // calculate geometry + void init(){ + c = dist(cos(0)*radius, sin(0)*radius, cos(radians(72))*radius, sin(radians(72))*radius); + b = radius; + a = (float)(Math.sqrt(((c*c)-(b*b)))); + + triHt = (float)(Math.sqrt((c*c)-((c/2)*(c/2)))); + + for (int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/Primitives3D/Primitives3D.pde b/java/examples/3D/Form/Primitives3D/Primitives3D.pde new file mode 100644 index 000000000..053301190 --- /dev/null +++ b/java/examples/3D/Form/Primitives3D/Primitives3D.pde @@ -0,0 +1,30 @@ +/** + * Primitives 3D. + * + * Placing mathematically 3D objects in synthetic space. + * The lights() method reveals their imagined dimension. + * The box() and sphere() functions each have one parameter + * which is used to specify their size. These shapes are + * positioned using the translate() function. + */ + +size(640, 360, P3D); +background(0); +lights(); + +noStroke(); +pushMatrix(); +translate(130, height/2, 0); +rotateY(1.25); +rotateX(-0.4); +box(100); +popMatrix(); + +noFill(); +stroke(255); +pushMatrix(); +translate(500, height*0.35, -200); +sphere(280); +popMatrix(); + + diff --git a/java/examples/3D/Form/Primitives3D/applet/Primitives3D.java b/java/examples/3D/Form/Primitives3D/applet/Primitives3D.java new file mode 100644 index 000000000..ba3668572 --- /dev/null +++ b/java/examples/3D/Form/Primitives3D/applet/Primitives3D.java @@ -0,0 +1,51 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Primitives3D extends PApplet { + public void setup() {/** + * Primitives 3D. + * + * Placing mathematically 3D objects in synthetic space. + * The lights() method reveals their imagined dimension. + * The box() and sphere() functions each have one parameter + * which is used to specify their size. These shapes are + * positioned using the translate() function. + */ + +size(640, 360, P3D); +background(0); +lights(); + +noStroke(); +pushMatrix(); +translate(130, height/2, 0); +rotateY(1.25f); +rotateX(-0.4f); +box(100); +popMatrix(); + +noFill(); +stroke(255); +pushMatrix(); +translate(500, height*0.35f, -200); +sphere(280); +popMatrix(); + + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Primitives3D" }); + } +} diff --git a/java/examples/3D/Form/Primitives3D/applet/Primitives3D.pde b/java/examples/3D/Form/Primitives3D/applet/Primitives3D.pde new file mode 100644 index 000000000..053301190 --- /dev/null +++ b/java/examples/3D/Form/Primitives3D/applet/Primitives3D.pde @@ -0,0 +1,30 @@ +/** + * Primitives 3D. + * + * Placing mathematically 3D objects in synthetic space. + * The lights() method reveals their imagined dimension. + * The box() and sphere() functions each have one parameter + * which is used to specify their size. These shapes are + * positioned using the translate() function. + */ + +size(640, 360, P3D); +background(0); +lights(); + +noStroke(); +pushMatrix(); +translate(130, height/2, 0); +rotateY(1.25); +rotateX(-0.4); +box(100); +popMatrix(); + +noFill(); +stroke(255); +pushMatrix(); +translate(500, height*0.35, -200); +sphere(280); +popMatrix(); + + diff --git a/java/examples/3D/Form/Primitives3D/applet/loading.gif b/java/examples/3D/Form/Primitives3D/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/RGBCube/RGBCube.pde b/java/examples/3D/Form/RGBCube/RGBCube.pde new file mode 100644 index 000000000..2040d0c0b --- /dev/null +++ b/java/examples/3D/Form/RGBCube/RGBCube.pde @@ -0,0 +1,74 @@ +/** + * RGB Cube. + * + * The three primary colors of the additive color model are red, green, and blue. + * This RGB color cube displays smooth transitions between these colors. + */ + +float xmag, ymag = 0; +float newXmag, newYmag = 0; + +void setup() +{ + size(640, 360, P3D); + noStroke(); + colorMode(RGB, 1); +} + +void draw() +{ + background(0.5); + + pushMatrix(); + + translate(width/2, height/2, -30); + + newXmag = mouseX/float(width) * TWO_PI; + newYmag = mouseY/float(height) * TWO_PI; + + float diff = xmag-newXmag; + if (abs(diff) > 0.01) { xmag -= diff/4.0; } + + diff = ymag-newYmag; + if (abs(diff) > 0.01) { ymag -= diff/4.0; } + + rotateX(-ymag); + rotateY(-xmag); + + scale(90); + beginShape(QUADS); + + fill(0, 1, 1); vertex(-1, 1, 1); + fill(1, 1, 1); vertex( 1, 1, 1); + fill(1, 0, 1); vertex( 1, -1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + + fill(1, 1, 1); vertex( 1, 1, 1); + fill(1, 1, 0); vertex( 1, 1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + fill(1, 0, 1); vertex( 1, -1, 1); + + fill(1, 1, 0); vertex( 1, 1, -1); + fill(0, 1, 0); vertex(-1, 1, -1); + fill(0, 0, 0); vertex(-1, -1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + + fill(0, 1, 0); vertex(-1, 1, -1); + fill(0, 1, 1); vertex(-1, 1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + fill(0, 0, 0); vertex(-1, -1, -1); + + fill(0, 1, 0); vertex(-1, 1, -1); + fill(1, 1, 0); vertex( 1, 1, -1); + fill(1, 1, 1); vertex( 1, 1, 1); + fill(0, 1, 1); vertex(-1, 1, 1); + + fill(0, 0, 0); vertex(-1, -1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + fill(1, 0, 1); vertex( 1, -1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + + endShape(); + + popMatrix(); +} diff --git a/java/examples/3D/Form/RGBCube/applet/RGBCube.java b/java/examples/3D/Form/RGBCube/applet/RGBCube.java new file mode 100644 index 000000000..6de1d2ac8 --- /dev/null +++ b/java/examples/3D/Form/RGBCube/applet/RGBCube.java @@ -0,0 +1,94 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class RGBCube extends PApplet { + +/** + * RGB Cube. + * + * The three primary colors of the additive color model are red, green, and blue. + * This RGB color cube displays smooth transitions between these colors. + */ + +float xmag, ymag = 0; +float newXmag, newYmag = 0; + +public void setup() +{ + size(640, 360, P3D); + noStroke(); + colorMode(RGB, 1); +} + +public void draw() +{ + background(0.5f); + + pushMatrix(); + + translate(width/2, height/2, -30); + + newXmag = mouseX/PApplet.parseFloat(width) * TWO_PI; + newYmag = mouseY/PApplet.parseFloat(height) * TWO_PI; + + float diff = xmag-newXmag; + if (abs(diff) > 0.01f) { xmag -= diff/4.0f; } + + diff = ymag-newYmag; + if (abs(diff) > 0.01f) { ymag -= diff/4.0f; } + + rotateX(-ymag); + rotateY(-xmag); + + scale(90); + beginShape(QUADS); + + fill(0, 1, 1); vertex(-1, 1, 1); + fill(1, 1, 1); vertex( 1, 1, 1); + fill(1, 0, 1); vertex( 1, -1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + + fill(1, 1, 1); vertex( 1, 1, 1); + fill(1, 1, 0); vertex( 1, 1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + fill(1, 0, 1); vertex( 1, -1, 1); + + fill(1, 1, 0); vertex( 1, 1, -1); + fill(0, 1, 0); vertex(-1, 1, -1); + fill(0, 0, 0); vertex(-1, -1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + + fill(0, 1, 0); vertex(-1, 1, -1); + fill(0, 1, 1); vertex(-1, 1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + fill(0, 0, 0); vertex(-1, -1, -1); + + fill(0, 1, 0); vertex(-1, 1, -1); + fill(1, 1, 0); vertex( 1, 1, -1); + fill(1, 1, 1); vertex( 1, 1, 1); + fill(0, 1, 1); vertex(-1, 1, 1); + + fill(0, 0, 0); vertex(-1, -1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + fill(1, 0, 1); vertex( 1, -1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + + endShape(); + + popMatrix(); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "RGBCube" }); + } +} diff --git a/java/examples/3D/Form/RGBCube/applet/RGBCube.pde b/java/examples/3D/Form/RGBCube/applet/RGBCube.pde new file mode 100644 index 000000000..2040d0c0b --- /dev/null +++ b/java/examples/3D/Form/RGBCube/applet/RGBCube.pde @@ -0,0 +1,74 @@ +/** + * RGB Cube. + * + * The three primary colors of the additive color model are red, green, and blue. + * This RGB color cube displays smooth transitions between these colors. + */ + +float xmag, ymag = 0; +float newXmag, newYmag = 0; + +void setup() +{ + size(640, 360, P3D); + noStroke(); + colorMode(RGB, 1); +} + +void draw() +{ + background(0.5); + + pushMatrix(); + + translate(width/2, height/2, -30); + + newXmag = mouseX/float(width) * TWO_PI; + newYmag = mouseY/float(height) * TWO_PI; + + float diff = xmag-newXmag; + if (abs(diff) > 0.01) { xmag -= diff/4.0; } + + diff = ymag-newYmag; + if (abs(diff) > 0.01) { ymag -= diff/4.0; } + + rotateX(-ymag); + rotateY(-xmag); + + scale(90); + beginShape(QUADS); + + fill(0, 1, 1); vertex(-1, 1, 1); + fill(1, 1, 1); vertex( 1, 1, 1); + fill(1, 0, 1); vertex( 1, -1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + + fill(1, 1, 1); vertex( 1, 1, 1); + fill(1, 1, 0); vertex( 1, 1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + fill(1, 0, 1); vertex( 1, -1, 1); + + fill(1, 1, 0); vertex( 1, 1, -1); + fill(0, 1, 0); vertex(-1, 1, -1); + fill(0, 0, 0); vertex(-1, -1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + + fill(0, 1, 0); vertex(-1, 1, -1); + fill(0, 1, 1); vertex(-1, 1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + fill(0, 0, 0); vertex(-1, -1, -1); + + fill(0, 1, 0); vertex(-1, 1, -1); + fill(1, 1, 0); vertex( 1, 1, -1); + fill(1, 1, 1); vertex( 1, 1, 1); + fill(0, 1, 1); vertex(-1, 1, 1); + + fill(0, 0, 0); vertex(-1, -1, -1); + fill(1, 0, 0); vertex( 1, -1, -1); + fill(1, 0, 1); vertex( 1, -1, 1); + fill(0, 0, 1); vertex(-1, -1, 1); + + endShape(); + + popMatrix(); +} diff --git a/java/examples/3D/Form/RGBCube/applet/loading.gif b/java/examples/3D/Form/RGBCube/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/RunAmuck/Legs.pde b/java/examples/3D/Form/RunAmuck/Legs.pde new file mode 100644 index 000000000..eb74d7859 --- /dev/null +++ b/java/examples/3D/Form/RunAmuck/Legs.pde @@ -0,0 +1,162 @@ +/** + * Legs class + * By Ira Greenberg
+ * Processing for Flash Developers, + * Friends of ED, 2009 + */ + +class Legs { + // Instance properties with default values + float x = 0, y = 0, z = 0, w = 150, ht = 125; + color col = #77AA22; + // Advanced properties + float detailW = w/6.0; + float detailHt = ht/8.0; + float shoeBulge = detailHt*2.0; + float legGap = w/7.0; + + // Dynamics properties + float velocity = .02, stepL, stepR, stepRate = random(10, 50); + float speedX = 1.0, speedZ, spring, damping = .5, theta; + + // Default constructor + Legs() { + } + + // Standard constructor + Legs(float x, float z, float w, float ht, color col) { + this.x = x; + this.z = z; + this.w = w; + this.ht = ht; + this.col = col; + fill(col); + detailW = w/6.0; + detailHt = ht/8.0; + shoeBulge = detailHt*2.0; + legGap = w/7.0; + speedX = random(-speedX, speedX); + } + + // Advanced constructor + Legs(float x, float z, float w, float ht, color col, float detailW, + float detailHt, float shoeBulge, float legGap) { + this.x = x; + this.z = z; + this.w = w; + this.ht = ht; + this.col = col; + this.detailW = detailW; + this.detailHt = detailHt; + this.shoeBulge = shoeBulge; + this.legGap = legGap; + speedX = random(-speedX, speedX); + } + + // Draw legs + void create() { + fill(col); + float footWidth = (w - legGap)/2; + beginShape(); + vertex(x - w/2, y - ht, z); + vertex(x - w/2, y - ht + detailHt, z); + vertex(x - w/2 + detailW, y - ht + detailHt, z); + // left foot + vertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW - shoeBulge, y + detailHt/2 + stepL, z); + curveVertex(x - w/2, y + detailHt + stepL, z); + curveVertex(x - w/2, y + detailHt + stepL, z); + vertex(x - w/2 + footWidth, y + detailHt + stepL*.9, z); + // end left foot + vertex(x - w/2 + footWidth + legGap/2, y - ht + detailHt, z); + vertex(x - w/2 + footWidth + legGap/2, y - ht + detailHt, z); + // right foot + vertex(x - w/2 + footWidth + legGap, y + detailHt + stepR*.9, z); + vertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2 - detailW + shoeBulge, y + detailHt/2 + stepR, z); + curveVertex(x + w/2 - detailW, y + stepR, z); + vertex(x + w/2 - detailW, y + stepR, z); + // end right foot + vertex(x + w/2 - detailW, y - ht + detailHt, z); + vertex(x + w/2, y - ht + detailHt, z); + vertex(x + w/2, y - ht, z); + endShape(CLOSE); + } + + // Set advanced property values + void setDetails(float detailW, float detailHt, float shoeBulge, float legGap) { + this.detailW = detailW; + this.detailHt = detailHt; + this.shoeBulge = shoeBulge; + this.legGap = legGap; + } + + // Make the legs step + void step(float stepRate) { + this.stepRate = stepRate; + spring = ht/2.0; + stepL = sin(theta)*spring; + stepR = cos(theta)*spring; + theta += radians(stepRate); + } + + // Alternative overloaded step method + void step() { + spring = ht/2.0; + stepL = sin(theta)*spring; + stepR = cos(theta)*spring; + theta += radians(stepRate); + } + + + // Moves legs along x, y, z axes + void move() { + // Move legs along y-axis + y = stepR*damping; + + // Move legs along x-axis and + // check for collision against frame edge + x += speedX; + if (screenX(x, y, z) > width) { + speedX *= -1; + } + if (screenX(x, y, z) < 0) { + speedX *= -1; + } + + // Move legs along z-axis based on speed of stepping + // and check for collision against extremes + speedZ = (stepRate*velocity); + z += speedZ; + if (z > 400) { + z = 400; + velocity *= -1; + } + if (z < -100) { + z = -100; + velocity *= -1; + } + } + + void setDynamics(float speedX, float spring, float damping) { + this.speedX = speedX; + this.spring = spring; + this.damping = damping; + } +} + + + + + + + + + + + + diff --git a/java/examples/3D/Form/RunAmuck/RunAmuck.pde b/java/examples/3D/Form/RunAmuck/RunAmuck.pde new file mode 100644 index 000000000..7a5b06fc2 --- /dev/null +++ b/java/examples/3D/Form/RunAmuck/RunAmuck.pde @@ -0,0 +1,45 @@ +/** + * Run-Amuck + * By Ira Greenberg
+ * Processing for Flash Developers, + * Friends of ED, 2009 + */ + +int count = 250; +Legs[] legs = new Legs[count]; + +void setup() { + size(640, 360, P3D); + noStroke(); + for (int i = 0; i < legs.length; i++) { + legs[i] = new Legs(random(-10, 10), random(-50, 150), random(.5, 5), + random(.5, 5), color(random(255), random(255), random(255))); + } +} + +void draw() { + background(0); + translate(width/2, height/2); + noStroke(); + fill(35); + + // Draw ground plane + beginShape(); + vertex(-width*2, 0, -1000); + vertex(width*2, 0, -1000); + vertex(width/2, height/2, 400); + vertex(-width/2, height/2, 400); + endShape(CLOSE); + + // Update and draw the legs + for (int i = 0; i < legs.length; i++) { + legs[i].create(); + // Set foot step rate + legs[i].step(random(10, 50)); + // Move legs along x, y, z axes + // z-movement dependent upon step rate + legs[i].move(); + } +} + + diff --git a/java/examples/3D/Form/RunAmuck/applet/Legs.pde b/java/examples/3D/Form/RunAmuck/applet/Legs.pde new file mode 100644 index 000000000..eb74d7859 --- /dev/null +++ b/java/examples/3D/Form/RunAmuck/applet/Legs.pde @@ -0,0 +1,162 @@ +/** + * Legs class + * By Ira Greenberg
+ * Processing for Flash Developers, + * Friends of ED, 2009 + */ + +class Legs { + // Instance properties with default values + float x = 0, y = 0, z = 0, w = 150, ht = 125; + color col = #77AA22; + // Advanced properties + float detailW = w/6.0; + float detailHt = ht/8.0; + float shoeBulge = detailHt*2.0; + float legGap = w/7.0; + + // Dynamics properties + float velocity = .02, stepL, stepR, stepRate = random(10, 50); + float speedX = 1.0, speedZ, spring, damping = .5, theta; + + // Default constructor + Legs() { + } + + // Standard constructor + Legs(float x, float z, float w, float ht, color col) { + this.x = x; + this.z = z; + this.w = w; + this.ht = ht; + this.col = col; + fill(col); + detailW = w/6.0; + detailHt = ht/8.0; + shoeBulge = detailHt*2.0; + legGap = w/7.0; + speedX = random(-speedX, speedX); + } + + // Advanced constructor + Legs(float x, float z, float w, float ht, color col, float detailW, + float detailHt, float shoeBulge, float legGap) { + this.x = x; + this.z = z; + this.w = w; + this.ht = ht; + this.col = col; + this.detailW = detailW; + this.detailHt = detailHt; + this.shoeBulge = shoeBulge; + this.legGap = legGap; + speedX = random(-speedX, speedX); + } + + // Draw legs + void create() { + fill(col); + float footWidth = (w - legGap)/2; + beginShape(); + vertex(x - w/2, y - ht, z); + vertex(x - w/2, y - ht + detailHt, z); + vertex(x - w/2 + detailW, y - ht + detailHt, z); + // left foot + vertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW - shoeBulge, y + detailHt/2 + stepL, z); + curveVertex(x - w/2, y + detailHt + stepL, z); + curveVertex(x - w/2, y + detailHt + stepL, z); + vertex(x - w/2 + footWidth, y + detailHt + stepL*.9, z); + // end left foot + vertex(x - w/2 + footWidth + legGap/2, y - ht + detailHt, z); + vertex(x - w/2 + footWidth + legGap/2, y - ht + detailHt, z); + // right foot + vertex(x - w/2 + footWidth + legGap, y + detailHt + stepR*.9, z); + vertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2 - detailW + shoeBulge, y + detailHt/2 + stepR, z); + curveVertex(x + w/2 - detailW, y + stepR, z); + vertex(x + w/2 - detailW, y + stepR, z); + // end right foot + vertex(x + w/2 - detailW, y - ht + detailHt, z); + vertex(x + w/2, y - ht + detailHt, z); + vertex(x + w/2, y - ht, z); + endShape(CLOSE); + } + + // Set advanced property values + void setDetails(float detailW, float detailHt, float shoeBulge, float legGap) { + this.detailW = detailW; + this.detailHt = detailHt; + this.shoeBulge = shoeBulge; + this.legGap = legGap; + } + + // Make the legs step + void step(float stepRate) { + this.stepRate = stepRate; + spring = ht/2.0; + stepL = sin(theta)*spring; + stepR = cos(theta)*spring; + theta += radians(stepRate); + } + + // Alternative overloaded step method + void step() { + spring = ht/2.0; + stepL = sin(theta)*spring; + stepR = cos(theta)*spring; + theta += radians(stepRate); + } + + + // Moves legs along x, y, z axes + void move() { + // Move legs along y-axis + y = stepR*damping; + + // Move legs along x-axis and + // check for collision against frame edge + x += speedX; + if (screenX(x, y, z) > width) { + speedX *= -1; + } + if (screenX(x, y, z) < 0) { + speedX *= -1; + } + + // Move legs along z-axis based on speed of stepping + // and check for collision against extremes + speedZ = (stepRate*velocity); + z += speedZ; + if (z > 400) { + z = 400; + velocity *= -1; + } + if (z < -100) { + z = -100; + velocity *= -1; + } + } + + void setDynamics(float speedX, float spring, float damping) { + this.speedX = speedX; + this.spring = spring; + this.damping = damping; + } +} + + + + + + + + + + + + diff --git a/java/examples/3D/Form/RunAmuck/applet/RunAmuck.java b/java/examples/3D/Form/RunAmuck/applet/RunAmuck.java new file mode 100644 index 000000000..1f573102b --- /dev/null +++ b/java/examples/3D/Form/RunAmuck/applet/RunAmuck.java @@ -0,0 +1,228 @@ +import processing.core.*; +import processing.xml.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class RunAmuck extends PApplet { + +/** + * Run-Amuck + * By Ira Greenberg
+ * Processing for Flash Developers, + * Friends of ED, 2009 + */ + +int count = 250; +Legs[] legs = new Legs[count]; + +public void setup() { + size(640, 360, P3D); + noStroke(); + for (int i = 0; i < legs.length; i++) { + legs[i] = new Legs(random(-10, 10), random(-50, 150), random(.5f, 5), + random(.5f, 5), color(random(255), random(255), random(255))); + } +} + +public void draw() { + background(0); + translate(width/2, height/2); + noStroke(); + fill(35); + + // Draw ground plane + beginShape(); + vertex(-width*2, 0, -1000); + vertex(width*2, 0, -1000); + vertex(width/2, height/2, 400); + vertex(-width/2, height/2, 400); + endShape(CLOSE); + + // Update and draw the legs + for (int i = 0; i < legs.length; i++) { + legs[i].create(); + // Set foot step rate + legs[i].step(random(10, 50)); + // Move legs along x, y, z axes + // z-movement dependent upon step rate + legs[i].move(); + } +} + + +/** + * Legs class + * By Ira Greenberg
+ * Processing for Flash Developers, + * Friends of ED, 2009 + */ + +class Legs { + // Instance properties with default values + float x = 0, y = 0, z = 0, w = 150, ht = 125; + int col = 0xff77AA22; + // Advanced properties + float detailW = w/6.0f; + float detailHt = ht/8.0f; + float shoeBulge = detailHt*2.0f; + float legGap = w/7.0f; + + // Dynamics properties + float velocity = .02f, stepL, stepR, stepRate = random(10, 50); + float speedX = 1.0f, speedZ, spring, damping = .5f, theta; + + // Default constructor + Legs() { + } + + // Standard constructor + Legs(float x, float z, float w, float ht, int col) { + this.x = x; + this.z = z; + this.w = w; + this.ht = ht; + this.col = col; + fill(col); + detailW = w/6.0f; + detailHt = ht/8.0f; + shoeBulge = detailHt*2.0f; + legGap = w/7.0f; + speedX = random(-speedX, speedX); + } + + // Advanced constructor + Legs(float x, float z, float w, float ht, int col, float detailW, + float detailHt, float shoeBulge, float legGap) { + this.x = x; + this.z = z; + this.w = w; + this.ht = ht; + this.col = col; + this.detailW = detailW; + this.detailHt = detailHt; + this.shoeBulge = shoeBulge; + this.legGap = legGap; + speedX = random(-speedX, speedX); + } + + // Draw legs + public void create() { + fill(col); + float footWidth = (w - legGap)/2; + beginShape(); + vertex(x - w/2, y - ht, z); + vertex(x - w/2, y - ht + detailHt, z); + vertex(x - w/2 + detailW, y - ht + detailHt, z); + // left foot + vertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW, y + stepL, z); + curveVertex(x - w/2 + detailW - shoeBulge, y + detailHt/2 + stepL, z); + curveVertex(x - w/2, y + detailHt + stepL, z); + curveVertex(x - w/2, y + detailHt + stepL, z); + vertex(x - w/2 + footWidth, y + detailHt + stepL*.9f, z); + // end left foot + vertex(x - w/2 + footWidth + legGap/2, y - ht + detailHt, z); + vertex(x - w/2 + footWidth + legGap/2, y - ht + detailHt, z); + // right foot + vertex(x - w/2 + footWidth + legGap, y + detailHt + stepR*.9f, z); + vertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2, y + detailHt + stepR, z); + curveVertex(x + w/2 - detailW + shoeBulge, y + detailHt/2 + stepR, z); + curveVertex(x + w/2 - detailW, y + stepR, z); + vertex(x + w/2 - detailW, y + stepR, z); + // end right foot + vertex(x + w/2 - detailW, y - ht + detailHt, z); + vertex(x + w/2, y - ht + detailHt, z); + vertex(x + w/2, y - ht, z); + endShape(CLOSE); + } + + // Set advanced property values + public void setDetails(float detailW, float detailHt, float shoeBulge, float legGap) { + this.detailW = detailW; + this.detailHt = detailHt; + this.shoeBulge = shoeBulge; + this.legGap = legGap; + } + + // Make the legs step + public void step(float stepRate) { + this.stepRate = stepRate; + spring = ht/2.0f; + stepL = sin(theta)*spring; + stepR = cos(theta)*spring; + theta += radians(stepRate); + } + + // Alternative overloaded step method + public void step() { + spring = ht/2.0f; + stepL = sin(theta)*spring; + stepR = cos(theta)*spring; + theta += radians(stepRate); + } + + + // Moves legs along x, y, z axes + public void move() { + // Move legs along y-axis + y = stepR*damping; + + // Move legs along x-axis and + // check for collision against frame edge + x += speedX; + if (screenX(x, y, z) > width) { + speedX *= -1; + } + if (screenX(x, y, z) < 0) { + speedX *= -1; + } + + // Move legs along z-axis based on speed of stepping + // and check for collision against extremes + speedZ = (stepRate*velocity); + z += speedZ; + if (z > 400) { + z = 400; + velocity *= -1; + } + if (z < -100) { + z = -100; + velocity *= -1; + } + } + + public void setDynamics(float speedX, float spring, float damping) { + this.speedX = speedX; + this.spring = spring; + this.damping = damping; + } +} + + + + + + + + + + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "--present", "--bgcolor=#666666", "--hide-stop", "RunAmuck" }); + } +} diff --git a/java/examples/3D/Form/RunAmuck/applet/RunAmuck.pde b/java/examples/3D/Form/RunAmuck/applet/RunAmuck.pde new file mode 100644 index 000000000..7a5b06fc2 --- /dev/null +++ b/java/examples/3D/Form/RunAmuck/applet/RunAmuck.pde @@ -0,0 +1,45 @@ +/** + * Run-Amuck + * By Ira Greenberg
+ * Processing for Flash Developers, + * Friends of ED, 2009 + */ + +int count = 250; +Legs[] legs = new Legs[count]; + +void setup() { + size(640, 360, P3D); + noStroke(); + for (int i = 0; i < legs.length; i++) { + legs[i] = new Legs(random(-10, 10), random(-50, 150), random(.5, 5), + random(.5, 5), color(random(255), random(255), random(255))); + } +} + +void draw() { + background(0); + translate(width/2, height/2); + noStroke(); + fill(35); + + // Draw ground plane + beginShape(); + vertex(-width*2, 0, -1000); + vertex(width*2, 0, -1000); + vertex(width/2, height/2, 400); + vertex(-width/2, height/2, 400); + endShape(CLOSE); + + // Update and draw the legs + for (int i = 0; i < legs.length; i++) { + legs[i].create(); + // Set foot step rate + legs[i].step(random(10, 50)); + // Move legs along x, y, z axes + // z-movement dependent upon step rate + legs[i].move(); + } +} + + diff --git a/java/examples/3D/Form/RunAmuck/applet/loading.gif b/java/examples/3D/Form/RunAmuck/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/ShapeTransform/ShapeTransform.pde b/java/examples/3D/Form/ShapeTransform/ShapeTransform.pde new file mode 100644 index 000000000..c779a3a1a --- /dev/null +++ b/java/examples/3D/Form/ShapeTransform/ShapeTransform.pde @@ -0,0 +1,116 @@ +/** + * Shape Transform + * by Ira Greenberg. + * + * Illustrates the geometric relationship + * between Cube, Pyramid, Cone and + * Cylinder 3D primitives. + * + * Instructions:
+ * Up Arrow - increases points
+ * Down Arrow - decreases points
+ * 'p' key toggles between cube/pyramid
+ */ + +int pts = 4; +float angle = 0; +float radius = 99; +float cylinderLength = 95; + +//vertices +PVector vertices[][]; +boolean isPyramid = false; + +float angleInc; + +void setup(){ + size(640, 360, P3D); + noStroke(); + angleInc = PI/300.0; +} + +void draw(){ + background(170, 95, 95); + lights(); + fill(255, 200, 200); + translate(width/2, height/2); + rotateX(frameCount * angleInc); + rotateY(frameCount * angleInc); + rotateZ(frameCount * angleInc); + + // initialize vertex arrays + vertices = new PVector[2][pts+1]; + + // fill arrays + for (int i = 0; i < 2; i++){ + angle = 0; + for(int j = 0; j <= pts; j++){ + vertices[i][j] = new PVector(); + if (isPyramid){ + if (i==1){ + vertices[i][j].x = 0; + vertices[i][j].y = 0; + } + else { + vertices[i][j].x = cos(radians(angle)) * radius; + vertices[i][j].y = sin(radians(angle)) * radius; + } + } + else { + vertices[i][j].x = cos(radians(angle)) * radius; + vertices[i][j].y = sin(radians(angle)) * radius; + } + vertices[i][j].z = cylinderLength; + // the .0 after the 360 is critical + angle += 360.0/pts; + } + cylinderLength *= -1; + } + + // draw cylinder tube + beginShape(QUAD_STRIP); + for(int j = 0; j <= pts; j++){ + vertex(vertices[0][j].x, vertices[0][j].y, vertices[0][j].z); + vertex(vertices[1][j].x, vertices[1][j].y, vertices[1][j].z); + } + endShape(); + + //draw cylinder ends + for (int i = 0; i < 2; i++){ + beginShape(); + for(int j = 0; j < pts; j++){ + vertex(vertices[i][j].x, vertices[i][j].y, vertices[i][j].z); + } + endShape(CLOSE); + } +} + + +/* + up/down arrow keys control + polygon detail. + */ +void keyPressed(){ + if(key == CODED) { + // pts + if (keyCode == UP) { + if (pts < 90){ + pts++; + } + } + else if (keyCode == DOWN) { + if (pts > 4){ + pts--; + } + } + } + if (key =='p'){ + if (isPyramid){ + isPyramid = false; + } + else { + isPyramid = true; + } + } +} + diff --git a/java/examples/3D/Form/ShapeTransform/applet/ShapeTransform.java b/java/examples/3D/Form/ShapeTransform/applet/ShapeTransform.java new file mode 100644 index 000000000..f8c5377a8 --- /dev/null +++ b/java/examples/3D/Form/ShapeTransform/applet/ShapeTransform.java @@ -0,0 +1,147 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class ShapeTransform extends PApplet { + +/** + * Shape Transform + * by Ira Greenberg. + * + * Illustrates the geometric relationship + * between Cube, Pyramid, Cone and + * Cylinder 3D primitives. + * + * Instructions: + * Up Arrow - increases points + * Down Arrow - decreases points + * 'p' key toggles between cube/pyramid + */ + +int pts = 7; +float angle = 0; +float radius = 89; +float cylinderLength = 85; + +Point3D vertices[][]; +boolean isPyramid = false; + +public void setup(){ + size(640, 360, P3D); + noStroke(); + fill(204); +} + +public void draw(){ + background(102); + lights(); + + translate(width/2, height/2, 0); + rotateX(frameCount * 0.006f); + rotateY(frameCount * 0.006f); + rotateZ(frameCount * 0.006f); + + // initialize point arrays + vertices = new Point3D[2][pts+1]; + + // fill arrays + for (int i = 0; i < 2; i++){ + angle = 0; + for(int j = 0; j <= pts; j++){ + vertices[i][j] = new Point3D(); + if (isPyramid){ + if (i==1){ + vertices[i][j].x = 0; + vertices[i][j].y = 0; + } + else { + vertices[i][j].x = cos(radians(angle))*radius; + vertices[i][j].y = sin(radians(angle))*radius; + } + } + else { + vertices[i][j].x = cos(radians(angle))*radius; + vertices[i][j].y = sin(radians(angle))*radius; + } + vertices[i][j].z = cylinderLength; + // the .0 after the 360 is critical + angle += 360.0f/pts; + } + cylinderLength*=-1; + } + + // draw cylinder tube + beginShape(QUAD_STRIP); + for (int j = 0; j <= pts; j++){ + vertex(vertices[0][j].x, vertices[0][j].y, vertices[0][j].z); + vertex(vertices[1][j].x, vertices[1][j].y, vertices[1][j].z); + } + endShape(); + + //draw cylinder ends + for (int i = 0; i < 2; i++){ + beginShape(); + for (int j = 0; j < pts; j++){ + vertex(vertices[i][j].x, vertices[i][j].y, vertices[i][j].z); + } + endShape(CLOSE); + } +} + +/* + up/down arrow keys control + polygon detail. + */ +public void keyPressed(){ + if(key == CODED) { + // pts + if (keyCode == UP) { + if (pts<90){ + pts++; + } + } + else if (keyCode == DOWN) { + if (pts > 4){ + pts--; + } + } + } + if (key == 'p'){ + if (isPyramid){ + isPyramid=false; + } + else { + isPyramid=true; + } + } +} + + + +class Point3D{ + float x, y, z; + + // constructors + Point3D(){ + } + + Point3D(float x, float y, float z){ + this.x = x; + this.y = y; + this.z = z; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "ShapeTransform" }); + } +} diff --git a/java/examples/3D/Form/ShapeTransform/applet/ShapeTransform.pde b/java/examples/3D/Form/ShapeTransform/applet/ShapeTransform.pde new file mode 100644 index 000000000..4e7989b44 --- /dev/null +++ b/java/examples/3D/Form/ShapeTransform/applet/ShapeTransform.pde @@ -0,0 +1,114 @@ +/** + * Shape Transform + * by Ira Greenberg. + * + * Illustrates the geometric relationship + * between Cube, Pyramid, Cone and + * Cylinder 3D primitives. + * + * Instructions: + * Up Arrow - increases points + * Down Arrow - decreases points + * 'p' key toggles between cube/pyramid + */ + +int pts = 7; +float angle = 0; +float radius = 89; +float cylinderLength = 85; + +Point3D vertices[][]; +boolean isPyramid = false; + +void setup(){ + size(640, 360, P3D); + noStroke(); + fill(204); +} + +void draw(){ + background(102); + lights(); + + translate(width/2, height/2, 0); + rotateX(frameCount * 0.006); + rotateY(frameCount * 0.006); + rotateZ(frameCount * 0.006); + + // initialize point arrays + vertices = new Point3D[2][pts+1]; + + // fill arrays + for (int i = 0; i < 2; i++){ + angle = 0; + for(int j = 0; j <= pts; j++){ + vertices[i][j] = new Point3D(); + if (isPyramid){ + if (i==1){ + vertices[i][j].x = 0; + vertices[i][j].y = 0; + } + else { + vertices[i][j].x = cos(radians(angle))*radius; + vertices[i][j].y = sin(radians(angle))*radius; + } + } + else { + vertices[i][j].x = cos(radians(angle))*radius; + vertices[i][j].y = sin(radians(angle))*radius; + } + vertices[i][j].z = cylinderLength; + // the .0 after the 360 is critical + angle += 360.0/pts; + } + cylinderLength*=-1; + } + + // draw cylinder tube + beginShape(QUAD_STRIP); + for (int j = 0; j <= pts; j++){ + vertex(vertices[0][j].x, vertices[0][j].y, vertices[0][j].z); + vertex(vertices[1][j].x, vertices[1][j].y, vertices[1][j].z); + } + endShape(); + + //draw cylinder ends + for (int i = 0; i < 2; i++){ + beginShape(); + for (int j = 0; j < pts; j++){ + vertex(vertices[i][j].x, vertices[i][j].y, vertices[i][j].z); + } + endShape(CLOSE); + } +} + +/* + up/down arrow keys control + polygon detail. + */ +void keyPressed(){ + if(key == CODED) { + // pts + if (keyCode == UP) { + if (pts<90){ + pts++; + } + } + else if (keyCode == DOWN) { + if (pts > 4){ + pts--; + } + } + } + if (key == 'p'){ + if (isPyramid){ + isPyramid=false; + } + else { + isPyramid=true; + } + } +} + + + diff --git a/java/examples/3D/Form/ShapeTransform/applet/loading.gif b/java/examples/3D/Form/ShapeTransform/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/Toroid/Toroid.pde b/java/examples/3D/Form/Toroid/Toroid.pde new file mode 100644 index 000000000..f79a8d174 --- /dev/null +++ b/java/examples/3D/Form/Toroid/Toroid.pde @@ -0,0 +1,182 @@ +/** + * Interactive Toroid + * by Ira Greenberg. + * + * Illustrates the geometric relationship between Toroid, Sphere, and Helix + * 3D primitives, as well as lathing principal. + * + * Instructions:
+ * UP arrow key pts++
+ * DOWN arrow key pts--
+ * LEFT arrow key segments--
+ * RIGHT arrow key segments++
+ * 'a' key toroid radius--
+ * 's' key toroid radius++
+ * 'z' key initial polygon radius--
+ * 'x' key initial polygon radius++
+ * 'w' key toggle wireframe/solid shading
+ * 'h' key toggle sphere/helix
+ */ + +int pts = 40; +float angle = 0; +float radius = 60.0; + +// lathe segments +int segments = 60; +float latheAngle = 0; +float latheRadius = 100.0; + +//vertices +PVector vertices[], vertices2[]; + +// for shaded or wireframe rendering +boolean isWireFrame = false; + +// for optional helix +boolean isHelix = false; +float helixOffset = 5.0; + +void setup(){ + size(640, 360, P3D); +} + +void draw(){ + background(50, 64, 42); + // basic lighting setup + lights(); + // 2 rendering styles + // wireframe or solid + if (isWireFrame){ + stroke(255, 255, 150); + noFill(); + } + else { + noStroke(); + fill(150, 195, 125); + } + //center and spin toroid + translate(width/2, height/2, -100); + + rotateX(frameCount*PI/150); + rotateY(frameCount*PI/170); + rotateZ(frameCount*PI/90); + + // initialize point arrays + vertices = new PVector[pts+1]; + vertices2 = new PVector[pts+1]; + + // fill arrays + for(int i=0; i<=pts; i++){ + vertices[i] = new PVector(); + vertices2[i] = new PVector(); + vertices[i].x = latheRadius + sin(radians(angle))*radius; + if (isHelix){ + vertices[i].z = cos(radians(angle))*radius-(helixOffset* + segments)/2; + } + else{ + vertices[i].z = cos(radians(angle))*radius; + } + angle+=360.0/pts; + } + + // draw toroid + latheAngle = 0; + for(int i=0; i<=segments; i++){ + beginShape(QUAD_STRIP); + for(int j=0; j<=pts; j++){ + if (i>0){ + vertex(vertices2[j].x, vertices2[j].y, vertices2[j].z); + } + vertices2[j].x = cos(radians(latheAngle))*vertices[j].x; + vertices2[j].y = sin(radians(latheAngle))*vertices[j].x; + vertices2[j].z = vertices[j].z; + // optional helix offset + if (isHelix){ + vertices[j].z+=helixOffset; + } + vertex(vertices2[j].x, vertices2[j].y, vertices2[j].z); + } + // create extra rotation for helix + if (isHelix){ + latheAngle+=720.0/segments; + } + else { + latheAngle+=360.0/segments; + } + endShape(); + } +} + +/* + left/right arrow keys control ellipse detail + up/down arrow keys control segment detail. + 'a','s' keys control lathe radius + 'z','x' keys control ellipse radius + 'w' key toggles between wireframe and solid + 'h' key toggles between toroid and helix + */ +void keyPressed(){ + if(key == CODED) { + // pts + if (keyCode == UP) { + if (pts<40){ + pts++; + } + } + else if (keyCode == DOWN) { + if (pts>3){ + pts--; + } + } + // extrusion length + if (keyCode == LEFT) { + if (segments>3){ + segments--; + } + } + else if (keyCode == RIGHT) { + if (segments<80){ + segments++; + } + } + } + // lathe radius + if (key =='a'){ + if (latheRadius>0){ + latheRadius--; + } + } + else if (key == 's'){ + latheRadius++; + } + // ellipse radius + if (key =='z'){ + if (radius>10){ + radius--; + } + } + else if (key == 'x'){ + radius++; + } + // wireframe + if (key =='w'){ + if (isWireFrame){ + isWireFrame=false; + } + else { + isWireFrame=true; + } + } + // helix + if (key =='h'){ + if (isHelix){ + isHelix=false; + } + else { + isHelix=true; + } + } +} + diff --git a/java/examples/3D/Form/Toroid/applet/Toroid.java b/java/examples/3D/Form/Toroid/applet/Toroid.java new file mode 100644 index 000000000..f02ae636e --- /dev/null +++ b/java/examples/3D/Form/Toroid/applet/Toroid.java @@ -0,0 +1,215 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Toroid extends PApplet { + +/** + * Interactive Toroid + * by Ira Greenberg. + * + * Illustrates the geometric relationship + * between Toroid, Sphere, and Helix + * 3D primitives, as well as lathing + * principal. + * + * Instructions: + * UP arrow key pts++; + * DOWN arrow key pts--; + * LEFT arrow key segments--; + * RIGHT arrow key segments++; + * 'a' key toroid radius--; + * 's' key toroid radius++; + * 'z' key initial polygon radius--; + * 'x' key initial polygon radius++; + * 'w' key toggle wireframe/solid shading + * 'h' key toggle sphere/helix + */ + + +int pts = 40; +float angle = 0; +float radius = 40.0f; +// Lathe segments +int segments = 60; +float latheAngle = 0; +float latheRadius = 100.0f; +// Vertices +Point3D vertices[], vertices2[]; +// For shaded or wireframe rendering +boolean isWireFrame = false; +// For optional helix +boolean isHelix = false; +float helixOffset = 5.0f; + +public void setup() { + size(640, 360, P3D); +} + +public void draw(){ + background(51); + // Basic lighting setup + lights(); + // Two rendering styles + // Wireframe or solid + if (isWireFrame){ + stroke(255); + noFill(); + } + else { + noStroke(); + fill(204); + } + // Center and spin toroid + translate(width/2, height/2, -100); + + rotateX(frameCount*PI/150); + rotateY(frameCount*PI/170); + rotateZ(frameCount*PI/90); + + // Initialize point arrays + vertices = new Point3D[pts+1]; + vertices2 = new Point3D[pts+1]; + + // Fill arrays + for(int i = 0; i <= pts; i++){ + vertices[i] = new Point3D(); + vertices2[i] = new Point3D(); + vertices[i].x = latheRadius + sin(radians(angle))*radius; + if (isHelix){ + vertices[i].z = cos(radians(angle))*radius-(helixOffset* + segments)/2; + } + else{ + vertices[i].z = cos(radians(angle))*radius; + } + angle+=360.0f/pts; + } + + // Draw toroid + latheAngle = 0; + for(int i = 0; i <= segments; i++){ + beginShape(QUAD_STRIP); + for(int j = 0; j <= pts; j++){ + if (i > 0){ + vertex(vertices2[j].x, vertices2[j].y, vertices2[j].z); + } + vertices2[j].x = cos(radians(latheAngle))*vertices[j].x; + vertices2[j].y = sin(radians(latheAngle))*vertices[j].x; + vertices2[j].z = vertices[j].z; + // Optional helix offset + if (isHelix){ + vertices[j].z+=helixOffset; + } + vertex(vertices2[j].x, vertices2[j].y, vertices2[j].z); + } + // Create extra rotation for helix + if (isHelix){ + latheAngle += 720.0f/segments; + } + else { + latheAngle += 360.0f/segments; + } + endShape(); + } +} + +/* + left/right arrow keys control ellipse detail + up/down arrow keys control segment detail. + 'a','s' keys control lathe radius + 'z','x' keys control ellipse radius + 'w' key toggles between wireframe and solid + 'h' key toggles between toroid and helix + */ +public void keyPressed(){ + if(key == CODED) { + // pts + if (keyCode == UP) { + if (pts < 40){ + pts++; + } + } + else if (keyCode == DOWN) { + if (pts > 3){ + pts--; + } + } + // Extrusion length + if (keyCode == LEFT) { + if (segments > 3){ + segments--; + } + } + else if (keyCode == RIGHT) { + if (segments < 80){ + segments++; + } + } + } + // Lathe radius + if (key =='a'){ + if (latheRadius > 0){ + latheRadius--; + } + } + else if (key == 's'){ + latheRadius++; + } + // Ellipse radius + if (key =='z'){ + if (radius > 10){ + radius--; + } + } + else if (key == 'x'){ + radius++; + } + // Wireframe + if (key == 'w'){ + if (isWireFrame){ + isWireFrame=false; + } + else { + isWireFrame=true; + } + } + // Helix + if (key == 'h'){ + if (isHelix){ + isHelix=false; + } + else { + isHelix=true; + } + } +} + + +class Point3D{ + float x, y, z; + + // constructors + Point3D(){ + } + + Point3D(float x, float y, float z){ + this.x = x; + this.y = y; + this.z = z; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Toroid" }); + } +} diff --git a/java/examples/3D/Form/Toroid/applet/Toroid.pde b/java/examples/3D/Form/Toroid/applet/Toroid.pde new file mode 100644 index 000000000..6f876006a --- /dev/null +++ b/java/examples/3D/Form/Toroid/applet/Toroid.pde @@ -0,0 +1,182 @@ +/** + * Interactive Toroid + * by Ira Greenberg. + * + * Illustrates the geometric relationship + * between Toroid, Sphere, and Helix + * 3D primitives, as well as lathing + * principal. + * + * Instructions: + * UP arrow key pts++; + * DOWN arrow key pts--; + * LEFT arrow key segments--; + * RIGHT arrow key segments++; + * 'a' key toroid radius--; + * 's' key toroid radius++; + * 'z' key initial polygon radius--; + * 'x' key initial polygon radius++; + * 'w' key toggle wireframe/solid shading + * 'h' key toggle sphere/helix + */ + + +int pts = 40; +float angle = 0; +float radius = 40.0; +// Lathe segments +int segments = 60; +float latheAngle = 0; +float latheRadius = 100.0; +// Vertices +Point3D vertices[], vertices2[]; +// For shaded or wireframe rendering +boolean isWireFrame = false; +// For optional helix +boolean isHelix = false; +float helixOffset = 5.0; + +void setup() { + size(640, 360, P3D); +} + +void draw(){ + background(51); + // Basic lighting setup + lights(); + // Two rendering styles + // Wireframe or solid + if (isWireFrame){ + stroke(255); + noFill(); + } + else { + noStroke(); + fill(204); + } + // Center and spin toroid + translate(width/2, height/2, -100); + + rotateX(frameCount*PI/150); + rotateY(frameCount*PI/170); + rotateZ(frameCount*PI/90); + + // Initialize point arrays + vertices = new Point3D[pts+1]; + vertices2 = new Point3D[pts+1]; + + // Fill arrays + for(int i = 0; i <= pts; i++){ + vertices[i] = new Point3D(); + vertices2[i] = new Point3D(); + vertices[i].x = latheRadius + sin(radians(angle))*radius; + if (isHelix){ + vertices[i].z = cos(radians(angle))*radius-(helixOffset* + segments)/2; + } + else{ + vertices[i].z = cos(radians(angle))*radius; + } + angle+=360.0/pts; + } + + // Draw toroid + latheAngle = 0; + for(int i = 0; i <= segments; i++){ + beginShape(QUAD_STRIP); + for(int j = 0; j <= pts; j++){ + if (i > 0){ + vertex(vertices2[j].x, vertices2[j].y, vertices2[j].z); + } + vertices2[j].x = cos(radians(latheAngle))*vertices[j].x; + vertices2[j].y = sin(radians(latheAngle))*vertices[j].x; + vertices2[j].z = vertices[j].z; + // Optional helix offset + if (isHelix){ + vertices[j].z+=helixOffset; + } + vertex(vertices2[j].x, vertices2[j].y, vertices2[j].z); + } + // Create extra rotation for helix + if (isHelix){ + latheAngle += 720.0/segments; + } + else { + latheAngle += 360.0/segments; + } + endShape(); + } +} + +/* + left/right arrow keys control ellipse detail + up/down arrow keys control segment detail. + 'a','s' keys control lathe radius + 'z','x' keys control ellipse radius + 'w' key toggles between wireframe and solid + 'h' key toggles between toroid and helix + */ +void keyPressed(){ + if(key == CODED) { + // pts + if (keyCode == UP) { + if (pts < 40){ + pts++; + } + } + else if (keyCode == DOWN) { + if (pts > 3){ + pts--; + } + } + // Extrusion length + if (keyCode == LEFT) { + if (segments > 3){ + segments--; + } + } + else if (keyCode == RIGHT) { + if (segments < 80){ + segments++; + } + } + } + // Lathe radius + if (key =='a'){ + if (latheRadius > 0){ + latheRadius--; + } + } + else if (key == 's'){ + latheRadius++; + } + // Ellipse radius + if (key =='z'){ + if (radius > 10){ + radius--; + } + } + else if (key == 'x'){ + radius++; + } + // Wireframe + if (key == 'w'){ + if (isWireFrame){ + isWireFrame=false; + } + else { + isWireFrame=true; + } + } + // Helix + if (key == 'h'){ + if (isHelix){ + isHelix=false; + } + else { + isHelix=true; + } + } +} + + diff --git a/java/examples/3D/Form/Toroid/applet/loading.gif b/java/examples/3D/Form/Toroid/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Form/Vertices/Vertices.pde b/java/examples/3D/Form/Vertices/Vertices.pde new file mode 100644 index 000000000..5609ff94f --- /dev/null +++ b/java/examples/3D/Form/Vertices/Vertices.pde @@ -0,0 +1,67 @@ +/** + * Vertices + * by Simon Greenwold. + * + * Draw a cylinder centered on the y-axis, going down + * from y=0 to y=height. The radius at the top can be + * different from the radius at the bottom, and the + * number of sides drawn is variable. + */ + +void setup() { + size(640, 360, P3D); +} + +void draw() { + background(0); + lights(); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, 0, PI)); + rotateZ(map(mouseY, 0, height, 0, -PI)); + noStroke(); + fill(255, 255, 255); + translate(0, -40, 0); + drawCylinder(10, 180, 200, 16); // Draw a mix between a cylinder and a cone + //drawCylinder(70, 70, 120, 64); // Draw a cylinder + //drawCylinder(0, 180, 200, 4); // Draw a pyramid +} + +void drawCylinder(float topRadius, float bottomRadius, float tall, int sides) { + float angle = 0; + float angleIncrement = TWO_PI / sides; + beginShape(QUAD_STRIP); + for (int i = 0; i < sides + 1; ++i) { + vertex(topRadius*cos(angle), 0, topRadius*sin(angle)); + vertex(bottomRadius*cos(angle), tall, bottomRadius*sin(angle)); + angle += angleIncrement; + } + endShape(); + + // If it is not a cone, draw the circular top cap + if (topRadius != 0) { + angle = 0; + beginShape(TRIANGLE_FAN); + + // Center point + vertex(0, 0, 0); + for (int i = 0; i < sides + 1; i++) { + vertex(topRadius * cos(angle), 0, topRadius * sin(angle)); + angle += angleIncrement; + } + endShape(); + } + + // If it is not a cone, draw the circular bottom cap + if (bottomRadius != 0) { + angle = 0; + beginShape(TRIANGLE_FAN); + + // Center point + vertex(0, tall, 0); + for (int i = 0; i < sides + 1; i++) { + vertex(bottomRadius * cos(angle), tall, bottomRadius * sin(angle)); + angle += angleIncrement; + } + endShape(); + } +} diff --git a/java/examples/3D/Form/Vertices/applet/Vertices.java b/java/examples/3D/Form/Vertices/applet/Vertices.java new file mode 100644 index 000000000..1b5c9302d --- /dev/null +++ b/java/examples/3D/Form/Vertices/applet/Vertices.java @@ -0,0 +1,87 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Vertices extends PApplet { + +/** + * Vertices + * by Simon Greenwold. + * + * Draw a cylinder centered on the y-axis, going down + * from y=0 to y=height. The radius at the top can be + * different from the radius at the bottom, and the + * number of sides drawn is variable. + */ + +public void setup() { + size(640, 360, P3D); +} + +public void draw() { + background(0); + lights(); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, 0, PI)); + rotateZ(map(mouseY, 0, height, 0, -PI)); + noStroke(); + fill(255, 255, 255); + translate(0, -40, 0); + drawCylinder(10, 180, 200, 16); // Draw a mix between a cylinder and a cone + //drawCylinder(70, 70, 120, 64); // Draw a cylinder + //drawCylinder(0, 180, 200, 4); // Draw a pyramid +} + +public void drawCylinder(float topRadius, float bottomRadius, float tall, int sides) { + float angle = 0; + float angleIncrement = TWO_PI / sides; + beginShape(QUAD_STRIP); + for (int i = 0; i < sides + 1; ++i) { + vertex(topRadius*cos(angle), 0, topRadius*sin(angle)); + vertex(bottomRadius*cos(angle), tall, bottomRadius*sin(angle)); + angle += angleIncrement; + } + endShape(); + + // If it is not a cone, draw the circular top cap + if (topRadius != 0) { + angle = 0; + beginShape(TRIANGLE_FAN); + + // Center point + vertex(0, 0, 0); + for (int i = 0; i < sides + 1; i++) { + vertex(topRadius * cos(angle), 0, topRadius * sin(angle)); + angle += angleIncrement; + } + endShape(); + } + + // If it is not a cone, draw the circular bottom cap + if (bottomRadius != 0) { + angle = 0; + beginShape(TRIANGLE_FAN); + + // Center point + vertex(0, tall, 0); + for (int i = 0; i < sides + 1; i++) { + vertex(bottomRadius * cos(angle), tall, bottomRadius * sin(angle)); + angle += angleIncrement; + } + endShape(); + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Vertices" }); + } +} diff --git a/java/examples/3D/Form/Vertices/applet/Vertices.pde b/java/examples/3D/Form/Vertices/applet/Vertices.pde new file mode 100644 index 000000000..5609ff94f --- /dev/null +++ b/java/examples/3D/Form/Vertices/applet/Vertices.pde @@ -0,0 +1,67 @@ +/** + * Vertices + * by Simon Greenwold. + * + * Draw a cylinder centered on the y-axis, going down + * from y=0 to y=height. The radius at the top can be + * different from the radius at the bottom, and the + * number of sides drawn is variable. + */ + +void setup() { + size(640, 360, P3D); +} + +void draw() { + background(0); + lights(); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, 0, PI)); + rotateZ(map(mouseY, 0, height, 0, -PI)); + noStroke(); + fill(255, 255, 255); + translate(0, -40, 0); + drawCylinder(10, 180, 200, 16); // Draw a mix between a cylinder and a cone + //drawCylinder(70, 70, 120, 64); // Draw a cylinder + //drawCylinder(0, 180, 200, 4); // Draw a pyramid +} + +void drawCylinder(float topRadius, float bottomRadius, float tall, int sides) { + float angle = 0; + float angleIncrement = TWO_PI / sides; + beginShape(QUAD_STRIP); + for (int i = 0; i < sides + 1; ++i) { + vertex(topRadius*cos(angle), 0, topRadius*sin(angle)); + vertex(bottomRadius*cos(angle), tall, bottomRadius*sin(angle)); + angle += angleIncrement; + } + endShape(); + + // If it is not a cone, draw the circular top cap + if (topRadius != 0) { + angle = 0; + beginShape(TRIANGLE_FAN); + + // Center point + vertex(0, 0, 0); + for (int i = 0; i < sides + 1; i++) { + vertex(topRadius * cos(angle), 0, topRadius * sin(angle)); + angle += angleIncrement; + } + endShape(); + } + + // If it is not a cone, draw the circular bottom cap + if (bottomRadius != 0) { + angle = 0; + beginShape(TRIANGLE_FAN); + + // Center point + vertex(0, tall, 0); + for (int i = 0; i < sides + 1; i++) { + vertex(bottomRadius * cos(angle), tall, bottomRadius * sin(angle)); + angle += angleIncrement; + } + endShape(); + } +} diff --git a/java/examples/3D/Form/Vertices/applet/loading.gif b/java/examples/3D/Form/Vertices/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Image/Explode/Explode.pde b/java/examples/3D/Image/Explode/Explode.pde new file mode 100644 index 000000000..436f9e8fd --- /dev/null +++ b/java/examples/3D/Image/Explode/Explode.pde @@ -0,0 +1,43 @@ +/** + * Explode + * by Daniel Shiffman. + * + * Mouse horizontal location controls breaking apart of image and + * Maps pixels from a 2D image into 3D space. Pixel brightness controls + * translation along z axis. + */ + +PImage img; // The source image +int cellsize = 2; // Dimensions of each cell in the grid +int columns, rows; // Number of columns and rows in our system + +void setup() { + size(640, 360, P3D); + img = loadImage("eames.jpg"); // Load the image + columns = img.width / cellsize; // Calculate # of columns + rows = img.height / cellsize; // Calculate # of rows +} + +void draw() { + background(0); + // Begin loop for columns + for ( int i = 0; i < columns; i++) { + // Begin loop for rows + for ( int j = 0; j < rows; j++) { + int x = i*cellsize + cellsize/2; // x position + int y = j*cellsize + cellsize/2; // y position + int loc = x + y*img.width; // Pixel array location + color c = img.pixels[loc]; // Grab the color + // Calculate a z position as a function of mouseX and pixel brightness + float z = (mouseX / float(width)) * brightness(img.pixels[loc]) - 20.0; + // Translate to the location, set fill and stroke, and draw the rect + pushMatrix(); + translate(x + 200, y + 100, z); + fill(c, 204); + noStroke(); + rectMode(CENTER); + rect(0, 0, cellsize, cellsize); + popMatrix(); + } + } +} diff --git a/java/examples/3D/Image/Explode/applet/Explode.java b/java/examples/3D/Image/Explode/applet/Explode.java new file mode 100644 index 000000000..b8e89ef27 --- /dev/null +++ b/java/examples/3D/Image/Explode/applet/Explode.java @@ -0,0 +1,63 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Explode extends PApplet { + +/** + * Explode + * by Daniel Shiffman. + * + * Mouse horizontal location controls breaking apart of image and + * Maps pixels from a 2D image into 3D space. Pixel brightness controls + * translation along z axis. + */ + +PImage img; // The source image +int cellsize = 2; // Dimensions of each cell in the grid +int columns, rows; // Number of columns and rows in our system + +public void setup() { + size(640, 360, P3D); + img = loadImage("eames.jpg"); // Load the image + columns = img.width / cellsize; // Calculate # of columns + rows = img.height / cellsize; // Calculate # of rows +} + +public void draw() { + background(0); + // Begin loop for columns + for ( int i = 0; i < columns; i++) { + // Begin loop for rows + for ( int j = 0; j < rows; j++) { + int x = i*cellsize + cellsize/2; // x position + int y = j*cellsize + cellsize/2; // y position + int loc = x + y*img.width; // Pixel array location + int c = img.pixels[loc]; // Grab the color + // Calculate a z position as a function of mouseX and pixel brightness + float z = (mouseX / PApplet.parseFloat(width)) * brightness(img.pixels[loc]) - 20.0f; + // Translate to the location, set fill and stroke, and draw the rect + pushMatrix(); + translate(x + 200, y + 100, z); + fill(c, 204); + noStroke(); + rectMode(CENTER); + rect(0, 0, cellsize, cellsize); + popMatrix(); + } + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Explode" }); + } +} diff --git a/java/examples/3D/Image/Explode/applet/Explode.pde b/java/examples/3D/Image/Explode/applet/Explode.pde new file mode 100644 index 000000000..e6f120943 --- /dev/null +++ b/java/examples/3D/Image/Explode/applet/Explode.pde @@ -0,0 +1,43 @@ +/** + * Explode + * by Daniel Shiffman. + * + * Mouse horizontal location controls breaking apart of image and + * Maps pixels from a 2D image into 3D space. Pixel brightness controls + * translation along z axis. + */ + +PImage img; // The source image +int cellsize = 2; // Dimensions of each cell in the grid +int columns, rows; // Number of columns and rows in our system + +void setup() { + size(640, 360, P3D); + img = loadImage("eames.jpg"); // Load the image + columns = img.width / cellsize; // Calculate # of columns + rows = img.height / cellsize; // Calculate # of rows +} + +void draw() { + background(0); + // Begin loop for columns + for ( int i = 0; i < columns; i++) { + // Begin loop for rows + for ( int j = 0; j < rows; j++) { + int x = i*cellsize + cellsize/2; // x position + int y = j*cellsize + cellsize/2; // y position + int loc = x + y*img.width; // Pixel array location + color c = img.pixels[loc]; // Grab the color + // Calculate a z position as a function of mouseX and pixel brightness + float z = (mouseX / float(width)) * brightness(img.pixels[loc]) - 20.0; + // Translate to the location, set fill and stroke, and draw the rect + pushMatrix(); + translate(x + 200, y + 100, z); + fill(c, 204); + noStroke(); + rectMode(CENTER); + rect(0, 0, cellsize, cellsize); + popMatrix(); + } + } +} diff --git a/java/examples/3D/Image/Explode/applet/loading.gif b/java/examples/3D/Image/Explode/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Image/Explode/data/eames.jpg.tmp b/java/examples/3D/Image/Explode/data/eames.jpg.tmp new file mode 100644 index 0000000000000000000000000000000000000000..c89377e40b1ac8538f10112f7d566b5829c6172f GIT binary patch literal 44496 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�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 E+2};vKL7v# literal 0 HcmV?d00001 diff --git a/java/examples/3D/Image/Extrusion/Extrusion.pde b/java/examples/3D/Image/Extrusion/Extrusion.pde new file mode 100644 index 000000000..637ac6689 --- /dev/null +++ b/java/examples/3D/Image/Extrusion/Extrusion.pde @@ -0,0 +1,46 @@ +/** + * Extrusion. + * + * Converts a flat image into spatial data points and rotates the points + * around the center. + */ + +PImage extrude; +int[][] values; +float angle = 0; + +void setup() { + size(640, 360, P3D); + + // Load the image into a new array + extrude = loadImage("ystone08.jpg"); + extrude.loadPixels(); + values = new int[extrude.width][extrude.height]; + for (int y = 0; y < extrude.height; y++) { + for (int x = 0; x < extrude.width; x++) { + color pixel = extrude.get(x, y); + values[x][y] = int(brightness(pixel)); + } + } +} + +void draw() { + background(0); + + // Update the angle + angle += 0.005; + + // Rotate around the center axis + translate(width/2, 0, -128); + rotateY(angle); + translate(-extrude.width/2, 100, -128); + + // Display the image mass + for (int y = 0; y < extrude.height; y++) { + for (int x = 0; x < extrude.width; x++) { + stroke(values[x][y]); + point(x, y, -values[x][y]); + } + } + +} diff --git a/java/examples/3D/Image/Extrusion/applet/Extrusion.java b/java/examples/3D/Image/Extrusion/applet/Extrusion.java new file mode 100644 index 000000000..44d33ed40 --- /dev/null +++ b/java/examples/3D/Image/Extrusion/applet/Extrusion.java @@ -0,0 +1,67 @@ +import processing.core.*; +import processing.xml.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Extrusion extends PApplet { + +/** + * Extrusion. + * + * Converts a flat image into spatial data points and rotates the points + * around the center. + */ + +PImage extrude; +int[][] values; +float angle = 0; + +public void setup() { + size(640, 360, P3D); + + // Load the image into a new array + extrude = loadImage("ystone08.jpg"); + extrude.loadPixels(); + values = new int[extrude.width][extrude.height]; + for (int y = 0; y < extrude.height; y++) { + for (int x = 0; x < extrude.width; x++) { + int pixel = extrude.get(x, y); + values[x][y] = PApplet.parseInt(brightness(pixel)); + } + } +} + +public void draw() { + background(0); + + // Update the angle + angle += 0.005f; + + // Rotate around the center axis + translate(width/2, 0, -128); + rotateY(angle); + translate(-extrude.width/2, 100, -128); + + // Display the image mass + for (int y = 0; y < extrude.height; y++) { + for (int x = 0; x < extrude.width; x++) { + stroke(values[x][y]); + point(x, y, -values[x][y]); + } + } + +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Extrusion" }); + } +} diff --git a/java/examples/3D/Image/Extrusion/applet/Extrusion.pde b/java/examples/3D/Image/Extrusion/applet/Extrusion.pde new file mode 100644 index 000000000..637ac6689 --- /dev/null +++ b/java/examples/3D/Image/Extrusion/applet/Extrusion.pde @@ -0,0 +1,46 @@ +/** + * Extrusion. + * + * Converts a flat image into spatial data points and rotates the points + * around the center. + */ + +PImage extrude; +int[][] values; +float angle = 0; + +void setup() { + size(640, 360, P3D); + + // Load the image into a new array + extrude = loadImage("ystone08.jpg"); + extrude.loadPixels(); + values = new int[extrude.width][extrude.height]; + for (int y = 0; y < extrude.height; y++) { + for (int x = 0; x < extrude.width; x++) { + color pixel = extrude.get(x, y); + values[x][y] = int(brightness(pixel)); + } + } +} + +void draw() { + background(0); + + // Update the angle + angle += 0.005; + + // Rotate around the center axis + translate(width/2, 0, -128); + rotateY(angle); + translate(-extrude.width/2, 100, -128); + + // Display the image mass + for (int y = 0; y < extrude.height; y++) { + for (int x = 0; x < extrude.width; x++) { + stroke(values[x][y]); + point(x, y, -values[x][y]); + } + } + +} diff --git a/java/examples/3D/Image/Extrusion/applet/loading.gif b/java/examples/3D/Image/Extrusion/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Image/Zoom/Zoom.pde b/java/examples/3D/Image/Zoom/Zoom.pde new file mode 100644 index 000000000..d80e842a3 --- /dev/null +++ b/java/examples/3D/Image/Zoom/Zoom.pde @@ -0,0 +1,89 @@ +/** + * Zoom. + * + * Move the cursor over the image to alter its position. Click and press + * the mouse to zoom and set the density of the matrix by typing numbers 1-5. + * This program displays a series of lines with their heights corresponding to + * a color value read from an image. + */ + +PImage img; +//boolean onetime = true; +int[][] imgPixels; +float sval = 1.0; +float nmx, nmy; +int res = 5; + +void setup() +{ + size(640, 360, P3D); + noFill(); + stroke(255); + img = loadImage("ystone08.jpg"); + imgPixels = new int[img.width][img.height]; + for (int i = 0; i < img.height; i++) { + for (int j = 0; j < img.width; j++) { + imgPixels[j][i] = img.get(j, i); + } + } +} + +void draw() +{ + background(0); + + nmx = nmx + (mouseX-nmx)/20; + nmy += (mouseY-nmy)/20; + + if(mousePressed) { + sval += 0.005; + } + else { + sval -= 0.01; + } + + sval = constrain(sval, 1.0, 2.5); + + translate(width/2 + nmx * sval-100, height/2 + nmy*sval - 200, -50); + scale(sval); + rotateZ(PI/9 - sval + 1.0); + rotateX(PI/sval/8 - 0.125); + rotateY(sval/8 - 0.125); + + translate(-width/2, -height/2, 0); + + for (int i = 0; i < img.height; i += res) { + for (int j = 0; j < img.width; j += res) { + float rr = red(imgPixels[j][i]); + float gg = green(imgPixels[j][i]); + float bb = blue(imgPixels[j][i]); + float tt = rr+gg+bb; + stroke(rr, gg, gg); + line(i, j, tt/10-20, i, j, tt/10 ); + } + } +} + +void keyPressed() { + if(key == '1') { + res = 1; + } + else if (key == '2') { + res = 2; + } + else if (key == '3') { + res = 3; + } + else if (key == '4') { + res = 4; + } + else if (key == '5') { + res = 5; + } +} + + + + + + diff --git a/java/examples/3D/Image/Zoom/applet/Zoom.java b/java/examples/3D/Image/Zoom/applet/Zoom.java new file mode 100644 index 000000000..d37d0ff26 --- /dev/null +++ b/java/examples/3D/Image/Zoom/applet/Zoom.java @@ -0,0 +1,109 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Zoom extends PApplet { + +/** + * Zoom. + * + * Move the cursor over the image to alter its position. Click and press + * the mouse to zoom and set the density of the matrix by typing numbers 1-5. + * This program displays a series of lines with their heights corresponding to + * a color value read from an image. + */ + +PImage img; +//boolean onetime = true; +int[][] imgPixels; +float sval = 1.0f; +float nmx, nmy; +int res = 5; + +public void setup() +{ + size(640, 360, P3D); + noFill(); + stroke(255); + img = loadImage("ystone08.jpg"); + imgPixels = new int[img.width][img.height]; + for (int i = 0; i < img.height; i++) { + for (int j = 0; j < img.width; j++) { + imgPixels[j][i] = img.get(j, i); + } + } +} + +public void draw() +{ + background(0); + + nmx = nmx + (mouseX-nmx)/20; + nmy += (mouseY-nmy)/20; + + if(mousePressed) { + sval += 0.005f; + } + else { + sval -= 0.01f; + } + + sval = constrain(sval, 1.0f, 2.5f); + + translate(width/2 + nmx * sval-100, height/2 + nmy*sval - 200, -50); + scale(sval); + rotateZ(PI/9 - sval + 1.0f); + rotateX(PI/sval/8 - 0.125f); + rotateY(sval/8 - 0.125f); + + translate(-width/2, -height/2, 0); + + for (int i = 0; i < img.height; i += res) { + for (int j = 0; j < img.width; j += res) { + float rr = red(imgPixels[j][i]); + float gg = green(imgPixels[j][i]); + float bb = blue(imgPixels[j][i]); + float tt = rr+gg+bb; + stroke(rr, gg, gg); + line(i, j, tt/10-20, i, j, tt/10 ); + } + } +} + +public void keyPressed() { + if(key == '1') { + res = 1; + } + else if (key == '2') { + res = 2; + } + else if (key == '3') { + res = 3; + } + else if (key == '4') { + res = 4; + } + else if (key == '5') { + res = 5; + } +} + + + + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "Zoom" }); + } +} diff --git a/java/examples/3D/Image/Zoom/applet/Zoom.pde b/java/examples/3D/Image/Zoom/applet/Zoom.pde new file mode 100644 index 000000000..d80e842a3 --- /dev/null +++ b/java/examples/3D/Image/Zoom/applet/Zoom.pde @@ -0,0 +1,89 @@ +/** + * Zoom. + * + * Move the cursor over the image to alter its position. Click and press + * the mouse to zoom and set the density of the matrix by typing numbers 1-5. + * This program displays a series of lines with their heights corresponding to + * a color value read from an image. + */ + +PImage img; +//boolean onetime = true; +int[][] imgPixels; +float sval = 1.0; +float nmx, nmy; +int res = 5; + +void setup() +{ + size(640, 360, P3D); + noFill(); + stroke(255); + img = loadImage("ystone08.jpg"); + imgPixels = new int[img.width][img.height]; + for (int i = 0; i < img.height; i++) { + for (int j = 0; j < img.width; j++) { + imgPixels[j][i] = img.get(j, i); + } + } +} + +void draw() +{ + background(0); + + nmx = nmx + (mouseX-nmx)/20; + nmy += (mouseY-nmy)/20; + + if(mousePressed) { + sval += 0.005; + } + else { + sval -= 0.01; + } + + sval = constrain(sval, 1.0, 2.5); + + translate(width/2 + nmx * sval-100, height/2 + nmy*sval - 200, -50); + scale(sval); + rotateZ(PI/9 - sval + 1.0); + rotateX(PI/sval/8 - 0.125); + rotateY(sval/8 - 0.125); + + translate(-width/2, -height/2, 0); + + for (int i = 0; i < img.height; i += res) { + for (int j = 0; j < img.width; j += res) { + float rr = red(imgPixels[j][i]); + float gg = green(imgPixels[j][i]); + float bb = blue(imgPixels[j][i]); + float tt = rr+gg+bb; + stroke(rr, gg, gg); + line(i, j, tt/10-20, i, j, tt/10 ); + } + } +} + +void keyPressed() { + if(key == '1') { + res = 1; + } + else if (key == '2') { + res = 2; + } + else if (key == '3') { + res = 3; + } + else if (key == '4') { + res = 4; + } + else if (key == '5') { + res = 5; + } +} + + + + + + diff --git a/java/examples/3D/Image/Zoom/applet/loading.gif b/java/examples/3D/Image/Zoom/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Lights/Directional/Directional.pde b/java/examples/3D/Lights/Directional/Directional.pde new file mode 100644 index 000000000..6a1af3008 --- /dev/null +++ b/java/examples/3D/Lights/Directional/Directional.pde @@ -0,0 +1,28 @@ +/** + * Directional. + * + * Move the mouse the change the direction of the light. + * Directional light comes from one direction and is stronger + * when hitting a surface squarely and weaker if it hits at a + * a gentle angle. After hitting a surface, a directional lights + * scatters in all directions. + */ + +void setup() { + size(640, 360, P3D); + noStroke(); + fill(204); +} + +void draw() { + noStroke(); + background(0); + float dirY = (mouseY / float(height) - 0.5) * 2; + float dirX = (mouseX / float(width) - 0.5) * 2; + directionalLight(204, 204, 204, -dirX, -dirY, -1); + translate(width/2 - 100, height/2, 0); + sphere(80); + translate(200, 0, 0); + sphere(80); +} + diff --git a/java/examples/3D/Lights/Directional/applet/Directional.java b/java/examples/3D/Lights/Directional/applet/Directional.java new file mode 100644 index 000000000..e6b4a42c0 --- /dev/null +++ b/java/examples/3D/Lights/Directional/applet/Directional.java @@ -0,0 +1,48 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Directional extends PApplet { + +/** + * Directional. + * + * Move the mouse the change the direction of the light. + * Directional light comes from one direction and is stronger + * when hitting a surface squarely and weaker if it hits at a + * a gentle angle. After hitting a surface, a directional lights + * scatters in all directions. + */ + +public void setup() { + size(640, 360, P3D); + noStroke(); + fill(204); +} + +public void draw() { + noStroke(); + background(0); + float dirY = (mouseY / PApplet.parseFloat(height) - 0.5f) * 2; + float dirX = (mouseX / PApplet.parseFloat(width) - 0.5f) * 2; + directionalLight(204, 204, 204, -dirX, -dirY, -1); + translate(width/2 - 100, height/2, 0); + sphere(80); + translate(200, 0, 0); + sphere(80); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Directional" }); + } +} diff --git a/java/examples/3D/Lights/Directional/applet/Directional.pde b/java/examples/3D/Lights/Directional/applet/Directional.pde new file mode 100644 index 000000000..6a1af3008 --- /dev/null +++ b/java/examples/3D/Lights/Directional/applet/Directional.pde @@ -0,0 +1,28 @@ +/** + * Directional. + * + * Move the mouse the change the direction of the light. + * Directional light comes from one direction and is stronger + * when hitting a surface squarely and weaker if it hits at a + * a gentle angle. After hitting a surface, a directional lights + * scatters in all directions. + */ + +void setup() { + size(640, 360, P3D); + noStroke(); + fill(204); +} + +void draw() { + noStroke(); + background(0); + float dirY = (mouseY / float(height) - 0.5) * 2; + float dirX = (mouseX / float(width) - 0.5) * 2; + directionalLight(204, 204, 204, -dirX, -dirY, -1); + translate(width/2 - 100, height/2, 0); + sphere(80); + translate(200, 0, 0); + sphere(80); +} + diff --git a/java/examples/3D/Lights/Directional/applet/loading.gif b/java/examples/3D/Lights/Directional/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Lights/Lights1/Lights1.pde b/java/examples/3D/Lights/Lights1/Lights1.pde new file mode 100644 index 000000000..bf7a36edc --- /dev/null +++ b/java/examples/3D/Lights/Lights1/Lights1.pde @@ -0,0 +1,29 @@ +/** + * Lights 1. + * + * Uses the default lights to show a simple box. The lights() function + * is used to turn on the default lighting. + */ + +float spin = 0.0; + +void setup() +{ + size(640, 360, P3D); + noStroke(); +} + +void draw() +{ + background(51); + lights(); + + spin += 0.01; + + pushMatrix(); + translate(width/2, height/2, 0); + rotateX(PI/9); + rotateY(PI/5 + spin); + box(150); + popMatrix(); +} diff --git a/java/examples/3D/Lights/Lights1/applet/Lights1.java b/java/examples/3D/Lights/Lights1/applet/Lights1.java new file mode 100644 index 000000000..d6f6d9672 --- /dev/null +++ b/java/examples/3D/Lights/Lights1/applet/Lights1.java @@ -0,0 +1,49 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Lights1 extends PApplet { + +/** + * Lights 1. + * + * Uses the default lights to show a simple box. The lights() function + * is used to turn on the default lighting. + */ + +float spin = 0.0f; + +public void setup() +{ + size(640, 360, P3D); + noStroke(); +} + +public void draw() +{ + background(51); + lights(); + + spin += 0.01f; + + pushMatrix(); + translate(width/2, height/2, 0); + rotateX(PI/9); + rotateY(PI/5 + spin); + box(150); + popMatrix(); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Lights1" }); + } +} diff --git a/java/examples/3D/Lights/Lights1/applet/Lights1.pde b/java/examples/3D/Lights/Lights1/applet/Lights1.pde new file mode 100644 index 000000000..bf7a36edc --- /dev/null +++ b/java/examples/3D/Lights/Lights1/applet/Lights1.pde @@ -0,0 +1,29 @@ +/** + * Lights 1. + * + * Uses the default lights to show a simple box. The lights() function + * is used to turn on the default lighting. + */ + +float spin = 0.0; + +void setup() +{ + size(640, 360, P3D); + noStroke(); +} + +void draw() +{ + background(51); + lights(); + + spin += 0.01; + + pushMatrix(); + translate(width/2, height/2, 0); + rotateX(PI/9); + rotateY(PI/5 + spin); + box(150); + popMatrix(); +} diff --git a/java/examples/3D/Lights/Lights1/applet/loading.gif b/java/examples/3D/Lights/Lights1/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Lights/Lights2/Lights2.pde b/java/examples/3D/Lights/Lights2/Lights2.pde new file mode 100644 index 000000000..e1693e590 --- /dev/null +++ b/java/examples/3D/Lights/Lights2/Lights2.pde @@ -0,0 +1,36 @@ +/** + * Lights 2 + * by Simon Greenwold. + * + * Display a box with three different kinds of lights. + */ + +void setup() +{ + size(640, 360, P3D); + noStroke(); +} + +void draw() +{ + background(0); + translate(width / 2, height / 2); + + // Orange point light on the right + pointLight(150, 100, 0, // Color + 200, -150, 0); // Position + + // Blue directional light from the left + directionalLight(0, 102, 255, // Color + 1, 0, 0); // The x-, y-, z-axis direction + + // Yellow spotlight from the front + spotLight(255, 255, 109, // Color + 0, 40, 200, // Position + 0, -0.5, -0.5, // Direction + PI / 2, 2); // Angle, concentration + + rotateY(map(mouseX, 0, width, 0, PI)); + rotateX(map(mouseY, 0, height, 0, PI)); + box(150); +} diff --git a/java/examples/3D/Lights/Lights2/applet/Lights2.java b/java/examples/3D/Lights/Lights2/applet/Lights2.java new file mode 100644 index 000000000..568ca8e80 --- /dev/null +++ b/java/examples/3D/Lights/Lights2/applet/Lights2.java @@ -0,0 +1,56 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Lights2 extends PApplet { + +/** + * Lights 2 + * by Simon Greenwold. + * + * Display a box with three different kinds of lights. + */ + +public void setup() +{ + size(640, 360, P3D); + noStroke(); +} + +public void draw() +{ + background(0); + translate(width / 2, height / 2); + + // Orange point light on the right + pointLight(150, 100, 0, // Color + 200, -150, 0); // Position + + // Blue directional light from the left + directionalLight(0, 102, 255, // Color + 1, 0, 0); // The x-, y-, z-axis direction + + // Yellow spotlight from the front + spotLight(255, 255, 109, // Color + 0, 40, 200, // Position + 0, -0.5f, -0.5f, // Direction + PI / 2, 2); // Angle, concentration + + rotateY(map(mouseX, 0, width, 0, PI)); + rotateX(map(mouseY, 0, height, 0, PI)); + box(150); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Lights2" }); + } +} diff --git a/java/examples/3D/Lights/Lights2/applet/Lights2.pde b/java/examples/3D/Lights/Lights2/applet/Lights2.pde new file mode 100644 index 000000000..e1693e590 --- /dev/null +++ b/java/examples/3D/Lights/Lights2/applet/Lights2.pde @@ -0,0 +1,36 @@ +/** + * Lights 2 + * by Simon Greenwold. + * + * Display a box with three different kinds of lights. + */ + +void setup() +{ + size(640, 360, P3D); + noStroke(); +} + +void draw() +{ + background(0); + translate(width / 2, height / 2); + + // Orange point light on the right + pointLight(150, 100, 0, // Color + 200, -150, 0); // Position + + // Blue directional light from the left + directionalLight(0, 102, 255, // Color + 1, 0, 0); // The x-, y-, z-axis direction + + // Yellow spotlight from the front + spotLight(255, 255, 109, // Color + 0, 40, 200, // Position + 0, -0.5, -0.5, // Direction + PI / 2, 2); // Angle, concentration + + rotateY(map(mouseX, 0, width, 0, PI)); + rotateX(map(mouseY, 0, height, 0, PI)); + box(150); +} diff --git a/java/examples/3D/Lights/Lights2/applet/loading.gif b/java/examples/3D/Lights/Lights2/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Lights/Reflection/Reflection.pde b/java/examples/3D/Lights/Reflection/Reflection.pde new file mode 100644 index 000000000..f6a3d7a94 --- /dev/null +++ b/java/examples/3D/Lights/Reflection/Reflection.pde @@ -0,0 +1,25 @@ +/** + * Reflection + * by Simon Greenwold. + * + * Vary the specular reflection component of a material + * with the horizontal position of the mouse. + */ + +void setup() { + size(640, 360, P3D); + noStroke(); + colorMode(RGB, 1); + fill(0.4); +} + +void draw() { + background(0); + translate(width / 2, height / 2); + // Set the specular color of lights that follow + lightSpecular(1, 1, 1); + directionalLight(0.8, 0.8, 0.8, 0, 0, -1); + float s = mouseX / float(width); + specular(s, s, s); + sphere(120); +} diff --git a/java/examples/3D/Lights/Reflection/applet/Reflection.java b/java/examples/3D/Lights/Reflection/applet/Reflection.java new file mode 100644 index 000000000..ff5b1073f --- /dev/null +++ b/java/examples/3D/Lights/Reflection/applet/Reflection.java @@ -0,0 +1,45 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Reflection extends PApplet { + +/** + * Reflection + * by Simon Greenwold. + * + * Vary the specular reflection component of a material + * with the horizontal position of the mouse. + */ + +public void setup() { + size(640, 360, P3D); + noStroke(); + colorMode(RGB, 1); + fill(0.4f); +} + +public void draw() { + background(0); + translate(width / 2, height / 2); + // Set the specular color of lights that follow + lightSpecular(1, 1, 1); + directionalLight(0.8f, 0.8f, 0.8f, 0, 0, -1); + float s = mouseX / PApplet.parseFloat(width); + specular(s, s, s); + sphere(120); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Reflection" }); + } +} diff --git a/java/examples/3D/Lights/Reflection/applet/Reflection.pde b/java/examples/3D/Lights/Reflection/applet/Reflection.pde new file mode 100644 index 000000000..f6a3d7a94 --- /dev/null +++ b/java/examples/3D/Lights/Reflection/applet/Reflection.pde @@ -0,0 +1,25 @@ +/** + * Reflection + * by Simon Greenwold. + * + * Vary the specular reflection component of a material + * with the horizontal position of the mouse. + */ + +void setup() { + size(640, 360, P3D); + noStroke(); + colorMode(RGB, 1); + fill(0.4); +} + +void draw() { + background(0); + translate(width / 2, height / 2); + // Set the specular color of lights that follow + lightSpecular(1, 1, 1); + directionalLight(0.8, 0.8, 0.8, 0, 0, -1); + float s = mouseX / float(width); + specular(s, s, s); + sphere(120); +} diff --git a/java/examples/3D/Lights/Reflection/applet/loading.gif b/java/examples/3D/Lights/Reflection/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Lights/Spot/Spot.pde b/java/examples/3D/Lights/Spot/Spot.pde new file mode 100644 index 000000000..ce25c4bee --- /dev/null +++ b/java/examples/3D/Lights/Spot/Spot.pde @@ -0,0 +1,35 @@ +/** + * Spot. + * + * Move the mouse the change the position and concentation + * of a blue spot light. + */ + +int concentration = 600; // Try values 1 -> 10000 + +void setup() +{ + //size(200, 200, P3D); + size(640, 360, P3D); + noStroke(); + fill(204); + sphereDetail(60); +} + +void draw() +{ + background(0); + + // Light the bottom of the sphere + directionalLight(51, 102, 126, 0, -1, 0); + + // Orange light on the upper-right of the sphere + spotLight(204, 153, 0, 360, 160, 600, 0, 0, -1, PI/2, 600); + + // Moving spotlight that follows the mouse + spotLight(102, 153, 204, 360, mouseY, 600, 0, 0, -1, PI/2, 600); + + translate(width/2, height/2, 0); + sphere(120); +} + diff --git a/java/examples/3D/Lights/Spot/applet/Spot.java b/java/examples/3D/Lights/Spot/applet/Spot.java new file mode 100644 index 000000000..db961a531 --- /dev/null +++ b/java/examples/3D/Lights/Spot/applet/Spot.java @@ -0,0 +1,55 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Spot extends PApplet { + +/** + * Spot. + * + * Move the mouse the change the position and concentation + * of a blue spot light. + */ + +int concentration = 600; // Try values 1 -> 10000 + +public void setup() +{ + //size(200, 200, P3D); + size(640, 360, P3D); + noStroke(); + fill(204); + sphereDetail(60); +} + +public void draw() +{ + background(0); + + // Light the bottom of the sphere + directionalLight(51, 102, 126, 0, -1, 0); + + // Orange light on the upper-right of the sphere + spotLight(204, 153, 0, 360, 160, 600, 0, 0, -1, PI/2, 600); + + // Moving spotlight that follows the mouse + spotLight(102, 153, 204, 360, mouseY, 600, 0, 0, -1, PI/2, 600); + + translate(width/2, height/2, 0); + sphere(120); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Spot" }); + } +} diff --git a/java/examples/3D/Lights/Spot/applet/Spot.pde b/java/examples/3D/Lights/Spot/applet/Spot.pde new file mode 100644 index 000000000..ce25c4bee --- /dev/null +++ b/java/examples/3D/Lights/Spot/applet/Spot.pde @@ -0,0 +1,35 @@ +/** + * Spot. + * + * Move the mouse the change the position and concentation + * of a blue spot light. + */ + +int concentration = 600; // Try values 1 -> 10000 + +void setup() +{ + //size(200, 200, P3D); + size(640, 360, P3D); + noStroke(); + fill(204); + sphereDetail(60); +} + +void draw() +{ + background(0); + + // Light the bottom of the sphere + directionalLight(51, 102, 126, 0, -1, 0); + + // Orange light on the upper-right of the sphere + spotLight(204, 153, 0, 360, 160, 600, 0, 0, -1, PI/2, 600); + + // Moving spotlight that follows the mouse + spotLight(102, 153, 204, 360, mouseY, 600, 0, 0, -1, PI/2, 600); + + translate(width/2, height/2, 0); + sphere(120); +} + diff --git a/java/examples/3D/Lights/Spot/applet/loading.gif b/java/examples/3D/Lights/Spot/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Textures/Texture1/Texture1.pde b/java/examples/3D/Textures/Texture1/Texture1.pde new file mode 100644 index 000000000..7eb36310a --- /dev/null +++ b/java/examples/3D/Textures/Texture1/Texture1.pde @@ -0,0 +1,28 @@ +/** + * Texture 1. + * + * Load an image and draw it onto a quad. The texture() function sets + * the texture image. The vertex() function maps the image to the geometry. + */ + +PImage img; + +void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + noStroke(); +} + +void draw() { + background(0); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, -PI, PI)); + rotateZ(PI/6); + beginShape(); + texture(img); + vertex(-100, -100, 0, 0, 0); + vertex(100, -100, 0, 400, 0); + vertex(100, 100, 0, 400, 400); + vertex(-100, 100, 0, 0, 400); + endShape(); +} diff --git a/java/examples/3D/Textures/Texture1/applet/Texture1.java b/java/examples/3D/Textures/Texture1/applet/Texture1.java new file mode 100644 index 000000000..fe28c7395 --- /dev/null +++ b/java/examples/3D/Textures/Texture1/applet/Texture1.java @@ -0,0 +1,48 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Texture1 extends PApplet { + +/** + * Texture 1. + * + * Load an image and draw it onto a quad. The texture() function sets + * the texture image. The vertex() function maps the image to the geometry. + */ + +PImage img; + +public void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + noStroke(); +} + +public void draw() { + background(0); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, -PI, PI)); + rotateZ(PI/6); + beginShape(); + texture(img); + vertex(-100, -100, 0, 0, 0); + vertex(100, -100, 0, 400, 0); + vertex(100, 100, 0, 400, 400); + vertex(-100, 100, 0, 0, 400); + endShape(); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Texture1" }); + } +} diff --git a/java/examples/3D/Textures/Texture1/applet/Texture1.pde b/java/examples/3D/Textures/Texture1/applet/Texture1.pde new file mode 100644 index 000000000..7eb36310a --- /dev/null +++ b/java/examples/3D/Textures/Texture1/applet/Texture1.pde @@ -0,0 +1,28 @@ +/** + * Texture 1. + * + * Load an image and draw it onto a quad. The texture() function sets + * the texture image. The vertex() function maps the image to the geometry. + */ + +PImage img; + +void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + noStroke(); +} + +void draw() { + background(0); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, -PI, PI)); + rotateZ(PI/6); + beginShape(); + texture(img); + vertex(-100, -100, 0, 0, 0); + vertex(100, -100, 0, 400, 0); + vertex(100, 100, 0, 400, 400); + vertex(-100, 100, 0, 0, 400); + endShape(); +} diff --git a/java/examples/3D/Textures/Texture1/applet/loading.gif b/java/examples/3D/Textures/Texture1/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Textures/Texture2/Texture2.pde b/java/examples/3D/Textures/Texture2/Texture2.pde new file mode 100644 index 000000000..1398fd3e5 --- /dev/null +++ b/java/examples/3D/Textures/Texture2/Texture2.pde @@ -0,0 +1,25 @@ +/** + * Texture 2. + * + * Using a rectangular image to map a texture onto a triangle. + */ + +PImage img; + +void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + noStroke(); +} + +void draw() { + background(0); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, -PI, PI)); + beginShape(); + texture(img); + vertex(-100, -100, 0, 0, 0); + vertex(100, -40, 0, 400, 120); + vertex(0, 100, 0, 200, 400); + endShape(); +} diff --git a/java/examples/3D/Textures/Texture2/applet/Texture2.java b/java/examples/3D/Textures/Texture2/applet/Texture2.java new file mode 100644 index 000000000..ae3095834 --- /dev/null +++ b/java/examples/3D/Textures/Texture2/applet/Texture2.java @@ -0,0 +1,45 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Texture2 extends PApplet { + +/** + * Texture 2. + * + * Using a rectangular image to map a texture onto a triangle. + */ + +PImage img; + +public void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + noStroke(); +} + +public void draw() { + background(0); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, -PI, PI)); + beginShape(); + texture(img); + vertex(-100, -100, 0, 0, 0); + vertex(100, -40, 0, 400, 120); + vertex(0, 100, 0, 200, 400); + endShape(); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Texture2" }); + } +} diff --git a/java/examples/3D/Textures/Texture2/applet/Texture2.pde b/java/examples/3D/Textures/Texture2/applet/Texture2.pde new file mode 100644 index 000000000..1398fd3e5 --- /dev/null +++ b/java/examples/3D/Textures/Texture2/applet/Texture2.pde @@ -0,0 +1,25 @@ +/** + * Texture 2. + * + * Using a rectangular image to map a texture onto a triangle. + */ + +PImage img; + +void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + noStroke(); +} + +void draw() { + background(0); + translate(width / 2, height / 2); + rotateY(map(mouseX, 0, width, -PI, PI)); + beginShape(); + texture(img); + vertex(-100, -100, 0, 0, 0); + vertex(100, -40, 0, 400, 120); + vertex(0, 100, 0, 200, 400); + endShape(); +} diff --git a/java/examples/3D/Textures/Texture2/applet/loading.gif b/java/examples/3D/Textures/Texture2/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Textures/Texture3/Texture3.pde b/java/examples/3D/Textures/Texture3/Texture3.pde new file mode 100644 index 000000000..66130f1e5 --- /dev/null +++ b/java/examples/3D/Textures/Texture3/Texture3.pde @@ -0,0 +1,46 @@ +/** + * Texture 3. + * + * Load an image and draw it onto a cylinder and a quad. + */ + + +int tubeRes = 32; +float[] tubeX = new float[tubeRes]; +float[] tubeY = new float[tubeRes]; +PImage img; + +void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + float angle = 270.0 / tubeRes; + for (int i = 0; i < tubeRes; i++) { + tubeX[i] = cos(radians(i * angle)); + tubeY[i] = sin(radians(i * angle)); + } + noStroke(); +} + +void draw() { + background(0); + translate(width / 2, height / 2); + rotateX(map(mouseY, 0, height, -PI, PI)); + rotateY(map(mouseX, 0, width, -PI, PI)); + beginShape(QUAD_STRIP); + texture(img); + for (int i = 0; i < tubeRes; i++) { + float x = tubeX[i] * 100; + float z = tubeY[i] * 100; + float u = img.width / tubeRes * i; + vertex(x, -100, z, u, 0); + vertex(x, 100, z, u, img.height); + } + endShape(); + beginShape(QUADS); + texture(img); + vertex(0, -100, 0, 0, 0); + vertex(100, -100, 0, 100, 0); + vertex(100, 100, 0, 100, 100); + vertex(0, 100, 0, 0, 100); + endShape(); +} diff --git a/java/examples/3D/Textures/Texture3/applet/Texture3.java b/java/examples/3D/Textures/Texture3/applet/Texture3.java new file mode 100644 index 000000000..66565878a --- /dev/null +++ b/java/examples/3D/Textures/Texture3/applet/Texture3.java @@ -0,0 +1,66 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Texture3 extends PApplet { + +/** + * Texture 3. + * + * Load an image and draw it onto a cylinder and a quad. + */ + + +int tubeRes = 32; +float[] tubeX = new float[tubeRes]; +float[] tubeY = new float[tubeRes]; +PImage img; + +public void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + float angle = 270.0f / tubeRes; + for (int i = 0; i < tubeRes; i++) { + tubeX[i] = cos(radians(i * angle)); + tubeY[i] = sin(radians(i * angle)); + } + noStroke(); +} + +public void draw() { + background(0); + translate(width / 2, height / 2); + rotateX(map(mouseY, 0, height, -PI, PI)); + rotateY(map(mouseX, 0, width, -PI, PI)); + beginShape(QUAD_STRIP); + texture(img); + for (int i = 0; i < tubeRes; i++) { + float x = tubeX[i] * 100; + float z = tubeY[i] * 100; + float u = img.width / tubeRes * i; + vertex(x, -100, z, u, 0); + vertex(x, 100, z, u, img.height); + } + endShape(); + beginShape(QUADS); + texture(img); + vertex(0, -100, 0, 0, 0); + vertex(100, -100, 0, 100, 0); + vertex(100, 100, 0, 100, 100); + vertex(0, 100, 0, 0, 100); + endShape(); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Texture3" }); + } +} diff --git a/java/examples/3D/Textures/Texture3/applet/Texture3.pde b/java/examples/3D/Textures/Texture3/applet/Texture3.pde new file mode 100644 index 000000000..66130f1e5 --- /dev/null +++ b/java/examples/3D/Textures/Texture3/applet/Texture3.pde @@ -0,0 +1,46 @@ +/** + * Texture 3. + * + * Load an image and draw it onto a cylinder and a quad. + */ + + +int tubeRes = 32; +float[] tubeX = new float[tubeRes]; +float[] tubeY = new float[tubeRes]; +PImage img; + +void setup() { + size(640, 360, P3D); + img = loadImage("berlin-1.jpg"); + float angle = 270.0 / tubeRes; + for (int i = 0; i < tubeRes; i++) { + tubeX[i] = cos(radians(i * angle)); + tubeY[i] = sin(radians(i * angle)); + } + noStroke(); +} + +void draw() { + background(0); + translate(width / 2, height / 2); + rotateX(map(mouseY, 0, height, -PI, PI)); + rotateY(map(mouseX, 0, width, -PI, PI)); + beginShape(QUAD_STRIP); + texture(img); + for (int i = 0; i < tubeRes; i++) { + float x = tubeX[i] * 100; + float z = tubeY[i] * 100; + float u = img.width / tubeRes * i; + vertex(x, -100, z, u, 0); + vertex(x, 100, z, u, img.height); + } + endShape(); + beginShape(QUADS); + texture(img); + vertex(0, -100, 0, 0, 0); + vertex(100, -100, 0, 100, 0); + vertex(100, 100, 0, 100, 100); + vertex(0, 100, 0, 0, 100); + endShape(); +} diff --git a/java/examples/3D/Textures/Texture3/applet/loading.gif b/java/examples/3D/Textures/Texture3/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Textures/TextureCube/TextureCube.pde b/java/examples/3D/Textures/TextureCube/TextureCube.pde new file mode 100644 index 000000000..38df04997 --- /dev/null +++ b/java/examples/3D/Textures/TextureCube/TextureCube.pde @@ -0,0 +1,91 @@ +/** + * TexturedCube + * by Dave Bollinger. + * + * Drag mouse to rotate cube. Demonstrates use of u/v coords in + * vertex() and effect on texture(). The textures get distorted using + * the P3D renderer as you can see, but they look great using OPENGL. +*/ + + +PImage tex; +float rotx = PI/4; +float roty = PI/4; + +void setup() +{ + size(640, 360, P3D); + tex = loadImage("berlin-1.jpg"); + textureMode(NORMALIZED); + fill(255); + stroke(color(44,48,32)); +} + +void draw() +{ + background(0); + noStroke(); + translate(width/2.0, height/2.0, -100); + rotateX(rotx); + rotateY(roty); + scale(90); + TexturedCube(tex); +} + +void TexturedCube(PImage tex) { + beginShape(QUADS); + texture(tex); + + // Given one texture and six faces, we can easily set up the uv coordinates + // such that four of the faces tile "perfectly" along either u or v, but the other + // two faces cannot be so aligned. This code tiles "along" u, "around" the X/Z faces + // and fudges the Y faces - the Y faces are arbitrarily aligned such that a + // rotation along the X axis will put the "top" of either texture at the "top" + // of the screen, but is not otherwised aligned with the X/Z faces. (This + // just affects what type of symmetry is required if you need seamless + // tiling all the way around the cube) + + // +Z "front" face + vertex(-1, -1, 1, 0, 0); + vertex( 1, -1, 1, 1, 0); + vertex( 1, 1, 1, 1, 1); + vertex(-1, 1, 1, 0, 1); + + // -Z "back" face + vertex( 1, -1, -1, 0, 0); + vertex(-1, -1, -1, 1, 0); + vertex(-1, 1, -1, 1, 1); + vertex( 1, 1, -1, 0, 1); + + // +Y "bottom" face + vertex(-1, 1, 1, 0, 0); + vertex( 1, 1, 1, 1, 0); + vertex( 1, 1, -1, 1, 1); + vertex(-1, 1, -1, 0, 1); + + // -Y "top" face + vertex(-1, -1, -1, 0, 0); + vertex( 1, -1, -1, 1, 0); + vertex( 1, -1, 1, 1, 1); + vertex(-1, -1, 1, 0, 1); + + // +X "right" face + vertex( 1, -1, 1, 0, 0); + vertex( 1, -1, -1, 1, 0); + vertex( 1, 1, -1, 1, 1); + vertex( 1, 1, 1, 0, 1); + + // -X "left" face + vertex(-1, -1, -1, 0, 0); + vertex(-1, -1, 1, 1, 0); + vertex(-1, 1, 1, 1, 1); + vertex(-1, 1, -1, 0, 1); + + endShape(); +} + +void mouseDragged() { + float rate = 0.01; + rotx += (pmouseY-mouseY) * rate; + roty += (mouseX-pmouseX) * rate; +} diff --git a/java/examples/3D/Textures/TextureCube/applet/TextureCube.java b/java/examples/3D/Textures/TextureCube/applet/TextureCube.java new file mode 100644 index 000000000..ac7a9b21c --- /dev/null +++ b/java/examples/3D/Textures/TextureCube/applet/TextureCube.java @@ -0,0 +1,111 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class TextureCube extends PApplet { + +/** + * TexturedCube + * by Dave Bollinger. + * + * Drag mouse to rotate cube. Demonstrates use of u/v coords in + * vertex() and effect on texture(). The textures get distorted using + * the P3D renderer as you can see, but they look great using OPENGL. +*/ + + +PImage tex; +float rotx = PI/4; +float roty = PI/4; + +public void setup() +{ + size(640, 360, P3D); + tex = loadImage("berlin-1.jpg"); + textureMode(NORMALIZED); + fill(255); + stroke(color(44,48,32)); +} + +public void draw() +{ + background(0); + noStroke(); + translate(width/2.0f, height/2.0f, -100); + rotateX(rotx); + rotateY(roty); + scale(90); + TexturedCube(tex); +} + +public void TexturedCube(PImage tex) { + beginShape(QUADS); + texture(tex); + + // Given one texture and six faces, we can easily set up the uv coordinates + // such that four of the faces tile "perfectly" along either u or v, but the other + // two faces cannot be so aligned. This code tiles "along" u, "around" the X/Z faces + // and fudges the Y faces - the Y faces are arbitrarily aligned such that a + // rotation along the X axis will put the "top" of either texture at the "top" + // of the screen, but is not otherwised aligned with the X/Z faces. (This + // just affects what type of symmetry is required if you need seamless + // tiling all the way around the cube) + + // +Z "front" face + vertex(-1, -1, 1, 0, 0); + vertex( 1, -1, 1, 1, 0); + vertex( 1, 1, 1, 1, 1); + vertex(-1, 1, 1, 0, 1); + + // -Z "back" face + vertex( 1, -1, -1, 0, 0); + vertex(-1, -1, -1, 1, 0); + vertex(-1, 1, -1, 1, 1); + vertex( 1, 1, -1, 0, 1); + + // +Y "bottom" face + vertex(-1, 1, 1, 0, 0); + vertex( 1, 1, 1, 1, 0); + vertex( 1, 1, -1, 1, 1); + vertex(-1, 1, -1, 0, 1); + + // -Y "top" face + vertex(-1, -1, -1, 0, 0); + vertex( 1, -1, -1, 1, 0); + vertex( 1, -1, 1, 1, 1); + vertex(-1, -1, 1, 0, 1); + + // +X "right" face + vertex( 1, -1, 1, 0, 0); + vertex( 1, -1, -1, 1, 0); + vertex( 1, 1, -1, 1, 1); + vertex( 1, 1, 1, 0, 1); + + // -X "left" face + vertex(-1, -1, -1, 0, 0); + vertex(-1, -1, 1, 1, 0); + vertex(-1, 1, 1, 1, 1); + vertex(-1, 1, -1, 0, 1); + + endShape(); +} + +public void mouseDragged() { + float rate = 0.01f; + rotx += (pmouseY-mouseY) * rate; + roty += (mouseX-pmouseX) * rate; +} + + static public void main(String args[]) { + PApplet.main(new String[] { "TextureCube" }); + } +} diff --git a/java/examples/3D/Textures/TextureCube/applet/TextureCube.pde b/java/examples/3D/Textures/TextureCube/applet/TextureCube.pde new file mode 100644 index 000000000..38df04997 --- /dev/null +++ b/java/examples/3D/Textures/TextureCube/applet/TextureCube.pde @@ -0,0 +1,91 @@ +/** + * TexturedCube + * by Dave Bollinger. + * + * Drag mouse to rotate cube. Demonstrates use of u/v coords in + * vertex() and effect on texture(). The textures get distorted using + * the P3D renderer as you can see, but they look great using OPENGL. +*/ + + +PImage tex; +float rotx = PI/4; +float roty = PI/4; + +void setup() +{ + size(640, 360, P3D); + tex = loadImage("berlin-1.jpg"); + textureMode(NORMALIZED); + fill(255); + stroke(color(44,48,32)); +} + +void draw() +{ + background(0); + noStroke(); + translate(width/2.0, height/2.0, -100); + rotateX(rotx); + rotateY(roty); + scale(90); + TexturedCube(tex); +} + +void TexturedCube(PImage tex) { + beginShape(QUADS); + texture(tex); + + // Given one texture and six faces, we can easily set up the uv coordinates + // such that four of the faces tile "perfectly" along either u or v, but the other + // two faces cannot be so aligned. This code tiles "along" u, "around" the X/Z faces + // and fudges the Y faces - the Y faces are arbitrarily aligned such that a + // rotation along the X axis will put the "top" of either texture at the "top" + // of the screen, but is not otherwised aligned with the X/Z faces. (This + // just affects what type of symmetry is required if you need seamless + // tiling all the way around the cube) + + // +Z "front" face + vertex(-1, -1, 1, 0, 0); + vertex( 1, -1, 1, 1, 0); + vertex( 1, 1, 1, 1, 1); + vertex(-1, 1, 1, 0, 1); + + // -Z "back" face + vertex( 1, -1, -1, 0, 0); + vertex(-1, -1, -1, 1, 0); + vertex(-1, 1, -1, 1, 1); + vertex( 1, 1, -1, 0, 1); + + // +Y "bottom" face + vertex(-1, 1, 1, 0, 0); + vertex( 1, 1, 1, 1, 0); + vertex( 1, 1, -1, 1, 1); + vertex(-1, 1, -1, 0, 1); + + // -Y "top" face + vertex(-1, -1, -1, 0, 0); + vertex( 1, -1, -1, 1, 0); + vertex( 1, -1, 1, 1, 1); + vertex(-1, -1, 1, 0, 1); + + // +X "right" face + vertex( 1, -1, 1, 0, 0); + vertex( 1, -1, -1, 1, 0); + vertex( 1, 1, -1, 1, 1); + vertex( 1, 1, 1, 0, 1); + + // -X "left" face + vertex(-1, -1, -1, 0, 0); + vertex(-1, -1, 1, 1, 0); + vertex(-1, 1, 1, 1, 1); + vertex(-1, 1, -1, 0, 1); + + endShape(); +} + +void mouseDragged() { + float rate = 0.01; + rotx += (pmouseY-mouseY) * rate; + roty += (mouseX-pmouseX) * rate; +} diff --git a/java/examples/3D/Textures/TextureCube/applet/loading.gif b/java/examples/3D/Textures/TextureCube/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Transform/Bird/Bird.pde b/java/examples/3D/Transform/Bird/Bird.pde new file mode 100644 index 000000000..dacd405d1 --- /dev/null +++ b/java/examples/3D/Transform/Bird/Bird.pde @@ -0,0 +1,63 @@ +/** + * Simple 3D Bird + * by Ira Greenberg. + * + * Using a box and 2 rects to simulate a flying bird. + * Trig functions handle the flapping and sinuous movement. + */ + +float ang = 0, ang2 = 0, ang3 = 0, ang4 = 0; +float px = 0, py = 0, pz = 0; +float flapSpeed = 0.2; + +void setup(){ + size(640, 360, P3D); + noStroke(); +} + +void draw(){ + background(0); + lights(); + + // Flight + px = sin(radians(ang3)) * 170; + py = cos(radians(ang3)) * 300; + pz = sin(radians(ang4)) * 500; + translate(width/2 + px, height/2 + py, -700+pz); + rotateX(sin(radians(ang2)) * 120); + rotateY(sin(radians(ang2)) * 50); + rotateZ(sin(radians(ang2)) * 65); + + // Body + fill(153); + box(20, 100, 20); + + + // Left wing + fill(204); + pushMatrix(); + rotateY(sin(radians(ang)) * -20); + rect(-75, -50, 75, 100); + popMatrix(); + + // Right wing + pushMatrix(); + rotateY(sin(radians(ang)) * 20); + rect(0, -50, 75, 100); + popMatrix(); + + // Wing flap + ang += flapSpeed; + if (ang > 3) { + flapSpeed *= -1; + } + if (ang < -3) { + flapSpeed *= -1; + } + + // Increment angles + ang2 += 0.01; + ang3 += 2.0; + ang4 += 0.75; +} + diff --git a/java/examples/3D/Transform/Bird/applet/Bird.java b/java/examples/3D/Transform/Bird/applet/Bird.java new file mode 100644 index 000000000..849715af1 --- /dev/null +++ b/java/examples/3D/Transform/Bird/applet/Bird.java @@ -0,0 +1,83 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Bird extends PApplet { + +/** + * Simple 3D Bird + * by Ira Greenberg. + * + * Using a box and 2 rects to simulate a flying bird. + * Trig functions handle the flapping and sinuous movement. + */ + +float ang = 0, ang2 = 0, ang3 = 0, ang4 = 0; +float px = 0, py = 0, pz = 0; +float flapSpeed = 0.2f; + +public void setup(){ + size(640, 360, P3D); + noStroke(); +} + +public void draw(){ + background(0); + lights(); + + // Flight + px = sin(radians(ang3)) * 170; + py = cos(radians(ang3)) * 300; + pz = sin(radians(ang4)) * 500; + translate(width/2 + px, height/2 + py, -700+pz); + rotateX(sin(radians(ang2)) * 120); + rotateY(sin(radians(ang2)) * 50); + rotateZ(sin(radians(ang2)) * 65); + + // Body + fill(153); + box(20, 100, 20); + + + // Left wing + fill(204); + pushMatrix(); + rotateY(sin(radians(ang)) * -20); + rect(-75, -50, 75, 100); + popMatrix(); + + // Right wing + pushMatrix(); + rotateY(sin(radians(ang)) * 20); + rect(0, -50, 75, 100); + popMatrix(); + + // Wing flap + ang += flapSpeed; + if (ang > 3) { + flapSpeed *= -1; + } + if (ang < -3) { + flapSpeed *= -1; + } + + // Increment angles + ang2 += 0.01f; + ang3 += 2.0f; + ang4 += 0.75f; +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Bird" }); + } +} diff --git a/java/examples/3D/Transform/Bird/applet/Bird.pde b/java/examples/3D/Transform/Bird/applet/Bird.pde new file mode 100644 index 000000000..dacd405d1 --- /dev/null +++ b/java/examples/3D/Transform/Bird/applet/Bird.pde @@ -0,0 +1,63 @@ +/** + * Simple 3D Bird + * by Ira Greenberg. + * + * Using a box and 2 rects to simulate a flying bird. + * Trig functions handle the flapping and sinuous movement. + */ + +float ang = 0, ang2 = 0, ang3 = 0, ang4 = 0; +float px = 0, py = 0, pz = 0; +float flapSpeed = 0.2; + +void setup(){ + size(640, 360, P3D); + noStroke(); +} + +void draw(){ + background(0); + lights(); + + // Flight + px = sin(radians(ang3)) * 170; + py = cos(radians(ang3)) * 300; + pz = sin(radians(ang4)) * 500; + translate(width/2 + px, height/2 + py, -700+pz); + rotateX(sin(radians(ang2)) * 120); + rotateY(sin(radians(ang2)) * 50); + rotateZ(sin(radians(ang2)) * 65); + + // Body + fill(153); + box(20, 100, 20); + + + // Left wing + fill(204); + pushMatrix(); + rotateY(sin(radians(ang)) * -20); + rect(-75, -50, 75, 100); + popMatrix(); + + // Right wing + pushMatrix(); + rotateY(sin(radians(ang)) * 20); + rect(0, -50, 75, 100); + popMatrix(); + + // Wing flap + ang += flapSpeed; + if (ang > 3) { + flapSpeed *= -1; + } + if (ang < -3) { + flapSpeed *= -1; + } + + // Increment angles + ang2 += 0.01; + ang3 += 2.0; + ang4 += 0.75; +} + diff --git a/java/examples/3D/Transform/Bird/applet/loading.gif b/java/examples/3D/Transform/Bird/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Transform/Birds/Bird.pde b/java/examples/3D/Transform/Birds/Bird.pde new file mode 100644 index 000000000..84ada2603 --- /dev/null +++ b/java/examples/3D/Transform/Birds/Bird.pde @@ -0,0 +1,99 @@ +class Bird { + + // Properties + float offsetX, offsetY, offsetZ; + float w, h; + int bodyFill; + int wingFill; + float ang = 0, ang2 = 0, ang3 = 0, ang4 = 0; + float radiusX = 120, radiusY = 200, radiusZ = 700; + float rotX = 15, rotY = 10, rotZ = 5; + float flapSpeed = 0.4; + float rotSpeed = 0.1; + + // Constructors + Bird(){ + this(0, 0, 0, 60, 80); + } + + Bird(float offsetX, float offsetY, float offsetZ, + float w, float h){ + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + this.h = h; + this.w = w; + bodyFill = color(153); + wingFill = color(204); + } + + void setFlight(float radiusX, float radiusY, float radiusZ, + float rotX, float rotY, float rotZ){ + this.radiusX = radiusX; + this.radiusY = radiusY; + this.radiusZ = radiusZ; + + this.rotX = rotX; + this.rotY = rotY; + this.rotZ = rotZ; + } + + void setWingSpeed(float flapSpeed){ + this.flapSpeed = flapSpeed; + } + + void setRotSpeed(float rotSpeed){ + this.rotSpeed = rotSpeed; + } + + void fly() { + pushMatrix(); + float px, py, pz; + + // Flight + px = sin(radians(ang3)) * radiusX; + py = cos(radians(ang3)) * radiusY; + pz = sin(radians(ang4)) * radiusZ; + + translate(width/2 + offsetX + px, height/2 + offsetY+py, -700 + offsetZ+pz); + + rotateX(sin(radians(ang2)) * rotX); + rotateY(sin(radians(ang2)) * rotY); + rotateZ(sin(radians(ang2)) * rotZ); + + // Body + fill(bodyFill); + box(w/5, h, w/5); + + // Left wing + fill(wingFill); + pushMatrix(); + rotateY(sin(radians(ang)) * 20); + rect(0, -h/2, w, h); + popMatrix(); + + // Right wing + pushMatrix(); + rotateY(sin(radians(ang)) * -20); + rect(-w, -h/2, w, h); + popMatrix(); + + // Wing flap + ang += flapSpeed; + if (ang > 3) { + flapSpeed*=-1; + } + if (ang < -3) { + flapSpeed*=-1; + } + + // Ang's run trig functions + ang2 += rotSpeed; + ang3 += 1.25; + ang4 += 0.55; + popMatrix(); + } +} + + + diff --git a/java/examples/3D/Transform/Birds/Birds.pde b/java/examples/3D/Transform/Birds/Birds.pde new file mode 100644 index 000000000..5026bd2ae --- /dev/null +++ b/java/examples/3D/Transform/Birds/Birds.pde @@ -0,0 +1,53 @@ +/** + * Crazy Flocking 3D Birds + * by Ira Greenberg. + * + * Simulates a flock of birds using a Bird class and nested + * pushMatrix() / popMatrix() functions. + * Trigonometry functions handle the flapping and sinuous movement. + */ + +// Flock array +int birdCount = 200; +Bird[]birds = new Bird[birdCount]; +float[]x = new float[birdCount]; +float[]y = new float[birdCount]; +float[]z = new float[birdCount]; +float[]rx = new float[birdCount]; +float[]ry = new float[birdCount]; +float[]rz = new float[birdCount]; +float[]spd = new float[birdCount]; +float[]rot = new float[birdCount]; + +void setup() { + size(640, 360, P3D); + noStroke(); + + // Initialize arrays with random values + for (int i = 0; i < birdCount; i++){ + birds[i] = new Bird(random(-300, 300), random(-300, 300), + random(-500, -2500), random(5, 30), random(5, 30)); + + x[i] = random(20, 340); + y[i] = random(30, 350); + z[i] = random(1000, 4800); + rx[i] = random(-160, 160); + ry[i] = random(-55, 55); + rz[i] = random(-20, 20); + spd[i] = random(.1, 3.75); + rot[i] = random(.025, .15); + } +} + +void draw() { + background(0); + lights(); + for (int i = 0; i < birdCount; i++){ + birds[i].setFlight(x[i], y[i], z[i], rx[i], ry[i], rz[i]); + birds[i].setWingSpeed(spd[i]); + birds[i].setRotSpeed(rot[i]); + birds[i].fly(); + } +} + + diff --git a/java/examples/3D/Transform/Birds/applet/Bird.pde b/java/examples/3D/Transform/Birds/applet/Bird.pde new file mode 100644 index 000000000..84ada2603 --- /dev/null +++ b/java/examples/3D/Transform/Birds/applet/Bird.pde @@ -0,0 +1,99 @@ +class Bird { + + // Properties + float offsetX, offsetY, offsetZ; + float w, h; + int bodyFill; + int wingFill; + float ang = 0, ang2 = 0, ang3 = 0, ang4 = 0; + float radiusX = 120, radiusY = 200, radiusZ = 700; + float rotX = 15, rotY = 10, rotZ = 5; + float flapSpeed = 0.4; + float rotSpeed = 0.1; + + // Constructors + Bird(){ + this(0, 0, 0, 60, 80); + } + + Bird(float offsetX, float offsetY, float offsetZ, + float w, float h){ + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + this.h = h; + this.w = w; + bodyFill = color(153); + wingFill = color(204); + } + + void setFlight(float radiusX, float radiusY, float radiusZ, + float rotX, float rotY, float rotZ){ + this.radiusX = radiusX; + this.radiusY = radiusY; + this.radiusZ = radiusZ; + + this.rotX = rotX; + this.rotY = rotY; + this.rotZ = rotZ; + } + + void setWingSpeed(float flapSpeed){ + this.flapSpeed = flapSpeed; + } + + void setRotSpeed(float rotSpeed){ + this.rotSpeed = rotSpeed; + } + + void fly() { + pushMatrix(); + float px, py, pz; + + // Flight + px = sin(radians(ang3)) * radiusX; + py = cos(radians(ang3)) * radiusY; + pz = sin(radians(ang4)) * radiusZ; + + translate(width/2 + offsetX + px, height/2 + offsetY+py, -700 + offsetZ+pz); + + rotateX(sin(radians(ang2)) * rotX); + rotateY(sin(radians(ang2)) * rotY); + rotateZ(sin(radians(ang2)) * rotZ); + + // Body + fill(bodyFill); + box(w/5, h, w/5); + + // Left wing + fill(wingFill); + pushMatrix(); + rotateY(sin(radians(ang)) * 20); + rect(0, -h/2, w, h); + popMatrix(); + + // Right wing + pushMatrix(); + rotateY(sin(radians(ang)) * -20); + rect(-w, -h/2, w, h); + popMatrix(); + + // Wing flap + ang += flapSpeed; + if (ang > 3) { + flapSpeed*=-1; + } + if (ang < -3) { + flapSpeed*=-1; + } + + // Ang's run trig functions + ang2 += rotSpeed; + ang3 += 1.25; + ang4 += 0.55; + popMatrix(); + } +} + + + diff --git a/java/examples/3D/Transform/Birds/applet/Birds.java b/java/examples/3D/Transform/Birds/applet/Birds.java new file mode 100644 index 000000000..eea839af5 --- /dev/null +++ b/java/examples/3D/Transform/Birds/applet/Birds.java @@ -0,0 +1,172 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Birds extends PApplet { + +/** + * Crazy Flocking 3D Birds + * by Ira Greenberg. + * + * Simulates a flock of birds using a Bird class and nested + * pushMatrix() / popMatrix() functions. + * Trigonometry functions handle the flapping and sinuous movement. + */ + +// Flock array +int birdCount = 200; +Bird[]birds = new Bird[birdCount]; +float[]x = new float[birdCount]; +float[]y = new float[birdCount]; +float[]z = new float[birdCount]; +float[]rx = new float[birdCount]; +float[]ry = new float[birdCount]; +float[]rz = new float[birdCount]; +float[]spd = new float[birdCount]; +float[]rot = new float[birdCount]; + +public void setup() { + size(640, 360, P3D); + noStroke(); + + // Initialize arrays with random values + for (int i = 0; i < birdCount; i++){ + birds[i] = new Bird(random(-300, 300), random(-300, 300), + random(-500, -2500), random(5, 30), random(5, 30)); + + x[i] = random(20, 340); + y[i] = random(30, 350); + z[i] = random(1000, 4800); + rx[i] = random(-160, 160); + ry[i] = random(-55, 55); + rz[i] = random(-20, 20); + spd[i] = random(.1f, 3.75f); + rot[i] = random(.025f, .15f); + } +} + +public void draw() { + background(0); + lights(); + for (int i = 0; i < birdCount; i++){ + birds[i].setFlight(x[i], y[i], z[i], rx[i], ry[i], rz[i]); + birds[i].setWingSpeed(spd[i]); + birds[i].setRotSpeed(rot[i]); + birds[i].fly(); + } +} + + +class Bird { + + // Properties + float offsetX, offsetY, offsetZ; + float w, h; + int bodyFill; + int wingFill; + float ang = 0, ang2 = 0, ang3 = 0, ang4 = 0; + float radiusX = 120, radiusY = 200, radiusZ = 700; + float rotX = 15, rotY = 10, rotZ = 5; + float flapSpeed = 0.4f; + float rotSpeed = 0.1f; + + // Constructors + Bird(){ + this(0, 0, 0, 60, 80); + } + + Bird(float offsetX, float offsetY, float offsetZ, + float w, float h){ + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + this.h = h; + this.w = w; + bodyFill = color(153); + wingFill = color(204); + } + + public void setFlight(float radiusX, float radiusY, float radiusZ, + float rotX, float rotY, float rotZ){ + this.radiusX = radiusX; + this.radiusY = radiusY; + this.radiusZ = radiusZ; + + this.rotX = rotX; + this.rotY = rotY; + this.rotZ = rotZ; + } + + public void setWingSpeed(float flapSpeed){ + this.flapSpeed = flapSpeed; + } + + public void setRotSpeed(float rotSpeed){ + this.rotSpeed = rotSpeed; + } + + public void fly() { + pushMatrix(); + float px, py, pz; + + // Flight + px = sin(radians(ang3)) * radiusX; + py = cos(radians(ang3)) * radiusY; + pz = sin(radians(ang4)) * radiusZ; + + translate(width/2 + offsetX + px, height/2 + offsetY+py, -700 + offsetZ+pz); + + rotateX(sin(radians(ang2)) * rotX); + rotateY(sin(radians(ang2)) * rotY); + rotateZ(sin(radians(ang2)) * rotZ); + + // Body + fill(bodyFill); + box(w/5, h, w/5); + + // Left wing + fill(wingFill); + pushMatrix(); + rotateY(sin(radians(ang)) * 20); + rect(0, -h/2, w, h); + popMatrix(); + + // Right wing + pushMatrix(); + rotateY(sin(radians(ang)) * -20); + rect(-w, -h/2, w, h); + popMatrix(); + + // Wing flap + ang += flapSpeed; + if (ang > 3) { + flapSpeed*=-1; + } + if (ang < -3) { + flapSpeed*=-1; + } + + // Ang's run trig functions + ang2 += rotSpeed; + ang3 += 1.25f; + ang4 += 0.55f; + popMatrix(); + } +} + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "Birds" }); + } +} diff --git a/java/examples/3D/Transform/Birds/applet/Birds.pde b/java/examples/3D/Transform/Birds/applet/Birds.pde new file mode 100644 index 000000000..5026bd2ae --- /dev/null +++ b/java/examples/3D/Transform/Birds/applet/Birds.pde @@ -0,0 +1,53 @@ +/** + * Crazy Flocking 3D Birds + * by Ira Greenberg. + * + * Simulates a flock of birds using a Bird class and nested + * pushMatrix() / popMatrix() functions. + * Trigonometry functions handle the flapping and sinuous movement. + */ + +// Flock array +int birdCount = 200; +Bird[]birds = new Bird[birdCount]; +float[]x = new float[birdCount]; +float[]y = new float[birdCount]; +float[]z = new float[birdCount]; +float[]rx = new float[birdCount]; +float[]ry = new float[birdCount]; +float[]rz = new float[birdCount]; +float[]spd = new float[birdCount]; +float[]rot = new float[birdCount]; + +void setup() { + size(640, 360, P3D); + noStroke(); + + // Initialize arrays with random values + for (int i = 0; i < birdCount; i++){ + birds[i] = new Bird(random(-300, 300), random(-300, 300), + random(-500, -2500), random(5, 30), random(5, 30)); + + x[i] = random(20, 340); + y[i] = random(30, 350); + z[i] = random(1000, 4800); + rx[i] = random(-160, 160); + ry[i] = random(-55, 55); + rz[i] = random(-20, 20); + spd[i] = random(.1, 3.75); + rot[i] = random(.025, .15); + } +} + +void draw() { + background(0); + lights(); + for (int i = 0; i < birdCount; i++){ + birds[i].setFlight(x[i], y[i], z[i], rx[i], ry[i], rz[i]); + birds[i].setWingSpeed(spd[i]); + birds[i].setRotSpeed(rot[i]); + birds[i].fly(); + } +} + + diff --git a/java/examples/3D/Transform/Birds/applet/loading.gif b/java/examples/3D/Transform/Birds/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Transform/CubesWithinCube/Cube.pde b/java/examples/3D/Transform/CubesWithinCube/Cube.pde new file mode 100644 index 000000000..271792623 --- /dev/null +++ b/java/examples/3D/Transform/CubesWithinCube/Cube.pde @@ -0,0 +1,72 @@ + +// Custom Cube Class + +class Cube{ + PVector[] vertices = new PVector[24]; + float w, h, d; + + // Default constructor + Cube(){ } + + // Constructor 2 + Cube(float w, float h, float d) { + this.w = w; + this.h = h; + this.d = d; + + // cube composed of 6 quads + //front + vertices[0] = new PVector(-w/2,-h/2,d/2); + vertices[1] = new PVector(w/2,-h/2,d/2); + vertices[2] = new PVector(w/2,h/2,d/2); + vertices[3] = new PVector(-w/2,h/2,d/2); + //left + vertices[4] = new PVector(-w/2,-h/2,d/2); + vertices[5] = new PVector(-w/2,-h/2,-d/2); + vertices[6] = new PVector(-w/2,h/2,-d/2); + vertices[7] = new PVector(-w/2,h/2,d/2); + //right + vertices[8] = new PVector(w/2,-h/2,d/2); + vertices[9] = new PVector(w/2,-h/2,-d/2); + vertices[10] = new PVector(w/2,h/2,-d/2); + vertices[11] = new PVector(w/2,h/2,d/2); + //back + vertices[12] = new PVector(-w/2,-h/2,-d/2); + vertices[13] = new PVector(w/2,-h/2,-d/2); + vertices[14] = new PVector(w/2,h/2,-d/2); + vertices[15] = new PVector(-w/2,h/2,-d/2); + //top + vertices[16] = new PVector(-w/2,-h/2,d/2); + vertices[17] = new PVector(-w/2,-h/2,-d/2); + vertices[18] = new PVector(w/2,-h/2,-d/2); + vertices[19] = new PVector(w/2,-h/2,d/2); + //bottom + vertices[20] = new PVector(-w/2,h/2,d/2); + vertices[21] = new PVector(-w/2,h/2,-d/2); + vertices[22] = new PVector(w/2,h/2,-d/2); + vertices[23] = new PVector(w/2,h/2,d/2); + } + void create(){ + // Draw cube + for (int i=0; i<6; i++){ + beginShape(QUADS); + for (int j=0; j<4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } + void create(color[]quadBG){ + // Draw cube + for (int i=0; i<6; i++){ + fill(quadBG[i]); + beginShape(QUADS); + for (int j=0; j<4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } +} + + diff --git a/java/examples/3D/Transform/CubesWithinCube/CubesWithinCube.pde b/java/examples/3D/Transform/CubesWithinCube/CubesWithinCube.pde new file mode 100644 index 000000000..b20420fcc --- /dev/null +++ b/java/examples/3D/Transform/CubesWithinCube/CubesWithinCube.pde @@ -0,0 +1,117 @@ +/** + * Cubes Contained Within a Cube + * by Ira Greenberg. + * + * Collision detection against all + * outer cube's surfaces. + * Uses the Point3D and Cube classes. + */ + +Cube stage; // external large cube +int cubies = 20; +Cube[]c = new Cube[cubies]; // internal little cubes +color[][]quadBG = new color[cubies][6]; + +// Controls cubie's movement +float[]x = new float[cubies]; +float[]y = new float[cubies]; +float[]z = new float[cubies]; +float[]xSpeed = new float[cubies]; +float[]ySpeed = new float[cubies]; +float[]zSpeed = new float[cubies]; + +// Controls cubie's rotation +float[]xRot = new float[cubies]; +float[]yRot = new float[cubies]; +float[]zRot = new float[cubies]; + +// Size of external cube +float bounds = 300; + +void setup() { + size(640, 360, P3D); + + for (int i = 0; i < cubies; i++){ + // Each cube face has a random color component + float colorShift = random(-75, 75); + quadBG[i][0] = color(0); + quadBG[i][1] = color(51); + quadBG[i][2] = color(102); + quadBG[i][3] = color(153); + quadBG[i][4] = color(204); + quadBG[i][5] = color(255); + + // Cubies are randomly sized + float cubieSize = random(5, 15); + c[i] = new Cube(cubieSize, cubieSize, cubieSize); + + // Initialize cubie's position, speed and rotation + x[i] = 0; + y[i] = 0; + z[i] = 0; + + xSpeed[i] = random(-1, 1); + ySpeed[i] = random(-1, 1); + zSpeed[i] = random(-1, 1); + + xRot[i] = random(40, 100); + yRot[i] = random(40, 100); + zRot[i] = random(40, 100); + } + + // Instantiate external large cube + stage = new Cube(bounds, bounds, bounds); +} + +void draw(){ + background(50); + lights(); + + // Center in display window + translate(width/2, height/2, -130); + + // Outer transparent cube + noFill(); + + // Rotate everything, including external large cube + rotateX(frameCount * 0.001); + rotateY(frameCount * 0.002); + rotateZ(frameCount * 0.001); + stroke(255); + + // Draw external large cube + stage.create(); + + // Move and rotate cubies + for (int i = 0; i < cubies; i++){ + pushMatrix(); + translate(x[i], y[i], z[i]); + rotateX(frameCount*PI/xRot[i]); + rotateY(frameCount*PI/yRot[i]); + rotateX(frameCount*PI/zRot[i]); + noStroke(); + c[i].create(quadBG[i]); + x[i] += xSpeed[i]; + y[i] += ySpeed[i]; + z[i] += zSpeed[i]; + popMatrix(); + + // Draw lines connecting cubbies + stroke(0); + if (i < cubies-1){ + line(x[i], y[i], z[i], x[i+1], y[i+1], z[i+1]); + } + + // Check wall collisions + if (x[i] > bounds/2 || x[i] < -bounds/2){ + xSpeed[i]*=-1; + } + if (y[i] > bounds/2 || y[i] < -bounds/2){ + ySpeed[i]*=-1; + } + if (z[i] > bounds/2 || z[i] < -bounds/2){ + zSpeed[i]*=-1; + } + } +} + diff --git a/java/examples/3D/Transform/CubesWithinCube/applet/Cube.pde b/java/examples/3D/Transform/CubesWithinCube/applet/Cube.pde new file mode 100644 index 000000000..271792623 --- /dev/null +++ b/java/examples/3D/Transform/CubesWithinCube/applet/Cube.pde @@ -0,0 +1,72 @@ + +// Custom Cube Class + +class Cube{ + PVector[] vertices = new PVector[24]; + float w, h, d; + + // Default constructor + Cube(){ } + + // Constructor 2 + Cube(float w, float h, float d) { + this.w = w; + this.h = h; + this.d = d; + + // cube composed of 6 quads + //front + vertices[0] = new PVector(-w/2,-h/2,d/2); + vertices[1] = new PVector(w/2,-h/2,d/2); + vertices[2] = new PVector(w/2,h/2,d/2); + vertices[3] = new PVector(-w/2,h/2,d/2); + //left + vertices[4] = new PVector(-w/2,-h/2,d/2); + vertices[5] = new PVector(-w/2,-h/2,-d/2); + vertices[6] = new PVector(-w/2,h/2,-d/2); + vertices[7] = new PVector(-w/2,h/2,d/2); + //right + vertices[8] = new PVector(w/2,-h/2,d/2); + vertices[9] = new PVector(w/2,-h/2,-d/2); + vertices[10] = new PVector(w/2,h/2,-d/2); + vertices[11] = new PVector(w/2,h/2,d/2); + //back + vertices[12] = new PVector(-w/2,-h/2,-d/2); + vertices[13] = new PVector(w/2,-h/2,-d/2); + vertices[14] = new PVector(w/2,h/2,-d/2); + vertices[15] = new PVector(-w/2,h/2,-d/2); + //top + vertices[16] = new PVector(-w/2,-h/2,d/2); + vertices[17] = new PVector(-w/2,-h/2,-d/2); + vertices[18] = new PVector(w/2,-h/2,-d/2); + vertices[19] = new PVector(w/2,-h/2,d/2); + //bottom + vertices[20] = new PVector(-w/2,h/2,d/2); + vertices[21] = new PVector(-w/2,h/2,-d/2); + vertices[22] = new PVector(w/2,h/2,-d/2); + vertices[23] = new PVector(w/2,h/2,d/2); + } + void create(){ + // Draw cube + for (int i=0; i<6; i++){ + beginShape(QUADS); + for (int j=0; j<4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } + void create(color[]quadBG){ + // Draw cube + for (int i=0; i<6; i++){ + fill(quadBG[i]); + beginShape(QUADS); + for (int j=0; j<4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } +} + + diff --git a/java/examples/3D/Transform/CubesWithinCube/applet/CubesWithinCube.java b/java/examples/3D/Transform/CubesWithinCube/applet/CubesWithinCube.java new file mode 100644 index 000000000..c087c7f6b --- /dev/null +++ b/java/examples/3D/Transform/CubesWithinCube/applet/CubesWithinCube.java @@ -0,0 +1,226 @@ +import processing.core.*; +import processing.xml.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class CubesWithinCube extends PApplet { + +/** + * Cubes Contained Within a Cube + * by Ira Greenberg. + * + * Collision detection against all + * outer cube's surfaces. + * Uses the Point3D and Cube classes. + */ + +Cube stage; // external large cube +int cubies = 20; +Cube[]c = new Cube[cubies]; // internal little cubes +int[][]quadBG = new int[cubies][6]; + +// Controls cubie's movement +float[]x = new float[cubies]; +float[]y = new float[cubies]; +float[]z = new float[cubies]; +float[]xSpeed = new float[cubies]; +float[]ySpeed = new float[cubies]; +float[]zSpeed = new float[cubies]; + +// Controls cubie's rotation +float[]xRot = new float[cubies]; +float[]yRot = new float[cubies]; +float[]zRot = new float[cubies]; + +// Size of external cube +float bounds = 300; + +public void setup() { + size(640, 360, P3D); + + for (int i = 0; i < cubies; i++){ + // Each cube face has a random color component + float colorShift = random(-75, 75); + quadBG[i][0] = color(0); + quadBG[i][1] = color(51); + quadBG[i][2] = color(102); + quadBG[i][3] = color(153); + quadBG[i][4] = color(204); + quadBG[i][5] = color(255); + + // Cubies are randomly sized + float cubieSize = random(5, 15); + c[i] = new Cube(cubieSize, cubieSize, cubieSize); + + // Initialize cubie's position, speed and rotation + x[i] = 0; + y[i] = 0; + z[i] = 0; + + xSpeed[i] = random(-1, 1); + ySpeed[i] = random(-1, 1); + zSpeed[i] = random(-1, 1); + + xRot[i] = random(40, 100); + yRot[i] = random(40, 100); + zRot[i] = random(40, 100); + } + + // Instantiate external large cube + stage = new Cube(bounds, bounds, bounds); +} + +public void draw(){ + background(50); + lights(); + + // Center in display window + translate(width/2, height/2, -130); + + // Outer transparent cube + noFill(); + + // Rotate everything, including external large cube + rotateX(frameCount * 0.001f); + rotateY(frameCount * 0.002f); + rotateZ(frameCount * 0.001f); + stroke(255); + + // Draw external large cube + stage.create(); + + // Move and rotate cubies + for (int i = 0; i < cubies; i++){ + pushMatrix(); + translate(x[i], y[i], z[i]); + rotateX(frameCount*PI/xRot[i]); + rotateY(frameCount*PI/yRot[i]); + rotateX(frameCount*PI/zRot[i]); + noStroke(); + c[i].create(quadBG[i]); + x[i] += xSpeed[i]; + y[i] += ySpeed[i]; + z[i] += zSpeed[i]; + popMatrix(); + + // Draw lines connecting cubbies + stroke(0); + if (i < cubies-1){ + line(x[i], y[i], z[i], x[i+1], y[i+1], z[i+1]); + } + + // Check wall collisions + if (x[i] > bounds/2 || x[i] < -bounds/2){ + xSpeed[i]*=-1; + } + if (y[i] > bounds/2 || y[i] < -bounds/2){ + ySpeed[i]*=-1; + } + if (z[i] > bounds/2 || z[i] < -bounds/2){ + zSpeed[i]*=-1; + } + } +} + + +// Custom Cube Class + +class Cube{ + PVector[] vertices = new PVector[24]; + float w, h, d; + + // Default constructor + Cube(){ } + + // Constructor 2 + Cube(float w, float h, float d) { + this.w = w; + this.h = h; + this.d = d; + + // cube composed of 6 quads + //front + vertices[0] = new PVector(-w/2,-h/2,d/2); + vertices[1] = new PVector(w/2,-h/2,d/2); + vertices[2] = new PVector(w/2,h/2,d/2); + vertices[3] = new PVector(-w/2,h/2,d/2); + //left + vertices[4] = new PVector(-w/2,-h/2,d/2); + vertices[5] = new PVector(-w/2,-h/2,-d/2); + vertices[6] = new PVector(-w/2,h/2,-d/2); + vertices[7] = new PVector(-w/2,h/2,d/2); + //right + vertices[8] = new PVector(w/2,-h/2,d/2); + vertices[9] = new PVector(w/2,-h/2,-d/2); + vertices[10] = new PVector(w/2,h/2,-d/2); + vertices[11] = new PVector(w/2,h/2,d/2); + //back + vertices[12] = new PVector(-w/2,-h/2,-d/2); + vertices[13] = new PVector(w/2,-h/2,-d/2); + vertices[14] = new PVector(w/2,h/2,-d/2); + vertices[15] = new PVector(-w/2,h/2,-d/2); + //top + vertices[16] = new PVector(-w/2,-h/2,d/2); + vertices[17] = new PVector(-w/2,-h/2,-d/2); + vertices[18] = new PVector(w/2,-h/2,-d/2); + vertices[19] = new PVector(w/2,-h/2,d/2); + //bottom + vertices[20] = new PVector(-w/2,h/2,d/2); + vertices[21] = new PVector(-w/2,h/2,-d/2); + vertices[22] = new PVector(w/2,h/2,-d/2); + vertices[23] = new PVector(w/2,h/2,d/2); + } + public void create(){ + // Draw cube + for (int i=0; i<6; i++){ + beginShape(QUADS); + for (int j=0; j<4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } + public void create(int[]quadBG){ + // Draw cube + for (int i=0; i<6; i++){ + fill(quadBG[i]); + beginShape(QUADS); + for (int j=0; j<4; j++){ + vertex(vertices[j+4*i].x, vertices[j+4*i].y, vertices[j+4*i].z); + } + endShape(); + } + } +} + + +// Extremely simple class to hold each 3D vertex + +class Point3D { + float x, y, z; + + // constructors + Point3D(){ + } + + Point3D(float x, float y, float z){ + this.x = x; + this.y = y; + this.z = z; + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "CubesWithinCube" }); + } +} diff --git a/java/examples/3D/Transform/CubesWithinCube/applet/CubesWithinCube.pde b/java/examples/3D/Transform/CubesWithinCube/applet/CubesWithinCube.pde new file mode 100644 index 000000000..b20420fcc --- /dev/null +++ b/java/examples/3D/Transform/CubesWithinCube/applet/CubesWithinCube.pde @@ -0,0 +1,117 @@ +/** + * Cubes Contained Within a Cube + * by Ira Greenberg. + * + * Collision detection against all + * outer cube's surfaces. + * Uses the Point3D and Cube classes. + */ + +Cube stage; // external large cube +int cubies = 20; +Cube[]c = new Cube[cubies]; // internal little cubes +color[][]quadBG = new color[cubies][6]; + +// Controls cubie's movement +float[]x = new float[cubies]; +float[]y = new float[cubies]; +float[]z = new float[cubies]; +float[]xSpeed = new float[cubies]; +float[]ySpeed = new float[cubies]; +float[]zSpeed = new float[cubies]; + +// Controls cubie's rotation +float[]xRot = new float[cubies]; +float[]yRot = new float[cubies]; +float[]zRot = new float[cubies]; + +// Size of external cube +float bounds = 300; + +void setup() { + size(640, 360, P3D); + + for (int i = 0; i < cubies; i++){ + // Each cube face has a random color component + float colorShift = random(-75, 75); + quadBG[i][0] = color(0); + quadBG[i][1] = color(51); + quadBG[i][2] = color(102); + quadBG[i][3] = color(153); + quadBG[i][4] = color(204); + quadBG[i][5] = color(255); + + // Cubies are randomly sized + float cubieSize = random(5, 15); + c[i] = new Cube(cubieSize, cubieSize, cubieSize); + + // Initialize cubie's position, speed and rotation + x[i] = 0; + y[i] = 0; + z[i] = 0; + + xSpeed[i] = random(-1, 1); + ySpeed[i] = random(-1, 1); + zSpeed[i] = random(-1, 1); + + xRot[i] = random(40, 100); + yRot[i] = random(40, 100); + zRot[i] = random(40, 100); + } + + // Instantiate external large cube + stage = new Cube(bounds, bounds, bounds); +} + +void draw(){ + background(50); + lights(); + + // Center in display window + translate(width/2, height/2, -130); + + // Outer transparent cube + noFill(); + + // Rotate everything, including external large cube + rotateX(frameCount * 0.001); + rotateY(frameCount * 0.002); + rotateZ(frameCount * 0.001); + stroke(255); + + // Draw external large cube + stage.create(); + + // Move and rotate cubies + for (int i = 0; i < cubies; i++){ + pushMatrix(); + translate(x[i], y[i], z[i]); + rotateX(frameCount*PI/xRot[i]); + rotateY(frameCount*PI/yRot[i]); + rotateX(frameCount*PI/zRot[i]); + noStroke(); + c[i].create(quadBG[i]); + x[i] += xSpeed[i]; + y[i] += ySpeed[i]; + z[i] += zSpeed[i]; + popMatrix(); + + // Draw lines connecting cubbies + stroke(0); + if (i < cubies-1){ + line(x[i], y[i], z[i], x[i+1], y[i+1], z[i+1]); + } + + // Check wall collisions + if (x[i] > bounds/2 || x[i] < -bounds/2){ + xSpeed[i]*=-1; + } + if (y[i] > bounds/2 || y[i] < -bounds/2){ + ySpeed[i]*=-1; + } + if (z[i] > bounds/2 || z[i] < -bounds/2){ + zSpeed[i]*=-1; + } + } +} + diff --git a/java/examples/3D/Transform/CubesWithinCube/applet/loading.gif b/java/examples/3D/Transform/CubesWithinCube/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Transform/PushPopCubes/PushPopCubes.pde b/java/examples/3D/Transform/PushPopCubes/PushPopCubes.pde new file mode 100644 index 000000000..52ae70fdc --- /dev/null +++ b/java/examples/3D/Transform/PushPopCubes/PushPopCubes.pde @@ -0,0 +1,144 @@ +/** + * PushPop Cubes + * by Ira Greenberg. + * + * Array of rotating cubes creates + * dynamic field patterns. Color + * controlled by light sources. Example + * of pushMatrix() and popMatrix(). + */ + +// Cube class required +float ang; +int rows = 21; +int cols = 21; +int cubeCount = rows*cols; +int colSpan, rowSpan; +float rotspd = 2.0; +Cube[] cubes = new Cube[cubeCount]; +float[] angs = new float[cubeCount]; +float[] rotvals = new float[cubeCount]; + +void setup(){ + size(640, 360, P3D); + + colSpan = width/(cols-1); + rowSpan = height/(rows-1); + noStroke(); + + // instantiate cubes + for (int i = 0; i < cubeCount; i++){ + cubes[i] = new Cube(12, 12, 6, 0, 0, 0); + /* 3 different rotation options + - 1st option: cubes each rotate uniformly + - 2nd option: cubes each rotate randomly + - 3rd option: cube columns rotate as waves + To try the different rotations, leave one + of the rotVals[i] lines uncommented below + and the other 2 commented out. */ + + //rotvals[i] = rotspd; + //rotvals[i] = random(-rotspd * 2, rotspd * 2); + rotvals[i] = rotspd += .01; + } +} + +void draw(){ + int cubeCounter = 0; + background(0); + fill(200); + + // Set up some different colored lights + pointLight(51, 102, 255, width/3, height/2, 100); + pointLight(200, 40, 60, width/1.5, height/2, -150); + + // Raise overall light in scene + ambientLight(170, 170, 100); + + // Translate, rotate and draw cubes + for (int i = 0; i < cols; i++){ + for (int j = 0; j < rows; j++){ + pushMatrix(); + /* Translate each block. + pushmatix and popmatrix add each cube + translation to matrix, but restore + original, so each cube rotates around its + owns center */ + translate(i * colSpan, j * rowSpan, -20); + //rotate each cube around y and x axes + rotateY(radians(angs[cubeCounter])); + rotateX(radians(angs[cubeCounter])); + cubes[cubeCounter].drawCube(); + popMatrix(); + cubeCounter++; + } + } + // Angs used in rotate function calls above + for (int i = 0; i < cubeCount; i++){ + angs[i] += rotvals[i]; + } +} + +// Simple Cube class, based on Quads +class Cube { + + // Properties + int w, h, d; + int shiftX, shiftY, shiftZ; + + // Constructor + Cube(int w, int h, int d, int shiftX, int shiftY, int shiftZ){ + this.w = w; + this.h = h; + this.d = d; + this.shiftX = shiftX; + this.shiftY = shiftY; + this.shiftZ = shiftZ; + } + + /* Main cube drawing method, which looks + more confusing than it really is. It's + just a bunch of rectangles drawn for + each cube face */ + void drawCube(){ + + // Front face + beginShape(QUADS); + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + + // Back face + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + + // Left face + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + + // Right face + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + + // Top face + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + + // Bottom face + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + endShape(); + } +} + diff --git a/java/examples/3D/Transform/PushPopCubes/applet/PushPopCubes.java b/java/examples/3D/Transform/PushPopCubes/applet/PushPopCubes.java new file mode 100644 index 000000000..3f4d46961 --- /dev/null +++ b/java/examples/3D/Transform/PushPopCubes/applet/PushPopCubes.java @@ -0,0 +1,164 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class PushPopCubes extends PApplet { + +/** + * PushPop Cubes + * by Ira Greenberg. + * + * Array of rotating cubes creates + * dynamic field patterns. Color + * controlled by light sources. Example + * of pushMatrix() and popMatrix(). + */ + +// Cube class required +float ang; +int rows = 21; +int cols = 21; +int cubeCount = rows*cols; +int colSpan, rowSpan; +float rotspd = 2.0f; +Cube[] cubes = new Cube[cubeCount]; +float[] angs = new float[cubeCount]; +float[] rotvals = new float[cubeCount]; + +public void setup(){ + size(640, 360, P3D); + + colSpan = width/(cols-1); + rowSpan = height/(rows-1); + noStroke(); + + // instantiate cubes + for (int i = 0; i < cubeCount; i++){ + cubes[i] = new Cube(12, 12, 6, 0, 0, 0); + /* 3 different rotation options + - 1st option: cubes each rotate uniformly + - 2nd option: cubes each rotate randomly + - 3rd option: cube columns rotate as waves + To try the different rotations, leave one + of the rotVals[i] lines uncommented below + and the other 2 commented out. */ + + //rotvals[i] = rotspd; + //rotvals[i] = random(-rotspd * 2, rotspd * 2); + rotvals[i] = rotspd += .01f; + } +} + +public void draw(){ + int cubeCounter = 0; + background(0); + fill(200); + + // Set up some different colored lights + pointLight(51, 102, 255, width/3, height/2, 100); + pointLight(200, 40, 60, width/1.5f, height/2, -150); + + // Raise overall light in scene + ambientLight(170, 170, 100); + + // Translate, rotate and draw cubes + for (int i = 0; i < cols; i++){ + for (int j = 0; j < rows; j++){ + pushMatrix(); + /* Translate each block. + pushmatix and popmatrix add each cube + translation to matrix, but restore + original, so each cube rotates around its + owns center */ + translate(i * colSpan, j * rowSpan, -20); + //rotate each cube around y and x axes + rotateY(radians(angs[cubeCounter])); + rotateX(radians(angs[cubeCounter])); + cubes[cubeCounter].drawCube(); + popMatrix(); + cubeCounter++; + } + } + // Angs used in rotate function calls above + for (int i = 0; i < cubeCount; i++){ + angs[i] += rotvals[i]; + } +} + +// Simple Cube class, based on Quads +class Cube { + + // Properties + int w, h, d; + int shiftX, shiftY, shiftZ; + + // Constructor + Cube(int w, int h, int d, int shiftX, int shiftY, int shiftZ){ + this.w = w; + this.h = h; + this.d = d; + this.shiftX = shiftX; + this.shiftY = shiftY; + this.shiftZ = shiftZ; + } + + /* Main cube drawing method, which looks + more confusing than it really is. It's + just a bunch of rectangles drawn for + each cube face */ + public void drawCube(){ + + // Front face + beginShape(QUADS); + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + + // Back face + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + + // Left face + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + + // Right face + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + + // Top face + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + + // Bottom face + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + endShape(); + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "PushPopCubes" }); + } +} diff --git a/java/examples/3D/Transform/PushPopCubes/applet/PushPopCubes.pde b/java/examples/3D/Transform/PushPopCubes/applet/PushPopCubes.pde new file mode 100644 index 000000000..52ae70fdc --- /dev/null +++ b/java/examples/3D/Transform/PushPopCubes/applet/PushPopCubes.pde @@ -0,0 +1,144 @@ +/** + * PushPop Cubes + * by Ira Greenberg. + * + * Array of rotating cubes creates + * dynamic field patterns. Color + * controlled by light sources. Example + * of pushMatrix() and popMatrix(). + */ + +// Cube class required +float ang; +int rows = 21; +int cols = 21; +int cubeCount = rows*cols; +int colSpan, rowSpan; +float rotspd = 2.0; +Cube[] cubes = new Cube[cubeCount]; +float[] angs = new float[cubeCount]; +float[] rotvals = new float[cubeCount]; + +void setup(){ + size(640, 360, P3D); + + colSpan = width/(cols-1); + rowSpan = height/(rows-1); + noStroke(); + + // instantiate cubes + for (int i = 0; i < cubeCount; i++){ + cubes[i] = new Cube(12, 12, 6, 0, 0, 0); + /* 3 different rotation options + - 1st option: cubes each rotate uniformly + - 2nd option: cubes each rotate randomly + - 3rd option: cube columns rotate as waves + To try the different rotations, leave one + of the rotVals[i] lines uncommented below + and the other 2 commented out. */ + + //rotvals[i] = rotspd; + //rotvals[i] = random(-rotspd * 2, rotspd * 2); + rotvals[i] = rotspd += .01; + } +} + +void draw(){ + int cubeCounter = 0; + background(0); + fill(200); + + // Set up some different colored lights + pointLight(51, 102, 255, width/3, height/2, 100); + pointLight(200, 40, 60, width/1.5, height/2, -150); + + // Raise overall light in scene + ambientLight(170, 170, 100); + + // Translate, rotate and draw cubes + for (int i = 0; i < cols; i++){ + for (int j = 0; j < rows; j++){ + pushMatrix(); + /* Translate each block. + pushmatix and popmatrix add each cube + translation to matrix, but restore + original, so each cube rotates around its + owns center */ + translate(i * colSpan, j * rowSpan, -20); + //rotate each cube around y and x axes + rotateY(radians(angs[cubeCounter])); + rotateX(radians(angs[cubeCounter])); + cubes[cubeCounter].drawCube(); + popMatrix(); + cubeCounter++; + } + } + // Angs used in rotate function calls above + for (int i = 0; i < cubeCount; i++){ + angs[i] += rotvals[i]; + } +} + +// Simple Cube class, based on Quads +class Cube { + + // Properties + int w, h, d; + int shiftX, shiftY, shiftZ; + + // Constructor + Cube(int w, int h, int d, int shiftX, int shiftY, int shiftZ){ + this.w = w; + this.h = h; + this.d = d; + this.shiftX = shiftX; + this.shiftY = shiftY; + this.shiftZ = shiftZ; + } + + /* Main cube drawing method, which looks + more confusing than it really is. It's + just a bunch of rectangles drawn for + each cube face */ + void drawCube(){ + + // Front face + beginShape(QUADS); + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + + // Back face + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + + // Left face + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + + // Right face + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + + // Top face + vertex(-w/2 + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, -h/2 + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, -h/2 + shiftY, d + shiftZ); + + // Bottom face + vertex(-w/2 + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, -d/2 + shiftZ); + vertex(w + shiftX, h + shiftY, d + shiftZ); + vertex(-w/2 + shiftX, h + shiftY, d + shiftZ); + endShape(); + } +} + diff --git a/java/examples/3D/Transform/PushPopCubes/applet/loading.gif b/java/examples/3D/Transform/PushPopCubes/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Transform/Rotate1/Rotate1.pde b/java/examples/3D/Transform/Rotate1/Rotate1.pde new file mode 100644 index 000000000..7aafc250a --- /dev/null +++ b/java/examples/3D/Transform/Rotate1/Rotate1.pde @@ -0,0 +1,38 @@ +/** + * Rotate 1. + * + * Rotating simultaneously in the X and Y axis. + * Transformation functions such as rotate() are additive. + * Successively calling rotate(1.0) and rotate(2.0) + * is equivalent to calling rotate(3.0). + */ + +float a = 0.0; +float rSize; // rectangle size + +void setup() { + size(640, 360, P3D); + rSize = width / 6; + noStroke(); + fill(204, 204); +} + +void draw() { + background(0); + + a += 0.005; + if(a > TWO_PI) { + a = 0.0; + } + + translate(width/2, height/2); + + rotateX(a); + rotateY(a * 2.0); + rect(-rSize, -rSize, rSize*2, rSize*2); + + rotateX(a * 1.001); + rotateY(a * 2.002); + rect(-rSize, -rSize, rSize*2, rSize*2); + +} diff --git a/java/examples/3D/Transform/Rotate1/applet/Rotate1.java b/java/examples/3D/Transform/Rotate1/applet/Rotate1.java new file mode 100644 index 000000000..3a78763fd --- /dev/null +++ b/java/examples/3D/Transform/Rotate1/applet/Rotate1.java @@ -0,0 +1,58 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Rotate1 extends PApplet { + +/** + * Rotate 1. + * + * Rotating simultaneously in the X and Y axis. + * Transformation functions such as rotate() are additive. + * Successively calling rotate(1.0) and rotate(2.0) + * is equivalent to calling rotate(3.0). + */ + +float a = 0.0f; +float rSize; // rectangle size + +public void setup() { + size(640, 360, P3D); + rSize = width / 6; + noStroke(); + fill(204, 204); +} + +public void draw() { + background(0); + + a += 0.005f; + if(a > TWO_PI) { + a = 0.0f; + } + + translate(width/2, height/2); + + rotateX(a); + rotateY(a * 2.0f); + rect(-rSize, -rSize, rSize*2, rSize*2); + + rotateX(a * 1.001f); + rotateY(a * 2.002f); + rect(-rSize, -rSize, rSize*2, rSize*2); + +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Rotate1" }); + } +} diff --git a/java/examples/3D/Transform/Rotate1/applet/Rotate1.pde b/java/examples/3D/Transform/Rotate1/applet/Rotate1.pde new file mode 100644 index 000000000..7aafc250a --- /dev/null +++ b/java/examples/3D/Transform/Rotate1/applet/Rotate1.pde @@ -0,0 +1,38 @@ +/** + * Rotate 1. + * + * Rotating simultaneously in the X and Y axis. + * Transformation functions such as rotate() are additive. + * Successively calling rotate(1.0) and rotate(2.0) + * is equivalent to calling rotate(3.0). + */ + +float a = 0.0; +float rSize; // rectangle size + +void setup() { + size(640, 360, P3D); + rSize = width / 6; + noStroke(); + fill(204, 204); +} + +void draw() { + background(0); + + a += 0.005; + if(a > TWO_PI) { + a = 0.0; + } + + translate(width/2, height/2); + + rotateX(a); + rotateY(a * 2.0); + rect(-rSize, -rSize, rSize*2, rSize*2); + + rotateX(a * 1.001); + rotateY(a * 2.002); + rect(-rSize, -rSize, rSize*2, rSize*2); + +} diff --git a/java/examples/3D/Transform/Rotate1/applet/loading.gif b/java/examples/3D/Transform/Rotate1/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Transform/Rotate2/Rotate2.pde b/java/examples/3D/Transform/Rotate2/Rotate2.pde new file mode 100644 index 000000000..1d5af0d49 --- /dev/null +++ b/java/examples/3D/Transform/Rotate2/Rotate2.pde @@ -0,0 +1,42 @@ +/** + * Rotate 2. + * + * The push() and pop() functions allow for more control over transformations. + * The push function saves the current coordinate system to the stack + * and pop() restores the prior coordinate system. + */ + +float a; // Angle of rotation +float offset = PI/24.0; // Angle offset between boxes +int num = 12; // Number of boxes +color[] colors = new color[num]; // Colors of each box +color safecolor; + +boolean pink = true; + +void setup() +{ + size(640, 360, P3D); + noStroke(); + for(int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Typography/KineticType/KineticType.pde b/java/examples/3D/Typography/KineticType/KineticType.pde new file mode 100644 index 000000000..7be49dfb5 --- /dev/null +++ b/java/examples/3D/Typography/KineticType/KineticType.pde @@ -0,0 +1,64 @@ +/** + * Kinetic Type + * by Zach Lieberman. + * + * Using push() and pop() to define the curves of the lines of type. + */ + +Line ln; +Line lns[]; + +String words[] = { + "sometimes it's like", "the lines of text", "are so happy", "that they want to dance", + "or leave the page or jump", "can you blame them?", "living on the page like that", + "waiting to be read..." +}; + +void setup() { + size(640, 360, P3D); + + // Array of line objects + lns = new Line[8]; + + // Load the font from the sketch's data directory + textFont(loadFont("Univers-66.vlw"), 1.0); + + // White type + fill(255); + + // Creating the line objects + for(int i = 0; i < 8; i++) { + // For every line in the array, create a Line object to animate + // i * 70 is the spacing + ln = new Line(words[i], 0, i * 70); + lns[i] = ln; + } +} + +void draw() { + background(0); + + translate(-200, -50, -450); + rotateY(0.3); + + // Now animate every line object & draw it... + for(int i = 0; i < 8; i++) { + float f1 = sin((i + 1.0) * (millis() / 10000.0) * TWO_PI); + float f2 = sin((8.0 - i) * (millis() / 10000.0) * TWO_PI); + Line line = lns[i]; + pushMatrix(); + translate(0.0, line.yPosition, 0.0); + for(int j = 0; j < line.myLetters.length; j++) { + if(j != 0) { + translate(textWidth(line.myLetters[j - 1].myChar) * 75, 0.0, 0.0); + } + rotateY(f1 * 0.005 * f2); + pushMatrix(); + scale(75.0); + text(line.myLetters[j].myChar, 0.0, 0.0); + popMatrix(); + } + popMatrix(); + } +} + diff --git a/java/examples/3D/Typography/KineticType/Letter.pde b/java/examples/3D/Typography/KineticType/Letter.pde new file mode 100644 index 000000000..d12a9a78d --- /dev/null +++ b/java/examples/3D/Typography/KineticType/Letter.pde @@ -0,0 +1,13 @@ +class Letter +{ + char myChar; + float x; + float y; + + Letter(char c, float f, float f1) + { + myChar = c; + x = f; + y = f1; + } +} diff --git a/java/examples/3D/Typography/KineticType/Line.pde b/java/examples/3D/Typography/KineticType/Line.pde new file mode 100644 index 000000000..f01b9cdc8 --- /dev/null +++ b/java/examples/3D/Typography/KineticType/Line.pde @@ -0,0 +1,28 @@ +class Line +{ + String myString; + int xPosition; + int yPosition; + int highlightNum; + float speed; + float curlInX; + Letter myLetters[]; + + Line(String s, int i, int j) + { + myString = s; + xPosition = i; + yPosition = j; + myLetters = new Letter[s.length()]; + float f1 = 0.0; + for(int k = 0; k < s.length(); k++) + { + char c = s.charAt(k); + f1 += textWidth(c); + Letter letter = new Letter(c, f1, 0.0); + myLetters[k] = letter; + } + + curlInX = 0.1; + } +} diff --git a/java/examples/3D/Typography/KineticType/Word.pde b/java/examples/3D/Typography/KineticType/Word.pde new file mode 100644 index 000000000..6bc2f2deb --- /dev/null +++ b/java/examples/3D/Typography/KineticType/Word.pde @@ -0,0 +1,10 @@ +class Word +{ + String myName; + int x; + + Word(String s) + { + myName = s; + } +} diff --git a/java/examples/3D/Typography/KineticType/applet/KineticType.java b/java/examples/3D/Typography/KineticType/applet/KineticType.java new file mode 100644 index 000000000..852401aa3 --- /dev/null +++ b/java/examples/3D/Typography/KineticType/applet/KineticType.java @@ -0,0 +1,137 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class KineticType extends PApplet { + +/** + * Kinetic Type + * by Zach Lieberman. + * + * Using push() and pop() to define the curves of the lines of type. + */ + +Line ln; +Line lns[]; + +String words[] = { + "sometimes it's like", "the lines of text", "are so happy", "that they want to dance", + "or leave the page or jump", "can you blame them?", "living on the page like that", + "waiting to be read..." +}; + +public void setup() +{ + size(640, 360, P3D); + + // Array of line objects + lns = new Line[8]; + + // Load the font from the sketch's data directory + textFont(loadFont("Univers66.vlw.gz"), 1.0f); + + // White type + fill(255); + + // Creating the line objects + for(int i = 0; i < 8; i++) { + // For every line in the array, create a Line object to animate + // i * 70 is the spacing + ln = new Line(words[i], 0, i * 70); + lns[i] = ln; + } +} + +public void draw() +{ + background(0); + + translate(-200, -50, -450); + rotateY(0.3f); + + // Now animate every line object & draw it... + for(int i = 0; i < 8; i++) { + float f1 = sin((i + 1.0f) * (millis() / 10000.0f) * TWO_PI); + float f2 = sin((8.0f - i) * (millis() / 10000.0f) * TWO_PI); + Line line = lns[i]; + pushMatrix(); + translate(0.0f, line.yPosition, 0.0f); + for(int j = 0; j < line.myLetters.length; j++) { + if(j != 0) { + translate(textWidth(line.myLetters[j - 1].myChar) * 75, 0.0f, 0.0f); + } + rotateY(f1 * 0.005f * f2); + pushMatrix(); + scale(75.0f); + text(line.myLetters[j].myChar, 0.0f, 0.0f); + popMatrix(); + } + popMatrix(); + } +} + +class Letter +{ + char myChar; + float x; + float y; + + Letter(char c, float f, float f1) + { + myChar = c; + x = f; + y = f1; + } +} +class Line +{ + String myString; + int xPosition; + int yPosition; + int highlightNum; + float speed; + float curlInX; + Letter myLetters[]; + + Line(String s, int i, int j) + { + myString = s; + xPosition = i; + yPosition = j; + myLetters = new Letter[s.length()]; + float f1 = 0.0f; + for(int k = 0; k < s.length(); k++) + { + char c = s.charAt(k); + f1 += textWidth(c); + Letter letter = new Letter(c, f1, 0.0f); + myLetters[k] = letter; + } + + curlInX = 0.1f; + } +} +class Word +{ + String myName; + int x; + + Word(String s) + { + myName = s; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "KineticType" }); + } +} diff --git a/java/examples/3D/Typography/KineticType/applet/KineticType.pde b/java/examples/3D/Typography/KineticType/applet/KineticType.pde new file mode 100644 index 000000000..bf422811f --- /dev/null +++ b/java/examples/3D/Typography/KineticType/applet/KineticType.pde @@ -0,0 +1,66 @@ +/** + * Kinetic Type + * by Zach Lieberman. + * + * Using push() and pop() to define the curves of the lines of type. + */ + +Line ln; +Line lns[]; + +String words[] = { + "sometimes it's like", "the lines of text", "are so happy", "that they want to dance", + "or leave the page or jump", "can you blame them?", "living on the page like that", + "waiting to be read..." +}; + +void setup() +{ + size(640, 360, P3D); + + // Array of line objects + lns = new Line[8]; + + // Load the font from the sketch's data directory + textFont(loadFont("Univers66.vlw.gz"), 1.0); + + // White type + fill(255); + + // Creating the line objects + for(int i = 0; i < 8; i++) { + // For every line in the array, create a Line object to animate + // i * 70 is the spacing + ln = new Line(words[i], 0, i * 70); + lns[i] = ln; + } +} + +void draw() +{ + background(0); + + translate(-200, -50, -450); + rotateY(0.3); + + // Now animate every line object & draw it... + for(int i = 0; i < 8; i++) { + float f1 = sin((i + 1.0) * (millis() / 10000.0) * TWO_PI); + float f2 = sin((8.0 - i) * (millis() / 10000.0) * TWO_PI); + Line line = lns[i]; + pushMatrix(); + translate(0.0, line.yPosition, 0.0); + for(int j = 0; j < line.myLetters.length; j++) { + if(j != 0) { + translate(textWidth(line.myLetters[j - 1].myChar) * 75, 0.0, 0.0); + } + rotateY(f1 * 0.005 * f2); + pushMatrix(); + scale(75.0); + text(line.myLetters[j].myChar, 0.0, 0.0); + popMatrix(); + } + popMatrix(); + } +} + diff --git a/java/examples/3D/Typography/KineticType/applet/Letter.pde b/java/examples/3D/Typography/KineticType/applet/Letter.pde new file mode 100644 index 000000000..d12a9a78d --- /dev/null +++ b/java/examples/3D/Typography/KineticType/applet/Letter.pde @@ -0,0 +1,13 @@ +class Letter +{ + char myChar; + float x; + float y; + + Letter(char c, float f, float f1) + { + myChar = c; + x = f; + y = f1; + } +} diff --git a/java/examples/3D/Typography/KineticType/applet/Line.pde b/java/examples/3D/Typography/KineticType/applet/Line.pde new file mode 100644 index 000000000..f01b9cdc8 --- /dev/null +++ b/java/examples/3D/Typography/KineticType/applet/Line.pde @@ -0,0 +1,28 @@ +class Line +{ + String myString; + int xPosition; + int yPosition; + int highlightNum; + float speed; + float curlInX; + Letter myLetters[]; + + Line(String s, int i, int j) + { + myString = s; + xPosition = i; + yPosition = j; + myLetters = new Letter[s.length()]; + float f1 = 0.0; + for(int k = 0; k < s.length(); k++) + { + char c = s.charAt(k); + f1 += textWidth(c); + Letter letter = new Letter(c, f1, 0.0); + myLetters[k] = letter; + } + + curlInX = 0.1; + } +} diff --git a/java/examples/3D/Typography/KineticType/applet/Word.pde b/java/examples/3D/Typography/KineticType/applet/Word.pde new file mode 100644 index 000000000..6bc2f2deb --- /dev/null +++ b/java/examples/3D/Typography/KineticType/applet/Word.pde @@ -0,0 +1,10 @@ +class Word +{ + String myName; + int x; + + Word(String s) + { + myName = s; + } +} diff --git a/java/examples/3D/Typography/KineticType/applet/loading.gif b/java/examples/3D/Typography/KineticType/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Typography/KineticType/data/Univers-66.vlw b/java/examples/3D/Typography/KineticType/data/Univers-66.vlw new file mode 100644 index 0000000000000000000000000000000000000000..d2d08c24749c2e3da957da256b80585a31514ddf GIT binary patch literal 116537 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 G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Typography/Typing/Typing.pde b/java/examples/3D/Typography/Typing/Typing.pde new file mode 100644 index 000000000..cc889531b --- /dev/null +++ b/java/examples/3D/Typography/Typing/Typing.pde @@ -0,0 +1,82 @@ +/** + * Typing (Excerpt from the piece Textension) + * by Josh Nimoy. + * + * Click in the window to give it focus. + * Type to add letters and press backspace or delete to remove them. + */ + + +int leftmargin = 10; +int rightmargin = 20; +String buff = ""; +boolean didntTypeYet = true; + +void setup() +{ + size(640, 360, P3D); + textFont(loadFont("Univers45.vlw"), 25); +} + +void draw() +{ + background(176); + + if((millis() % 500) < 250){ // Only fill cursor half the time + noFill(); + } + else { + fill(255); + stroke(0); + } + float rPos; + // Store the cursor rectangle's position + rPos = textWidth(buff) + leftmargin; + rect(rPos+1, 19, 10, 21); + + // Some instructions at first + if(didntTypeYet) { + fill(0); + //text("Use the keyboard.", 22, 40); + } + + fill(0); + pushMatrix(); + translate(rPos,10+25); + char k; + for(int i = 0;i < buff.length(); i++) { + k = buff.charAt(i); + translate(-textWidth(k),0); + rotateY(-textWidth(k)/70.0); + rotateX(textWidth(k)/70.0); + scale(1.1); + text(k,0,0); + } + popMatrix(); +} + +void keyPressed() +{ + char k; + k = (char)key; + switch(k){ + case 8: + if(buff.length()>0){ + buff = buff.substring(1); + } + break; + case 13: // Avoid special keys + case 10: + case 65535: + case 127: + case 27: + break; + default: + if(textWidth(buff+k)+leftmargin < width-rightmargin){ + didntTypeYet = false; + buff=k+buff; + } + break; + } +} + diff --git a/java/examples/3D/Typography/Typing/applet/Typing.java b/java/examples/3D/Typography/Typing/applet/Typing.java new file mode 100644 index 000000000..c68f5b2aa --- /dev/null +++ b/java/examples/3D/Typography/Typing/applet/Typing.java @@ -0,0 +1,101 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Typing extends PApplet { + +/** + * Typing (Excerpt from the piece Textension) + * by Josh Nimoy. + * + * Click in the window to give it focus. + * Type to add letters and press backspace or delete to remove them. + */ + + +int leftmargin = 10; +int rightmargin = 20; +String buff = ""; +boolean didntTypeYet = true; + +public void setup() +{ + size(640, 360, P3D); + textFont(loadFont("Univers45.vlw"), 25); +} + +public void draw() +{ + background(176); + + if((millis() % 500) < 250){ // Only fill cursor half the time + noFill(); + } + else{ + fill(255); + stroke(0); + } + float rPos; + // Store the cursor rectangle's position + rPos = textWidth(buff)+leftmargin; + rect(rPos+1, 19, 10, 21); + + // Some instructions at first + if(didntTypeYet){ + fill(0); + //text("Use the keyboard.", 22, 40); + } + + fill(0); + pushMatrix(); + translate(rPos,10+25); + char k; + for(int i=0;i0){ + buff = buff.substring(1); + } + break; + case 13: // Avoid special keys + case 10: + case 65535: + case 127: + case 27: + break; + default: + if(textWidth(buff+k)+leftmargin < width-rightmargin){ + didntTypeYet = false; + buff=k+buff; + } + break; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Typing" }); + } +} diff --git a/java/examples/3D/Typography/Typing/applet/Typing.pde b/java/examples/3D/Typography/Typing/applet/Typing.pde new file mode 100644 index 000000000..0102012b7 --- /dev/null +++ b/java/examples/3D/Typography/Typing/applet/Typing.pde @@ -0,0 +1,81 @@ +/** + * Typing (Excerpt from the piece Textension) + * by Josh Nimoy. + * + * Click in the window to give it focus. + * Type to add letters and press backspace or delete to remove them. + */ + + +int leftmargin = 10; +int rightmargin = 20; +String buff = ""; +boolean didntTypeYet = true; + +void setup() +{ + size(640, 360, P3D); + textFont(loadFont("Univers45.vlw"), 25); +} + +void draw() +{ + background(176); + + if((millis() % 500) < 250){ // Only fill cursor half the time + noFill(); + } + else{ + fill(255); + stroke(0); + } + float rPos; + // Store the cursor rectangle's position + rPos = textWidth(buff)+leftmargin; + rect(rPos+1, 19, 10, 21); + + // Some instructions at first + if(didntTypeYet){ + fill(0); + //text("Use the keyboard.", 22, 40); + } + + fill(0); + pushMatrix(); + translate(rPos,10+25); + char k; + for(int i=0;i0){ + buff = buff.substring(1); + } + break; + case 13: // Avoid special keys + case 10: + case 65535: + case 127: + case 27: + break; + default: + if(textWidth(buff+k)+leftmargin < width-rightmargin){ + didntTypeYet = false; + buff=k+buff; + } + break; + } +} diff --git a/java/examples/3D/Typography/Typing/applet/loading.gif b/java/examples/3D/Typography/Typing/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/3D/Typography/Typing/data/Univers45.vlw b/java/examples/3D/Typography/Typing/data/Univers45.vlw new file mode 100644 index 0000000000000000000000000000000000000000..040e02170efb50dbce4576b305e0b6b4f53de200 GIT binary patch literal 95193 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 G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Arrays/Array2D/Array2D.pde b/java/examples/Basics/Arrays/Array2D/Array2D.pde new file mode 100644 index 000000000..3a97587e7 --- /dev/null +++ b/java/examples/Basics/Arrays/Array2D/Array2D.pde @@ -0,0 +1,32 @@ +/** + * Array 2D. + * + * Demonstrates the syntax for creating a two-dimensional (2D) array. + * Values in a 2D array are accessed through two index values. + * 2D arrays are useful for storing images. In this example, each dot + * is colored in relation to its distance from the center of the image. + */ + +float[][] distances; +float maxDistance; + +size(200, 200); +background(0); +maxDistance = dist(width/2, height/2, width, height); +distances = new float[width][height]; +for(int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Arrays/ArrayObjects/ArrayObjects.pde b/java/examples/Basics/Arrays/ArrayObjects/ArrayObjects.pde new file mode 100644 index 000000000..db476e7c9 --- /dev/null +++ b/java/examples/Basics/Arrays/ArrayObjects/ArrayObjects.pde @@ -0,0 +1,39 @@ +/** + * Array Objects. + * + * Demonstrates the syntax for creating an array of custom objects. + * + * Updated 26 February 2010. + */ + +int unit = 40; +int count; +Module[] mods; + + +void setup() { + size(320, 240); + background(176); + noStroke(); + + int wideCount = width / unit; + int highCount = height / unit; + count = wideCount * highCount; + mods = new Module[count]; + + int index = 0; + for (int y = 0; y < highCount; y++) { + for (int x = 0; x < wideCount; x++) { + mods[index++] = new Module(x*unit, y*unit, unit/2, unit/2, random(0.05, 0.8)); + } + } +} + + +void draw() { + for (int i = 0; i < count; i++) { + mods[i].update(); + mods[i].draw(); + } +} + diff --git a/java/examples/Basics/Arrays/ArrayObjects/Module.pde b/java/examples/Basics/Arrays/ArrayObjects/Module.pde new file mode 100644 index 000000000..0094ab4aa --- /dev/null +++ b/java/examples/Basics/Arrays/ArrayObjects/Module.pde @@ -0,0 +1,38 @@ +class Module { + int mx, my; + int big; + float x, y; + int xdir = 1; + int ydir = 1; + float speed; + + // Contructor (required) + Module(int imx, int imy, int ix, int iy, float ispeed) { + mx = imx; + my = imy; + x = ix; + y = iy; + speed = ispeed; + big = unit; + } + + // Custom method for updating the variables + void update() { + x = x + (speed * xdir); + if (x >= big || x <= 0) { + xdir *= -1; + x = x + (1 * xdir); + y = y + (1 * ydir); + } + if (y >= big || y <= 0) { + ydir *= -1; + y = y + (1 * ydir); + } + } + + // Custom method for drawing the object + void draw() { + stroke(second() * 4); + point(mx+x-1, my+y-1); + } +} diff --git a/java/examples/Basics/Arrays/ArrayObjects/applet/ArrayObjects.java b/java/examples/Basics/Arrays/ArrayObjects/applet/ArrayObjects.java new file mode 100644 index 000000000..3ce1aa1a9 --- /dev/null +++ b/java/examples/Basics/Arrays/ArrayObjects/applet/ArrayObjects.java @@ -0,0 +1,94 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class ArrayObjects extends PApplet { + +/** + * Array Objects. + * + * Demonstrates the syntax for creating an array of custom objects. + */ + +int unit = 40; +int num; +Module[] mods; + +public void setup() +{ + size(200, 200); + background(176); + noStroke(); + + num = width/unit * width/unit; + mods = new Module[num]; + + for (int i=0; i= size || x <= 0) { + xdir *= -1; + x = x + (1 * xdir); + y = y + (1 * ydir); + } + if (y >= size || y <= 0) { + ydir *= -1; + y = y + (1 * ydir); + } + } + + // Custom method for drawing the object + public void draw() { + stroke(second()*4); + point(mx+x-1, my+y-1); + } +} + + + + static public void main(String args[]) { + PApplet.main(new String[] { "ArrayObjects" }); + } +} diff --git a/java/examples/Basics/Arrays/ArrayObjects/applet/ArrayObjects.pde b/java/examples/Basics/Arrays/ArrayObjects/applet/ArrayObjects.pde new file mode 100644 index 000000000..c2ea3b4a2 --- /dev/null +++ b/java/examples/Basics/Arrays/ArrayObjects/applet/ArrayObjects.pde @@ -0,0 +1,74 @@ +/** + * Array Objects. + * + * Demonstrates the syntax for creating an array of custom objects. + */ + +int unit = 40; +int num; +Module[] mods; + +void setup() +{ + size(200, 200); + background(176); + noStroke(); + + num = width/unit * width/unit; + mods = new Module[num]; + + for (int i=0; i= size || x <= 0) { + xdir *= -1; + x = x + (1 * xdir); + y = y + (1 * ydir); + } + if (y >= size || y <= 0) { + ydir *= -1; + y = y + (1 * ydir); + } + } + + // Custom method for drawing the object + void draw() { + stroke(second()*4); + point(mx+x-1, my+y-1); + } +} + + diff --git a/java/examples/Basics/Arrays/ArrayObjects/applet/loading.gif b/java/examples/Basics/Arrays/ArrayObjects/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/Brightness/Brightness.pde b/java/examples/Basics/Color/Brightness/Brightness.pde new file mode 100644 index 000000000..a91331e30 --- /dev/null +++ b/java/examples/Basics/Color/Brightness/Brightness.pde @@ -0,0 +1,29 @@ +/** + * Brightness + * by Rusty Robison. + * + * Brightness is the relative lightness or darkness of a color. + * Move the cursor vertically over each bar to alter its brightness. + * + * Updated 28 February 2010. + */ + +int barWidth = 5; +int lastBar = -1; + +void setup() { + size(200, 200); + colorMode(HSB, 360, 100, height); + noStroke(); + background(0); +} + +void draw() { + int whichBar = mouseX / barWidth; + if (whichBar != lastBar) { + int barX = whichBar * barWidth; + fill(barX, 100, mouseY); + rect(barX, 0, barWidth, height); + lastBar = whichBar; + } +} diff --git a/java/examples/Basics/Color/Brightness/applet/Brightness.java b/java/examples/Basics/Color/Brightness/applet/Brightness.java new file mode 100644 index 000000000..03e7c208c --- /dev/null +++ b/java/examples/Basics/Color/Brightness/applet/Brightness.java @@ -0,0 +1,51 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Brightness extends PApplet { + +/** + * Brightness + * by Rusty Robison. + * + * Brightness is the relative lightness or darkness of a color. + * Move the cursor vertically over each bar to alter its brightness. + */ + +int barWidth = 5; +int[] brightness; + +public void setup() +{ + size(200, 200); + colorMode(HSB, 360, height, height); + brightness = new int[width/barWidth]; +} + +public void draw() +{ + int j = 0; + for (int i = 0; i <= (width-barWidth); i += barWidth) { + noStroke(); + if ((mouseX > i) && (mouseX < i+barWidth)) { + brightness[j] = mouseY; + } + fill(i, height, brightness[j]); + rect(i, 0, barWidth, height); + j++; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Brightness" }); + } +} diff --git a/java/examples/Basics/Color/Brightness/applet/Brightness.pde b/java/examples/Basics/Color/Brightness/applet/Brightness.pde new file mode 100644 index 000000000..c9dba6d28 --- /dev/null +++ b/java/examples/Basics/Color/Brightness/applet/Brightness.pde @@ -0,0 +1,31 @@ +/** + * Brightness + * by Rusty Robison. + * + * Brightness is the relative lightness or darkness of a color. + * Move the cursor vertically over each bar to alter its brightness. + */ + +int barWidth = 5; +int[] brightness; + +void setup() +{ + size(200, 200); + colorMode(HSB, 360, height, height); + brightness = new int[width/barWidth]; +} + +void draw() +{ + int j = 0; + for (int i = 0; i <= (width-barWidth); i += barWidth) { + noStroke(); + if ((mouseX > i) && (mouseX < i+barWidth)) { + brightness[j] = mouseY; + } + fill(i, height, brightness[j]); + rect(i, 0, barWidth, height); + j++; + } +} diff --git a/java/examples/Basics/Color/Brightness/applet/loading.gif b/java/examples/Basics/Color/Brightness/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/ColorWheel/ColorWheel.pde b/java/examples/Basics/Color/ColorWheel/ColorWheel.pde new file mode 100644 index 000000000..69c34602a --- /dev/null +++ b/java/examples/Basics/Color/ColorWheel/ColorWheel.pde @@ -0,0 +1,88 @@ +/** + * Subtractive Color Wheel + * by Ira Greenberg. + * + * The primaries are red, yellow, and blue. The secondaries are green, + * purple, and orange. The tertiaries are yellow-orange, red-orange, + * red-purple, blue-purple, blue-green, and yellow-green. + * + * Create a shade or tint of the subtractive color wheel using + * SHADE or TINT parameters. + * + * Updated 26 February 2010. + */ + +int segs = 12; +int steps = 6; +float rotAdjust = TWO_PI / segs / 2; +float radius; +float segWidth; +float interval = TWO_PI / segs; + + +void setup() { + size(200, 200); + background(127); + smooth(); + ellipseMode(RADIUS); + noStroke(); + // make the diameter 90% of the sketch area + radius = min(width, height) * 0.45; + segWidth = radius / steps; + + // swap which line is commented out to draw the other version + //drawTintWheel(); + drawShadeWheel(); +} + + +void drawShadeWheel() { + for (int j = 0; j < steps; j++) { + color[] cols = { + color(255-(255/steps)*j, 255-(255/steps)*j, 0), + color(255-(255/steps)*j, (255/1.5)-((255/1.5)/steps)*j, 0), + color(255-(255/steps)*j, (255/2)-((255/2)/steps)*j, 0), + color(255-(255/steps)*j, (255/2.5)-((255/2.5)/steps)*j, 0), + color(255-(255/steps)*j, 0, 0), + color(255-(255/steps)*j, 0, (255/2)-((255/2)/steps)*j), + color(255-(255/steps)*j, 0, 255-(255/steps)*j), + color((255/2)-((255/2)/steps)*j, 0, 255-(255/steps)*j), + color(0, 0, 255-(255/steps)*j), + color(0, 255-(255/steps)*j, (255/2.5)-((255/2.5)/steps)*j), + color(0, 255-(255/steps)*j, 0), + color((255/2)-((255/2)/steps)*j, 255-(255/steps)*j, 0) + }; + for (int i = 0; i < segs; i++) { + fill(cols[i]); + arc(width/2, height/2, radius, radius, + interval*i+rotAdjust, interval*(i+1)+rotAdjust); + } + radius -= segWidth; + } +} + + +void drawTintWheel() { + for (int j = 0; j < steps; j++) { + color[] cols = { + color((255/steps)*j, (255/steps)*j, 0), + color((255/steps)*j, ((255/1.5)/steps)*j, 0), + color((255/steps)*j, ((255/2)/steps)*j, 0), + color((255/steps)*j, ((255/2.5)/steps)*j, 0), + color((255/steps)*j, 0, 0), + color((255/steps)*j, 0, ((255/2)/steps)*j), + color((255/steps)*j, 0, (255/steps)*j), + color(((255/2)/steps)*j, 0, (255/steps)*j), + color(0, 0, (255/steps)*j), + color(0, (255/steps)*j, ((255/2.5)/steps)*j), + color(0, (255/steps)*j, 0), + color(((255/2)/steps)*j, (255/steps)*j, 0) + }; + for (int i = 0; i < segs; i++) { + fill(cols[i]); + arc(width/2, height/2, radius, radius, + interval*i+rotAdjust, interval*(i+1)+rotAdjust); + } + radius -= segWidth; + } +} diff --git a/java/examples/Basics/Color/ColorWheel/applet/ColorWheel.java b/java/examples/Basics/Color/ColorWheel/applet/ColorWheel.java new file mode 100644 index 000000000..c9ecabb74 --- /dev/null +++ b/java/examples/Basics/Color/ColorWheel/applet/ColorWheel.java @@ -0,0 +1,99 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class ColorWheel extends PApplet { + +/** + * Subtractive Color Wheel + * by Ira Greenberg. + * + * The primaries are red, yellow, and blue. The + * secondaries are green, purple, and orange. The + * tertiaries are yellow-orange, red-orange, red-purple, + * blue-purple, blue-green, and yellow-green. + * + * Create a shade or tint of the + * subtractive color wheel using + * SHADE or TINT parameters. + */ + +int segs = 12; +int steps = 6; +float rotAdjust = radians(360.0f/segs/2.0f); +float radius = 95.0f; +float segWidth = radius/steps; +float interval = TWO_PI/segs; +int SHADE = 0; +int TINT = 1; + +public void setup(){ + size(200, 200); + background(127); + smooth(); + ellipseMode(CENTER_RADIUS); + noStroke(); + // you can substitue TINT for SHADE argument + createWheel(width/2, height/2, SHADE); +} + +public void createWheel(int x, int y, int valueShift){ + if (valueShift == SHADE){ + for (int j=0; j}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/Creating/Creating.pde b/java/examples/Basics/Color/Creating/Creating.pde new file mode 100644 index 000000000..628e1f7ac --- /dev/null +++ b/java/examples/Basics/Color/Creating/Creating.pde @@ -0,0 +1,26 @@ +/** + * Creating Colors (Homage to Albers). + * + * Creating variables for colors that may be referred to + * in the program by their name, rather than a number. + */ + +size(200, 200); +noStroke(); + +color inside = color(204, 102, 0); +color middle = color(204, 153, 0); +color outside = color(153, 51, 0); + +// These statements are equivalent to the statements above. +// Programmers may use the format they prefer. +//color inside = #CC6600; +//color middle = #CC9900; +//color outside = #993300; + +fill(outside); +rect(0, 0, 200, 200); +fill(middle); +rect(40, 60, 120, 120); +fill(inside); +rect(60, 90, 80, 80); diff --git a/java/examples/Basics/Color/Creating/applet/Creating.java b/java/examples/Basics/Color/Creating/applet/Creating.java new file mode 100644 index 000000000..a999e8a55 --- /dev/null +++ b/java/examples/Basics/Color/Creating/applet/Creating.java @@ -0,0 +1,47 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Creating extends PApplet { + public void setup() {/** + * Creating Colors (Homage to Albers). + * + * Creating variables for colors that may be referred to + * in the program by their name, rather than a number. + */ + +size(200, 200); +noStroke(); + +int inside = color(204, 102, 0); +int middle = color(204, 153, 0); +int outside = color(153, 51, 0); + +// These statements are equivalent to the statements above. +// Programmers may use the format they prefer. +//color inside = #CC6600; +//color middle = #CC9900; +//color outside = #993300; + +fill(outside); +rect(0, 0, 200, 200); +fill(middle); +rect(40, 60, 120, 120); +fill(inside); +rect(60, 90, 80, 80); + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Creating" }); + } +} diff --git a/java/examples/Basics/Color/Creating/applet/Creating.pde b/java/examples/Basics/Color/Creating/applet/Creating.pde new file mode 100644 index 000000000..628e1f7ac --- /dev/null +++ b/java/examples/Basics/Color/Creating/applet/Creating.pde @@ -0,0 +1,26 @@ +/** + * Creating Colors (Homage to Albers). + * + * Creating variables for colors that may be referred to + * in the program by their name, rather than a number. + */ + +size(200, 200); +noStroke(); + +color inside = color(204, 102, 0); +color middle = color(204, 153, 0); +color outside = color(153, 51, 0); + +// These statements are equivalent to the statements above. +// Programmers may use the format they prefer. +//color inside = #CC6600; +//color middle = #CC9900; +//color outside = #993300; + +fill(outside); +rect(0, 0, 200, 200); +fill(middle); +rect(40, 60, 120, 120); +fill(inside); +rect(60, 90, 80, 80); diff --git a/java/examples/Basics/Color/Creating/applet/loading.gif b/java/examples/Basics/Color/Creating/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/Hue/Hue.pde b/java/examples/Basics/Color/Hue/Hue.pde new file mode 100644 index 000000000..b22ffb535 --- /dev/null +++ b/java/examples/Basics/Color/Hue/Hue.pde @@ -0,0 +1,31 @@ +/** + * Hue. + * + * Hue is the color reflected from or transmitted through an object + * and is typically referred to as the name of the color (red, blue, yellow, etc.) + * Move the cursor vertically over each bar to alter its hue. + */ + +int barWidth = 5; +int[] hue; + +void setup() +{ + size(200, 200); + colorMode(HSB, 360, height, height); + hue = new int[width/barWidth]; + noStroke(); +} + +void draw() +{ + int j = 0; + for (int i=0; i<=(width-barWidth); i+=barWidth) { + if ((mouseX > i) && (mouseX < i+barWidth)) { + hue[j] = mouseY; + } + fill(hue[j], height/1.2, height/1.2); + rect(i, 0, barWidth, height); + j++; + } +} diff --git a/java/examples/Basics/Color/Hue/applet/Hue.java b/java/examples/Basics/Color/Hue/applet/Hue.java new file mode 100644 index 000000000..e75799f52 --- /dev/null +++ b/java/examples/Basics/Color/Hue/applet/Hue.java @@ -0,0 +1,51 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Hue extends PApplet { + +/** + * Hue. + * + * Hue is the color reflected from or transmitted through an object + * and is typically referred to as the name of the color (red, blue, yellow, etc.) + * Move the cursor vertically over each bar to alter its hue. + */ + +int barWidth = 5; +int[] hue; + +public void setup() +{ + size(200, 200); + colorMode(HSB, 360, height, height); + hue = new int[width/barWidth]; + noStroke(); +} + +public void draw() +{ + int j = 0; + for (int i=0; i<=(width-barWidth); i+=barWidth) { + if ((mouseX > i) && (mouseX < i+barWidth)) { + hue[j] = mouseY; + } + fill(hue[j], height/1.2f, height/1.2f); + rect(i, 0, barWidth, height); + j++; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Hue" }); + } +} diff --git a/java/examples/Basics/Color/Hue/applet/Hue.pde b/java/examples/Basics/Color/Hue/applet/Hue.pde new file mode 100644 index 000000000..b22ffb535 --- /dev/null +++ b/java/examples/Basics/Color/Hue/applet/Hue.pde @@ -0,0 +1,31 @@ +/** + * Hue. + * + * Hue is the color reflected from or transmitted through an object + * and is typically referred to as the name of the color (red, blue, yellow, etc.) + * Move the cursor vertically over each bar to alter its hue. + */ + +int barWidth = 5; +int[] hue; + +void setup() +{ + size(200, 200); + colorMode(HSB, 360, height, height); + hue = new int[width/barWidth]; + noStroke(); +} + +void draw() +{ + int j = 0; + for (int i=0; i<=(width-barWidth); i+=barWidth) { + if ((mouseX > i) && (mouseX < i+barWidth)) { + hue[j] = mouseY; + } + fill(hue[j], height/1.2, height/1.2); + rect(i, 0, barWidth, height); + j++; + } +} diff --git a/java/examples/Basics/Color/Hue/applet/loading.gif b/java/examples/Basics/Color/Hue/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/LinearGradient/LinearGradient.pde b/java/examples/Basics/Color/LinearGradient/LinearGradient.pde new file mode 100644 index 000000000..f41fc2b66 --- /dev/null +++ b/java/examples/Basics/Color/LinearGradient/LinearGradient.pde @@ -0,0 +1,73 @@ +/** + * Simple Linear Gradient + * by Ira Greenberg. + * + * Using the convenient red(), green() + * and blue() component functions, + * generate some linear gradients. + */ + +// constants +int Y_AXIS = 1; +int X_AXIS = 2; + +void setup(){ + size(200, 200); + + // create some gradients + // background + color b1 = color(190, 190, 190); + color b2 = color(20, 20, 20); + setGradient(0, 0, width, height, b1, b2, Y_AXIS); + //center squares + color c1 = color(255, 120, 0); + color c2 = color(10, 45, 255); + color c3 = color(10, 255, 15); + color c4 = color(125, 2, 140); + color c5 = color(255, 255, 0); + color c6 = color(25, 255, 200); + setGradient(25, 25, 75, 75, c1, c2, Y_AXIS); + setGradient(100, 25, 75, 75, c3, c4, X_AXIS); + setGradient(25, 100, 75, 75, c2, c5, X_AXIS); + setGradient(100, 100, 75, 75, c4, c6, Y_AXIS); +} + +void setGradient(int x, int y, float w, float h, color c1, color c2, int axis ){ + // calculate differences between color components + float deltaR = red(c2)-red(c1); + float deltaG = green(c2)-green(c1); + float deltaB = blue(c2)-blue(c1); + + // choose axis + if(axis == Y_AXIS){ + /*nested for loops set pixels + in a basic table structure */ + // column + for (int i=x; i<=(x+w); i++){ + // row + for (int j = y; j<=(y+h); j++){ + color c = color( + (red(c1)+(j-y)*(deltaR/h)), + (green(c1)+(j-y)*(deltaG/h)), + (blue(c1)+(j-y)*(deltaB/h)) + ); + set(i, j, c); + } + } + } + else if(axis == X_AXIS){ + // column + for (int i=y; i<=(y+h); i++){ + // row + for (int j = x; j<=(x+w); j++){ + color c = color( + (red(c1)+(j-x)*(deltaR/h)), + (green(c1)+(j-x)*(deltaG/h)), + (blue(c1)+(j-x)*(deltaB/h)) + ); + set(j, i, c); + } + } + } +} + diff --git a/java/examples/Basics/Color/LinearGradient/applet/LinearGradient.java b/java/examples/Basics/Color/LinearGradient/applet/LinearGradient.java new file mode 100644 index 000000000..6fbbc5c2e --- /dev/null +++ b/java/examples/Basics/Color/LinearGradient/applet/LinearGradient.java @@ -0,0 +1,93 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class LinearGradient extends PApplet { + +/** + * Simple Linear Gradient + * by Ira Greenberg. + * + * Using the convenient red(), green() + * and blue() component functions, + * generate some linear gradients. + */ + +// constants +int Y_AXIS = 1; +int X_AXIS = 2; + +public void setup(){ + size(200, 200); + + // create some gradients + // background + int b1 = color(190, 190, 190); + int b2 = color(20, 20, 20); + setGradient(0, 0, width, height, b1, b2, Y_AXIS); + //center squares + int c1 = color(255, 120, 0); + int c2 = color(10, 45, 255); + int c3 = color(10, 255, 15); + int c4 = color(125, 2, 140); + int c5 = color(255, 255, 0); + int c6 = color(25, 255, 200); + setGradient(25, 25, 75, 75, c1, c2, Y_AXIS); + setGradient(100, 25, 75, 75, c3, c4, X_AXIS); + setGradient(25, 100, 75, 75, c2, c5, X_AXIS); + setGradient(100, 100, 75, 75, c4, c6, Y_AXIS); +} + +public void setGradient(int x, int y, float w, float h, int c1, int c2, int axis ){ + // calculate differences between color components + float deltaR = red(c2)-red(c1); + float deltaG = green(c2)-green(c1); + float deltaB = blue(c2)-blue(c1); + + // choose axis + if(axis == Y_AXIS){ + /*nested for loops set pixels + in a basic table structure */ + // column + for (int i=x; i<=(x+w); i++){ + // row + for (int j = y; j<=(y+h); j++){ + int c = color( + (red(c1)+(j-y)*(deltaR/h)), + (green(c1)+(j-y)*(deltaG/h)), + (blue(c1)+(j-y)*(deltaB/h)) + ); + set(i, j, c); + } + } + } + else if(axis == X_AXIS){ + // column + for (int i=y; i<=(y+h); i++){ + // row + for (int j = x; j<=(x+w); j++){ + int c = color( + (red(c1)+(j-x)*(deltaR/h)), + (green(c1)+(j-x)*(deltaG/h)), + (blue(c1)+(j-x)*(deltaB/h)) + ); + set(j, i, c); + } + } + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "LinearGradient" }); + } +} diff --git a/java/examples/Basics/Color/LinearGradient/applet/LinearGradient.pde b/java/examples/Basics/Color/LinearGradient/applet/LinearGradient.pde new file mode 100644 index 000000000..f41fc2b66 --- /dev/null +++ b/java/examples/Basics/Color/LinearGradient/applet/LinearGradient.pde @@ -0,0 +1,73 @@ +/** + * Simple Linear Gradient + * by Ira Greenberg. + * + * Using the convenient red(), green() + * and blue() component functions, + * generate some linear gradients. + */ + +// constants +int Y_AXIS = 1; +int X_AXIS = 2; + +void setup(){ + size(200, 200); + + // create some gradients + // background + color b1 = color(190, 190, 190); + color b2 = color(20, 20, 20); + setGradient(0, 0, width, height, b1, b2, Y_AXIS); + //center squares + color c1 = color(255, 120, 0); + color c2 = color(10, 45, 255); + color c3 = color(10, 255, 15); + color c4 = color(125, 2, 140); + color c5 = color(255, 255, 0); + color c6 = color(25, 255, 200); + setGradient(25, 25, 75, 75, c1, c2, Y_AXIS); + setGradient(100, 25, 75, 75, c3, c4, X_AXIS); + setGradient(25, 100, 75, 75, c2, c5, X_AXIS); + setGradient(100, 100, 75, 75, c4, c6, Y_AXIS); +} + +void setGradient(int x, int y, float w, float h, color c1, color c2, int axis ){ + // calculate differences between color components + float deltaR = red(c2)-red(c1); + float deltaG = green(c2)-green(c1); + float deltaB = blue(c2)-blue(c1); + + // choose axis + if(axis == Y_AXIS){ + /*nested for loops set pixels + in a basic table structure */ + // column + for (int i=x; i<=(x+w); i++){ + // row + for (int j = y; j<=(y+h); j++){ + color c = color( + (red(c1)+(j-y)*(deltaR/h)), + (green(c1)+(j-y)*(deltaG/h)), + (blue(c1)+(j-y)*(deltaB/h)) + ); + set(i, j, c); + } + } + } + else if(axis == X_AXIS){ + // column + for (int i=y; i<=(y+h); i++){ + // row + for (int j = x; j<=(x+w); j++){ + color c = color( + (red(c1)+(j-x)*(deltaR/h)), + (green(c1)+(j-x)*(deltaG/h)), + (blue(c1)+(j-x)*(deltaB/h)) + ); + set(j, i, c); + } + } + } +} + diff --git a/java/examples/Basics/Color/LinearGradient/applet/loading.gif b/java/examples/Basics/Color/LinearGradient/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/RadialGradient/RadialGradient.pde b/java/examples/Basics/Color/RadialGradient/RadialGradient.pde new file mode 100644 index 000000000..f5ba2b3fe --- /dev/null +++ b/java/examples/Basics/Color/RadialGradient/RadialGradient.pde @@ -0,0 +1,58 @@ +/** + * Simple Radial Gradient + * by Ira Greenberg. + * + * Using the convenient red(), green() + * and blue() component functions, + * generate an array of radial gradients. + */ + +void setup(){ + size(200, 200); + background(0); + smooth(); + + // create a simple table of gradients + int columns = 4; + int radius = (width/columns)/2; + // create some gradients + for (int i=radius; i< width; i+=radius*2){ + for (int j =radius; j< height; j+=radius*2){ + createGradient(i, j, radius, + color(int(random(255)), int(random(255)), int(random(255))), + color(int(random(255)), int(random(255)), int(random(255)))); + } + } +} + +void createGradient (float x, float y, float radius, color c1, color c2){ + float px = 0, py = 0, angle = 0; + + // calculate differences between color components + float deltaR = red(c2)-red(c1); + float deltaG = green(c2)-green(c1); + float deltaB = blue(c2)-blue(c1); + // hack to ensure there are no holes in gradient + // needs to be increased, as radius increases + float gapFiller = 8.0; + + for (int i=0; i< radius; i++){ + for (float j=0; j<360; j+=1.0/gapFiller){ + px = x+cos(radians(angle))*i; + py = y+sin(radians(angle))*i; + angle+=1.0/gapFiller; + color c = color( + (red(c1)+(i)*(deltaR/radius)), + (green(c1)+(i)*(deltaG/radius)), + (blue(c1)+(i)*(deltaB/radius)) + ); + set(int(px), int(py), c); + } + } + // adds smooth edge + // hack anti-aliasing + noFill(); + strokeWeight(3); + ellipse(x, y, radius*2, radius*2); +} + diff --git a/java/examples/Basics/Color/RadialGradient/applet/RadialGradient.java b/java/examples/Basics/Color/RadialGradient/applet/RadialGradient.java new file mode 100644 index 000000000..1ba6eaa19 --- /dev/null +++ b/java/examples/Basics/Color/RadialGradient/applet/RadialGradient.java @@ -0,0 +1,78 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class RadialGradient extends PApplet { + +/** + * Simple Radial Gradient + * by Ira Greenberg. + * + * Using the convenient red(), green() + * and blue() component functions, + * generate an array of radial gradients. + */ + +public void setup(){ + size(200, 200); + background(0); + smooth(); + + // create a simple table of gradients + int columns = 4; + int radius = (width/columns)/2; + // create some gradients + for (int i=radius; i< width; i+=radius*2){ + for (int j =radius; j< height; j+=radius*2){ + createGradient(i, j, radius, + color(PApplet.parseInt(random(255)), PApplet.parseInt(random(255)), PApplet.parseInt(random(255))), + color(PApplet.parseInt(random(255)), PApplet.parseInt(random(255)), PApplet.parseInt(random(255)))); + } + } +} + +public void createGradient (float x, float y, float radius, int c1, int c2){ + float px = 0, py = 0, angle = 0; + + // calculate differences between color components + float deltaR = red(c2)-red(c1); + float deltaG = green(c2)-green(c1); + float deltaB = blue(c2)-blue(c1); + // hack to ensure there are no holes in gradient + // needs to be increased, as radius increases + float gapFiller = 8.0f; + + for (int i=0; i< radius; i++){ + for (float j=0; j<360; j+=1.0f/gapFiller){ + px = x+cos(radians(angle))*i; + py = y+sin(radians(angle))*i; + angle+=1.0f/gapFiller; + int c = color( + (red(c1)+(i)*(deltaR/radius)), + (green(c1)+(i)*(deltaG/radius)), + (blue(c1)+(i)*(deltaB/radius)) + ); + set(PApplet.parseInt(px), PApplet.parseInt(py), c); + } + } + // adds smooth edge + // hack anti-aliasing + noFill(); + strokeWeight(3); + ellipse(x, y, radius*2, radius*2); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "RadialGradient" }); + } +} diff --git a/java/examples/Basics/Color/RadialGradient/applet/RadialGradient.pde b/java/examples/Basics/Color/RadialGradient/applet/RadialGradient.pde new file mode 100644 index 000000000..f5ba2b3fe --- /dev/null +++ b/java/examples/Basics/Color/RadialGradient/applet/RadialGradient.pde @@ -0,0 +1,58 @@ +/** + * Simple Radial Gradient + * by Ira Greenberg. + * + * Using the convenient red(), green() + * and blue() component functions, + * generate an array of radial gradients. + */ + +void setup(){ + size(200, 200); + background(0); + smooth(); + + // create a simple table of gradients + int columns = 4; + int radius = (width/columns)/2; + // create some gradients + for (int i=radius; i< width; i+=radius*2){ + for (int j =radius; j< height; j+=radius*2){ + createGradient(i, j, radius, + color(int(random(255)), int(random(255)), int(random(255))), + color(int(random(255)), int(random(255)), int(random(255)))); + } + } +} + +void createGradient (float x, float y, float radius, color c1, color c2){ + float px = 0, py = 0, angle = 0; + + // calculate differences between color components + float deltaR = red(c2)-red(c1); + float deltaG = green(c2)-green(c1); + float deltaB = blue(c2)-blue(c1); + // hack to ensure there are no holes in gradient + // needs to be increased, as radius increases + float gapFiller = 8.0; + + for (int i=0; i< radius; i++){ + for (float j=0; j<360; j+=1.0/gapFiller){ + px = x+cos(radians(angle))*i; + py = y+sin(radians(angle))*i; + angle+=1.0/gapFiller; + color c = color( + (red(c1)+(i)*(deltaR/radius)), + (green(c1)+(i)*(deltaG/radius)), + (blue(c1)+(i)*(deltaB/radius)) + ); + set(int(px), int(py), c); + } + } + // adds smooth edge + // hack anti-aliasing + noFill(); + strokeWeight(3); + ellipse(x, y, radius*2, radius*2); +} + diff --git a/java/examples/Basics/Color/RadialGradient/applet/loading.gif b/java/examples/Basics/Color/RadialGradient/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/RadialGradient2/RadialGradient2.pde b/java/examples/Basics/Color/RadialGradient2/RadialGradient2.pde new file mode 100644 index 000000000..ad571fcc0 --- /dev/null +++ b/java/examples/Basics/Color/RadialGradient2/RadialGradient2.pde @@ -0,0 +1,43 @@ +/** + * Inspired by Ira Greenberg's RadialGradient sketch, + * but uses a different method for the gradients. + */ + +int dim = 40; + +void setup() { + size(200, 200); + background(0); + smooth(); + noStroke(); + ellipseMode(RADIUS); + + // create a simple table of gradients + int rows = height / dim; + int cols = width / dim; + + for (int row = 0; row < rows; row++) { + for (int col = 0; col < cols; col++) { + drawGradient(col*dim + dim/2, row*dim + dim/2); + } + } +} + +void drawGradient(float x, float y) { + int radius = dim/2 - 2; + float r1 = random(255); + float g1 = random(255); + float b1 = random(255); + float dr = (random(255) - r1) / radius; + float dg = (random(255) - g1) / radius; + float db = (random(255) - b1) / radius; + + for (int r = radius; r > 0; --r) { + fill(r1, g1, b1); + ellipse(x, y, r, r); + r1 += dr; + g1 += dg; + b1 += db; + } +} + diff --git a/java/examples/Basics/Color/Reading/Reading.pde b/java/examples/Basics/Color/Reading/Reading.pde new file mode 100644 index 000000000..d142aff88 --- /dev/null +++ b/java/examples/Basics/Color/Reading/Reading.pde @@ -0,0 +1,46 @@ +/** + * Reading. + * + * An image is recreated from its individual component colors. + * The many colors of the image are created through modulating the + * red, green, and blue values. This is an exageration of an LCD display. + */ + +size(200, 200); +noStroke(); +background(0); + +// Load an image from the data directory +PImage img = loadImage("cait.jpg"); +img.loadPixels(); + +// figure out how big to make each block based on +// the sketch area and the size of the input image +int eachW = width / img.width; +int eachH = height / img.height; +int each = min(eachW, eachH); +// vertical stripes will be a third as wide +int stripeW = each / 3; +// make sure the block size is a multiple of 3 +each = 3 * stripeW; + +int left = (width - (img.width * each)) / 2; +int top = (height - (img.height * each)) / 2; + +for (int y = 0; y < img.height; y++) { + int y1 = top + y*each; + + for (int x = 0; x < img.width; x++) { + int pixel = img.get(x, y); + int x1 = left + x*each; + + fill(red(pixel), 0, 0); + rect(x1 + stripeW*0, y1, stripeW, each); + + fill(0, green(pixel), 0); + rect(x1 + stripeW*1, y1, stripeW, each); + + fill(0, 0, blue(pixel)); + rect(x1 + stripeW*2, y1, stripeW, each); + } +} diff --git a/java/examples/Basics/Color/Reading/applet/Reading.java b/java/examples/Basics/Color/Reading/applet/Reading.java new file mode 100644 index 000000000..5ce02d462 --- /dev/null +++ b/java/examples/Basics/Color/Reading/applet/Reading.java @@ -0,0 +1,63 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Reading extends PApplet { + public void setup() {/** + * Reading. + * + * An image is recreated from its individual component colors. + * The many colors of the image are created through modulating the + * red, green, and blue values. This is an exageration of an LCD display. + */ + +size(200, 200); +noStroke(); +background(0); + +// Load an image from the data directory +PImage c; +c = loadImage("cait.jpg"); + +int xoff = 0; +int yoff = 0; +int p = 2; +int pix = p*3; + + +for(int i = 0; i < c.width*c.height; i += 1) +{ + int here = c.pixels[i]; + + fill(red(here), 0, 0); + rect(xoff, yoff, p, pix); + + fill(0, green(here), 0); + rect(xoff+p, yoff, p, pix); + + fill(0, 0, blue(here)); + rect(xoff+p*2, yoff, p, pix); + + xoff+=pix; + if(xoff >= width-pix) { + xoff = 0; + yoff += pix; + } +} + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Reading" }); + } +} diff --git a/java/examples/Basics/Color/Reading/applet/Reading.pde b/java/examples/Basics/Color/Reading/applet/Reading.pde new file mode 100644 index 000000000..6f1ec2042 --- /dev/null +++ b/java/examples/Basics/Color/Reading/applet/Reading.pde @@ -0,0 +1,42 @@ +/** + * Reading. + * + * An image is recreated from its individual component colors. + * The many colors of the image are created through modulating the + * red, green, and blue values. This is an exageration of an LCD display. + */ + +size(200, 200); +noStroke(); +background(0); + +// Load an image from the data directory +PImage c; +c = loadImage("cait.jpg"); + +int xoff = 0; +int yoff = 0; +int p = 2; +int pix = p*3; + + +for(int i = 0; i < c.width*c.height; i += 1) +{ + int here = c.pixels[i]; + + fill(red(here), 0, 0); + rect(xoff, yoff, p, pix); + + fill(0, green(here), 0); + rect(xoff+p, yoff, p, pix); + + fill(0, 0, blue(here)); + rect(xoff+p*2, yoff, p, pix); + + xoff+=pix; + if(xoff >= width-pix) { + xoff = 0; + yoff += pix; + } +} + diff --git a/java/examples/Basics/Color/Reading/applet/loading.gif b/java/examples/Basics/Color/Reading/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/Relativity/Relativity.pde b/java/examples/Basics/Color/Relativity/Relativity.pde new file mode 100644 index 000000000..9332e9baf --- /dev/null +++ b/java/examples/Basics/Color/Relativity/Relativity.pde @@ -0,0 +1,42 @@ +/** + * Relativity. + * + * Each color is perceived in relation to other colors. + * The top and bottom bars each contain the same component colors, + * but a different display order causes individual colors to appear differently. + */ + +color a, b, c, d, e; + +void setup() { + size(200, 200); + noStroke(); + a = color(165, 167, 20); + b = color(77, 86, 59); + c = color(42, 106, 105); + d = color(165, 89, 20); + e = color(146, 150, 127); + noLoop(); +} + +void draw() { + drawBand(a, b, c, d, e, 0, width/50); + drawBand(c, a, d, b, e, height/2, width/50); +} + +void drawBand(color v, color w, color x, color y, color z, int ypos, int barWidth) { + int num = 5; + color[] colorOrder = { v, w, x, y, z }; + for(int i = 0; i < width; i += barWidth*num) { + for(int j = 0; j < num; j++) { + fill(colorOrder[j]); + rect(i+j*barWidth, ypos, barWidth, height/2); + } + } +} + + + + + + diff --git a/java/examples/Basics/Color/Relativity/applet/Relativity.java b/java/examples/Basics/Color/Relativity/applet/Relativity.java new file mode 100644 index 000000000..3612db49e --- /dev/null +++ b/java/examples/Basics/Color/Relativity/applet/Relativity.java @@ -0,0 +1,62 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Relativity extends PApplet { + +/** + * Relativity. + * + * Each color is perceived in relation to other colors. + * The top and bottom bars each contain the same component colors, + * but a different display order causes individual colors to appear differently. + */ + +int a, b, c, d, e; + +public void setup() { + size(200, 200); + noStroke(); + a = color(165, 167, 20); + b = color(77, 86, 59); + c = color(42, 106, 105); + d = color(165, 89, 20); + e = color(146, 150, 127); + noLoop(); +} + +public void draw() { + drawBand(a, b, c, d, e, 0, 4); + drawBand(c, a, d, b, e, height/2, 4); +} + +public void drawBand(int v, int w, int x, int y, int z, int ypos, int barWidth) { + int num = 5; + int[] colorOrder = { v, w, x, y, z }; + for(int i = 0; i < width; i += barWidth*num) { + for(int j = 0; j < num; j++) { + fill(colorOrder[j]); + rect(i+j*barWidth, ypos, barWidth, height/2); + } + } +} + + + + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "Relativity" }); + } +} diff --git a/java/examples/Basics/Color/Relativity/applet/Relativity.pde b/java/examples/Basics/Color/Relativity/applet/Relativity.pde new file mode 100644 index 000000000..59a3365a6 --- /dev/null +++ b/java/examples/Basics/Color/Relativity/applet/Relativity.pde @@ -0,0 +1,42 @@ +/** + * Relativity. + * + * Each color is perceived in relation to other colors. + * The top and bottom bars each contain the same component colors, + * but a different display order causes individual colors to appear differently. + */ + +color a, b, c, d, e; + +void setup() { + size(200, 200); + noStroke(); + a = color(165, 167, 20); + b = color(77, 86, 59); + c = color(42, 106, 105); + d = color(165, 89, 20); + e = color(146, 150, 127); + noLoop(); +} + +void draw() { + drawBand(a, b, c, d, e, 0, 4); + drawBand(c, a, d, b, e, height/2, 4); +} + +void drawBand(color v, color w, color x, color y, color z, int ypos, int barWidth) { + int num = 5; + color[] colorOrder = { v, w, x, y, z }; + for(int i = 0; i < width; i += barWidth*num) { + for(int j = 0; j < num; j++) { + fill(colorOrder[j]); + rect(i+j*barWidth, ypos, barWidth, height/2); + } + } +} + + + + + + diff --git a/java/examples/Basics/Color/Relativity/applet/loading.gif b/java/examples/Basics/Color/Relativity/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/Saturation/Saturation.pde b/java/examples/Basics/Color/Saturation/Saturation.pde new file mode 100644 index 000000000..84137147e --- /dev/null +++ b/java/examples/Basics/Color/Saturation/Saturation.pde @@ -0,0 +1,29 @@ +/** + * Saturation. + * + * Saturation is the strength or purity of the color and represents the + * amount of gray in proportion to the hue. A "saturated" color is pure + * and an "unsaturated" color has a large percentage of gray. + * Move the cursor vertically over each bar to alter its saturation. + */ + +int barWidth = 5; +int lastBar = -1; + + +void setup() { + size(200, 200); + colorMode(HSB, width, height, 100); + noStroke(); +} + + +void draw() { + int whichBar = mouseX / barWidth; + if (whichBar != lastBar) { + int barX = whichBar * barWidth; + fill(barX, mouseY, 66); + rect(barX, 0, barWidth, height); + lastBar = whichBar; + } +} diff --git a/java/examples/Basics/Color/Saturation/applet/Saturation.java b/java/examples/Basics/Color/Saturation/applet/Saturation.java new file mode 100644 index 000000000..62ac4f2f0 --- /dev/null +++ b/java/examples/Basics/Color/Saturation/applet/Saturation.java @@ -0,0 +1,52 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Saturation extends PApplet { + +/** + * Saturation. + * + * Saturation is the strength or purity of the color and represents the + * amount of gray in proportion to the hue. A "saturated" color is pure + * and an "unsaturated" color has a large percentage of gray. + * Move the cursor vertically over each bar to alter its saturation. + */ + +int barWidth = 5; +int[] saturation; + +public void setup() +{ + size(200, 200); + colorMode(HSB, 360, height, height); + saturation = new int[width/barWidth]; +} + +public void draw() +{ + int j = 0; + for (int i=0; i<=(width-barWidth); i+=barWidth) { + noStroke(); + if ((mouseX > i) && (mouseX < i+barWidth)) { + saturation[j] = mouseY; + } + fill(i, saturation[j], height/1.5f); + rect(i, 0, barWidth, height); + j++; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Saturation" }); + } +} diff --git a/java/examples/Basics/Color/Saturation/applet/Saturation.pde b/java/examples/Basics/Color/Saturation/applet/Saturation.pde new file mode 100644 index 000000000..0902ead92 --- /dev/null +++ b/java/examples/Basics/Color/Saturation/applet/Saturation.pde @@ -0,0 +1,32 @@ +/** + * Saturation. + * + * Saturation is the strength or purity of the color and represents the + * amount of gray in proportion to the hue. A "saturated" color is pure + * and an "unsaturated" color has a large percentage of gray. + * Move the cursor vertically over each bar to alter its saturation. + */ + +int barWidth = 5; +int[] saturation; + +void setup() +{ + size(200, 200); + colorMode(HSB, 360, height, height); + saturation = new int[width/barWidth]; +} + +void draw() +{ + int j = 0; + for (int i=0; i<=(width-barWidth); i+=barWidth) { + noStroke(); + if ((mouseX > i) && (mouseX < i+barWidth)) { + saturation[j] = mouseY; + } + fill(i, saturation[j], height/1.5); + rect(i, 0, barWidth, height); + j++; + } +} diff --git a/java/examples/Basics/Color/Saturation/applet/loading.gif b/java/examples/Basics/Color/Saturation/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Color/WaveGradient/WaveGradient.pde b/java/examples/Basics/Color/WaveGradient/WaveGradient.pde new file mode 100644 index 000000000..eac305093 --- /dev/null +++ b/java/examples/Basics/Color/WaveGradient/WaveGradient.pde @@ -0,0 +1,39 @@ +/** + * Wave Gradient + * by Ira Greenberg. + * + * Generate a gradient along a sin() wave. + */ + +float angle = 0; +float px = 0, py = 0; +float amplitude = 30; +float frequency = 0; +float fillGap = 2.5; +color c; + +void setup() { + size(200, 200); + background(200,200,200); + noLoop(); +} + +void draw() { + for (int i =- 75; i < height+75; i++){ + // Reset angle to 0, so waves stack properly + angle = 0; + // Increasing frequency causes more gaps + frequency+=.006; + for (float j=0; j}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Control/Conditionals1/Conditionals1.pde b/java/examples/Basics/Control/Conditionals1/Conditionals1.pde new file mode 100644 index 000000000..8ea0ee3f5 --- /dev/null +++ b/java/examples/Basics/Control/Conditionals1/Conditionals1.pde @@ -0,0 +1,26 @@ +/** + * Conditionals 1. + * + * Conditions are like questions. + * They allow a program to decide to take one action if + * the answer to a question is true or to do another action + * if the answer to the question is false. + * The questions asked within a program are always logical + * or relational statements. For example, if the variable 'i' is + * equal to zero then draw a line. + */ + +size(200, 200); +background(0); + +for(int i=10; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Control/Conditionals2/Conditionals2.pde b/java/examples/Basics/Control/Conditionals2/Conditionals2.pde new file mode 100644 index 000000000..d9c7d707f --- /dev/null +++ b/java/examples/Basics/Control/Conditionals2/Conditionals2.pde @@ -0,0 +1,26 @@ +/** + * Conditionals 2. + * + * We extend the language of conditionals by adding the + * keyword "else". This allows conditionals to ask + * two or more sequential questions, each with a different + * action. + */ + +size(200, 200); +background(0); + +for(int i=2; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Control/EmbeddedIteration/EmbeddedIteration.pde b/java/examples/Basics/Control/EmbeddedIteration/EmbeddedIteration.pde new file mode 100644 index 000000000..3473aca2e --- /dev/null +++ b/java/examples/Basics/Control/EmbeddedIteration/EmbeddedIteration.pde @@ -0,0 +1,27 @@ +/** + * Embedding Iteration. + * + * Embedding "for" structures allows repetition in two dimensions. + */ + +float box_size = 11; +float box_space = 12; +int margin = 7; + +size(200, 200); +background(0); +noStroke(); + +// Draw gray boxes + +for (int i = margin; i < height-margin; i += box_space){ + if(box_size > 0){ + for(int j = margin; j < width-margin; j+= box_space){ + fill(255-box_size*10); + rect(j, i, box_size, box_size); + } + box_size = box_size - 0.6; + } +} + + diff --git a/java/examples/Basics/Control/EmbeddedIteration/applet/EmbeddedIteration.java b/java/examples/Basics/Control/EmbeddedIteration/applet/EmbeddedIteration.java new file mode 100644 index 000000000..8c0056bbf --- /dev/null +++ b/java/examples/Basics/Control/EmbeddedIteration/applet/EmbeddedIteration.java @@ -0,0 +1,48 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class EmbeddedIteration extends PApplet { + public void setup() {/** + * Embedding Iteration. + * + * Embedding "for" structures allows repetition in two dimensions. + */ + +float box_size = 11; +float box_space = 12; +int margin = 7; + +size(200, 200); +background(0); +noStroke(); + +// Draw gray boxes + +for (int i = margin; i < height-margin; i += box_space){ + if(box_size > 0){ + for(int j = margin; j < width-margin; j+= box_space){ + fill(255-box_size*10); + rect(j, i, box_size, box_size); + } + box_size = box_size - 0.6f; + } +} + + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "EmbeddedIteration" }); + } +} diff --git a/java/examples/Basics/Control/EmbeddedIteration/applet/EmbeddedIteration.pde b/java/examples/Basics/Control/EmbeddedIteration/applet/EmbeddedIteration.pde new file mode 100644 index 000000000..3473aca2e --- /dev/null +++ b/java/examples/Basics/Control/EmbeddedIteration/applet/EmbeddedIteration.pde @@ -0,0 +1,27 @@ +/** + * Embedding Iteration. + * + * Embedding "for" structures allows repetition in two dimensions. + */ + +float box_size = 11; +float box_space = 12; +int margin = 7; + +size(200, 200); +background(0); +noStroke(); + +// Draw gray boxes + +for (int i = margin; i < height-margin; i += box_space){ + if(box_size > 0){ + for(int j = margin; j < width-margin; j+= box_space){ + fill(255-box_size*10); + rect(j, i, box_size, box_size); + } + box_size = box_size - 0.6; + } +} + + diff --git a/java/examples/Basics/Control/EmbeddedIteration/applet/loading.gif b/java/examples/Basics/Control/EmbeddedIteration/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Control/Iteration/Iteration.pde b/java/examples/Basics/Control/Iteration/Iteration.pde new file mode 100644 index 000000000..722806122 --- /dev/null +++ b/java/examples/Basics/Control/Iteration/Iteration.pde @@ -0,0 +1,45 @@ +/** + * Iteration. + * + * Iteration with a "for" structure constructs repetitive forms. + */ + +int k; +int xpos1 = 100; +int xpos2 = 118; +int count = 0; +int timey = 0; +int num = 12; + +size(200, 200); +background(102); +noStroke(); + +// Draw gray bars +fill(255); +k=60; +for(int i=0; i < num/3; i++) { + rect(25, k, 155, 5); + k+=10; +} + +// Black bars +fill(51); +k = 40; +for(int i=0; i < num; i++) { + rect(105, k, 30, 5); + k += 10; +} +k = 15; +for(int i = 0; i < num; i++) { + rect(125, k, 30, 5); + k +=10; +} + +// Thin lines +k = 42; +fill(0); +for(int i=0; i < num-1; i++) { + rect(36, k, 20, 1); + k+=10; +} diff --git a/java/examples/Basics/Control/Iteration/applet/Iteration.java b/java/examples/Basics/Control/Iteration/applet/Iteration.java new file mode 100644 index 000000000..56274253b --- /dev/null +++ b/java/examples/Basics/Control/Iteration/applet/Iteration.java @@ -0,0 +1,66 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Iteration extends PApplet { + public void setup() {/** + * Iteration. + * + * Iteration with a "for" structure constructs repetitive forms. + */ + +int k; +int xpos1 = 100; +int xpos2 = 118; +int count = 0; +int timey = 0; +int num = 12; + +size(200, 200); +background(102); +noStroke(); + +// Draw gray bars +fill(255); +k=60; +for(int i=0; i < num/3; i++) { + rect(25, k, 155, 5); + k+=10; +} + +// Black bars +fill(51); +k = 40; +for(int i=0; i < num; i++) { + rect(105, k, 30, 5); + k += 10; +} +k = 15; +for(int i = 0; i < num; i++) { + rect(125, k, 30, 5); + k +=10; +} + +// Thin lines +k = 42; +fill(0); +for(int i=0; i < num-1; i++) { + rect(36, k, 20, 1); + k+=10; +} + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Iteration" }); + } +} diff --git a/java/examples/Basics/Control/Iteration/applet/Iteration.pde b/java/examples/Basics/Control/Iteration/applet/Iteration.pde new file mode 100644 index 000000000..722806122 --- /dev/null +++ b/java/examples/Basics/Control/Iteration/applet/Iteration.pde @@ -0,0 +1,45 @@ +/** + * Iteration. + * + * Iteration with a "for" structure constructs repetitive forms. + */ + +int k; +int xpos1 = 100; +int xpos2 = 118; +int count = 0; +int timey = 0; +int num = 12; + +size(200, 200); +background(102); +noStroke(); + +// Draw gray bars +fill(255); +k=60; +for(int i=0; i < num/3; i++) { + rect(25, k, 155, 5); + k+=10; +} + +// Black bars +fill(51); +k = 40; +for(int i=0; i < num; i++) { + rect(105, k, 30, 5); + k += 10; +} +k = 15; +for(int i = 0; i < num; i++) { + rect(125, k, 30, 5); + k +=10; +} + +// Thin lines +k = 42; +fill(0); +for(int i=0; i < num-1; i++) { + rect(36, k, 20, 1); + k+=10; +} diff --git a/java/examples/Basics/Control/Iteration/applet/loading.gif b/java/examples/Basics/Control/Iteration/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Control/LogicalOperators/LogicalOperators.pde b/java/examples/Basics/Control/LogicalOperators/LogicalOperators.pde new file mode 100644 index 000000000..d9329c004 --- /dev/null +++ b/java/examples/Basics/Control/LogicalOperators/LogicalOperators.pde @@ -0,0 +1,45 @@ +/** + * Logical Operators. + * + * The logical operators for AND (&&) and OR (||) are used to + * combine simple relational statements into more complex expressions. + * The NOT (!) operator is used to negate a boolean statement. + */ + +size(200, 200); +background(126); + +boolean op = false; + +for(int i=5; i<=195; i+=5) { + // Logical AND + stroke(0); + if((i > 35) && (i < 100)) { + line(5, i, 95, i); + op = false; + } + + // Logical OR + stroke(76); + if((i <= 35) || (i >= 100)) { + line(105, i, 195, i); + op = true; + } + + // Testing if a boolean value is "true" + // The expression "if(op)" is equivalent to "if(op == true)" + if(op) { + stroke(0); + point(width/2, i); + } + + // Testing if a boolean value is "false" + // The expression "if(!op)" is equivalent to "if(op == false)" + if(!op) { + stroke(255); + point(width/4, i); + } +} + + + diff --git a/java/examples/Basics/Control/LogicalOperators/applet/LogicalOperators.java b/java/examples/Basics/Control/LogicalOperators/applet/LogicalOperators.java new file mode 100644 index 000000000..bf9354786 --- /dev/null +++ b/java/examples/Basics/Control/LogicalOperators/applet/LogicalOperators.java @@ -0,0 +1,66 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class LogicalOperators extends PApplet { + public void setup() {/** + * Logical Operators. + * + * The logical operators for AND (&&) and OR (||) are used to + * combine simple relational statements into more complex expressions. + * The NOT (!) operator is used to negate a boolean statement. + */ + +size(200, 200); +background(126); + +boolean op = false; + +for(int i=5; i<=195; i+=5) { + // Logical AND + stroke(0); + if((i > 35) && (i < 100)) { + line(5, i, 95, i); + op = false; + } + + // Logical OR + stroke(76); + if((i <= 35) || (i >= 100)) { + line(105, i, 195, i); + op = true; + } + + // Testing if a boolean value is "true" + // The expression "if(op)" is equivalent to "if(op == true)" + if(op) { + stroke(0); + point(width/2, i); + } + + // Testing if a boolean value is "false" + // The expression "if(!op)" is equivalent to "if(op == false)" + if(!op) { + stroke(255); + point(width/4, i); + } +} + + + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "LogicalOperators" }); + } +} diff --git a/java/examples/Basics/Control/LogicalOperators/applet/LogicalOperators.pde b/java/examples/Basics/Control/LogicalOperators/applet/LogicalOperators.pde new file mode 100644 index 000000000..d9329c004 --- /dev/null +++ b/java/examples/Basics/Control/LogicalOperators/applet/LogicalOperators.pde @@ -0,0 +1,45 @@ +/** + * Logical Operators. + * + * The logical operators for AND (&&) and OR (||) are used to + * combine simple relational statements into more complex expressions. + * The NOT (!) operator is used to negate a boolean statement. + */ + +size(200, 200); +background(126); + +boolean op = false; + +for(int i=5; i<=195; i+=5) { + // Logical AND + stroke(0); + if((i > 35) && (i < 100)) { + line(5, i, 95, i); + op = false; + } + + // Logical OR + stroke(76); + if((i <= 35) || (i >= 100)) { + line(105, i, 195, i); + op = true; + } + + // Testing if a boolean value is "true" + // The expression "if(op)" is equivalent to "if(op == true)" + if(op) { + stroke(0); + point(width/2, i); + } + + // Testing if a boolean value is "false" + // The expression "if(!op)" is equivalent to "if(op == false)" + if(!op) { + stroke(255); + point(width/4, i); + } +} + + + diff --git a/java/examples/Basics/Control/LogicalOperators/applet/loading.gif b/java/examples/Basics/Control/LogicalOperators/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Data/CharactersStrings/CharactersStrings.pde b/java/examples/Basics/Data/CharactersStrings/CharactersStrings.pde new file mode 100644 index 000000000..c5b528562 --- /dev/null +++ b/java/examples/Basics/Data/CharactersStrings/CharactersStrings.pde @@ -0,0 +1,82 @@ +/** + * Characters Strings. + * + * Click on the image to give it focus and then type letters to + * shift the location of the image. + * Characters are typographic symbols such as A, d, and %. + * The character datatype, abbreviated as char, stores letters and + * symbols in the Unicode format, a coding system developed to support + * a variety of world languages. Characters are distinguished from other + * symbols by putting them between single quotes ('P'). + * A string is a sequence of characters. A string is noted by surrounding + * a group of letters with double quotes ("Processing"). + * Chars and strings are most often used with the keyboard methods, + * to display text to the screen, and to load images or files. + */ + +PImage frog; +PFont font; +int xoffset; +char letter; + +void setup() +{ + size(200, 200, P2D); + + font = loadFont("Eureka-90.vlw"); + textFont(font); + // Draw text more accurately and efficiently. + textMode(SCREEN); + textAlign(CENTER); + + // The String datatype must be capitalized because it is a complex datatype. + // A String is actually a class with its own methods, some of which are + // featured below. + String name = "rathausFrog"; + String extension = ".jpg"; + int nameLength = name.length(); + println("The length of " + name + " is " + nameLength + "."); + name = name.concat(extension); + nameLength = name.length(); + println("The length of " + name + " is " + nameLength + "."); + + // The parameter for the loadImage() method must be a string + // This line could also be written "frog = loadImage("rathausFrog.jpg"); + frog = loadImage(name); +} + +void draw() +{ + background(51); // Set background to dark gray + + // Same as image(frog, xoffset, 0), but more efficient + // because no transformations or tint() or smooth() are used. + set(xoffset, 0, frog); + + // Draw an X + line(0, 0, width, height); + line(0, height, width, 0); + +// // Get the width of the letter +// float letterWidth = textWidth(letter); +// + // Draw the letter to the center of the screen + text(letter, width/2, height/2); +} + +void keyPressed() +{ + // The variable "key" always contains the value of the most recent key pressed. + // If the key is an upper or lowercase letter between 'A' and 'z' + // the image is shifted to the corresponding value of that key + if (key >= 'A' && key <= 'z') { + // Map the index of the key pressed from the range between 'A' and 'z', + // into a position for the left edge of the image. The maximum xoffset + // is the width of the drawing area minus the size of the image. + xoffset = int(map(key, 'A', 'z', 0, width - frog.width)); + // Update the letter shown to the screen + letter = key; + // Write the letter to the console + println(key); + } +} diff --git a/java/examples/Basics/Data/CharactersStrings/applet/CharactersStrings.java b/java/examples/Basics/Data/CharactersStrings/applet/CharactersStrings.java new file mode 100644 index 000000000..6d3433d02 --- /dev/null +++ b/java/examples/Basics/Data/CharactersStrings/applet/CharactersStrings.java @@ -0,0 +1,101 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class CharactersStrings extends PApplet { + +/** + * Characters Strings. + * + * Click on the image to give it focus and then type letters to + * shift the location of the image. + * Characters are typographic symbols such as A, d, and %. + * The character datatype, abbreviated as char, stores letters and + * symbols in the Unicode format, a coding system developed to support + * a variety of world languages. Characters are distinguished from other + * symbols by putting them between single quotes ('P'). + * A string is a sequence of characters. A string is noted by surrounding + * a group of letters with double quotes ("Processing"). + * Chars and strings are most often used with the keyboard methods, + * to display text to the screen, and to load images or files. + */ + +PImage frog; +PFont fontA; +int lettersize = 90; +int xoffset; +char letter; + +public void setup() +{ + size(200, 200); + fontA = loadFont("Eureka90.vlw"); + textFont(fontA); + textSize(lettersize); + + // The String datatype must be capitalized because it is a complex datatype. + // A String is actually a class with its own methods, some of which are + // featured below. + String name= "rathausFrog"; + String extension = ".jpg"; + int nameLength = name.length(); + println("The length of " + name + " is " + nameLength + "."); + name = name.concat(extension); + nameLength = name.length(); + println("The length of " + name + " is " + nameLength + "."); + + // The parameter for the loadImage() method must be a string + // This line could also be written "frog = loadImage("rathausFrog.jpg"); + frog = loadImage(name); +} + +public void draw() +{ + background(51); // Set background to dark gray + + image(frog, xoffset, 0); + + // Draw an X + line(0, 0, width, height); + line(0, height, width, 0); + + // Get the width of the letter + int letterWidth = PApplet.parseInt(fontA.width(letter) * lettersize); + + // Draw the letter to the center of the screen + text(letter, width/2-letterWidth/2, height/2); +} + +public void keyPressed() +{ + // The variable "key" always contains the value of the most recent key pressed. + // If the key is an upper or lowercase letter between 'A' and 'z' + // the image is shifted to the corresponding value of that key + if(key >= 'A' && key <= 'z') { + letter = PApplet.parseChar(key); + // Scale the values to numbers between 0 and 100 + float scale = 100.0f/57.0f; + int temp = PApplet.parseInt((key - 'A') * scale); + // Set the offset for the image + xoffset = temp; + println(key); + } +} + + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "CharactersStrings" }); + } +} diff --git a/java/examples/Basics/Data/CharactersStrings/applet/CharactersStrings.pde b/java/examples/Basics/Data/CharactersStrings/applet/CharactersStrings.pde new file mode 100644 index 000000000..868037671 --- /dev/null +++ b/java/examples/Basics/Data/CharactersStrings/applet/CharactersStrings.pde @@ -0,0 +1,81 @@ +/** + * Characters Strings. + * + * Click on the image to give it focus and then type letters to + * shift the location of the image. + * Characters are typographic symbols such as A, d, and %. + * The character datatype, abbreviated as char, stores letters and + * symbols in the Unicode format, a coding system developed to support + * a variety of world languages. Characters are distinguished from other + * symbols by putting them between single quotes ('P'). + * A string is a sequence of characters. A string is noted by surrounding + * a group of letters with double quotes ("Processing"). + * Chars and strings are most often used with the keyboard methods, + * to display text to the screen, and to load images or files. + */ + +PImage frog; +PFont fontA; +int lettersize = 90; +int xoffset; +char letter; + +void setup() +{ + size(200, 200); + fontA = loadFont("Eureka90.vlw"); + textFont(fontA); + textSize(lettersize); + + // The String datatype must be capitalized because it is a complex datatype. + // A String is actually a class with its own methods, some of which are + // featured below. + String name= "rathausFrog"; + String extension = ".jpg"; + int nameLength = name.length(); + println("The length of " + name + " is " + nameLength + "."); + name = name.concat(extension); + nameLength = name.length(); + println("The length of " + name + " is " + nameLength + "."); + + // The parameter for the loadImage() method must be a string + // This line could also be written "frog = loadImage("rathausFrog.jpg"); + frog = loadImage(name); +} + +void draw() +{ + background(51); // Set background to dark gray + + image(frog, xoffset, 0); + + // Draw an X + line(0, 0, width, height); + line(0, height, width, 0); + + // Get the width of the letter + int letterWidth = int(fontA.width(letter) * lettersize); + + // Draw the letter to the center of the screen + text(letter, width/2-letterWidth/2, height/2); +} + +void keyPressed() +{ + // The variable "key" always contains the value of the most recent key pressed. + // If the key is an upper or lowercase letter between 'A' and 'z' + // the image is shifted to the corresponding value of that key + if(key >= 'A' && key <= 'z') { + letter = char(key); + // Scale the values to numbers between 0 and 100 + float scale = 100.0/57.0; + int temp = int((key - 'A') * scale); + // Set the offset for the image + xoffset = temp; + println(key); + } +} + + + + diff --git a/java/examples/Basics/Data/CharactersStrings/applet/loading.gif b/java/examples/Basics/Data/CharactersStrings/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Data/CharactersStrings/data/Eureka-90.vlw b/java/examples/Basics/Data/CharactersStrings/data/Eureka-90.vlw new file mode 100644 index 0000000000000000000000000000000000000000..d78d182728e860c712252da68669136d9bbede4a GIT binary patch literal 433385 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 literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Data/DatatypeConversion/DatatypeConversion.pde b/java/examples/Basics/Data/DatatypeConversion/DatatypeConversion.pde new file mode 100644 index 000000000..381afd181 --- /dev/null +++ b/java/examples/Basics/Data/DatatypeConversion/DatatypeConversion.pde @@ -0,0 +1,28 @@ +/** + * Datatype Conversion. + * + * It is sometimes beneficial to convert a value from one type of + * data to another. Each of the conversion functions converts its parameter + * to an equivalent representation within its datatype. + * The conversion functions include int(), float(), char(), byte(), and others. + */ + +size(200, 200); +background(51); +noStroke(); + +char c; // Chars are used for storing typographic symbols +float f; // Floats are decimal numbers +int i; // Ints are values between 2,147,483,647 and -2147483648 +byte b; // Bytes are values between -128 and 128 + +c = 'A'; +f = float(c); // Sets f = 65.0 +i = int(f * 1.4); // Sets i to 91 +b = byte(c / 2); // Sets b to 32 + +rect(f, 0, 40, 66); +fill(204); +rect(i, 67, 40, 66); +fill(255); +rect(b, 134, 40, 66); diff --git a/java/examples/Basics/Data/DatatypeConversion/applet/DatatypeConversion.java b/java/examples/Basics/Data/DatatypeConversion/applet/DatatypeConversion.java new file mode 100644 index 000000000..d9b5077a0 --- /dev/null +++ b/java/examples/Basics/Data/DatatypeConversion/applet/DatatypeConversion.java @@ -0,0 +1,49 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class DatatypeConversion extends PApplet { + public void setup() {/** + * Datatype Conversion. + * + * It is sometimes beneficial to convert a value from one type of + * data to another. Each of the conversion functions converts its parameter + * to an equivalent representation within its datatype. + * The conversion functions include int(), float(), char(), byte(), and others. + */ + +size(200, 200); +background(51); +noStroke(); + +char c; // Chars are used for storing typographic symbols +float f; // Floats are decimal numbers +int i; // Ints are values between 2,147,483,647 and -2147483648 +byte b; // Bytes are values between -128 and 128 + +c = 'A'; +f = PApplet.parseFloat(c); // Sets f = 65.0 +i = PApplet.parseInt(f * 1.4f); // Sets i to 91 +b = PApplet.parseByte(c / 2); // Sets b to 32 + +rect(f, 0, 40, 66); +fill(204); +rect(i, 67, 40, 66); +fill(255); +rect(b, 134, 40, 66); + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "DatatypeConversion" }); + } +} diff --git a/java/examples/Basics/Data/DatatypeConversion/applet/DatatypeConversion.pde b/java/examples/Basics/Data/DatatypeConversion/applet/DatatypeConversion.pde new file mode 100644 index 000000000..381afd181 --- /dev/null +++ b/java/examples/Basics/Data/DatatypeConversion/applet/DatatypeConversion.pde @@ -0,0 +1,28 @@ +/** + * Datatype Conversion. + * + * It is sometimes beneficial to convert a value from one type of + * data to another. Each of the conversion functions converts its parameter + * to an equivalent representation within its datatype. + * The conversion functions include int(), float(), char(), byte(), and others. + */ + +size(200, 200); +background(51); +noStroke(); + +char c; // Chars are used for storing typographic symbols +float f; // Floats are decimal numbers +int i; // Ints are values between 2,147,483,647 and -2147483648 +byte b; // Bytes are values between -128 and 128 + +c = 'A'; +f = float(c); // Sets f = 65.0 +i = int(f * 1.4); // Sets i to 91 +b = byte(c / 2); // Sets b to 32 + +rect(f, 0, 40, 66); +fill(204); +rect(i, 67, 40, 66); +fill(255); +rect(b, 134, 40, 66); diff --git a/java/examples/Basics/Data/DatatypeConversion/applet/loading.gif b/java/examples/Basics/Data/DatatypeConversion/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Data/IntegersFloats/IntegersFloats.pde b/java/examples/Basics/Data/IntegersFloats/IntegersFloats.pde new file mode 100644 index 000000000..87bf67f19 --- /dev/null +++ b/java/examples/Basics/Data/IntegersFloats/IntegersFloats.pde @@ -0,0 +1,36 @@ +/** + * Integers Floats. + * + * Integers and floats are two different kinds of numerical data. + * An integer (more commonly called an int) is a number without + * a decimal point. A float is a floating-point number, which means + * it is a number that has a decimal place. Floats are used when + * more precision is needed. + */ + +int a = 0; // Create a variable "a" of the datatype "int" +float b = 0.0; // Create a variable "b" of the datatype "float" + +void setup() +{ + size(200, 200); + stroke(255); + frameRate(30); +} + +void draw() +{ + background(51); + + a = a + 1; + b = b + 0.2; + line(a, 0, a, height/2); + line(b, height/2, b, height); + + if(a > width) { + a = 0; + } + if(b > width) { + b = 0; + } +} diff --git a/java/examples/Basics/Data/IntegersFloats/applet/IntegersFloats.java b/java/examples/Basics/Data/IntegersFloats/applet/IntegersFloats.java new file mode 100644 index 000000000..e705fde4c --- /dev/null +++ b/java/examples/Basics/Data/IntegersFloats/applet/IntegersFloats.java @@ -0,0 +1,56 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class IntegersFloats extends PApplet { + +/** + * Integers Floats. + * + * Integers and floats are two different kinds of numerical data. + * An integer (more commonly called an int) is a number without + * a decimal point. A float is a floating-point number, which means + * it is a number that has a decimal place. Floats are used when + * more precision is needed. + */ + +int a = 0; // Create a variable "a" of the datatype "int" +float b = 0.0f; // Create a variable "b" of the datatype "float" + +public void setup() +{ + size(200, 200); + stroke(255); + frameRate(30); +} + +public void draw() +{ + background(51); + + a = a + 1; + b = b + 0.2f; + line(a, 0, a, height/2); + line(b, height/2, b, height); + + if(a > width) { + a = 0; + } + if(b > width) { + b = 0; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "IntegersFloats" }); + } +} diff --git a/java/examples/Basics/Data/IntegersFloats/applet/IntegersFloats.pde b/java/examples/Basics/Data/IntegersFloats/applet/IntegersFloats.pde new file mode 100644 index 000000000..87bf67f19 --- /dev/null +++ b/java/examples/Basics/Data/IntegersFloats/applet/IntegersFloats.pde @@ -0,0 +1,36 @@ +/** + * Integers Floats. + * + * Integers and floats are two different kinds of numerical data. + * An integer (more commonly called an int) is a number without + * a decimal point. A float is a floating-point number, which means + * it is a number that has a decimal place. Floats are used when + * more precision is needed. + */ + +int a = 0; // Create a variable "a" of the datatype "int" +float b = 0.0; // Create a variable "b" of the datatype "float" + +void setup() +{ + size(200, 200); + stroke(255); + frameRate(30); +} + +void draw() +{ + background(51); + + a = a + 1; + b = b + 0.2; + line(a, 0, a, height/2); + line(b, height/2, b, height); + + if(a > width) { + a = 0; + } + if(b > width) { + b = 0; + } +} diff --git a/java/examples/Basics/Data/IntegersFloats/applet/loading.gif b/java/examples/Basics/Data/IntegersFloats/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Data/TrueFalse/TrueFalse.pde b/java/examples/Basics/Data/TrueFalse/TrueFalse.pde new file mode 100644 index 000000000..c4bb0531f --- /dev/null +++ b/java/examples/Basics/Data/TrueFalse/TrueFalse.pde @@ -0,0 +1,34 @@ +/** + * True/False. + * + * Boolean data is one bit of information. True or false. + * It is common to use Booleans with control statements to + * determine the flow of a program. In this example, when the + * boolean value "x" is true, vertical black lines are drawn and when + * the boolean value "x" is false, horizontal gray lines are drawn. + */ + +boolean x = false; + +size(200, 200); +background(0); +stroke(0); + +for (int i = 1; i < width; i += 2) +{ + if (i < width/2) { + x = true; + } else { + x = false; + } + + if (x) { + stroke(255); + line(i, 1, i, height-1); + } + + if (!x) { + stroke(126); + line(width/2 , i, width-2, i); + } +} diff --git a/java/examples/Basics/Data/TrueFalse/applet/TrueFalse.java b/java/examples/Basics/Data/TrueFalse/applet/TrueFalse.java new file mode 100644 index 000000000..0d30054b6 --- /dev/null +++ b/java/examples/Basics/Data/TrueFalse/applet/TrueFalse.java @@ -0,0 +1,55 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class TrueFalse extends PApplet { + public void setup() {/** + * True/False. + * + * Boolean data is one bit of information. True or false. + * It is common to use Booleans with control statements to + * determine the flow of a program. In this example, when the + * boolean value "x" is true, vertical black lines are drawn and when + * the boolean value "x" is false, horizontal gray lines are drawn. + */ + +boolean x = false; + +size(200, 200); +background(0); +stroke(0); + +for (int i = 1; i < width; i += 2) +{ + if (i < width/2) { + x = true; + } else { + x = false; + } + + if (x) { + stroke(255); + line(i, 1, i, height-1); + } + + if (!x) { + stroke(126); + line(width/2 , i, width-2, i); + } +} + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "TrueFalse" }); + } +} diff --git a/java/examples/Basics/Data/TrueFalse/applet/TrueFalse.pde b/java/examples/Basics/Data/TrueFalse/applet/TrueFalse.pde new file mode 100644 index 000000000..c4bb0531f --- /dev/null +++ b/java/examples/Basics/Data/TrueFalse/applet/TrueFalse.pde @@ -0,0 +1,34 @@ +/** + * True/False. + * + * Boolean data is one bit of information. True or false. + * It is common to use Booleans with control statements to + * determine the flow of a program. In this example, when the + * boolean value "x" is true, vertical black lines are drawn and when + * the boolean value "x" is false, horizontal gray lines are drawn. + */ + +boolean x = false; + +size(200, 200); +background(0); +stroke(0); + +for (int i = 1; i < width; i += 2) +{ + if (i < width/2) { + x = true; + } else { + x = false; + } + + if (x) { + stroke(255); + line(i, 1, i, height-1); + } + + if (!x) { + stroke(126); + line(width/2 , i, width-2, i); + } +} diff --git a/java/examples/Basics/Data/TrueFalse/applet/loading.gif b/java/examples/Basics/Data/TrueFalse/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Data/VariableScope/VariableScope.pde b/java/examples/Basics/Data/VariableScope/VariableScope.pde new file mode 100644 index 000000000..8c2ae3559 --- /dev/null +++ b/java/examples/Basics/Data/VariableScope/VariableScope.pde @@ -0,0 +1,61 @@ +/** + * Variable Scope. + * + * Variables may either have a global or local "scope". + * For example, variables declared within either the + * setup() or loop() functions may be only used in these + * functions. Global variables, variables declared outside + * of setup() and loop(), may be used anywhere within the program. + * If a local variable is declared with the same name as a + * global variable, the program will use the local variable to make + * its calculations within the current scope. Variables may be localized + * within classes, functions, and iterative statements. + */ + +int a = 20; // Create a global variable "a" + +void setup() +{ + size(200, 200); + background(51); + stroke(255); + noLoop(); +} + +void draw() +{ + // Draw a line using the global variable "a" + line(a, 0, a, height); + + // Create a new variable "a" local to the for() statement + for(int a=50; a<80; a += 2) { + line(a, 0, a, height); + } + + // Create a new variable "a" local to the loop() method + int a = 100; + // Draw a line using the new local variable "a" + line(a, 0, a, height); + + // Make a call to the custom function drawAnotherLine() + drawAnotherLine(); + + // Make a call to the custom function setYetAnotherLine() + drawYetAnotherLine(); +} + +void drawAnotherLine() +{ + // Create a new variable "a" local to this method + int a = 185; + // Draw a line using the local variable "a" + line(a, 0, a, height); +} + +void drawYetAnotherLine() +{ + // Because no new local variable "a" is set, + // this lines draws using the original global + // variable "a" which is set to the value 20. + line(a+2, 0, a+2, height); +} diff --git a/java/examples/Basics/Data/VariableScope/applet/VariableScope.java b/java/examples/Basics/Data/VariableScope/applet/VariableScope.java new file mode 100644 index 000000000..426ba59a1 --- /dev/null +++ b/java/examples/Basics/Data/VariableScope/applet/VariableScope.java @@ -0,0 +1,81 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class VariableScope extends PApplet { + +/** + * Variable Scope. + * + * Variables may either have a global or local "scope". + * For example, variables declared within either the + * setup() or loop() functions may be only used in these + * functions. Global variables, variables declared outside + * of setup() and loop(), may be used anywhere within the program. + * If a local variable is declared with the same name as a + * global variable, the program will use the local variable to make + * its calculations within the current scope. Variables may be localized + * within classes, functions, and iterative statements. + */ + +int a = 20; // Create a global variable "a" + +public void setup() +{ + size(200, 200); + background(51); + stroke(255); + noLoop(); +} + +public void draw() +{ + // Draw a line using the global variable "a" + line(a, 0, a, height); + + // Create a new variable "a" local to the for() statement + for(int a=50; a<80; a += 2) { + line(a, 0, a, height); + } + + // Create a new variable "a" local to the loop() method + int a = 100; + // Draw a line using the new local variable "a" + line(a, 0, a, height); + + // Make a call to the custom function drawAnotherLine() + drawAnotherLine(); + + // Make a call to the custom function setYetAnotherLine() + drawYetAnotherLine(); +} + +public void drawAnotherLine() +{ + // Create a new variable "a" local to this method + int a = 185; + // Draw a line using the local variable "a" + line(a, 0, a, height); +} + +public void drawYetAnotherLine() +{ + // Because no new local variable "a" is set, + // this lines draws using the original global + // variable "a" which is set to the value 20. + line(a+2, 0, a+2, height); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "VariableScope" }); + } +} diff --git a/java/examples/Basics/Data/VariableScope/applet/VariableScope.pde b/java/examples/Basics/Data/VariableScope/applet/VariableScope.pde new file mode 100644 index 000000000..8c2ae3559 --- /dev/null +++ b/java/examples/Basics/Data/VariableScope/applet/VariableScope.pde @@ -0,0 +1,61 @@ +/** + * Variable Scope. + * + * Variables may either have a global or local "scope". + * For example, variables declared within either the + * setup() or loop() functions may be only used in these + * functions. Global variables, variables declared outside + * of setup() and loop(), may be used anywhere within the program. + * If a local variable is declared with the same name as a + * global variable, the program will use the local variable to make + * its calculations within the current scope. Variables may be localized + * within classes, functions, and iterative statements. + */ + +int a = 20; // Create a global variable "a" + +void setup() +{ + size(200, 200); + background(51); + stroke(255); + noLoop(); +} + +void draw() +{ + // Draw a line using the global variable "a" + line(a, 0, a, height); + + // Create a new variable "a" local to the for() statement + for(int a=50; a<80; a += 2) { + line(a, 0, a, height); + } + + // Create a new variable "a" local to the loop() method + int a = 100; + // Draw a line using the new local variable "a" + line(a, 0, a, height); + + // Make a call to the custom function drawAnotherLine() + drawAnotherLine(); + + // Make a call to the custom function setYetAnotherLine() + drawYetAnotherLine(); +} + +void drawAnotherLine() +{ + // Create a new variable "a" local to this method + int a = 185; + // Draw a line using the local variable "a" + line(a, 0, a, height); +} + +void drawYetAnotherLine() +{ + // Because no new local variable "a" is set, + // this lines draws using the original global + // variable "a" which is set to the value 20. + line(a+2, 0, a+2, height); +} diff --git a/java/examples/Basics/Data/VariableScope/applet/loading.gif b/java/examples/Basics/Data/VariableScope/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Data/Variables/Variables.pde b/java/examples/Basics/Data/Variables/Variables.pde new file mode 100644 index 000000000..9566ae472 --- /dev/null +++ b/java/examples/Basics/Data/Variables/Variables.pde @@ -0,0 +1,23 @@ +/** + * Variables. + * + * Variables are used for storing values. In this example, changing + * the values of variables 'a' and 'b' significantly change the composition. + */ + +size(200, 200); +background(0); +stroke(153); + +int a = 20; +int b = 50; +int c = a*8; +int d = a*9; +int e = b-a; +int f = b*2; +int g = f+e; + +line(a, f, b, g); +line(b, e, b, g); +line(b, e, d, c); +line(a, e, d-e, c); diff --git a/java/examples/Basics/Data/Variables/applet/Variables.java b/java/examples/Basics/Data/Variables/applet/Variables.java new file mode 100644 index 000000000..60471a43b --- /dev/null +++ b/java/examples/Basics/Data/Variables/applet/Variables.java @@ -0,0 +1,44 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Variables extends PApplet { + public void setup() {/** + * Variables. + * + * Variables are used for storing values. In this example, changing + * the values of variables 'a' and 'b' significantly change the composition. + */ + +size(200, 200); +background(0); +stroke(153); + +int a = 20; +int b = 50; +int c = a*8; +int d = a*9; +int e = b-a; +int f = b*2; +int g = f+e; + +line(a, f, b, g); +line(b, e, b, g); +line(b, e, d, c); +line(a, e, d-e, c); + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Variables" }); + } +} diff --git a/java/examples/Basics/Data/Variables/applet/Variables.pde b/java/examples/Basics/Data/Variables/applet/Variables.pde new file mode 100644 index 000000000..9566ae472 --- /dev/null +++ b/java/examples/Basics/Data/Variables/applet/Variables.pde @@ -0,0 +1,23 @@ +/** + * Variables. + * + * Variables are used for storing values. In this example, changing + * the values of variables 'a' and 'b' significantly change the composition. + */ + +size(200, 200); +background(0); +stroke(153); + +int a = 20; +int b = 50; +int c = a*8; +int d = a*9; +int e = b-a; +int f = b*2; +int g = f+e; + +line(a, f, b, g); +line(b, e, b, g); +line(b, e, d, c); +line(a, e, d-e, c); diff --git a/java/examples/Basics/Data/Variables/applet/loading.gif b/java/examples/Basics/Data/Variables/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Form/Bezier/Bezier.pde b/java/examples/Basics/Form/Bezier/Bezier.pde new file mode 100644 index 000000000..e0b53db21 --- /dev/null +++ b/java/examples/Basics/Form/Bezier/Bezier.pde @@ -0,0 +1,18 @@ +/** + * Bezier. + * + * The first two parameters for the bezier() function specify the + * first point in the curve and the last two parameters specify + * the last point. The middle parameters set the control points + * that define the shape of the curve. + */ + +size(200, 200); +background(0); +stroke(255); +noFill(); +smooth(); + +for(int i = 0; i < 100; i += 20) { + bezier(90-(i/2.0), 20+i, 210, 10, 220, 150, 120-(i/8.0), 150+(i/4.0)); +} diff --git a/java/examples/Basics/Form/Bezier/applet/Bezier.java b/java/examples/Basics/Form/Bezier/applet/Bezier.java new file mode 100644 index 000000000..1b0a14a3b --- /dev/null +++ b/java/examples/Basics/Form/Bezier/applet/Bezier.java @@ -0,0 +1,39 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Bezier extends PApplet { + public void setup() {/** + * Bezier. + * + * The first two parameters for the bezier() function specify the + * first point in the curve and the last two parameters specify + * the last point. The middle parameters set the control points + * that define the shape of the curve. + */ + +size(200, 200); +background(0); +stroke(255); +noFill(); +smooth(); + +for(int i = 0; i < 100; i += 20) { + bezier(90-(i/2.0f), 20+i, 210, 10, 220, 150, 120-(i/8.0f), 150+(i/4.0f)); +} + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Bezier" }); + } +} diff --git a/java/examples/Basics/Form/Bezier/applet/Bezier.pde b/java/examples/Basics/Form/Bezier/applet/Bezier.pde new file mode 100644 index 000000000..e0b53db21 --- /dev/null +++ b/java/examples/Basics/Form/Bezier/applet/Bezier.pde @@ -0,0 +1,18 @@ +/** + * Bezier. + * + * The first two parameters for the bezier() function specify the + * first point in the curve and the last two parameters specify + * the last point. The middle parameters set the control points + * that define the shape of the curve. + */ + +size(200, 200); +background(0); +stroke(255); +noFill(); +smooth(); + +for(int i = 0; i < 100; i += 20) { + bezier(90-(i/2.0), 20+i, 210, 10, 220, 150, 120-(i/8.0), 150+(i/4.0)); +} diff --git a/java/examples/Basics/Form/Bezier/applet/loading.gif b/java/examples/Basics/Form/Bezier/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Form/BezierEllipse/BezierEllipse.pde b/java/examples/Basics/Form/BezierEllipse/BezierEllipse.pde new file mode 100644 index 000000000..7db555f8c --- /dev/null +++ b/java/examples/Basics/Form/BezierEllipse/BezierEllipse.pde @@ -0,0 +1,103 @@ +/** + * Bezier Ellipse + * By Ira Greenberg + * + * Generates an ellipse using bezier() and + * trig functions. Approximately every 1/2 + * second a new ellipse is plotted using + * random values for control/anchor points. + */ + +// arrays to hold ellipse coordinate data +float[] px, py, cx, cy, cx2, cy2; + +// global variable-points in ellipse +int pts = 4; + +color controlPtCol = #222222; +color anchorPtCol = #BBBBBB; + +void setup(){ + size(200, 200); + smooth(); + setEllipse(pts, 65, 65); + frameRate(1); +} + +void draw(){ + background(145); + drawEllipse(); + setEllipse(int(random(3, 12)), random(-100, 150), random(-100, 150)); +} + +// draw ellipse with anchor/control points +void drawEllipse(){ + strokeWeight(1.125); + stroke(255); + noFill(); + // create ellipse + for (int i=0; i0){ + line(px[i], py[i], cx2[i-1], cy2[i-1]); + } + line(px[i], py[i], cx[i], cy[i]); + } + + for ( int i=0; i< pts; i++){ + fill(controlPtCol); + noStroke(); + //control handles + ellipse(cx[i], cy[i], 4, 4); + ellipse(cx2[i], cy2[i], 4, 4); + + fill(anchorPtCol); + stroke(0); + //anchor points + rect(px[i], py[i], 5, 5); + } +} + +// fill up arrays with ellipse coordinate data +void setEllipse(int points, float radius, float controlRadius){ + pts = points; + px = new float[points]; + py = new float[points]; + cx = new float[points]; + cy = new float[points]; + cx2 = new float[points]; + cy2 = new float[points]; + float angle = 360.0/points; + float controlAngle1 = angle/3.0; + float controlAngle2 = controlAngle1*2.0; + for ( int i=0; i0){ + line(px[i], py[i], cx2[i-1], cy2[i-1]); + } + line(px[i], py[i], cx[i], cy[i]); + } + + for ( int i=0; i< pts; i++){ + fill(controlPtCol); + noStroke(); + //control handles + ellipse(cx[i], cy[i], 4, 4); + ellipse(cx2[i], cy2[i], 4, 4); + + fill(anchorPtCol); + stroke(0); + //anchor points + rect(px[i], py[i], 5, 5); + } +} + +// fill up arrays with ellipse coordinate data +public void setEllipse(int points, float radius, float controlRadius){ + pts = points; + px = new float[points]; + py = new float[points]; + cx = new float[points]; + cy = new float[points]; + cx2 = new float[points]; + cy2 = new float[points]; + float angle = 360.0f/points; + float controlAngle1 = angle/3.0f; + float controlAngle2 = controlAngle1*2.0f; + for ( int i=0; i0){ + line(px[i], py[i], cx2[i-1], cy2[i-1]); + } + line(px[i], py[i], cx[i], cy[i]); + } + + for ( int i=0; i< pts; i++){ + fill(controlPtCol); + noStroke(); + //control handles + ellipse(cx[i], cy[i], 4, 4); + ellipse(cx2[i], cy2[i], 4, 4); + + fill(anchorPtCol); + stroke(0); + //anchor points + rect(px[i], py[i], 5, 5); + } +} + +// fill up arrays with ellipse coordinate data +void setEllipse(int points, float radius, float controlRadius){ + pts = points; + px = new float[points]; + py = new float[points]; + cx = new float[points]; + cy = new float[points]; + cx2 = new float[points]; + cy2 = new float[points]; + float angle = 360.0/points; + float controlAngle1 = angle/3.0; + float controlAngle2 = controlAngle1*2.0; + for ( int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Form/PieChart/PieChart.pde b/java/examples/Basics/Form/PieChart/PieChart.pde new file mode 100644 index 000000000..b1a3622d6 --- /dev/null +++ b/java/examples/Basics/Form/PieChart/PieChart.pde @@ -0,0 +1,23 @@ +/** + * Pie Chart + * By Ira Greenberg + * + * Uses the arc() function to generate a pie chart from the data + * stored in an array. + */ + +size(200, 200); +background(100); +smooth(); +noStroke(); + +float diameter = min(width, height) * 0.75; +int[] angs = {30, 10, 45, 35, 60, 38, 75, 67}; +float lastAng = 0; + +for (int i = 0; i < angs.length; i++){ + fill(angs[i] * 3.0); + arc(width/2, height/2, diameter, diameter, lastAng, lastAng+radians(angs[i])); + lastAng += radians(angs[i]); +} + diff --git a/java/examples/Basics/Form/PieChart/applet/PieChart.java b/java/examples/Basics/Form/PieChart/applet/PieChart.java new file mode 100644 index 000000000..35a008490 --- /dev/null +++ b/java/examples/Basics/Form/PieChart/applet/PieChart.java @@ -0,0 +1,44 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class PieChart extends PApplet { + public void setup() {/** + * Pie Chart + * By Ira Greenberg + * + * Uses the arc() function to generate a pie chart from the data + * stored in an array. + */ + +size(200, 200); +background(100); +smooth(); +noStroke(); + +int diameter = 150; +int[] angs = {30, 10, 45, 35, 60, 38, 75, 67}; +float lastAng = 0; + +for (int i = 0; i < angs.length; i++){ + fill(angs[i] * 3.0f); + arc(width/2, height/2, diameter, diameter, lastAng, lastAng+radians(angs[i])); + lastAng += radians(angs[i]); +} + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "PieChart" }); + } +} diff --git a/java/examples/Basics/Form/PieChart/applet/PieChart.pde b/java/examples/Basics/Form/PieChart/applet/PieChart.pde new file mode 100644 index 000000000..3c6720e1a --- /dev/null +++ b/java/examples/Basics/Form/PieChart/applet/PieChart.pde @@ -0,0 +1,23 @@ +/** + * Pie Chart + * By Ira Greenberg + * + * Uses the arc() function to generate a pie chart from the data + * stored in an array. + */ + +size(200, 200); +background(100); +smooth(); +noStroke(); + +int diameter = 150; +int[] angs = {30, 10, 45, 35, 60, 38, 75, 67}; +float lastAng = 0; + +for (int i = 0; i < angs.length; i++){ + fill(angs[i] * 3.0); + arc(width/2, height/2, diameter, diameter, lastAng, lastAng+radians(angs[i])); + lastAng += radians(angs[i]); +} + diff --git a/java/examples/Basics/Form/PieChart/applet/loading.gif b/java/examples/Basics/Form/PieChart/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Form/PointsLines/PointsLines.pde b/java/examples/Basics/Form/PointsLines/PointsLines.pde new file mode 100644 index 000000000..6c504f165 --- /dev/null +++ b/java/examples/Basics/Form/PointsLines/PointsLines.pde @@ -0,0 +1,32 @@ +/** + * Points and Lines. + * + * Constructing a simple dimensional form with lines and rectangles. + * Changing the value of the variable 'd' scales the image. + * The four variables set the positions based on the value of 'd'. + */ + +int d = 40; +int p1 = d; +int p2 = p1+d; +int p3 = p2+d; +int p4 = p3+d; + +size(200, 200); +background(0); + +// Draw gray box +stroke(153); +line(p3, p3, p2, p3); +line(p2, p3, p2, p2); +line(p2, p2, p3, p2); +line(p3, p2, p3, p3); + +// Draw white points +stroke(255); +point(p1, p1); +point(p1, p3); +point(p2, p4); +point(p3, p1); +point(p4, p2); +point(p4, p4); diff --git a/java/examples/Basics/Form/PointsLines/applet/PointsLines.java b/java/examples/Basics/Form/PointsLines/applet/PointsLines.java new file mode 100644 index 000000000..ad5b00407 --- /dev/null +++ b/java/examples/Basics/Form/PointsLines/applet/PointsLines.java @@ -0,0 +1,53 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class PointsLines extends PApplet { + public void setup() {/** + * Points and Lines. + * + * Constructing a simple dimensional form with lines and rectangles. + * Changing the value of the variable 'd' scales the image. + * The four variables set the positions based on the value of 'd'. + */ + +int d = 40; +int p1 = d; +int p2 = p1+d; +int p3 = p2+d; +int p4 = p3+d; + +size(200, 200); +background(0); + +// Draw gray box +stroke(153); +line(p3, p3, p2, p3); +line(p2, p3, p2, p2); +line(p2, p2, p3, p2); +line(p3, p2, p3, p3); + +// Draw white points +stroke(255); +point(p1, p1); +point(p1, p3); +point(p2, p4); +point(p3, p1); +point(p4, p2); +point(p4, p4); + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "PointsLines" }); + } +} diff --git a/java/examples/Basics/Form/PointsLines/applet/PointsLines.pde b/java/examples/Basics/Form/PointsLines/applet/PointsLines.pde new file mode 100644 index 000000000..6c504f165 --- /dev/null +++ b/java/examples/Basics/Form/PointsLines/applet/PointsLines.pde @@ -0,0 +1,32 @@ +/** + * Points and Lines. + * + * Constructing a simple dimensional form with lines and rectangles. + * Changing the value of the variable 'd' scales the image. + * The four variables set the positions based on the value of 'd'. + */ + +int d = 40; +int p1 = d; +int p2 = p1+d; +int p3 = p2+d; +int p4 = p3+d; + +size(200, 200); +background(0); + +// Draw gray box +stroke(153); +line(p3, p3, p2, p3); +line(p2, p3, p2, p2); +line(p2, p2, p3, p2); +line(p3, p2, p3, p3); + +// Draw white points +stroke(255); +point(p1, p1); +point(p1, p3); +point(p2, p4); +point(p3, p1); +point(p4, p2); +point(p4, p4); diff --git a/java/examples/Basics/Form/PointsLines/applet/loading.gif b/java/examples/Basics/Form/PointsLines/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Form/ShapePrimitives/ShapePrimitives.pde b/java/examples/Basics/Form/ShapePrimitives/ShapePrimitives.pde new file mode 100644 index 000000000..4c0158f5d --- /dev/null +++ b/java/examples/Basics/Form/ShapePrimitives/ShapePrimitives.pde @@ -0,0 +1,21 @@ +/** + * Shape Primitives. + * + * The basic shape primitive functions are triangle(), + * rect(), quad(), and ellipse(). Squares are made + * with rect() and circles are made with + * ellipse(). Each of these functions requires a number + * of parameters to determine the shape's position and size. + */ + +size(200, 200); +smooth(); +background(0); +noStroke(); +fill(226); +triangle(10, 10, 10, 200, 45, 200); +rect(45, 45, 35, 35); +quad(105, 10, 120, 10, 120, 200, 80, 200); +ellipse(140, 80, 40, 40); +triangle(160, 10, 195, 200, 160, 200); + diff --git a/java/examples/Basics/Form/ShapePrimitives/applet/ShapePrimitives.java b/java/examples/Basics/Form/ShapePrimitives/applet/ShapePrimitives.java new file mode 100644 index 000000000..3356a28b7 --- /dev/null +++ b/java/examples/Basics/Form/ShapePrimitives/applet/ShapePrimitives.java @@ -0,0 +1,42 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class ShapePrimitives extends PApplet { + public void setup() {/** + * Shape Primitives. + * + * The basic shape primitive functions are triangle(), + * rect(), quad(), and ellipse(). Squares are made + * with rect() and circles are made with + * ellipse(). Each of these functions requires a number + * of parameters which determines their position and size. + */ + +size(200, 200); +smooth(); +background(0); +noStroke(); +fill(226); +triangle(10, 10, 10, 200, 45, 200); +rect(45, 45, 35, 35); +quad(105, 10, 120, 10, 120, 200, 80, 200); +ellipse(140, 80, 40, 40); +triangle(160, 10, 195, 200, 160, 200); + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "ShapePrimitives" }); + } +} diff --git a/java/examples/Basics/Form/ShapePrimitives/applet/ShapePrimitives.pde b/java/examples/Basics/Form/ShapePrimitives/applet/ShapePrimitives.pde new file mode 100644 index 000000000..e06ca3929 --- /dev/null +++ b/java/examples/Basics/Form/ShapePrimitives/applet/ShapePrimitives.pde @@ -0,0 +1,21 @@ +/** + * Shape Primitives. + * + * The basic shape primitive functions are triangle(), + * rect(), quad(), and ellipse(). Squares are made + * with rect() and circles are made with + * ellipse(). Each of these functions requires a number + * of parameters which determines their position and size. + */ + +size(200, 200); +smooth(); +background(0); +noStroke(); +fill(226); +triangle(10, 10, 10, 200, 45, 200); +rect(45, 45, 35, 35); +quad(105, 10, 120, 10, 120, 200, 80, 200); +ellipse(140, 80, 40, 40); +triangle(160, 10, 195, 200, 160, 200); + diff --git a/java/examples/Basics/Form/ShapePrimitives/applet/loading.gif b/java/examples/Basics/Form/ShapePrimitives/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Form/SimpleCurves/SimpleCurves.pde b/java/examples/Basics/Form/SimpleCurves/SimpleCurves.pde new file mode 100644 index 000000000..8507d6dc1 --- /dev/null +++ b/java/examples/Basics/Form/SimpleCurves/SimpleCurves.pde @@ -0,0 +1,81 @@ +/** + * Simple Curves. + * + * Simple curves are drawn with simple equations. + * By using numbers with values between 0 and 1 in + * the equations, a series of elegant curves + * are created. The numbers are then scaled to fill the screen. + */ + +void setup() { + size(200, 200); + colorMode(RGB, 100); + background(0); + noFill(); + noLoop(); +} + +void draw() { + stroke(40); + beginShape(); + for(int i=0; i 1) { sa = 1; } + return 1-sa; +} + +float squared(float sa) { + sa = sa*sa; + return sa; +} diff --git a/java/examples/Basics/Form/SimpleCurves/applet/SimpleCurves.java b/java/examples/Basics/Form/SimpleCurves/applet/SimpleCurves.java new file mode 100644 index 000000000..7a6f48e93 --- /dev/null +++ b/java/examples/Basics/Form/SimpleCurves/applet/SimpleCurves.java @@ -0,0 +1,101 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class SimpleCurves extends PApplet { + +/** + * Simple Curves. + * + * Simple curves are drawn with simple equations. + * By using numbers with values between 0 and 1 in + * the equations, a series of elegant curves + * are created. The numbers are then scaled to fill the screen. + */ + +public void setup() { + size(200, 200); + colorMode(RGB, 100); + background(0); + noFill(); + noLoop(); +} + +public void draw() { + stroke(40); + beginShape(); + for(int i=0; i 1) { sa = 1; } + return 1-sa; +} + +public float squared(float sa) { + sa = sa*sa; + return sa; +} + + static public void main(String args[]) { + PApplet.main(new String[] { "SimpleCurves" }); + } +} diff --git a/java/examples/Basics/Form/SimpleCurves/applet/SimpleCurves.pde b/java/examples/Basics/Form/SimpleCurves/applet/SimpleCurves.pde new file mode 100644 index 000000000..8507d6dc1 --- /dev/null +++ b/java/examples/Basics/Form/SimpleCurves/applet/SimpleCurves.pde @@ -0,0 +1,81 @@ +/** + * Simple Curves. + * + * Simple curves are drawn with simple equations. + * By using numbers with values between 0 and 1 in + * the equations, a series of elegant curves + * are created. The numbers are then scaled to fill the screen. + */ + +void setup() { + size(200, 200); + colorMode(RGB, 100); + background(0); + noFill(); + noLoop(); +} + +void draw() { + stroke(40); + beginShape(); + for(int i=0; i 1) { sa = 1; } + return 1-sa; +} + +float squared(float sa) { + sa = sa*sa; + return sa; +} diff --git a/java/examples/Basics/Form/SimpleCurves/applet/loading.gif b/java/examples/Basics/Form/SimpleCurves/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Form/TriangleStrip/TriangleStrip.pde b/java/examples/Basics/Form/TriangleStrip/TriangleStrip.pde new file mode 100644 index 000000000..8ad1dbdc0 --- /dev/null +++ b/java/examples/Basics/Form/TriangleStrip/TriangleStrip.pde @@ -0,0 +1,36 @@ +/** + * TRIANGLE_STRIP Mode + * by Ira Greenberg. + * + * Generate a closed ring using vertex() + * function and beginShape(TRIANGLE_STRIP) + * mode. outerRad and innerRad variables + * control ring's outer/inner radii respectively. + * Trig functions generate ring. + */ + +size(200, 200); +background(204); +smooth(); + +int x = width/2; +int y = height/2; +float outerRad = min(width, height) * 0.4; +float innerRad = outerRad * 0.6; +float px = 0, py = 0, angle = 0; +float pts = 36; +float rot = 360.0/pts; + +beginShape(TRIANGLE_STRIP); +for (int i = 0; i < pts; i++) { + px = x + cos(radians(angle))*outerRad; + py = y + sin(radians(angle))*outerRad; + angle += rot; + vertex(px, py); + px = x + cos(radians(angle))*innerRad; + py = y + sin(radians(angle))*innerRad; + vertex(px, py); + angle += rot; +} +endShape(); + diff --git a/java/examples/Basics/Form/TriangleStrip/applet/TriangleStrip.java b/java/examples/Basics/Form/TriangleStrip/applet/TriangleStrip.java new file mode 100644 index 000000000..ece5f8d81 --- /dev/null +++ b/java/examples/Basics/Form/TriangleStrip/applet/TriangleStrip.java @@ -0,0 +1,57 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class TriangleStrip extends PApplet { + public void setup() {/** + * TRIANGLE_STRIP Mode + * By Ira Greenberg + * + * Generate a closed ring using vertex() + * function and beginShape(TRIANGLE_STRIP) + * mode. outerRad and innerRad variables + * control ring's outer/inner radii respectively. + * Trig functions generate ring. + */ + +size(200, 200); +background(204); +smooth(); + +int x = width/2; +int y = height/2; +int outerRad = 80; +int innerRad = 50; +float px = 0, py = 0, angle = 0; +float pts = 36; +float rot = 360.0f/pts; + +beginShape(TRIANGLE_STRIP); +for (int i = 0; i < pts; i++) { + px = x + cos(radians(angle))*outerRad; + py = y + sin(radians(angle))*outerRad; + angle += rot; + vertex(px, py); + px = x + cos(radians(angle))*innerRad; + py = y + sin(radians(angle))*innerRad; + vertex(px, py); + angle += rot; +} +endShape(); + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "TriangleStrip" }); + } +} diff --git a/java/examples/Basics/Form/TriangleStrip/applet/TriangleStrip.pde b/java/examples/Basics/Form/TriangleStrip/applet/TriangleStrip.pde new file mode 100644 index 000000000..fdb99d032 --- /dev/null +++ b/java/examples/Basics/Form/TriangleStrip/applet/TriangleStrip.pde @@ -0,0 +1,36 @@ +/** + * TRIANGLE_STRIP Mode + * By Ira Greenberg + * + * Generate a closed ring using vertex() + * function and beginShape(TRIANGLE_STRIP) + * mode. outerRad and innerRad variables + * control ring's outer/inner radii respectively. + * Trig functions generate ring. + */ + +size(200, 200); +background(204); +smooth(); + +int x = width/2; +int y = height/2; +int outerRad = 80; +int innerRad = 50; +float px = 0, py = 0, angle = 0; +float pts = 36; +float rot = 360.0/pts; + +beginShape(TRIANGLE_STRIP); +for (int i = 0; i < pts; i++) { + px = x + cos(radians(angle))*outerRad; + py = y + sin(radians(angle))*outerRad; + angle += rot; + vertex(px, py); + px = x + cos(radians(angle))*innerRad; + py = y + sin(radians(angle))*innerRad; + vertex(px, py); + angle += rot; +} +endShape(); + diff --git a/java/examples/Basics/Form/TriangleStrip/applet/loading.gif b/java/examples/Basics/Form/TriangleStrip/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Form/Vertices/Vertices.pde b/java/examples/Basics/Form/Vertices/Vertices.pde new file mode 100644 index 000000000..f8c705650 --- /dev/null +++ b/java/examples/Basics/Form/Vertices/Vertices.pde @@ -0,0 +1,47 @@ +/** + * Vertices. + * + * The beginShape() function begins recording vertices + * for a shape and endShape() stops recording. + * A vertex is a location in space specified by X, Y, + * and sometimes Z coordinates. After calling the beginShape() function, + * a series of vertex() functions must follow. + * To stop drawing the shape, call the endShape() functions. + */ + +size(200, 200); +background(0); +noFill(); + +stroke(102); +beginShape(); +curveVertex(168, 182); +curveVertex(168, 182); +curveVertex(136, 38); +curveVertex(42, 34); +curveVertex(64, 200); +curveVertex(64, 200); +endShape(); + +stroke(51); +beginShape(LINES); +vertex(60, 40); +vertex(160, 10); +vertex(170, 150); +vertex(60, 150); +endShape(); + +stroke(126); +beginShape(); +vertex(60, 40); +bezierVertex(160, 10, 170, 150, 60, 150); +endShape(); + +stroke(255); +beginShape(POINTS); +vertex(60, 40); +vertex(160, 10); +vertex(170, 150); +vertex(60, 150); +endShape(); + diff --git a/java/examples/Basics/Form/Vertices/applet/Vertices.java b/java/examples/Basics/Form/Vertices/applet/Vertices.java new file mode 100644 index 000000000..062bc838f --- /dev/null +++ b/java/examples/Basics/Form/Vertices/applet/Vertices.java @@ -0,0 +1,68 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Vertices extends PApplet { + public void setup() {/** + * Vertices. + * + * The beginShape() function begins recording vertices + * for a shape and endShape() stops recording. + * A vertex is a location in space specified by X, Y, + * and sometimes Z coordinates. After calling the beginShape() function, + * a series of vertex() functions must follow. + * To stop drawing the shape, call the endShape() functions. + */ + +size(200, 200); +background(0); +noFill(); + +stroke(102); +beginShape(); +curveVertex(168, 182); +curveVertex(168, 182); +curveVertex(136, 38); +curveVertex(42, 34); +curveVertex(64, 200); +curveVertex(64, 200); +endShape(); + +stroke(51); +beginShape(LINES); +vertex(60, 40); +vertex(160, 10); +vertex(170, 150); +vertex(60, 150); +endShape(); + +stroke(126); +beginShape(); +vertex(60, 40); +bezierVertex(160, 10, 170, 150, 60, 150); +endShape(); + +stroke(255); +beginShape(POINTS); +vertex(60, 40); +vertex(160, 10); +vertex(170, 150); +vertex(60, 150); +endShape(); + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Vertices" }); + } +} diff --git a/java/examples/Basics/Form/Vertices/applet/Vertices.pde b/java/examples/Basics/Form/Vertices/applet/Vertices.pde new file mode 100644 index 000000000..f8c705650 --- /dev/null +++ b/java/examples/Basics/Form/Vertices/applet/Vertices.pde @@ -0,0 +1,47 @@ +/** + * Vertices. + * + * The beginShape() function begins recording vertices + * for a shape and endShape() stops recording. + * A vertex is a location in space specified by X, Y, + * and sometimes Z coordinates. After calling the beginShape() function, + * a series of vertex() functions must follow. + * To stop drawing the shape, call the endShape() functions. + */ + +size(200, 200); +background(0); +noFill(); + +stroke(102); +beginShape(); +curveVertex(168, 182); +curveVertex(168, 182); +curveVertex(136, 38); +curveVertex(42, 34); +curveVertex(64, 200); +curveVertex(64, 200); +endShape(); + +stroke(51); +beginShape(LINES); +vertex(60, 40); +vertex(160, 10); +vertex(170, 150); +vertex(60, 150); +endShape(); + +stroke(126); +beginShape(); +vertex(60, 40); +bezierVertex(160, 10, 170, 150, 60, 150); +endShape(); + +stroke(255); +beginShape(POINTS); +vertex(60, 40); +vertex(160, 10); +vertex(170, 150); +vertex(60, 150); +endShape(); + diff --git a/java/examples/Basics/Form/Vertices/applet/loading.gif b/java/examples/Basics/Form/Vertices/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/Alphamask/Alphamask.pde b/java/examples/Basics/Image/Alphamask/Alphamask.pde new file mode 100644 index 000000000..59684e6a4 --- /dev/null +++ b/java/examples/Basics/Image/Alphamask/Alphamask.pde @@ -0,0 +1,24 @@ +/** + * Alpha Mask. + * + * Loads a "mask" for an image to specify the transparency + * in different parts of the image. The two images are blended + * together using the mask() method of PImage. + */ + +PImage img; +PImage maskImg; + +void setup() { + size(200, 200); + img = loadImage("test.jpg"); + maskImg = loadImage("mask.jpg"); + img.mask(maskImg); + imageMode(CENTER); +} + +void draw() { + background(map(mouseX+mouseY, 0, width+height, 0, 255)); + image(img, width/2, height/2); + image(img, mouseX, mouseY); +} diff --git a/java/examples/Basics/Image/Alphamask/applet/Alphamask.java b/java/examples/Basics/Image/Alphamask/applet/Alphamask.java new file mode 100644 index 000000000..2d0e3317d --- /dev/null +++ b/java/examples/Basics/Image/Alphamask/applet/Alphamask.java @@ -0,0 +1,45 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Alphamask extends PApplet { + +/** + * Alpha Mask. + * + * Loads a "mask" for an image to specify the transparency + * in different parts of the image. The two images are blended + * together using the mask() method of PImage. + */ + +PImage img; +PImage maskImg; + +public void setup() +{ + size(200,200); + img = loadImage("test.jpg"); + maskImg = loadImage("mask.jpg"); + img.mask(maskImg); +} + +public void draw() +{ + background((mouseX+mouseY)/1.5f); + image(img, 50, 50); + image(img, mouseX-50, mouseY-50); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Alphamask" }); + } +} diff --git a/java/examples/Basics/Image/Alphamask/applet/Alphamask.pde b/java/examples/Basics/Image/Alphamask/applet/Alphamask.pde new file mode 100644 index 000000000..6eb55ef9f --- /dev/null +++ b/java/examples/Basics/Image/Alphamask/applet/Alphamask.pde @@ -0,0 +1,25 @@ +/** + * Alpha Mask. + * + * Loads a "mask" for an image to specify the transparency + * in different parts of the image. The two images are blended + * together using the mask() method of PImage. + */ + +PImage img; +PImage maskImg; + +void setup() +{ + size(200,200); + img = loadImage("test.jpg"); + maskImg = loadImage("mask.jpg"); + img.mask(maskImg); +} + +void draw() +{ + background((mouseX+mouseY)/1.5); + image(img, 50, 50); + image(img, mouseX-50, mouseY-50); +} diff --git a/java/examples/Basics/Image/Alphamask/applet/loading.gif b/java/examples/Basics/Image/Alphamask/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/BackgroundImage/BackgroundImage.pde b/java/examples/Basics/Image/BackgroundImage/BackgroundImage.pde new file mode 100644 index 000000000..2c5f1aac8 --- /dev/null +++ b/java/examples/Basics/Image/BackgroundImage/BackgroundImage.pde @@ -0,0 +1,30 @@ +/** + * Background Image. + * + * This example presents the fastest way to load a background image + * into Processing. To load an image as the background, it must be + * the same width and height as the program. + */ + +PImage bg; +int a; + +void setup() +{ + size(200,200); + frameRate(30); + // The background image must be the same size as the parameters + // into the size() method. In this program, the size of "milan_rubbish.jpg" + // is 200 x 200 pixels. + bg = loadImage("milan_rubbish.jpg"); +} + +void draw() +{ + background(bg); + + a = (a + 1)%(width+32); + stroke(226, 204, 0); + line(0, a, width, a-26); + line(0, a-6, width, a-32); +} diff --git a/java/examples/Basics/Image/BackgroundImage/applet/BackgroundImage.java b/java/examples/Basics/Image/BackgroundImage/applet/BackgroundImage.java new file mode 100644 index 000000000..b56dafb5b --- /dev/null +++ b/java/examples/Basics/Image/BackgroundImage/applet/BackgroundImage.java @@ -0,0 +1,50 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class BackgroundImage extends PApplet { + +/** + * Background Image. + * + * This example presents the fastest way to load a background image + * into Processing. To load an image as the background, it must be + * the same width and height as the program. + */ + +PImage bg; +int a; + +public void setup() +{ + size(200,200); + frameRate(30); + // The background image must be the same size as the parameters + // into the size() method. In this program, the size of "milan_rubbish.jpg" + // is 200 x 200 pixels. + bg = loadImage("milan_rubbish.jpg"); +} + +public void draw() +{ + background(bg); + + a = (a + 1)%(width+32); + stroke(226, 204, 0); + line(0, a, width, a-26); + line(0, a-6, width, a-32); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "BackgroundImage" }); + } +} diff --git a/java/examples/Basics/Image/BackgroundImage/applet/BackgroundImage.pde b/java/examples/Basics/Image/BackgroundImage/applet/BackgroundImage.pde new file mode 100644 index 000000000..2c5f1aac8 --- /dev/null +++ b/java/examples/Basics/Image/BackgroundImage/applet/BackgroundImage.pde @@ -0,0 +1,30 @@ +/** + * Background Image. + * + * This example presents the fastest way to load a background image + * into Processing. To load an image as the background, it must be + * the same width and height as the program. + */ + +PImage bg; +int a; + +void setup() +{ + size(200,200); + frameRate(30); + // The background image must be the same size as the parameters + // into the size() method. In this program, the size of "milan_rubbish.jpg" + // is 200 x 200 pixels. + bg = loadImage("milan_rubbish.jpg"); +} + +void draw() +{ + background(bg); + + a = (a + 1)%(width+32); + stroke(226, 204, 0); + line(0, a, width, a-26); + line(0, a-6, width, a-32); +} diff --git a/java/examples/Basics/Image/BackgroundImage/applet/loading.gif b/java/examples/Basics/Image/BackgroundImage/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/CreateImage/CreateImage.pde b/java/examples/Basics/Image/CreateImage/CreateImage.pde new file mode 100644 index 000000000..df095a75e --- /dev/null +++ b/java/examples/Basics/Image/CreateImage/CreateImage.pde @@ -0,0 +1,24 @@ +/** + * Create Image. + * + * The createImage() function provides a fresh buffer of pixels to play with. + * This example creates an image gradient. + */ + +PImage img; + +void setup() +{ + size(200, 200); + img = createImage(120, 120, ARGB); + for(int i=0; i < img.pixels.length; i++) { + img.pixels[i] = color(0, 90, 102, i%img.width * 2); + } +} + +void draw() +{ + background(204); + image(img, 33, 33); + image(img, mouseX-60, mouseY-60); +} diff --git a/java/examples/Basics/Image/CreateImage/applet/CreateImage.java b/java/examples/Basics/Image/CreateImage/applet/CreateImage.java new file mode 100644 index 000000000..0ae2e5bd5 --- /dev/null +++ b/java/examples/Basics/Image/CreateImage/applet/CreateImage.java @@ -0,0 +1,44 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class CreateImage extends PApplet { + +/** + * Create Image. + * + * The createImage() function provides a fresh buffer of pixels to play with. + * This example creates an image gradient. + */ + +PImage img; + +public void setup() +{ + size(200, 200); + img = createImage(120, 120, ARGB); + for(int i=0; i < img.pixels.length; i++) { + img.pixels[i] = color(0, 90, 102, i%img.width * 2); + } +} + +public void draw() +{ + background(204); + image(img, 33, 33); + image(img, mouseX-60, mouseY-60); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "CreateImage" }); + } +} diff --git a/java/examples/Basics/Image/CreateImage/applet/CreateImage.pde b/java/examples/Basics/Image/CreateImage/applet/CreateImage.pde new file mode 100644 index 000000000..df095a75e --- /dev/null +++ b/java/examples/Basics/Image/CreateImage/applet/CreateImage.pde @@ -0,0 +1,24 @@ +/** + * Create Image. + * + * The createImage() function provides a fresh buffer of pixels to play with. + * This example creates an image gradient. + */ + +PImage img; + +void setup() +{ + size(200, 200); + img = createImage(120, 120, ARGB); + for(int i=0; i < img.pixels.length; i++) { + img.pixels[i] = color(0, 90, 102, i%img.width * 2); + } +} + +void draw() +{ + background(204); + image(img, 33, 33); + image(img, mouseX-60, mouseY-60); +} diff --git a/java/examples/Basics/Image/CreateImage/applet/loading.gif b/java/examples/Basics/Image/CreateImage/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/LoadDisplayImage/LoadDisplayImage.pde b/java/examples/Basics/Image/LoadDisplayImage/LoadDisplayImage.pde new file mode 100644 index 000000000..8252c5cbc --- /dev/null +++ b/java/examples/Basics/Image/LoadDisplayImage/LoadDisplayImage.pde @@ -0,0 +1,23 @@ +/** + * Load and Display + * + * Images can be loaded and displayed to the screen at their actual size + * or any other size. + */ + +PImage a; // Declare variable "a" of type PImage + +void setup() { + size(200, 200); + // The file "jelly.jpg" must be in the data folder + // of the current sketch to load successfully + a = loadImage("jelly.jpg"); // Load the image into the program + noLoop(); // Makes draw() only run once +} + +void draw() { + // Displays the image at its actual size at point (0,0) + image(a, 0, 0); + // Displays the image at point (100, 0) at half of its size + image(a, 100, 0, a.width/2, a.height/2); +} diff --git a/java/examples/Basics/Image/LoadDisplayImage/applet/LoadDisplayImage.java b/java/examples/Basics/Image/LoadDisplayImage/applet/LoadDisplayImage.java new file mode 100644 index 000000000..8807d2d60 --- /dev/null +++ b/java/examples/Basics/Image/LoadDisplayImage/applet/LoadDisplayImage.java @@ -0,0 +1,44 @@ +import processing.core.*; +import processing.xml.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class LoadDisplayImage extends PApplet { + +/** + * Load and Display + * + * Images can be loaded and displayed to the screen at their actual size + * or any other size. + */ + +PImage a; // Declare variable "a" of type PImage + +public void setup() { + size(200, 200); + // The file "jelly.jpg" must be in the data folder + // of the current sketch to load successfully + a = loadImage("jelly.jpg"); // Load the image into the program + noLoop(); // Makes draw() only run once +} + +public void draw() { + // Displays the image at its actual size at point (0,0) + image(a, 0, 0); + // Displays the image at point (100, 0) at half of its size + image(a, 100, 0, a.width/2, a.height/2); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "LoadDisplayImage" }); + } +} diff --git a/java/examples/Basics/Image/LoadDisplayImage/applet/LoadDisplayImage.pde b/java/examples/Basics/Image/LoadDisplayImage/applet/LoadDisplayImage.pde new file mode 100644 index 000000000..8252c5cbc --- /dev/null +++ b/java/examples/Basics/Image/LoadDisplayImage/applet/LoadDisplayImage.pde @@ -0,0 +1,23 @@ +/** + * Load and Display + * + * Images can be loaded and displayed to the screen at their actual size + * or any other size. + */ + +PImage a; // Declare variable "a" of type PImage + +void setup() { + size(200, 200); + // The file "jelly.jpg" must be in the data folder + // of the current sketch to load successfully + a = loadImage("jelly.jpg"); // Load the image into the program + noLoop(); // Makes draw() only run once +} + +void draw() { + // Displays the image at its actual size at point (0,0) + image(a, 0, 0); + // Displays the image at point (100, 0) at half of its size + image(a, 100, 0, a.width/2, a.height/2); +} diff --git a/java/examples/Basics/Image/LoadDisplayImage/applet/loading.gif b/java/examples/Basics/Image/LoadDisplayImage/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/Pointillism/Pointillism.pde b/java/examples/Basics/Image/Pointillism/Pointillism.pde new file mode 100644 index 000000000..3b7c96700 --- /dev/null +++ b/java/examples/Basics/Image/Pointillism/Pointillism.pde @@ -0,0 +1,38 @@ +/** + * Pointillism + * by Daniel Shiffman. + * + * Mouse horizontal location controls size of dots. + * Creates a simple pointillist effect using ellipses colored + * according to pixels in an image. + * + * Updated 27 February 2010. + */ + +PImage img; + +int smallPoint = 2; +int largePoint; +int top, left; + +void setup() { + size(200, 200); + img = loadImage("eames.jpg"); + //img = loadImage("sunflower.jpg"); // an alternative image + noStroke(); + background(255); + smooth(); + largePoint = min(width, height) / 10; + // center the image on the screen + left = (width - img.width) / 2; + top = (height - img.height) / 2; +} + +void draw() { + float pointillize = map(mouseX, 0, width, smallPoint, largePoint); + int x = int(random(img.width)); + int y = int(random(img.height)); + color pix = img.get(x, y); + fill(pix, 128); + ellipse(left + x, top + y, pointillize, pointillize); +} diff --git a/java/examples/Basics/Image/Pointillism/applet/Pointillism.java b/java/examples/Basics/Image/Pointillism/applet/Pointillism.java new file mode 100644 index 000000000..a80eac561 --- /dev/null +++ b/java/examples/Basics/Image/Pointillism/applet/Pointillism.java @@ -0,0 +1,49 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Pointillism extends PApplet { + +/** + * Pointillism + * by Daniel Shiffman. + * + * Mouse horizontal location controls size of dots. + * Creates a simple pointillist effect using ellipses colored + * according to pixels in an image. + */ + +PImage a; + +public void setup() +{ + a = loadImage("eames.jpg"); + size(200,200); + noStroke(); + background(255); + smooth(); +} + +public void draw() +{ + float pointillize = map(mouseX, 0, width, 2, 18); + int x = PApplet.parseInt(random(a.width)); + int y = PApplet.parseInt(random(a.height)); + int pix = a.get(x, y); + fill(pix, 126); + ellipse(x, y, pointillize, pointillize); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Pointillism" }); + } +} diff --git a/java/examples/Basics/Image/Pointillism/applet/Pointillism.pde b/java/examples/Basics/Image/Pointillism/applet/Pointillism.pde new file mode 100644 index 000000000..53f5c3a48 --- /dev/null +++ b/java/examples/Basics/Image/Pointillism/applet/Pointillism.pde @@ -0,0 +1,29 @@ +/** + * Pointillism + * by Daniel Shiffman. + * + * Mouse horizontal location controls size of dots. + * Creates a simple pointillist effect using ellipses colored + * according to pixels in an image. + */ + +PImage a; + +void setup() +{ + a = loadImage("eames.jpg"); + size(200,200); + noStroke(); + background(255); + smooth(); +} + +void draw() +{ + float pointillize = map(mouseX, 0, width, 2, 18); + int x = int(random(a.width)); + int y = int(random(a.height)); + color pix = a.get(x, y); + fill(pix, 126); + ellipse(x, y, pointillize, pointillize); +} diff --git a/java/examples/Basics/Image/Pointillism/applet/loading.gif b/java/examples/Basics/Image/Pointillism/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/RequestImage/RequestImage.pde b/java/examples/Basics/Image/RequestImage/RequestImage.pde new file mode 100644 index 000000000..0e835c7ca --- /dev/null +++ b/java/examples/Basics/Image/RequestImage/RequestImage.pde @@ -0,0 +1,91 @@ +/** + * Request Image + * by Ira Greenberg. + * From Processing for Flash Developers, Friends of ED, 2009. + * + * Shows how to use the requestImage() function with preloader animation. + * The requestImage() function loads images on a separate thread so that + * the sketch does not freeze while they load. It's very useful when you are + * loading large images, as this example demonstrates. + * + * To work, this example requires 10 images named dublin0.jpg ... dublin9.jpg + * in the sketch data directory. To save space, these images are not included + * with the example. + */ + +int imgCount = 10; +PImage[] imgs = new PImage[imgCount]; +float imgW; + +// Keeps track of loaded images (true or false) +boolean[] loadStates = new boolean[imgCount]; + +// For loading animation +float loaderX, loaderY, theta; + +void setup() { + size(800, 60); + smooth(); + imgW = width/imgCount; + + // Load images asynchronously + for (int i = 0; i < imgCount; i++){ + imgs[i] = requestImage("dublin"+i+".jpg"); + } +} + +void draw(){ + background(0); + + // Start loading animation + runLoaderAni(); + + for (int i = 0; i < imgs.length; i++){ + // Check if individual images are fully loaded + if ((imgs[i].width != 0) && (imgs[i].width != -1)){ + // As images are loaded set true in boolean array + loadStates[i] = true; + } + } + // When all images are loaded draw them to the screen + if (checkLoadStates()){ + drawImages(); + } +} + +void drawImages(){ + for (int i = 0; i < imgs.length; i++){ + image(imgs[i], width/10*i, 0, imgW, height); + } +} + +// Loading animation +void runLoaderAni(){ + // Only run when images are loading + if (!checkLoadStates()){ + ellipse(loaderX, loaderY, 10, 10); + loaderX += 2; + loaderY = height/2 + sin(theta) * (height/2.5); + theta += PI/22; + // Reposition ellipse if it goes off the screen + if (loaderX > width + 5){ + loaderX = -5; + } + } +} + +// Return true when all images are loaded - no false values left in array +boolean checkLoadStates(){ + for (int i = 0; i < imgs.length; i++){ + if (loadStates[i] == false){ + return false; + } + } + return true; +} + + + + + + diff --git a/java/examples/Basics/Image/Sprite/Sprite.pde b/java/examples/Basics/Image/Sprite/Sprite.pde new file mode 100644 index 000000000..2ea0c2782 --- /dev/null +++ b/java/examples/Basics/Image/Sprite/Sprite.pde @@ -0,0 +1,38 @@ +/** + * Sprite (Teddy) + * by James Patterson. + * + * Demonstrates loading and displaying a transparent GIF image. + */ + +PImage teddy; + +float xpos; +float ypos; +float drag = 30; + +void setup() { + size(200, 200); + teddy = loadImage("teddy.gif"); + xpos = width/2; + ypos = height/2; +} + +void draw() { + background(102); + + float difx = mouseX - xpos-teddy.width/2; + if (abs(difx) > 1) { + xpos = xpos + difx/drag; + xpos = constrain(xpos, 0, width-teddy.width); + } + + float dify = mouseY - ypos-teddy.height/2; + if (abs(dify) > 1) { + ypos = ypos + dify/drag; + ypos = constrain(ypos, 0, height-teddy.height); + } + + // Display the sprite at the position xpos, ypos + image(teddy, xpos, ypos); +} diff --git a/java/examples/Basics/Image/Sprite/applet/Sprite.java b/java/examples/Basics/Image/Sprite/applet/Sprite.java new file mode 100644 index 000000000..c777d010f --- /dev/null +++ b/java/examples/Basics/Image/Sprite/applet/Sprite.java @@ -0,0 +1,61 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Sprite extends PApplet { + +/** + * Sprite (Teddy) + * by James Patterson. + * + * Demonstrates loading and displaying a transparent GIF image. + */ + +PImage teddy; + +float xpos; +float ypos; +float drag = 30.0f; + +public void setup() +{ + size(200,200); + teddy = loadImage("teddy.gif"); + xpos = width/2; + ypos = height/2; + frameRate(60); +} + +public void draw() +{ + background(102); + + float difx = mouseX - xpos-teddy.width/2; + if(abs(difx) > 1.0f) { + xpos = xpos + difx/drag; + xpos = constrain(xpos, 0, width-teddy.width); + } + + float dify = mouseY - ypos-teddy.height/2; + if(abs(dify) > 1.0f) { + ypos = ypos + dify/drag; + ypos = constrain(ypos, 0, height-teddy.height); + } + + // Display the sprite at the position xpos, ypos + image(teddy, xpos, ypos); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Sprite" }); + } +} diff --git a/java/examples/Basics/Image/Sprite/applet/Sprite.pde b/java/examples/Basics/Image/Sprite/applet/Sprite.pde new file mode 100644 index 000000000..b46edfc2f --- /dev/null +++ b/java/examples/Basics/Image/Sprite/applet/Sprite.pde @@ -0,0 +1,41 @@ +/** + * Sprite (Teddy) + * by James Patterson. + * + * Demonstrates loading and displaying a transparent GIF image. + */ + +PImage teddy; + +float xpos; +float ypos; +float drag = 30.0; + +void setup() +{ + size(200,200); + teddy = loadImage("teddy.gif"); + xpos = width/2; + ypos = height/2; + frameRate(60); +} + +void draw() +{ + background(102); + + float difx = mouseX - xpos-teddy.width/2; + if(abs(difx) > 1.0) { + xpos = xpos + difx/drag; + xpos = constrain(xpos, 0, width-teddy.width); + } + + float dify = mouseY - ypos-teddy.height/2; + if(abs(dify) > 1.0) { + ypos = ypos + dify/drag; + ypos = constrain(ypos, 0, height-teddy.height); + } + + // Display the sprite at the position xpos, ypos + image(teddy, xpos, ypos); +} diff --git a/java/examples/Basics/Image/Sprite/applet/loading.gif b/java/examples/Basics/Image/Sprite/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/Sprite/data/teddy.gif b/java/examples/Basics/Image/Sprite/data/teddy.gif new file mode 100644 index 0000000000000000000000000000000000000000..8994c1bdd611dc47c37554778e8fd9d2f67fa0b3 GIT binary patch literal 746 zcmVi|3L_yF&8i-mV88xd0mnj%eW{u~%qwh;h8VQBHqA^Fb{QxZH z@Cl7db<(NwR?RxI-0rZ&S$Uh1@u=nnhs|Zp7|B)hwsATuZ9j{na#x=Jw+EQCRc2Ko zXrTqw-hwS%nkL2RODVUUP0Nur`BaU3s{qlC3gd9jhgImTXAjEGa9FOS8H zihMLH)5N{b{j+|Gr ztz$2JGK(B|qBhEh{UU7|TK2or`$l3DEp{>NVX+=2*1emx#(dv=#~v-fqS#MBQmdZr z6!OzHV)b%99^2n>=*>B~uG2lD@Z6|waXejiwQ{>}KXN~|p8a-!LGgdPZ|GcDInkp9 zSJB-Cm3ZJG$CQHS(FWdVaDj#oU-tZG;cyUkCYXHlEeK+6Q^6yhf**F6+=&`}7GQQ< zmB<=(zr~j#hc1p&(1qA72v>%Lz1UNb#kmCGh(d0tR$4mN=u~(W%7tQsN`|PGK1)h@ z8!vacXWMn8p$E{A%1u(sgUt0PCW$4WDQ25$eRgyrQ7 cVaVXaBhU$oC{uhU%IF+w$k1q{4-^0ZJEcu&`2YX_ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/Sprite2/Sprite2.pde b/java/examples/Basics/Image/Sprite2/Sprite2.pde new file mode 100644 index 000000000..dff97453a --- /dev/null +++ b/java/examples/Basics/Image/Sprite2/Sprite2.pde @@ -0,0 +1,45 @@ +/** + * Sprite2 (Teddy) + * by James Patterson. + * + * Demonstrates loading and displaying a transparent GIF image. + * This alternate version shows a sky image in the background. + */ + +PImage teddy; +PImage sky; + +float xpos; +float ypos; +float drag = 30.0; + +void setup() { + size(200, 200); + teddy = loadImage("teddy.gif"); + sky = loadImage("sky.jpg"); + xpos = width/2; + ypos = height/2; + // resize the background image so that it fills the screen + if (sky.width != width || sky.height != height) { + sky.resize(width, height); + } +} + +void draw() { + background(sky); + + float difx = mouseX - xpos-teddy.width/2; + if (abs(difx) > 1) { + xpos = xpos + difx/drag; + xpos = constrain(xpos, 0, width-teddy.width); + } + + float dify = mouseY - ypos-teddy.height/2; + if (abs(dify) > 1 ) { + ypos = ypos + dify/drag; + ypos = constrain(ypos, 0, height-teddy.height); + } + + // Display the sprite at the position xpos, ypos + image(teddy, xpos, ypos); +} diff --git a/java/examples/Basics/Image/Sprite2/data/teddy.gif b/java/examples/Basics/Image/Sprite2/data/teddy.gif new file mode 100644 index 0000000000000000000000000000000000000000..8994c1bdd611dc47c37554778e8fd9d2f67fa0b3 GIT binary patch literal 746 zcmVi|3L_yF&8i-mV88xd0mnj%eW{u~%qwh;h8VQBHqA^Fb{QxZH z@Cl7db<(NwR?RxI-0rZ&S$Uh1@u=nnhs|Zp7|B)hwsATuZ9j{na#x=Jw+EQCRc2Ko zXrTqw-hwS%nkL2RODVUUP0Nur`BaU3s{qlC3gd9jhgImTXAjEGa9FOS8H zihMLH)5N{b{j+|Gr ztz$2JGK(B|qBhEh{UU7|TK2or`$l3DEp{>NVX+=2*1emx#(dv=#~v-fqS#MBQmdZr z6!OzHV)b%99^2n>=*>B~uG2lD@Z6|waXejiwQ{>}KXN~|p8a-!LGgdPZ|GcDInkp9 zSJB-Cm3ZJG$CQHS(FWdVaDj#oU-tZG;cyUkCYXHlEeK+6Q^6yhf**F6+=&`}7GQQ< zmB<=(zr~j#hc1p&(1qA72v>%Lz1UNb#kmCGh(d0tR$4mN=u~(W%7tQsN`|PGK1)h@ z8!vacXWMn8p$E{A%1u(sgUt0PCW$4WDQ25$eRgyrQ7 cVaVXaBhU$oC{uhU%IF+w$k1q{4-^0ZJEcu&`2YX_ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Image/Transparency/Transparency.pde b/java/examples/Basics/Image/Transparency/Transparency.pde new file mode 100644 index 000000000..a528ddb35 --- /dev/null +++ b/java/examples/Basics/Image/Transparency/Transparency.pde @@ -0,0 +1,29 @@ +/** + * Transparency. + * + * Move the pointer left and right across the image to change + * its position. This program overlays one image over another + * by modifying the alpha value of the image with the tint() function. + */ + +PImage a, b; +float offset; + +void setup() { + size(200, 200); + a = loadImage("construct.jpg"); // Load an image into the program + b = loadImage("wash.jpg"); // Load an image into the program +} + +void draw() { + image(a, 0, 0); + float offsetTarget = map(mouseX, 0, width, -b.width/2 - width/2, 0); + offset += (offsetTarget-offset)*0.05; + tint(255, 153); + image(b, offset, 20); +} + + + + + diff --git a/java/examples/Basics/Image/Transparency/applet/Transparency.java b/java/examples/Basics/Image/Transparency/applet/Transparency.java new file mode 100644 index 000000000..1aff169ee --- /dev/null +++ b/java/examples/Basics/Image/Transparency/applet/Transparency.java @@ -0,0 +1,50 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Transparency extends PApplet { + +/** + * Transparency. + * + * Move the pointer left and right across the image to change + * its position. This program overlays one image over another + * by modifying the alpha value of the image with the tint() function. + */ + +PImage a, b; +float offset; + +public void setup() { + size(200, 200); + a = loadImage("construct.jpg"); // Load an image into the program + b = loadImage("wash.jpg"); // Load an image into the program + frameRate(60); +} + +public void draw() { + image(a, 0, 0); + float offsetTarget = map(mouseX, 0, width, -b.width/2 - width/2, 0); + offset += (offsetTarget-offset)*0.05f; + tint(255, 153); + image(b, offset, 20); +} + + + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "Transparency" }); + } +} diff --git a/java/examples/Basics/Image/Transparency/applet/Transparency.pde b/java/examples/Basics/Image/Transparency/applet/Transparency.pde new file mode 100644 index 000000000..ec4f66658 --- /dev/null +++ b/java/examples/Basics/Image/Transparency/applet/Transparency.pde @@ -0,0 +1,30 @@ +/** + * Transparency. + * + * Move the pointer left and right across the image to change + * its position. This program overlays one image over another + * by modifying the alpha value of the image with the tint() function. + */ + +PImage a, b; +float offset; + +void setup() { + size(200, 200); + a = loadImage("construct.jpg"); // Load an image into the program + b = loadImage("wash.jpg"); // Load an image into the program + frameRate(60); +} + +void draw() { + image(a, 0, 0); + float offsetTarget = map(mouseX, 0, width, -b.width/2 - width/2, 0); + offset += (offsetTarget-offset)*0.05; + tint(255, 153); + image(b, offset, 20); +} + + + + + diff --git a/java/examples/Basics/Image/Transparency/applet/loading.gif b/java/examples/Basics/Image/Transparency/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/Clock/Clock.pde b/java/examples/Basics/Input/Clock/Clock.pde new file mode 100644 index 000000000..27ce7b334 --- /dev/null +++ b/java/examples/Basics/Input/Clock/Clock.pde @@ -0,0 +1,64 @@ +/** + * Clock. + * + * The current time can be read with the second(), minute(), + * and hour() functions. In this example, sin() and cos() values + * are used to set the position of the hands. + * + * Updated 27 February 2010 to handle size() changes. + */ + +int cx, cy; +float secondsRadius; +float minutesRadius; +float hoursRadius; +float clockDiameter; + +void setup() { + size(200, 200); + stroke(255); + smooth(); + + int radius = min(width, height) / 2; + secondsRadius = radius * 0.72; + minutesRadius = radius * 0.60; + hoursRadius = radius * 0.50; + clockDiameter = radius * 1.8; + + cx = width / 2; + cy = height / 2; +} + +void draw2() { + background(0); + + // Draw the clock background + fill(80); + noStroke(); + ellipse(cx, cy, clockDiameter, clockDiameter); + + // Angles for sin() and cos() start at 3 o'clock; + // subtract HALF_PI to make them start at the top + float s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI; + float m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI; + float h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI; + + // Draw the hands of the clock + stroke(255); + strokeWeight(1); + line(cx, cy, cx + cos(s) * secondsRadius, cy + sin(s) * secondsRadius); + strokeWeight(2); + line(cx, cy, cx + cos(m) * minutesRadius, cy + sin(m) * minutesRadius); + strokeWeight(4); + line(cx, cy, cx + cos(h) * hoursRadius, cy + sin(h) * hoursRadius); + + // Draw the minute ticks + strokeWeight(2); + beginShape(POINTS); + for (int a = 0; a < 360; a+=6) { + float x = cx + cos(radians(a)) * secondsRadius; + float y = cy + sin(radians(a)) * secondsRadius; + vertex(x, y); + } + endShape(); +} diff --git a/java/examples/Basics/Input/Clock/applet/Clock.java b/java/examples/Basics/Input/Clock/applet/Clock.java new file mode 100644 index 000000000..7e3412158 --- /dev/null +++ b/java/examples/Basics/Input/Clock/applet/Clock.java @@ -0,0 +1,59 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Clock extends PApplet { + +/** + * Clock. + * + * The current time can be read with the second(), minute(), + * and hour() functions. In this example, sin() and cos() values + * are used to set the position of the hands. + */ + +public void setup() { + size(200, 200); + stroke(255); + smooth(); +} +public void draw() { + background(0); + fill(80); + noStroke(); + // Angles for sin() and cos() start at 3 o'clock; + // subtract HALF_PI to make them start at the top + ellipse(100, 100, 160, 160); + float s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI; + float m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI; + float h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI; + stroke(255); + strokeWeight(1); + line(100, 100, cos(s) * 72 + 100, sin(s) * 72 + 100); + strokeWeight(2); + line(100, 100, cos(m) * 60 + 100, sin(m) * 60 + 100); + strokeWeight(4); + line(100, 100, cos(h) * 50 + 100, sin(h) * 50 + 100); + + // Draw the minute ticks + strokeWeight(2); + for (int a = 0; a < 360; a+=6) { + float x = 100 + ( cos(radians(a)) * 72 ); + float y = 100 + ( sin(radians(a)) * 72 ); + point(x, y); + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Clock" }); + } +} diff --git a/java/examples/Basics/Input/Clock/applet/Clock.pde b/java/examples/Basics/Input/Clock/applet/Clock.pde new file mode 100644 index 000000000..397af66f0 --- /dev/null +++ b/java/examples/Basics/Input/Clock/applet/Clock.pde @@ -0,0 +1,39 @@ +/** + * Clock. + * + * The current time can be read with the second(), minute(), + * and hour() functions. In this example, sin() and cos() values + * are used to set the position of the hands. + */ + +void setup() { + size(200, 200); + stroke(255); + smooth(); +} +void draw() { + background(0); + fill(80); + noStroke(); + // Angles for sin() and cos() start at 3 o'clock; + // subtract HALF_PI to make them start at the top + ellipse(100, 100, 160, 160); + float s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI; + float m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI; + float h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI; + stroke(255); + strokeWeight(1); + line(100, 100, cos(s) * 72 + 100, sin(s) * 72 + 100); + strokeWeight(2); + line(100, 100, cos(m) * 60 + 100, sin(m) * 60 + 100); + strokeWeight(4); + line(100, 100, cos(h) * 50 + 100, sin(h) * 50 + 100); + + // Draw the minute ticks + strokeWeight(2); + for (int a = 0; a < 360; a+=6) { + float x = 100 + ( cos(radians(a)) * 72 ); + float y = 100 + ( sin(radians(a)) * 72 ); + point(x, y); + } +} diff --git a/java/examples/Basics/Input/Clock/applet/loading.gif b/java/examples/Basics/Input/Clock/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/Constrain/Constrain.pde b/java/examples/Basics/Input/Constrain/Constrain.pde new file mode 100644 index 000000000..84fcf06fe --- /dev/null +++ b/java/examples/Basics/Input/Constrain/Constrain.pde @@ -0,0 +1,41 @@ +/** + * Constrain. + * + * Move the mouse across the screen to move the circle. + * The program constrains the circle to its box. + * + * Updated 27 February 2010 to handle changes in size(). + */ + +float mx; +float my; +float easing = 0.05; +int radius = 24; +int edge = 56; +int inner = edge + radius; + +void setup() { + size(200, 200); + noStroke(); + smooth(); + ellipseMode(RADIUS); + rectMode(CORNERS); +} + +void draw() { + background(51); + + if (abs(mouseX - mx) > 0.1) { + mx = mx + (mouseX - mx) * easing; + } + if (abs(mouseY - my) > 0.1) { + my = my + (mouseY- my) * easing; + } + + mx = constrain(mx, inner, width - inner); + my = constrain(my, inner, height - inner); + fill(76); + rect(edge, edge, width-edge, height-edge); + fill(255); + ellipse(mx, my, radius, radius); +} diff --git a/java/examples/Basics/Input/Constrain/applet/Constrain.java b/java/examples/Basics/Input/Constrain/applet/Constrain.java new file mode 100644 index 000000000..1a11e1e02 --- /dev/null +++ b/java/examples/Basics/Input/Constrain/applet/Constrain.java @@ -0,0 +1,60 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Constrain extends PApplet { + +/** + * Constrain. + * + * Move the mouse across the screen to move the circle. + * The program constrains the circle to its box. + */ + +float mx; +float my; +float easing = 0.05f; +float esize = 25.0f; +int box = 30; + +public void setup() +{ + size(200, 200); + noStroke(); + smooth(); + ellipseMode(CENTER_RADIUS); +} + +public void draw() +{ + background(51); + + if(abs(mouseX - mx) > 0.1f) { + mx = mx + (mouseX - mx) * easing; + } + if(abs(mouseY - my) > 0.1f) { + my = my + (mouseY- my) * easing; + } + + float distance = esize * 2; + mx = constrain(mx, box+distance, width-box-distance); + my = constrain(my, box+distance, height-box-distance); + fill(76); + rect(box+esize, box+esize, box*3, box*3); + fill(255); + ellipse(mx, my, esize, esize); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Constrain" }); + } +} diff --git a/java/examples/Basics/Input/Constrain/applet/Constrain.pde b/java/examples/Basics/Input/Constrain/applet/Constrain.pde new file mode 100644 index 000000000..6d57b97d6 --- /dev/null +++ b/java/examples/Basics/Input/Constrain/applet/Constrain.pde @@ -0,0 +1,40 @@ +/** + * Constrain. + * + * Move the mouse across the screen to move the circle. + * The program constrains the circle to its box. + */ + +float mx; +float my; +float easing = 0.05; +float esize = 25.0; +int box = 30; + +void setup() +{ + size(200, 200); + noStroke(); + smooth(); + ellipseMode(CENTER_RADIUS); +} + +void draw() +{ + background(51); + + if(abs(mouseX - mx) > 0.1) { + mx = mx + (mouseX - mx) * easing; + } + if(abs(mouseY - my) > 0.1) { + my = my + (mouseY- my) * easing; + } + + float distance = esize * 2; + mx = constrain(mx, box+distance, width-box-distance); + my = constrain(my, box+distance, height-box-distance); + fill(76); + rect(box+esize, box+esize, box*3, box*3); + fill(255); + ellipse(mx, my, esize, esize); +} diff --git a/java/examples/Basics/Input/Constrain/applet/loading.gif b/java/examples/Basics/Input/Constrain/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/Easing/Easing.pde b/java/examples/Basics/Input/Easing/Easing.pde new file mode 100644 index 000000000..a09011639 --- /dev/null +++ b/java/examples/Basics/Input/Easing/Easing.pde @@ -0,0 +1,41 @@ +/** + * Easing. + * + * Move the mouse across the screen and the symbol will follow. + * Between drawing each frame of the animation, the program + * calculates the difference between the position of the + * symbol and the cursor. If the distance is larger than + * 1 pixel, the symbol moves part of the distance (0.05) from its + * current position toward the cursor. + */ + +float x; +float y; +float targetX, targetY; +float easing = 0.05; + +void setup() +{ + size(200, 200); + smooth(); + noStroke(); +} + +void draw() +{ + background( 51 ); + + targetX = mouseX; + float dx = targetX - x; + if(abs(dx) > 1) { + x += dx * easing; + } + + targetY = mouseY; + float dy = targetY - y; + if(abs(dy) > 1) { + y += dy * easing; + } + + ellipse(x, y, 33, 33); +} diff --git a/java/examples/Basics/Input/Easing/applet/Easing.java b/java/examples/Basics/Input/Easing/applet/Easing.java new file mode 100644 index 000000000..7e6f2749f --- /dev/null +++ b/java/examples/Basics/Input/Easing/applet/Easing.java @@ -0,0 +1,61 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Easing extends PApplet { + +/** + * Easing. + * + * Move the mouse across the screen and the symbol will follow. + * Between drawing each frame of the animation, the program + * calculates the difference between the position of the + * symbol and the cursor. If the distance is larger than + * 1 pixel, the symbol moves part of the distance (0.05) from its + * current position toward the cursor. + */ + +float x; +float y; +float targetX, targetY; +float easing = 0.05f; + +public void setup() +{ + size(200, 200); + smooth(); + noStroke(); +} + +public void draw() +{ + background( 51 ); + + targetX = mouseX; + float dx = mouseX - x; + if(abs(dx) > 1) { + x += dx * easing; + } + + targetY = mouseY; + float dy = mouseY - y; + if(abs(dy) > 1) { + y += dy * easing; + } + + ellipse(x, y, 33, 33); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Easing" }); + } +} diff --git a/java/examples/Basics/Input/Easing/applet/Easing.pde b/java/examples/Basics/Input/Easing/applet/Easing.pde new file mode 100644 index 000000000..9ef837afc --- /dev/null +++ b/java/examples/Basics/Input/Easing/applet/Easing.pde @@ -0,0 +1,41 @@ +/** + * Easing. + * + * Move the mouse across the screen and the symbol will follow. + * Between drawing each frame of the animation, the program + * calculates the difference between the position of the + * symbol and the cursor. If the distance is larger than + * 1 pixel, the symbol moves part of the distance (0.05) from its + * current position toward the cursor. + */ + +float x; +float y; +float targetX, targetY; +float easing = 0.05; + +void setup() +{ + size(200, 200); + smooth(); + noStroke(); +} + +void draw() +{ + background( 51 ); + + targetX = mouseX; + float dx = mouseX - x; + if(abs(dx) > 1) { + x += dx * easing; + } + + targetY = mouseY; + float dy = mouseY - y; + if(abs(dy) > 1) { + y += dy * easing; + } + + ellipse(x, y, 33, 33); +} diff --git a/java/examples/Basics/Input/Easing/applet/loading.gif b/java/examples/Basics/Input/Easing/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/Keyboard/Keyboard.pde b/java/examples/Basics/Input/Keyboard/Keyboard.pde new file mode 100644 index 000000000..3eba1f1d2 --- /dev/null +++ b/java/examples/Basics/Input/Keyboard/Keyboard.pde @@ -0,0 +1,39 @@ +/** + * Keyboard. + * + * Click on the image to give it focus and press the letter keys + * to create forms in time and space. Each key has a unique identifying + * number called its ASCII value. These numbers can be used to position + * shapes in space. + */ + +int rectWidth; + +void setup() { + size(200, 200); + noStroke(); + background(0); + rectWidth = width/4; +} + +void draw() { + // keep draw() here to continue looping while waiting for keys +} + +void keyPressed() { + int keyIndex = -1; + if (key >= 'A' && key <= 'Z') { + keyIndex = key - 'A'; + } else if (key >= 'a' && key <= 'z') { + keyIndex = key - 'a'; + } + if (keyIndex == -1) { + // If it's not a letter key, clear the screen + background(0); + } else { + // It's a letter key, fill a rectangle + fill(millis() % 255); + float x = map(keyIndex, 0, 25, 0, width - rectWidth); + rect(x, 0, rectWidth, height); + } +} diff --git a/java/examples/Basics/Input/Keyboard/applet/Keyboard.java b/java/examples/Basics/Input/Keyboard/applet/Keyboard.java new file mode 100644 index 000000000..73d9c7202 --- /dev/null +++ b/java/examples/Basics/Input/Keyboard/applet/Keyboard.java @@ -0,0 +1,60 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Keyboard extends PApplet { + +/** + * Keyboard. + * + * Click on the image to give it focus and press the letter keys + * to create forms in time and space. Each key has a unique identifying + * number called it's ASCII value. These numbers can be used to position + * shapes in space. + */ + +int numChars = 26; +int[] colors = new int[numChars]; +int keyIndex; +float keyScale; +int rectWidth; + + +public void setup() +{ + size(200, 200); + noStroke(); + background(0); + keyScale = 200/numChars-1.0f; + rectWidth = width/4; +} + +public void draw() +{ + if(keyPressed) { + if(key >= 'A' && key <= 'z') { + if(key <= 'Z') { + keyIndex = key-'A'; + } else { + keyIndex = key-'a'; + } + fill(millis()%255); + float beginRect = rectWidth/2 + keyIndex*keyScale-rectWidth/2; + rect(beginRect, 0.0f, rectWidth, height); + } + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Keyboard" }); + } +} diff --git a/java/examples/Basics/Input/Keyboard/applet/Keyboard.pde b/java/examples/Basics/Input/Keyboard/applet/Keyboard.pde new file mode 100644 index 000000000..ee1a3c156 --- /dev/null +++ b/java/examples/Basics/Input/Keyboard/applet/Keyboard.pde @@ -0,0 +1,40 @@ +/** + * Keyboard. + * + * Click on the image to give it focus and press the letter keys + * to create forms in time and space. Each key has a unique identifying + * number called it's ASCII value. These numbers can be used to position + * shapes in space. + */ + +int numChars = 26; +color[] colors = new color[numChars]; +int keyIndex; +float keyScale; +int rectWidth; + + +void setup() +{ + size(200, 200); + noStroke(); + background(0); + keyScale = 200/numChars-1.0; + rectWidth = width/4; +} + +void draw() +{ + if(keyPressed) { + if(key >= 'A' && key <= 'z') { + if(key <= 'Z') { + keyIndex = key-'A'; + } else { + keyIndex = key-'a'; + } + fill(millis()%255); + float beginRect = rectWidth/2 + keyIndex*keyScale-rectWidth/2; + rect(beginRect, 0.0, rectWidth, height); + } + } +} diff --git a/java/examples/Basics/Input/Keyboard/applet/loading.gif b/java/examples/Basics/Input/Keyboard/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/KeyboardFunctions/KeyboardFunctions.pde b/java/examples/Basics/Input/KeyboardFunctions/KeyboardFunctions.pde new file mode 100644 index 000000000..882e92d63 --- /dev/null +++ b/java/examples/Basics/Input/KeyboardFunctions/KeyboardFunctions.pde @@ -0,0 +1,89 @@ +/** + * Keyboard Functions. + * Modified from code by Martin. + * Original 'Color Typewriter' concept by John Maeda. + * + * Click on the window to give it focus and press the letter keys to type colors. + * The keyboard function keyPressed() is called whenever + * a key is pressed. keyReleased() is another keyboard + * function that is called when a key is released. + */ + +int max_height = 20; +int min_height = 10; +int letter_height = max_height; // Height of the letters +int letter_width = 10; // Width of the letter + +int x = -letter_width; // X position of the letters +int y = 0; // Y position of the letters + +boolean newletter; + +int numChars = 26; // There are 26 characters in the alphabet +color[] colors = new color[numChars]; + +void setup() +{ + size(200, 200); + noStroke(); + colorMode(RGB, numChars); + background(numChars/2); + // Set a gray value for each key + for(int i=0; i= 'A' && key <= 'z') { + int keyIndex; + if(key <= 'Z') { + keyIndex = key-'A'; + letter_height = max_height; + fill(colors[key-'A']); + } else { + keyIndex = key-'a'; + letter_height = min_height; + fill(colors[key-'a']); + } + } else { + fill(0); + letter_height = 10; + } + + newletter = true; + + // Update the "letter" position + x = ( x + letter_width ); + + // Wrap horizontally + if (x > width - letter_width) { + x = 0; + y+= max_height; + } + + // Wrap vertically + if( y > height - letter_height) { + y = 0; // reset y to 0 + } +} diff --git a/java/examples/Basics/Input/KeyboardFunctions/applet/KeyboardFunctions.java b/java/examples/Basics/Input/KeyboardFunctions/applet/KeyboardFunctions.java new file mode 100644 index 000000000..7d7d4b2f4 --- /dev/null +++ b/java/examples/Basics/Input/KeyboardFunctions/applet/KeyboardFunctions.java @@ -0,0 +1,109 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class KeyboardFunctions extends PApplet { + +/** + * Keyboard Functions. + * Modified from code by Martin. + * Original 'Color Typewriter' concept by John Maeda. + * + * Click on the window to give it focus and press the letter keys to type colors. + * The keyboard function keyPressed() is called whenever + * a key is pressed. keyReleased() is another keyboard + * function that is called when a key is released. + */ + +int max_height = 20; +int min_height = 10; +int letter_height = max_height; // Height of the letters +int letter_width = 10; // Width of the letter + +int x = -letter_width; // X position of the letters +int y = 0; // Y position of the letters + +boolean newletter; + +int numChars = 26; // There are 26 characters in the alphabet +int[] colors = new int[numChars]; + +public void setup() +{ + size(200, 200); + noStroke(); + colorMode(RGB, numChars); + background(numChars/2); + // Set a gray value for each key + for(int i=0; i= 'A' && key <= 'z') { + int keyIndex; + if(key <= 'Z') { + keyIndex = key-'A'; + letter_height = max_height; + fill(colors[key-'A']); + } else { + keyIndex = key-'a'; + letter_height = min_height; + fill(colors[key-'a']); + } + } else { + fill(0); + letter_height = 10; + } + + newletter = true; + + // Update the "letter" position + x = ( x + letter_width ); + + // Wrap horizontally + if (x > width - letter_width) { + x = 0; + y+= max_height; + } + + // Wrap vertically + if( y > height - letter_height) { + y = 0; // reset y to 0 + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "KeyboardFunctions" }); + } +} diff --git a/java/examples/Basics/Input/KeyboardFunctions/applet/KeyboardFunctions.pde b/java/examples/Basics/Input/KeyboardFunctions/applet/KeyboardFunctions.pde new file mode 100644 index 000000000..882e92d63 --- /dev/null +++ b/java/examples/Basics/Input/KeyboardFunctions/applet/KeyboardFunctions.pde @@ -0,0 +1,89 @@ +/** + * Keyboard Functions. + * Modified from code by Martin. + * Original 'Color Typewriter' concept by John Maeda. + * + * Click on the window to give it focus and press the letter keys to type colors. + * The keyboard function keyPressed() is called whenever + * a key is pressed. keyReleased() is another keyboard + * function that is called when a key is released. + */ + +int max_height = 20; +int min_height = 10; +int letter_height = max_height; // Height of the letters +int letter_width = 10; // Width of the letter + +int x = -letter_width; // X position of the letters +int y = 0; // Y position of the letters + +boolean newletter; + +int numChars = 26; // There are 26 characters in the alphabet +color[] colors = new color[numChars]; + +void setup() +{ + size(200, 200); + noStroke(); + colorMode(RGB, numChars); + background(numChars/2); + // Set a gray value for each key + for(int i=0; i= 'A' && key <= 'z') { + int keyIndex; + if(key <= 'Z') { + keyIndex = key-'A'; + letter_height = max_height; + fill(colors[key-'A']); + } else { + keyIndex = key-'a'; + letter_height = min_height; + fill(colors[key-'a']); + } + } else { + fill(0); + letter_height = 10; + } + + newletter = true; + + // Update the "letter" position + x = ( x + letter_width ); + + // Wrap horizontally + if (x > width - letter_width) { + x = 0; + y+= max_height; + } + + // Wrap vertically + if( y > height - letter_height) { + y = 0; // reset y to 0 + } +} diff --git a/java/examples/Basics/Input/KeyboardFunctions/applet/loading.gif b/java/examples/Basics/Input/KeyboardFunctions/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/Milliseconds/Milliseconds.pde b/java/examples/Basics/Input/Milliseconds/Milliseconds.pde new file mode 100644 index 000000000..2439ba363 --- /dev/null +++ b/java/examples/Basics/Input/Milliseconds/Milliseconds.pde @@ -0,0 +1,26 @@ +/** + * Milliseconds. + * + * A millisecond is 1/1000 of a second. + * Processing keeps track of the number of milliseconds a program has run. + * By modifying this number with the modulo(%) operator, + * different patterns in time are created. + */ + +float scale; + +void setup() +{ + size(200, 200); + noStroke(); + scale = width/10; +} + +void draw() +{ + for(int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/Mouse1D/Mouse1D.pde b/java/examples/Basics/Input/Mouse1D/Mouse1D.pde new file mode 100644 index 000000000..536e65459 --- /dev/null +++ b/java/examples/Basics/Input/Mouse1D/Mouse1D.pde @@ -0,0 +1,47 @@ +/** + * Mouse 1D. + * + * Move the mouse left and right to shift the balance. + * The "mouseX" variable is used to control both the + * size and color of the rectangles. + */ + +int gx = 15; +int gy = 35; +float leftColor = 0.0; +float rightColor = 0.0; + +void setup() { + size(200, 200); + colorMode(RGB, 1.0); + noStroke(); +} + +void draw() { + background(0.0); + update(mouseX); + fill(0.0, leftColor + 0.4, leftColor + 0.6); + rect(width/4-gx, height/2-gx, gx*2, gx*2); + fill(0.0, rightColor + 0.2, rightColor + 0.4); + rect(width/1.33-gy, height/2-gy, gy*2, gy*2); +} + +void update(int x) { + leftColor = -0.002 * x/2 + 0.06; + rightColor = 0.002 * x/2 + 0.06; + + gx = x/2; + gy = 100-x/2; + + if (gx < 10) { + gx = 10; + } else if (gx > 90) { + gx = 90; + } + + if (gy > 90) { + gy = 90; + } else if (gy < 10) { + gy = 10; + } +} diff --git a/java/examples/Basics/Input/Mouse1D/applet/Mouse1D.java b/java/examples/Basics/Input/Mouse1D/applet/Mouse1D.java new file mode 100644 index 000000000..c08cf2368 --- /dev/null +++ b/java/examples/Basics/Input/Mouse1D/applet/Mouse1D.java @@ -0,0 +1,70 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Mouse1D extends PApplet { + +/** + * Mouse 1D. + * + * Move the mouse left and right to shift the balance. + * The "mouseX" variable is used to control both the + * size and color of the rectangles. + */ + +int gx = 15; +int gy = 35; +float leftColor = 0.0f; +float rightColor = 0.0f; + +public void setup() +{ + size(200, 200); + colorMode(RGB, 1.0f); + noStroke(); +} + +public void draw() +{ + background(0.0f); + update(mouseX); + fill(0.0f, leftColor + 0.4f, leftColor + 0.6f); + rect(width/4-gx, width/2-gx, gx*2, gx*2); + fill(0.0f, rightColor + 0.2f, rightColor + 0.4f); + rect(width/1.33f-gy, width/2-gy, gy*2, gy*2); +} + +public void update(int x) +{ + leftColor = -0.002f * x/2 + 0.06f; + rightColor = 0.002f * x/2 + 0.06f; + + gx = x/2; + gy = 100-x/2; + + if (gx < 10) { + gx = 10; + } else if (gx > 90) { + gx = 90; + } + + if (gy > 90) { + gy = 90; + } else if (gy < 10) { + gy = 10; + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Mouse1D" }); + } +} diff --git a/java/examples/Basics/Input/Mouse1D/applet/Mouse1D.pde b/java/examples/Basics/Input/Mouse1D/applet/Mouse1D.pde new file mode 100644 index 000000000..2d1da507f --- /dev/null +++ b/java/examples/Basics/Input/Mouse1D/applet/Mouse1D.pde @@ -0,0 +1,50 @@ +/** + * Mouse 1D. + * + * Move the mouse left and right to shift the balance. + * The "mouseX" variable is used to control both the + * size and color of the rectangles. + */ + +int gx = 15; +int gy = 35; +float leftColor = 0.0; +float rightColor = 0.0; + +void setup() +{ + size(200, 200); + colorMode(RGB, 1.0); + noStroke(); +} + +void draw() +{ + background(0.0); + update(mouseX); + fill(0.0, leftColor + 0.4, leftColor + 0.6); + rect(width/4-gx, width/2-gx, gx*2, gx*2); + fill(0.0, rightColor + 0.2, rightColor + 0.4); + rect(width/1.33-gy, width/2-gy, gy*2, gy*2); +} + +void update(int x) +{ + leftColor = -0.002 * x/2 + 0.06; + rightColor = 0.002 * x/2 + 0.06; + + gx = x/2; + gy = 100-x/2; + + if (gx < 10) { + gx = 10; + } else if (gx > 90) { + gx = 90; + } + + if (gy > 90) { + gy = 90; + } else if (gy < 10) { + gy = 10; + } +} diff --git a/java/examples/Basics/Input/Mouse1D/applet/loading.gif b/java/examples/Basics/Input/Mouse1D/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/Mouse2D/Mouse2D.pde b/java/examples/Basics/Input/Mouse2D/Mouse2D.pde new file mode 100644 index 000000000..c316bc6ce --- /dev/null +++ b/java/examples/Basics/Input/Mouse2D/Mouse2D.pde @@ -0,0 +1,24 @@ +/** + * Mouse 2D. + * + * Moving the mouse changes the position and size of each box. + */ + +void setup() +{ + size(200, 200); + noStroke(); + rectMode(CENTER); +} + +void draw() +{ + background(51); + fill(255, 204); + rect(mouseX, height/2, mouseY/2+10, mouseY/2+10); + fill(255, 204); + int inverseX = width-mouseX; + int inverseY = height-mouseY; + rect(inverseX, height/2, (inverseY/2)+10, (inverseY/2)+10); +} + diff --git a/java/examples/Basics/Input/Mouse2D/applet/Mouse2D.java b/java/examples/Basics/Input/Mouse2D/applet/Mouse2D.java new file mode 100644 index 000000000..aee6375f4 --- /dev/null +++ b/java/examples/Basics/Input/Mouse2D/applet/Mouse2D.java @@ -0,0 +1,45 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Mouse2D extends PApplet { + +/** + * Mouse 2D. + * + * Moving the mouse changes the position and size of each box. + */ + +public void setup() +{ + size(200, 200); + noStroke(); + colorMode(RGB, 255, 255, 255, 100); + rectMode(CENTER); +} + +public void draw() +{ + background(51); + fill(255, 80); + rect(mouseX, height/2, mouseY/2+10, mouseY/2+10); + fill(255, 80); + int inverseX = width-mouseX; + int inverseY = height-mouseY; + rect(inverseX, height/2, (inverseY/2)+10, (inverseY/2)+10); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Mouse2D" }); + } +} diff --git a/java/examples/Basics/Input/Mouse2D/applet/Mouse2D.pde b/java/examples/Basics/Input/Mouse2D/applet/Mouse2D.pde new file mode 100644 index 000000000..d1c36a258 --- /dev/null +++ b/java/examples/Basics/Input/Mouse2D/applet/Mouse2D.pde @@ -0,0 +1,25 @@ +/** + * Mouse 2D. + * + * Moving the mouse changes the position and size of each box. + */ + +void setup() +{ + size(200, 200); + noStroke(); + colorMode(RGB, 255, 255, 255, 100); + rectMode(CENTER); +} + +void draw() +{ + background(51); + fill(255, 80); + rect(mouseX, height/2, mouseY/2+10, mouseY/2+10); + fill(255, 80); + int inverseX = width-mouseX; + int inverseY = height-mouseY; + rect(inverseX, height/2, (inverseY/2)+10, (inverseY/2)+10); +} + diff --git a/java/examples/Basics/Input/Mouse2D/applet/loading.gif b/java/examples/Basics/Input/Mouse2D/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/MouseFunctions/MouseFunctions.pde b/java/examples/Basics/Input/MouseFunctions/MouseFunctions.pde new file mode 100644 index 000000000..8d4e0fe36 --- /dev/null +++ b/java/examples/Basics/Input/MouseFunctions/MouseFunctions.pde @@ -0,0 +1,68 @@ +/** + * Mouse Functions. + * + * Click on the box and drag it across the screen. + */ + +float bx; +float by; +int bs = 20; +boolean bover = false; +boolean locked = false; +float bdifx = 0.0; +float bdify = 0.0; + + +void setup() +{ + size(200, 200); + bx = width/2.0; + by = height/2.0; + rectMode(RADIUS); +} + +void draw() +{ + background(0); + + // Test if the cursor is over the box + if (mouseX > bx-bs && mouseX < bx+bs && + mouseY > by-bs && mouseY < by+bs) { + bover = true; + if(!locked) { + stroke(255); + fill(153); + } + } else { + stroke(153); + fill(153); + bover = false; + } + + // Draw the box + rect(bx, by, bs, bs); +} + +void mousePressed() { + if(bover) { + locked = true; + fill(255, 255, 255); + } else { + locked = false; + } + bdifx = mouseX-bx; + bdify = mouseY-by; + +} + +void mouseDragged() { + if(locked) { + bx = mouseX-bdifx; + by = mouseY-bdify; + } +} + +void mouseReleased() { + locked = false; +} + diff --git a/java/examples/Basics/Input/MouseFunctions/applet/MouseFunctions.java b/java/examples/Basics/Input/MouseFunctions/applet/MouseFunctions.java new file mode 100644 index 000000000..5b89aeff0 --- /dev/null +++ b/java/examples/Basics/Input/MouseFunctions/applet/MouseFunctions.java @@ -0,0 +1,88 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class MouseFunctions extends PApplet { + +/** + * Mouse Functions. + * + * Click on the box and drag it across the screen. + */ + +float bx; +float by; +int bs = 20; +boolean bover = false; +boolean locked = false; +float bdifx = 0.0f; +float bdify = 0.0f; + + +public void setup() +{ + size(200, 200); + bx = width/2.0f; + by = height/2.0f; + rectMode(CENTER_RADIUS); +} + +public void draw() +{ + background(0); + + // Test if the cursor is over the box + if (mouseX > bx-bs && mouseX < bx+bs && + mouseY > by-bs && mouseY < by+bs) { + bover = true; + if(!locked) { + stroke(255); + fill(153); + } + } else { + stroke(153); + fill(153); + bover = false; + } + + // Draw the box + rect(bx, by, bs, bs); +} + +public void mousePressed() { + if(bover) { + locked = true; + fill(255, 255, 255); + } else { + locked = false; + } + bdifx = mouseX-bx; + bdify = mouseY-by; + +} + +public void mouseDragged() { + if(locked) { + bx = mouseX-bdifx; + by = mouseY-bdify; + } +} + +public void mouseReleased() { + locked = false; +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "MouseFunctions" }); + } +} diff --git a/java/examples/Basics/Input/MouseFunctions/applet/MouseFunctions.pde b/java/examples/Basics/Input/MouseFunctions/applet/MouseFunctions.pde new file mode 100644 index 000000000..22717d718 --- /dev/null +++ b/java/examples/Basics/Input/MouseFunctions/applet/MouseFunctions.pde @@ -0,0 +1,68 @@ +/** + * Mouse Functions. + * + * Click on the box and drag it across the screen. + */ + +float bx; +float by; +int bs = 20; +boolean bover = false; +boolean locked = false; +float bdifx = 0.0; +float bdify = 0.0; + + +void setup() +{ + size(200, 200); + bx = width/2.0; + by = height/2.0; + rectMode(CENTER_RADIUS); +} + +void draw() +{ + background(0); + + // Test if the cursor is over the box + if (mouseX > bx-bs && mouseX < bx+bs && + mouseY > by-bs && mouseY < by+bs) { + bover = true; + if(!locked) { + stroke(255); + fill(153); + } + } else { + stroke(153); + fill(153); + bover = false; + } + + // Draw the box + rect(bx, by, bs, bs); +} + +void mousePressed() { + if(bover) { + locked = true; + fill(255, 255, 255); + } else { + locked = false; + } + bdifx = mouseX-bx; + bdify = mouseY-by; + +} + +void mouseDragged() { + if(locked) { + bx = mouseX-bdifx; + by = mouseY-bdify; + } +} + +void mouseReleased() { + locked = false; +} + diff --git a/java/examples/Basics/Input/MouseFunctions/applet/loading.gif b/java/examples/Basics/Input/MouseFunctions/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/MousePress/MousePress.pde b/java/examples/Basics/Input/MousePress/MousePress.pde new file mode 100644 index 000000000..526eced76 --- /dev/null +++ b/java/examples/Basics/Input/MousePress/MousePress.pde @@ -0,0 +1,23 @@ +/** + * Click. + * + * Move the mouse to position the shape. + * Press the mouse button to invert the color. + */ + + +void setup() { + size(200, 200); + fill(126); + background(102); +} + +void draw() { + if(mousePressed) { + stroke(255); + } else { + stroke(0); + } + line(mouseX-66, mouseY, mouseX+66, mouseY); + line(mouseX, mouseY-66, mouseX, mouseY+66); +} diff --git a/java/examples/Basics/Input/MousePress/applet/MousePress.java b/java/examples/Basics/Input/MousePress/applet/MousePress.java new file mode 100644 index 000000000..82bc9f6ca --- /dev/null +++ b/java/examples/Basics/Input/MousePress/applet/MousePress.java @@ -0,0 +1,43 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class MousePress extends PApplet { + +/** + * Click. + * + * Move the mouse to position the shape. + * Press the mouse button to invert the color. + */ + + +public void setup() { + size(200, 200); + fill(126); + background(102); +} + +public void draw() { + if(mousePressed) { + stroke(255); + } else { + stroke(0); + } + line(mouseX-66, mouseY, mouseX+66, mouseY); + line(mouseX, mouseY-66, mouseX, mouseY+66); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "MousePress" }); + } +} diff --git a/java/examples/Basics/Input/MousePress/applet/MousePress.pde b/java/examples/Basics/Input/MousePress/applet/MousePress.pde new file mode 100644 index 000000000..526eced76 --- /dev/null +++ b/java/examples/Basics/Input/MousePress/applet/MousePress.pde @@ -0,0 +1,23 @@ +/** + * Click. + * + * Move the mouse to position the shape. + * Press the mouse button to invert the color. + */ + + +void setup() { + size(200, 200); + fill(126); + background(102); +} + +void draw() { + if(mousePressed) { + stroke(255); + } else { + stroke(0); + } + line(mouseX-66, mouseY, mouseX+66, mouseY); + line(mouseX, mouseY-66, mouseX, mouseY+66); +} diff --git a/java/examples/Basics/Input/MousePress/applet/loading.gif b/java/examples/Basics/Input/MousePress/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/MouseSignals/MouseSignals.pde b/java/examples/Basics/Input/MouseSignals/MouseSignals.pde new file mode 100644 index 000000000..6e1fd2bbc --- /dev/null +++ b/java/examples/Basics/Input/MouseSignals/MouseSignals.pde @@ -0,0 +1,54 @@ +/** + * Mouse Signals. + * + * Move and click the mouse to generate signals. + * The top row is the signal from "mouseX", + * the middle row is the signal from "mouseY", + * and the bottom row is the signal from "mousePressed". + */ + +int[] xvals; +int[] yvals; +int[] bvals; + +void setup() +{ + size(200, 200); + xvals = new int[width]; + yvals = new int[width]; + bvals = new int[width]; +} + +int arrayindex = 0; + +void draw() +{ + background(102); + + for(int i=1; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Input/StoringInput/StoringInput.pde b/java/examples/Basics/Input/StoringInput/StoringInput.pde new file mode 100644 index 000000000..6bd986ea9 --- /dev/null +++ b/java/examples/Basics/Input/StoringInput/StoringInput.pde @@ -0,0 +1,38 @@ +/** + * Storing Input. + * + * Move the mouse across the screen to change the position + * of the circles. The positions of the mouse are recorded + * into an array and played back every frame. Between each + * frame, the newest value are added to the end of each array + * and the oldest value is deleted. + * + * Updated 27 February 2010. + */ + +int num = 60; +float mx[] = new float[num]; +float my[] = new float[num]; + +void setup() { + size(200, 200); + smooth(); + noStroke(); + fill(255, 153); +} + +void draw() { + background(51); + + // Cycle through the array, using a different entry on each frame. + // Using modulo (%) like this is faster than moving all the values over. + int which = frameCount % num; + mx[which] = mouseX; + my[which] = mouseY; + + for (int i = 0; i < num; i++) { + // which+1 is the smallest (the oldest in the array) + int index = (which+1 + i) % num; + ellipse(mx[index], my[index], i/2, i/2); + } +} diff --git a/java/examples/Basics/Input/StoringInput/applet/StoringInput.java b/java/examples/Basics/Input/StoringInput/applet/StoringInput.java new file mode 100644 index 000000000..98d0ee88e --- /dev/null +++ b/java/examples/Basics/Input/StoringInput/applet/StoringInput.java @@ -0,0 +1,60 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class StoringInput extends PApplet { + +/** + * Storing Input. + * + * Move the mouse across the screen to change the position + * of the circles. The positions of the mouse are recorded + * into an array and played back every frame. Between each + * frame, the newest value are added to the end of each array + * and the oldest value is deleted. + */ + +int num = 60; +float mx[] = new float[num]; +float my[] = new float[num]; + +public void setup() +{ + size(200, 200); + smooth(); + noStroke(); + fill(255, 153); +} + +public void draw() +{ + background(51); + + // Reads throught the entire array + // and shifts the values to the left + for(int i=1; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/AdditiveWave/AdditiveWave.pde b/java/examples/Basics/Math/AdditiveWave/AdditiveWave.pde new file mode 100644 index 000000000..14ba9914f --- /dev/null +++ b/java/examples/Basics/Math/AdditiveWave/AdditiveWave.pde @@ -0,0 +1,69 @@ +/** + * Additive Wave + * by Daniel Shiffman. + * + * Create a more complex wave by adding two waves together. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave +int maxwaves = 4; // total # of waves to add together + +float theta = 0.0; +float[] amplitude = new float[maxwaves]; // Height of wave +float[] dx = new float[maxwaves]; // Value for incrementing X, to be calculated as a function of period and xspacing +float[] yvalues; // Using an array to store height values for the wave (not entirely necessary) + +void setup() { + size(200, 200); + frameRate(30); + colorMode(RGB, 255, 255, 255, 100); + smooth(); + w = width + 16; + + for (int i = 0; i < maxwaves; i++) { + amplitude[i] = random(10,30); + float period = random(100,300); // How many pixels before the wave repeats + dx[i] = (TWO_PI / period) * xspacing; + } + + yvalues = new float[w/xspacing]; +} + +void draw() { + background(0); + calcWave(); + renderWave(); +} + +void calcWave() { + // Increment theta (try different values for 'angular velocity' here + theta += 0.02; + + // Set all height values to zero + for (int i = 0; i < yvalues.length; i++) { + yvalues[i] = 0; + } + + // Accumulate wave height values + for (int j = 0; j < maxwaves; j++) { + float x = theta; + for (int i = 0; i < yvalues.length; i++) { + // Every other wave is cosine instead of sine + if (j % 2 == 0) yvalues[i] += sin(x)*amplitude[j]; + else yvalues[i] += cos(x)*amplitude[j]; + x+=dx[j]; + } + } +} + +void renderWave() { + // A simple way to draw the wave with an ellipse at each location + noStroke(); + fill(255,50); + ellipseMode(CENTER); + for (int x = 0; x < yvalues.length; x++) { + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + diff --git a/java/examples/Basics/Math/AdditiveWave/applet/AdditiveWave.java b/java/examples/Basics/Math/AdditiveWave/applet/AdditiveWave.java new file mode 100644 index 000000000..083c2d276 --- /dev/null +++ b/java/examples/Basics/Math/AdditiveWave/applet/AdditiveWave.java @@ -0,0 +1,89 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class AdditiveWave extends PApplet { + +/** + * Additive Wave + * by Daniel Shiffman. + * + * Create a more complex wave by adding two waves together. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave +int maxwaves = 4; // total # of waves to add together + +float theta = 0.0f; +float[] amplitude = new float[maxwaves]; // Height of wave +float[] dx = new float[maxwaves]; // Value for incrementing X, to be calculated as a function of period and xspacing +float[] yvalues; // Using an array to store height values for the wave (not entirely necessary) + +public void setup() { + size(200, 200); + frameRate(30); + colorMode(RGB, 255, 255, 255, 100); + smooth(); + w = width + 16; + + for (int i = 0; i < maxwaves; i++) { + amplitude[i] = random(10,30); + float period = random(100,300); // How many pixels before the wave repeats + dx[i] = (TWO_PI / period) * xspacing; + } + + yvalues = new float[w/xspacing]; +} + +public void draw() { + background(0); + calcWave(); + renderWave(); +} + +public void calcWave() { + // Increment theta (try different values for 'angular velocity' here + theta += 0.02f; + + // Set all height values to zero + for (int i = 0; i < yvalues.length; i++) { + yvalues[i] = 0; + } + + // Accumulate wave height values + for (int j = 0; j < maxwaves; j++) { + float x = theta; + for (int i = 0; i < yvalues.length; i++) { + // Every other wave is cosine instead of sine + if (j % 2 == 0) yvalues[i] += sin(x)*amplitude[j]; + else yvalues[i] += cos(x)*amplitude[j]; + x+=dx[j]; + } + } +} + +public void renderWave() { + // A simple way to draw the wave with an ellipse at each location + noStroke(); + fill(255,50); + ellipseMode(CENTER); + for (int x = 0; x < yvalues.length; x++) { + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "AdditiveWave" }); + } +} diff --git a/java/examples/Basics/Math/AdditiveWave/applet/AdditiveWave.pde b/java/examples/Basics/Math/AdditiveWave/applet/AdditiveWave.pde new file mode 100644 index 000000000..14ba9914f --- /dev/null +++ b/java/examples/Basics/Math/AdditiveWave/applet/AdditiveWave.pde @@ -0,0 +1,69 @@ +/** + * Additive Wave + * by Daniel Shiffman. + * + * Create a more complex wave by adding two waves together. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave +int maxwaves = 4; // total # of waves to add together + +float theta = 0.0; +float[] amplitude = new float[maxwaves]; // Height of wave +float[] dx = new float[maxwaves]; // Value for incrementing X, to be calculated as a function of period and xspacing +float[] yvalues; // Using an array to store height values for the wave (not entirely necessary) + +void setup() { + size(200, 200); + frameRate(30); + colorMode(RGB, 255, 255, 255, 100); + smooth(); + w = width + 16; + + for (int i = 0; i < maxwaves; i++) { + amplitude[i] = random(10,30); + float period = random(100,300); // How many pixels before the wave repeats + dx[i] = (TWO_PI / period) * xspacing; + } + + yvalues = new float[w/xspacing]; +} + +void draw() { + background(0); + calcWave(); + renderWave(); +} + +void calcWave() { + // Increment theta (try different values for 'angular velocity' here + theta += 0.02; + + // Set all height values to zero + for (int i = 0; i < yvalues.length; i++) { + yvalues[i] = 0; + } + + // Accumulate wave height values + for (int j = 0; j < maxwaves; j++) { + float x = theta; + for (int i = 0; i < yvalues.length; i++) { + // Every other wave is cosine instead of sine + if (j % 2 == 0) yvalues[i] += sin(x)*amplitude[j]; + else yvalues[i] += cos(x)*amplitude[j]; + x+=dx[j]; + } + } +} + +void renderWave() { + // A simple way to draw the wave with an ellipse at each location + noStroke(); + fill(255,50); + ellipseMode(CENTER); + for (int x = 0; x < yvalues.length; x++) { + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + diff --git a/java/examples/Basics/Math/AdditiveWave/applet/loading.gif b/java/examples/Basics/Math/AdditiveWave/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Arctangent/Arctangent.pde b/java/examples/Basics/Math/Arctangent/Arctangent.pde new file mode 100644 index 000000000..b03e0bda6 --- /dev/null +++ b/java/examples/Basics/Math/Arctangent/Arctangent.pde @@ -0,0 +1,67 @@ +/** + * Arctangent. + * + * Move the mouse to change the direction of the eyes. + * The atan2() function computes the angle from each eye + * to the cursor. + */ + +Eye e1, e2, e3, e4, e5; + +void setup() +{ + size(200, 200); + smooth(); + noStroke(); + e1 = new Eye( 50, 16, 80); + e2 = new Eye( 64, 85, 40); + e3 = new Eye( 90, 200, 120); + e4 = new Eye(150, 44, 40); + e5 = new Eye(175, 120, 80); +} + +void draw() +{ + background(102); + + e1.update(mouseX, mouseY); + e2.update(mouseX, mouseY); + e3.update(mouseX, mouseY); + e4.update(mouseX, mouseY); + e5.update(mouseX, mouseY); + + e1.display(); + e2.display(); + e3.display(); + e4.display(); + e5.display(); +} + +class Eye +{ + int ex, ey; + int size; + float angle = 0.0; + + Eye(int x, int y, int s) { + ex = x; + ey = y; + size = s; + } + + void update(int mx, int my) { + angle = atan2(my-ey, mx-ex); + } + + void display() { + pushMatrix(); + translate(ex, ey); + fill(255); + ellipse(0, 0, size, size); + rotate(angle); + fill(153); + ellipse(size/4, 0, size/2, size/2); + popMatrix(); + } +} + diff --git a/java/examples/Basics/Math/Arctangent/applet/Arctangent.java b/java/examples/Basics/Math/Arctangent/applet/Arctangent.java new file mode 100644 index 000000000..c0e2c9b5a --- /dev/null +++ b/java/examples/Basics/Math/Arctangent/applet/Arctangent.java @@ -0,0 +1,87 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Arctangent extends PApplet { + +/** + * Arctangent. + * + * Move the mouse to change the direction of the eyes. + * The atan2() function computes the angle from each eye + * to the cursor. + */ + +Eye e1, e2, e3, e4, e5; + +public void setup() +{ + size(200, 200); + smooth(); + noStroke(); + e1 = new Eye( 50, 16, 80); + e2 = new Eye( 64, 85, 40); + e3 = new Eye( 90, 200, 120); + e4 = new Eye(150, 44, 40); + e5 = new Eye(175, 120, 80); +} + +public void draw() +{ + background(102); + + e1.update(mouseX, mouseY); + e2.update(mouseX, mouseY); + e3.update(mouseX, mouseY); + e4.update(mouseX, mouseY); + e5.update(mouseX, mouseY); + + e1.display(); + e2.display(); + e3.display(); + e4.display(); + e5.display(); +} + +class Eye +{ + int ex, ey; + int size; + float angle = 0.0f; + + Eye(int x, int y, int s) { + ex = x; + ey = y; + size = s; + } + + public void update(int mx, int my) { + angle = atan2(my-ey, mx-ex); + } + + public void display() { + pushMatrix(); + translate(ex, ey); + fill(255); + ellipse(0, 0, size, size); + rotate(angle); + fill(153); + ellipse(size/4, 0, size/2, size/2); + popMatrix(); + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Arctangent" }); + } +} diff --git a/java/examples/Basics/Math/Arctangent/applet/Arctangent.pde b/java/examples/Basics/Math/Arctangent/applet/Arctangent.pde new file mode 100644 index 000000000..b03e0bda6 --- /dev/null +++ b/java/examples/Basics/Math/Arctangent/applet/Arctangent.pde @@ -0,0 +1,67 @@ +/** + * Arctangent. + * + * Move the mouse to change the direction of the eyes. + * The atan2() function computes the angle from each eye + * to the cursor. + */ + +Eye e1, e2, e3, e4, e5; + +void setup() +{ + size(200, 200); + smooth(); + noStroke(); + e1 = new Eye( 50, 16, 80); + e2 = new Eye( 64, 85, 40); + e3 = new Eye( 90, 200, 120); + e4 = new Eye(150, 44, 40); + e5 = new Eye(175, 120, 80); +} + +void draw() +{ + background(102); + + e1.update(mouseX, mouseY); + e2.update(mouseX, mouseY); + e3.update(mouseX, mouseY); + e4.update(mouseX, mouseY); + e5.update(mouseX, mouseY); + + e1.display(); + e2.display(); + e3.display(); + e4.display(); + e5.display(); +} + +class Eye +{ + int ex, ey; + int size; + float angle = 0.0; + + Eye(int x, int y, int s) { + ex = x; + ey = y; + size = s; + } + + void update(int mx, int my) { + angle = atan2(my-ey, mx-ex); + } + + void display() { + pushMatrix(); + translate(ex, ey); + fill(255); + ellipse(0, 0, size, size); + rotate(angle); + fill(153); + ellipse(size/4, 0, size/2, size/2); + popMatrix(); + } +} + diff --git a/java/examples/Basics/Math/Arctangent/applet/loading.gif b/java/examples/Basics/Math/Arctangent/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Distance1D/Distance1D.pde b/java/examples/Basics/Math/Distance1D/Distance1D.pde new file mode 100644 index 000000000..a17b3febc --- /dev/null +++ b/java/examples/Basics/Math/Distance1D/Distance1D.pde @@ -0,0 +1,51 @@ +/** + * Distance 1D. + * + * Move the mouse left and right to control the + * speed and direction of the moving shapes. + */ + +int thin = 8; +int thick = 36; +float xpos1 = 134.0; +float xpos2 = 44.0; +float xpos3 = 58.0; +float xpos4 = 120.0; + +void setup() +{ + size(200, 200); + noStroke(); + frameRate(60); +} + +void draw() +{ + background(0); + + float mx = mouseX * 0.4 - width/5.0; + + fill(102); + rect(xpos2, 0, thick, height/2); + fill(204); + rect(xpos1, 0, thin, height/2); + fill(102); + rect(xpos4, height/2, thick, height/2); + fill(204); + rect(xpos3, height/2, thin, height/2); + + xpos1 += mx/16; + xpos2 += mx/64; + xpos3 -= mx/16; + xpos4 -= mx/64; + + if(xpos1 < -thin) { xpos1 = width; } + if(xpos1 > width) { xpos1 = -thin; } + if(xpos2 < -thick) { xpos2 = width; } + if(xpos2 > width) { xpos2 = -thick; } + if(xpos3 < -thin) { xpos3 = width; } + if(xpos3 > width) { xpos3 = -thin; } + if(xpos4 < -thick) { xpos4 = width; } + if(xpos4 > width) { xpos4 = -thick; } +} + diff --git a/java/examples/Basics/Math/Distance1D/applet/Distance1D.java b/java/examples/Basics/Math/Distance1D/applet/Distance1D.java new file mode 100644 index 000000000..28b2212af --- /dev/null +++ b/java/examples/Basics/Math/Distance1D/applet/Distance1D.java @@ -0,0 +1,71 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Distance1D extends PApplet { + +/** + * Distance 1D. + * + * Move the mouse left and right to control the + * speed and direction of the moving shapes. + */ + +int thin = 8; +int thick = 36; +float xpos1 = 134.0f; +float xpos2 = 44.0f; +float xpos3 = 58.0f; +float xpos4 = 120.0f; + +public void setup() +{ + size(200, 200); + noStroke(); + frameRate(60); +} + +public void draw() +{ + background(0); + + float mx = mouseX * 0.4f - width/5.0f; + + fill(102); + rect(xpos2, 0, thick, height/2); + fill(204); + rect(xpos1, 0, thin, height/2); + fill(102); + rect(xpos4, height/2, thick, height/2); + fill(204); + rect(xpos3, height/2, thin, height/2); + + xpos1 += mx/16; + xpos2 += mx/64; + xpos3 -= mx/16; + xpos4 -= mx/64; + + if(xpos1 < -thin) { xpos1 = width; } + if(xpos1 > width) { xpos1 = -thin; } + if(xpos2 < -thick) { xpos2 = width; } + if(xpos2 > width) { xpos2 = -thick; } + if(xpos3 < -thin) { xpos3 = width; } + if(xpos3 > width) { xpos3 = -thin; } + if(xpos4 < -thick) { xpos4 = width; } + if(xpos4 > width) { xpos4 = -thick; } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Distance1D" }); + } +} diff --git a/java/examples/Basics/Math/Distance1D/applet/Distance1D.pde b/java/examples/Basics/Math/Distance1D/applet/Distance1D.pde new file mode 100644 index 000000000..a17b3febc --- /dev/null +++ b/java/examples/Basics/Math/Distance1D/applet/Distance1D.pde @@ -0,0 +1,51 @@ +/** + * Distance 1D. + * + * Move the mouse left and right to control the + * speed and direction of the moving shapes. + */ + +int thin = 8; +int thick = 36; +float xpos1 = 134.0; +float xpos2 = 44.0; +float xpos3 = 58.0; +float xpos4 = 120.0; + +void setup() +{ + size(200, 200); + noStroke(); + frameRate(60); +} + +void draw() +{ + background(0); + + float mx = mouseX * 0.4 - width/5.0; + + fill(102); + rect(xpos2, 0, thick, height/2); + fill(204); + rect(xpos1, 0, thin, height/2); + fill(102); + rect(xpos4, height/2, thick, height/2); + fill(204); + rect(xpos3, height/2, thin, height/2); + + xpos1 += mx/16; + xpos2 += mx/64; + xpos3 -= mx/16; + xpos4 -= mx/64; + + if(xpos1 < -thin) { xpos1 = width; } + if(xpos1 > width) { xpos1 = -thin; } + if(xpos2 < -thick) { xpos2 = width; } + if(xpos2 > width) { xpos2 = -thick; } + if(xpos3 < -thin) { xpos3 = width; } + if(xpos3 > width) { xpos3 = -thin; } + if(xpos4 < -thick) { xpos4 = width; } + if(xpos4 > width) { xpos4 = -thick; } +} + diff --git a/java/examples/Basics/Math/Distance1D/applet/loading.gif b/java/examples/Basics/Math/Distance1D/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Distance2D/Distance2D.pde b/java/examples/Basics/Math/Distance2D/Distance2D.pde new file mode 100644 index 000000000..e2bfe4b44 --- /dev/null +++ b/java/examples/Basics/Math/Distance2D/Distance2D.pde @@ -0,0 +1,29 @@ +/** + * Distance 2D. + * + * Move the mouse across the image to obscure and reveal the matrix. + * Measures the distance from the mouse to each square and sets the + * size proportionally. + */ + +float max_distance; + +void setup() { + size(200, 200); + smooth(); + noStroke(); + max_distance = dist(0, 0, width, height); +} + +void draw() +{ + background(51); + + for(int i = 0; i <= width; i += 20) { + for(int j = 0; j <= height; j += 20) { + float size = dist(mouseX, mouseY, i, j); + size = size/max_distance * 66; + ellipse(i, j, size, size); + } + } +} diff --git a/java/examples/Basics/Math/Distance2D/applet/Distance2D.java b/java/examples/Basics/Math/Distance2D/applet/Distance2D.java new file mode 100644 index 000000000..c4fe4f70e --- /dev/null +++ b/java/examples/Basics/Math/Distance2D/applet/Distance2D.java @@ -0,0 +1,49 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Distance2D extends PApplet { + +/** + * Distance 2D. + * + * Move the mouse across the image to obscure and reveal the matrix. + * Measures the distance from the mouse to each square and sets the + * size proportionally. + */ + +float max_distance; + +public void setup() { + size(200, 200); + smooth(); + noStroke(); + max_distance = dist(0, 0, width, height); +} + +public void draw() +{ + background(51); + + for(int i = 0; i <= width; i += 20) { + for(int j = 0; j <= height; j += 20) { + float size = dist(mouseX, mouseY, i, j); + size = size/max_distance * 66; + ellipse(i, j, size, size); + } + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Distance2D" }); + } +} diff --git a/java/examples/Basics/Math/Distance2D/applet/Distance2D.pde b/java/examples/Basics/Math/Distance2D/applet/Distance2D.pde new file mode 100644 index 000000000..e2bfe4b44 --- /dev/null +++ b/java/examples/Basics/Math/Distance2D/applet/Distance2D.pde @@ -0,0 +1,29 @@ +/** + * Distance 2D. + * + * Move the mouse across the image to obscure and reveal the matrix. + * Measures the distance from the mouse to each square and sets the + * size proportionally. + */ + +float max_distance; + +void setup() { + size(200, 200); + smooth(); + noStroke(); + max_distance = dist(0, 0, width, height); +} + +void draw() +{ + background(51); + + for(int i = 0; i <= width; i += 20) { + for(int j = 0; j <= height; j += 20) { + float size = dist(mouseX, mouseY, i, j); + size = size/max_distance * 66; + ellipse(i, j, size, size); + } + } +} diff --git a/java/examples/Basics/Math/Distance2D/applet/loading.gif b/java/examples/Basics/Math/Distance2D/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/DoubleRandom/DoubleRandom.pde b/java/examples/Basics/Math/DoubleRandom/DoubleRandom.pde new file mode 100644 index 000000000..a33bc7523 --- /dev/null +++ b/java/examples/Basics/Math/DoubleRandom/DoubleRandom.pde @@ -0,0 +1,20 @@ +/** + * Double Random + * by Ira Greenberg. + * + * Using two random() calls and the point() function + * to create an irregular sawtooth line. + */ + +size(200, 200); +background(0); +int totalPts = 300; +float steps = totalPts + 1; +stroke(255); +float rand = 0; + +for (int i = 1; i < steps; i++){ + point( (width/steps) * i, (height/2) + random(-rand, rand) ); + rand += random(-5, 5); +} + diff --git a/java/examples/Basics/Math/DoubleRandom/applet/DoubleRandom.java b/java/examples/Basics/Math/DoubleRandom/applet/DoubleRandom.java new file mode 100644 index 000000000..bea794379 --- /dev/null +++ b/java/examples/Basics/Math/DoubleRandom/applet/DoubleRandom.java @@ -0,0 +1,41 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class DoubleRandom extends PApplet { + public void setup() {/** + * Double Random + * by Ira Greenberg. + * + * Using 2 random() calls the and point() function + * to create an irregular sawtooth line. + */ + +size(200, 200); +background(0); +int totalPts = 300; +float steps = totalPts+1; +stroke(255); +float rand = 0; + +for (int i=1; i< steps; i++){ + point( (width/steps) * i, (height/2) + random(-rand, rand) ); + rand += random(-5, 5); +} + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "DoubleRandom" }); + } +} diff --git a/java/examples/Basics/Math/DoubleRandom/applet/DoubleRandom.pde b/java/examples/Basics/Math/DoubleRandom/applet/DoubleRandom.pde new file mode 100644 index 000000000..10b1fe0c9 --- /dev/null +++ b/java/examples/Basics/Math/DoubleRandom/applet/DoubleRandom.pde @@ -0,0 +1,20 @@ +/** + * Double Random + * by Ira Greenberg. + * + * Using 2 random() calls the and point() function + * to create an irregular sawtooth line. + */ + +size(200, 200); +background(0); +int totalPts = 300; +float steps = totalPts+1; +stroke(255); +float rand = 0; + +for (int i=1; i< steps; i++){ + point( (width/steps) * i, (height/2) + random(-rand, rand) ); + rand += random(-5, 5); +} + diff --git a/java/examples/Basics/Math/DoubleRandom/applet/loading.gif b/java/examples/Basics/Math/DoubleRandom/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Graphing2DEquation/Graphing2DEquation.pde b/java/examples/Basics/Math/Graphing2DEquation/Graphing2DEquation.pde new file mode 100644 index 000000000..bd20ed864 --- /dev/null +++ b/java/examples/Basics/Math/Graphing2DEquation/Graphing2DEquation.pde @@ -0,0 +1,40 @@ +/** + * Graphing 2D Equations + * by Daniel Shiffman. + * + * Graphics the following equation: + * sin(n*cos(r) + 5*theta) + * where n is a function of horizontal mouse location. + */ + +void setup() { + size(200,200); + frameRate(30); +} + +void draw() { + loadPixels(); + float n = (mouseX * 10.0) / width; + float w = 16.0; // 2D space width + float h = 16.0; // 2D space height + float dx = w / width; // Increment x this amount per pixel + float dy = h / height; // Increment y this amount per pixel + float x = -w/2; // Start x at -1 * width / 2 + for (int i = 0; i < width; i++) { + float y = -h/2; // Start y at -1 * height / 2 + for (int j = 0; j < height; j++) { + float r = sqrt((x*x) + (y*y)); // Convert cartesian to polar + float theta = atan2(y,x); // Convert cartesian to polar + // Compute 2D polar coordinate function + float val = sin(n*cos(r) + 5 * theta); // Results in a value between -1 and 1 + //float val = cos(r); // Another simple function + //float val = sin(theta); // Another simple function + // Map resulting vale to grayscale value + pixels[i+j*width] = color((val + 1.0) * 255.0/2.0); // Scale to between 0 and 255 + y += dy; // Increment y + } + x += dx; // Increment x + } + updatePixels(); +} + diff --git a/java/examples/Basics/Math/Graphing2DEquation/applet/Graphing2DEquation.java b/java/examples/Basics/Math/Graphing2DEquation/applet/Graphing2DEquation.java new file mode 100644 index 000000000..2049a3988 --- /dev/null +++ b/java/examples/Basics/Math/Graphing2DEquation/applet/Graphing2DEquation.java @@ -0,0 +1,60 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Graphing2DEquation extends PApplet { + +/** + * Graphing 2D Equations + * by Daniel Shiffman. + * + * Graphics the following equation: + * sin(n*cos(r) + 5*theta) + * where n is a function of horizontal mouse location. + */ + +public void setup() { + size(200,200); + frameRate(30); +} + +public void draw() { + loadPixels(); + float n = (mouseX * 10.0f) / width; + float w = 16.0f; // 2D space width + float h = 16.0f; // 2D space height + float dx = w / width; // Increment x this amount per pixel + float dy = h / height; // Increment y this amount per pixel + float x = -w/2; // Start x at -1 * width / 2 + for (int i = 0; i < width; i++) { + float y = -h/2; // Start y at -1 * height / 2 + for (int j = 0; j < height; j++) { + float r = sqrt((x*x) + (y*y)); // Convert cartesian to polar + float theta = atan2(y,x); // Convert cartesian to polar + // Compute 2D polar coordinate function + float val = sin(n*cos(r) + 5 * theta); // Results in a value between -1 and 1 + //float val = cos(r); // Another simple function + //float val = sin(theta); // Another simple function + // Map resulting vale to grayscale value + pixels[i+j*width] = color((val + 1.0f) * 255.0f/2.0f); // Scale to between 0 and 255 + y += dy; // Increment y + } + x += dx; // Increment x + } + updatePixels(); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Graphing2DEquation" }); + } +} diff --git a/java/examples/Basics/Math/Graphing2DEquation/applet/Graphing2DEquation.pde b/java/examples/Basics/Math/Graphing2DEquation/applet/Graphing2DEquation.pde new file mode 100644 index 000000000..bd20ed864 --- /dev/null +++ b/java/examples/Basics/Math/Graphing2DEquation/applet/Graphing2DEquation.pde @@ -0,0 +1,40 @@ +/** + * Graphing 2D Equations + * by Daniel Shiffman. + * + * Graphics the following equation: + * sin(n*cos(r) + 5*theta) + * where n is a function of horizontal mouse location. + */ + +void setup() { + size(200,200); + frameRate(30); +} + +void draw() { + loadPixels(); + float n = (mouseX * 10.0) / width; + float w = 16.0; // 2D space width + float h = 16.0; // 2D space height + float dx = w / width; // Increment x this amount per pixel + float dy = h / height; // Increment y this amount per pixel + float x = -w/2; // Start x at -1 * width / 2 + for (int i = 0; i < width; i++) { + float y = -h/2; // Start y at -1 * height / 2 + for (int j = 0; j < height; j++) { + float r = sqrt((x*x) + (y*y)); // Convert cartesian to polar + float theta = atan2(y,x); // Convert cartesian to polar + // Compute 2D polar coordinate function + float val = sin(n*cos(r) + 5 * theta); // Results in a value between -1 and 1 + //float val = cos(r); // Another simple function + //float val = sin(theta); // Another simple function + // Map resulting vale to grayscale value + pixels[i+j*width] = color((val + 1.0) * 255.0/2.0); // Scale to between 0 and 255 + y += dy; // Increment y + } + x += dx; // Increment x + } + updatePixels(); +} + diff --git a/java/examples/Basics/Math/Graphing2DEquation/applet/loading.gif b/java/examples/Basics/Math/Graphing2DEquation/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/IncrementDecrement/IncrementDecrement.pde b/java/examples/Basics/Math/IncrementDecrement/IncrementDecrement.pde new file mode 100644 index 000000000..8398c5faa --- /dev/null +++ b/java/examples/Basics/Math/IncrementDecrement/IncrementDecrement.pde @@ -0,0 +1,46 @@ +/** + * Increment Decrement. + * + * Writing "a++" is equivalent to "a = a + 1". + * Writing "a--" is equivalent to "a = a - 1". + */ + +int a; +int b; +boolean direction; + +void setup() +{ + size(200, 200); + colorMode(RGB, width); + a = 0; + b = width; + direction = true; + frameRate(30); +} + +void draw() +{ + a++; + if(a > width) { + a = 0; + direction = !direction; + } + if(direction == true){ + stroke(a); + } else { + stroke(width-a); + } + line(a, 0, a, height/2); + + b--; + if(b < 0) { + b = width; + } + if(direction == true) { + stroke(width-b); + } else { + stroke(b); + } + line(b, height/2+1, b, height); +} diff --git a/java/examples/Basics/Math/IncrementDecrement/applet/IncrementDecrement.java b/java/examples/Basics/Math/IncrementDecrement/applet/IncrementDecrement.java new file mode 100644 index 000000000..87cdd99d6 --- /dev/null +++ b/java/examples/Basics/Math/IncrementDecrement/applet/IncrementDecrement.java @@ -0,0 +1,66 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class IncrementDecrement extends PApplet { + +/** + * Increment Decrement. + * + * Writing "a++" is equivalent to "a = a + 1". + * Writing "a--" is equivalent to "a = a - 1". + */ + +int a; +int b; +boolean direction; + +public void setup() +{ + size(200, 200); + colorMode(RGB, width); + a = 0; + b = width; + direction = true; + frameRate(30); +} + +public void draw() +{ + a++; + if(a > width) { + a = 0; + direction = !direction; + } + if(direction == true){ + stroke(a); + } else { + stroke(width-a); + } + line(a, 0, a, height/2); + + b--; + if(b < 0) { + b = width; + } + if(direction == true) { + stroke(width-b); + } else { + stroke(b); + } + line(b, height/2+1, b, height); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "IncrementDecrement" }); + } +} diff --git a/java/examples/Basics/Math/IncrementDecrement/applet/IncrementDecrement.pde b/java/examples/Basics/Math/IncrementDecrement/applet/IncrementDecrement.pde new file mode 100644 index 000000000..8398c5faa --- /dev/null +++ b/java/examples/Basics/Math/IncrementDecrement/applet/IncrementDecrement.pde @@ -0,0 +1,46 @@ +/** + * Increment Decrement. + * + * Writing "a++" is equivalent to "a = a + 1". + * Writing "a--" is equivalent to "a = a - 1". + */ + +int a; +int b; +boolean direction; + +void setup() +{ + size(200, 200); + colorMode(RGB, width); + a = 0; + b = width; + direction = true; + frameRate(30); +} + +void draw() +{ + a++; + if(a > width) { + a = 0; + direction = !direction; + } + if(direction == true){ + stroke(a); + } else { + stroke(width-a); + } + line(a, 0, a, height/2); + + b--; + if(b < 0) { + b = width; + } + if(direction == true) { + stroke(width-b); + } else { + stroke(b); + } + line(b, height/2+1, b, height); +} diff --git a/java/examples/Basics/Math/IncrementDecrement/applet/loading.gif b/java/examples/Basics/Math/IncrementDecrement/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Modulo/Modulo.pde b/java/examples/Basics/Math/Modulo/Modulo.pde new file mode 100644 index 000000000..7ad1f5dc3 --- /dev/null +++ b/java/examples/Basics/Math/Modulo/Modulo.pde @@ -0,0 +1,31 @@ +/** + * Modulo. + * + * The modulo operator (%) returns the remainder of a number + * divided by another. As in this example, it is often used + * to keep numerical values within a set range. + */ + +int num = 20; +float c; + +void setup() +{ + size(200,200); + fill(255); + frameRate(30); +} + +void draw() +{ + background(0); + c+=0.1; + for(int i=1; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Noise1D/Noise1D.pde b/java/examples/Basics/Math/Noise1D/Noise1D.pde new file mode 100644 index 000000000..99d02b85d --- /dev/null +++ b/java/examples/Basics/Math/Noise1D/Noise1D.pde @@ -0,0 +1,37 @@ +/** + * Noise1D. + * + * Using 1D Perlin Noise to assign location. + */ + +float xoff = 0.0; +float xincrement = 0.01; + +void setup() { + size(200,200); + background(0); + frameRate(30); + smooth(); + noStroke(); +} + +void draw() +{ + // Create an alpha blended background + fill(0, 10); + rect(0,0,width,height); + + //float n = random(0,width); // Try this line instead of noise + + // Get a noise value based on xoff and scale it according to the window's width + float n = noise(xoff)*width; + + // With each cycle, increment xoff + xoff += xincrement; + + // Draw the ellipse at the value produced by perlin noise + fill(200); + ellipse(n,height/2,16,16); +} + + diff --git a/java/examples/Basics/Math/Noise1D/applet/Noise1D.java b/java/examples/Basics/Math/Noise1D/applet/Noise1D.java new file mode 100644 index 000000000..6a5adbc66 --- /dev/null +++ b/java/examples/Basics/Math/Noise1D/applet/Noise1D.java @@ -0,0 +1,57 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Noise1D extends PApplet { + +/** + * Noise1D. + * + * Using 1D Perlin Noise to assign location. + */ + +float xoff = 0.0f; +float xincrement = 0.01f; + +public void setup() { + size(200,200); + background(0); + frameRate(30); + smooth(); + noStroke(); +} + +public void draw() +{ + // Create an alpha blended background + fill(0, 10); + rect(0,0,width,height); + + //float n = random(0,width); // Try this line instead of noise + + // Get a noise value based on xoff and scale it according to the window's width + float n = noise(xoff)*width; + + // With each cycle, increment xoff + xoff += xincrement; + + // Draw the ellipse at the value produced by perlin noise + fill(200); + ellipse(n,height/2,16,16); +} + + + + static public void main(String args[]) { + PApplet.main(new String[] { "Noise1D" }); + } +} diff --git a/java/examples/Basics/Math/Noise1D/applet/Noise1D.pde b/java/examples/Basics/Math/Noise1D/applet/Noise1D.pde new file mode 100644 index 000000000..99d02b85d --- /dev/null +++ b/java/examples/Basics/Math/Noise1D/applet/Noise1D.pde @@ -0,0 +1,37 @@ +/** + * Noise1D. + * + * Using 1D Perlin Noise to assign location. + */ + +float xoff = 0.0; +float xincrement = 0.01; + +void setup() { + size(200,200); + background(0); + frameRate(30); + smooth(); + noStroke(); +} + +void draw() +{ + // Create an alpha blended background + fill(0, 10); + rect(0,0,width,height); + + //float n = random(0,width); // Try this line instead of noise + + // Get a noise value based on xoff and scale it according to the window's width + float n = noise(xoff)*width; + + // With each cycle, increment xoff + xoff += xincrement; + + // Draw the ellipse at the value produced by perlin noise + fill(200); + ellipse(n,height/2,16,16); +} + + diff --git a/java/examples/Basics/Math/Noise1D/applet/loading.gif b/java/examples/Basics/Math/Noise1D/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Noise2D/Noise2D.pde b/java/examples/Basics/Math/Noise2D/Noise2D.pde new file mode 100644 index 000000000..e5e04b010 --- /dev/null +++ b/java/examples/Basics/Math/Noise2D/Noise2D.pde @@ -0,0 +1,47 @@ +/** + * Noise2D + * by Daniel Shiffman. + * + * Using 2D noise to create simple texture. + */ + +float increment = 0.02; + +void setup() { + size(200,200); + noLoop(); +} + +void draw() { + background(0); + + // Optional: adjust noise detail here + // noiseDetail(8,0.65f); + + loadPixels(); + + float xoff = 0.0; // Start xoff at 0 + + // For every x,y coordinate in a 2D space, calculate a noise value and produce a brightness value + for (int x = 0; x < width; x++) { + xoff += increment; // Increment xoff + float yoff = 0.0; // For every xoff, start yoff at 0 + for (int y = 0; y < height; y++) { + yoff += increment; // Increment yoff + + // Calculate noise and scale by 255 + float bright = noise(xoff,yoff)*255; + + // Try using this line instead + //float bright = random(0,255); + + // Set each pixel onscreen to a grayscale value + pixels[x+y*width] = color(bright); + } + } + + updatePixels(); +} + + + diff --git a/java/examples/Basics/Math/Noise2D/applet/Noise2D.java b/java/examples/Basics/Math/Noise2D/applet/Noise2D.java new file mode 100644 index 000000000..32097009c --- /dev/null +++ b/java/examples/Basics/Math/Noise2D/applet/Noise2D.java @@ -0,0 +1,67 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Noise2D extends PApplet { + +/** + * Noise2D + * by Daniel Shiffman. + * + * Using 2D noise to create simple texture. + */ + +float increment = 0.02f; + +public void setup() { + size(200,200); + noLoop(); +} + +public void draw() { + background(0); + + // Optional: adjust noise detail here + // noiseDetail(8,0.65f); + + loadPixels(); + + float xoff = 0.0f; // Start xoff at 0 + + // For every x,y coordinate in a 2D space, calculate a noise value and produce a brightness value + for (int x = 0; x < width; x++) { + xoff += increment; // Increment xoff + float yoff = 0.0f; // For every xoff, start yoff at 0 + for (int y = 0; y < height; y++) { + yoff += increment; // Increment yoff + + // Calculate noise and scale by 255 + float bright = noise(xoff,yoff)*255; + + // Try using this line instead + //float bright = random(0,255); + + // Set each pixel onscreen to a grayscale value + pixels[x+y*width] = color(bright); + } + } + + updatePixels(); +} + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "Noise2D" }); + } +} diff --git a/java/examples/Basics/Math/Noise2D/applet/Noise2D.pde b/java/examples/Basics/Math/Noise2D/applet/Noise2D.pde new file mode 100644 index 000000000..e5e04b010 --- /dev/null +++ b/java/examples/Basics/Math/Noise2D/applet/Noise2D.pde @@ -0,0 +1,47 @@ +/** + * Noise2D + * by Daniel Shiffman. + * + * Using 2D noise to create simple texture. + */ + +float increment = 0.02; + +void setup() { + size(200,200); + noLoop(); +} + +void draw() { + background(0); + + // Optional: adjust noise detail here + // noiseDetail(8,0.65f); + + loadPixels(); + + float xoff = 0.0; // Start xoff at 0 + + // For every x,y coordinate in a 2D space, calculate a noise value and produce a brightness value + for (int x = 0; x < width; x++) { + xoff += increment; // Increment xoff + float yoff = 0.0; // For every xoff, start yoff at 0 + for (int y = 0; y < height; y++) { + yoff += increment; // Increment yoff + + // Calculate noise and scale by 255 + float bright = noise(xoff,yoff)*255; + + // Try using this line instead + //float bright = random(0,255); + + // Set each pixel onscreen to a grayscale value + pixels[x+y*width] = color(bright); + } + } + + updatePixels(); +} + + + diff --git a/java/examples/Basics/Math/Noise2D/applet/loading.gif b/java/examples/Basics/Math/Noise2D/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Noise3D/Noise3D.pde b/java/examples/Basics/Math/Noise3D/Noise3D.pde new file mode 100644 index 000000000..24bcfddc8 --- /dev/null +++ b/java/examples/Basics/Math/Noise3D/Noise3D.pde @@ -0,0 +1,54 @@ +/** + * Noise3D. + * + * Using 3D noise to create simple animated texture. + * Here, the third dimension ('z') is treated as time. + */ + +float increment = 0.01; +// The noise function's 3rd argument, a global variable that increments once per cycle +float zoff = 0.0; +// We will increment zoff differently than xoff and yoff +float zincrement = 0.02; + +void setup() { + size(200,200); + frameRate(30); +} + +void draw() { + background(0); + + // Optional: adjust noise detail here + // noiseDetail(8,0.65f); + + loadPixels(); + + float xoff = 0.0; // Start xoff at 0 + + // For every x,y coordinate in a 2D space, calculate a noise value and produce a brightness value + for (int x = 0; x < width; x++) { + xoff += increment; // Increment xoff + float yoff = 0.0; // For every xoff, start yoff at 0 + for (int y = 0; y < height; y++) { + yoff += increment; // Increment yoff + + // Calculate noise and scale by 255 + float bright = noise(xoff,yoff,zoff)*255; + + // Try using this line instead + //float bright = random(0,255); + + // Set each pixel onscreen to a grayscale value + pixels[x+y*width] = color(bright,bright,bright); + } + } + updatePixels(); + + zoff += zincrement; // Increment zoff + + +} + + + diff --git a/java/examples/Basics/Math/Noise3D/applet/Noise3D.java b/java/examples/Basics/Math/Noise3D/applet/Noise3D.java new file mode 100644 index 000000000..1bcbe7f0d --- /dev/null +++ b/java/examples/Basics/Math/Noise3D/applet/Noise3D.java @@ -0,0 +1,74 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Noise3D extends PApplet { + +/** + * Noise3D. + * + * Using 3D noise to create simple animated texture. + * Here, the third dimension ('z') is treated as time. + */ + +float increment = 0.01f; +// The noise function's 3rd argument, a global variable that increments once per cycle +float zoff = 0.0f; +// We will increment zoff differently than xoff and yoff +float zincrement = 0.02f; + +public void setup() { + size(200,200); + frameRate(30); +} + +public void draw() { + background(0); + + // Optional: adjust noise detail here + // noiseDetail(8,0.65f); + + loadPixels(); + + float xoff = 0.0f; // Start xoff at 0 + + // For every x,y coordinate in a 2D space, calculate a noise value and produce a brightness value + for (int x = 0; x < width; x++) { + xoff += increment; // Increment xoff + float yoff = 0.0f; // For every xoff, start yoff at 0 + for (int y = 0; y < height; y++) { + yoff += increment; // Increment yoff + + // Calculate noise and scale by 255 + float bright = noise(xoff,yoff,zoff)*255; + + // Try using this line instead + //float bright = random(0,255); + + // Set each pixel onscreen to a grayscale value + pixels[x+y*width] = color(bright,bright,bright); + } + } + updatePixels(); + + zoff += zincrement; // Increment zoff + + +} + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "Noise3D" }); + } +} diff --git a/java/examples/Basics/Math/Noise3D/applet/Noise3D.pde b/java/examples/Basics/Math/Noise3D/applet/Noise3D.pde new file mode 100644 index 000000000..24bcfddc8 --- /dev/null +++ b/java/examples/Basics/Math/Noise3D/applet/Noise3D.pde @@ -0,0 +1,54 @@ +/** + * Noise3D. + * + * Using 3D noise to create simple animated texture. + * Here, the third dimension ('z') is treated as time. + */ + +float increment = 0.01; +// The noise function's 3rd argument, a global variable that increments once per cycle +float zoff = 0.0; +// We will increment zoff differently than xoff and yoff +float zincrement = 0.02; + +void setup() { + size(200,200); + frameRate(30); +} + +void draw() { + background(0); + + // Optional: adjust noise detail here + // noiseDetail(8,0.65f); + + loadPixels(); + + float xoff = 0.0; // Start xoff at 0 + + // For every x,y coordinate in a 2D space, calculate a noise value and produce a brightness value + for (int x = 0; x < width; x++) { + xoff += increment; // Increment xoff + float yoff = 0.0; // For every xoff, start yoff at 0 + for (int y = 0; y < height; y++) { + yoff += increment; // Increment yoff + + // Calculate noise and scale by 255 + float bright = noise(xoff,yoff,zoff)*255; + + // Try using this line instead + //float bright = random(0,255); + + // Set each pixel onscreen to a grayscale value + pixels[x+y*width] = color(bright,bright,bright); + } + } + updatePixels(); + + zoff += zincrement; // Increment zoff + + +} + + + diff --git a/java/examples/Basics/Math/Noise3D/applet/loading.gif b/java/examples/Basics/Math/Noise3D/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/NoiseWave/NoiseWave.pde b/java/examples/Basics/Math/NoiseWave/NoiseWave.pde new file mode 100644 index 000000000..9a632fafa --- /dev/null +++ b/java/examples/Basics/Math/NoiseWave/NoiseWave.pde @@ -0,0 +1,60 @@ +/** + * Noise Wave + * by Daniel Shiffman. + * + * Using Perlin Noise to generate a wave-like pattern. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave + +float yoff = 0.0f; // 2nd dimension of perlin noise +float[] yvalues; // Using an array to store height values for the wave (not entirely necessary) + +void setup() { + size(200,200); + frameRate(30); + colorMode(RGB,255,255,255,100); + smooth(); + w = width+16; + yvalues = new float[w/xspacing]; +} + +void draw() { + background(0); + calcWave(); + renderWave(); + +} + +void calcWave() { + float dx = 0.05f; + float dy = 0.01f; + float amplitude = 100.0f; + + // Increment y ('time') + yoff += dy; + + //float xoff = 0.0; // Option #1 + float xoff = yoff; // Option #2 + + for (int i = 0; i < yvalues.length; i++) { + // Using 2D noise function + //yvalues[i] = (2*noise(xoff,yoff)-1)*amplitude; // Option #1 + // Using 1D noise function + yvalues[i] = (2*noise(xoff)-1)*amplitude; // Option #2 + xoff+=dx; + } + +} + +void renderWave() { + // A simple way to draw the wave with an ellipse at each location + for (int x = 0; x < yvalues.length; x++) { + noStroke(); + fill(255,50); + ellipseMode(CENTER); + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + diff --git a/java/examples/Basics/Math/NoiseWave/applet/NoiseWave.java b/java/examples/Basics/Math/NoiseWave/applet/NoiseWave.java new file mode 100644 index 000000000..4ecc653a6 --- /dev/null +++ b/java/examples/Basics/Math/NoiseWave/applet/NoiseWave.java @@ -0,0 +1,80 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class NoiseWave extends PApplet { + +/** + * Noise Wave + * by Daniel Shiffman. + * + * Using Perlin Noise to generate a wave-like pattern. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave + +float yoff = 0.0f; // 2nd dimension of perlin noise +float[] yvalues; // Using an array to store height values for the wave (not entirely necessary) + +public void setup() { + size(200,200); + frameRate(30); + colorMode(RGB,255,255,255,100); + smooth(); + w = width+16; + yvalues = new float[w/xspacing]; +} + +public void draw() { + background(0); + calcWave(); + renderWave(); + +} + +public void calcWave() { + float dx = 0.05f; + float dy = 0.01f; + float amplitude = 100.0f; + + // Increment y ('time') + yoff += dy; + + //float xoff = 0.0; // Option #1 + float xoff = yoff; // Option #2 + + for (int i = 0; i < yvalues.length; i++) { + // Using 2D noise function + //yvalues[i] = (2*noise(xoff,yoff)-1)*amplitude; // Option #1 + // Using 1D noise function + yvalues[i] = (2*noise(xoff)-1)*amplitude; // Option #2 + xoff+=dx; + } + +} + +public void renderWave() { + // A simple way to draw the wave with an ellipse at each location + for (int x = 0; x < yvalues.length; x++) { + noStroke(); + fill(255,50); + ellipseMode(CENTER); + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "NoiseWave" }); + } +} diff --git a/java/examples/Basics/Math/NoiseWave/applet/NoiseWave.pde b/java/examples/Basics/Math/NoiseWave/applet/NoiseWave.pde new file mode 100644 index 000000000..9a632fafa --- /dev/null +++ b/java/examples/Basics/Math/NoiseWave/applet/NoiseWave.pde @@ -0,0 +1,60 @@ +/** + * Noise Wave + * by Daniel Shiffman. + * + * Using Perlin Noise to generate a wave-like pattern. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave + +float yoff = 0.0f; // 2nd dimension of perlin noise +float[] yvalues; // Using an array to store height values for the wave (not entirely necessary) + +void setup() { + size(200,200); + frameRate(30); + colorMode(RGB,255,255,255,100); + smooth(); + w = width+16; + yvalues = new float[w/xspacing]; +} + +void draw() { + background(0); + calcWave(); + renderWave(); + +} + +void calcWave() { + float dx = 0.05f; + float dy = 0.01f; + float amplitude = 100.0f; + + // Increment y ('time') + yoff += dy; + + //float xoff = 0.0; // Option #1 + float xoff = yoff; // Option #2 + + for (int i = 0; i < yvalues.length; i++) { + // Using 2D noise function + //yvalues[i] = (2*noise(xoff,yoff)-1)*amplitude; // Option #1 + // Using 1D noise function + yvalues[i] = (2*noise(xoff)-1)*amplitude; // Option #2 + xoff+=dx; + } + +} + +void renderWave() { + // A simple way to draw the wave with an ellipse at each location + for (int x = 0; x < yvalues.length; x++) { + noStroke(); + fill(255,50); + ellipseMode(CENTER); + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + diff --git a/java/examples/Basics/Math/NoiseWave/applet/loading.gif b/java/examples/Basics/Math/NoiseWave/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/OperatorPrecedence/OperatorPrecedence.pde b/java/examples/Basics/Math/OperatorPrecedence/OperatorPrecedence.pde new file mode 100644 index 000000000..6509b9026 --- /dev/null +++ b/java/examples/Basics/Math/OperatorPrecedence/OperatorPrecedence.pde @@ -0,0 +1,58 @@ +/** + * Operator Precedence + * + * If you don't explicitly state the order in which + * an expression is evaluated, they are evaluated based + * on the operator precedence. For example, in the statement + * "4+2*8", the 2 will first be multiplied by 8 and then the result will + * be added to 4. This is because the "*" has a higher precedence + * than the "+". To avoid ambiguity in reading the program, + * it is recommended that is statement is written as "4+(2*8)". + * The order of evaluation can be controlled through placement of + * parenthesis in the code. A table of operator precedence follows below. + * + */ + +// The highest precedence is at the top of the list and +// the lowest is at the bottom. +// Multiplicative: * / % +// Additive: + - +// Relational: < > <= >= +// Equality: == != +// Logical AND: && +// Logical OR: || +// Assignment: = += -= *= /= %= + +size(200, 200); +background(51); +noFill(); +stroke(51); + +stroke(204); +for(int i=0; i< width-20; i+= 4) { + // The 30 is added to 70 and then evaluated + // if it is greater than the current value of "i" + // For clarity, write as "if(i > (30 + 70)) {" + if(i > 30 + 70) { + line(i, 0, i, 50); + } +} + +stroke(255); +// The 2 is multiplied by the 8 and the result is added to the 5 +// For clarity, write as "rect(5 + (2 * 8), 0, 90, 20);" +rect(4 + 2 * 8, 52, 90, 48); +rect((4 + 2) * 8, 100, 90, 49); + +stroke(153); +for(int i=0; i< width; i+= 2) { + // The relational statements are evaluated + // first, and then the logical AND statements and + // finally the logical OR. For clarity, write as: + // "if(((i > 10) && (i < 50)) || ((i > 80) && (i < 160))) {" + if(i > 20 && i < 50 || i > 100 && i < width-20) { + line(i, 151, i, height-1); + } +} + + diff --git a/java/examples/Basics/Math/OperatorPrecedence/applet/OperatorPrecedence.java b/java/examples/Basics/Math/OperatorPrecedence/applet/OperatorPrecedence.java new file mode 100644 index 000000000..60bb03f4e --- /dev/null +++ b/java/examples/Basics/Math/OperatorPrecedence/applet/OperatorPrecedence.java @@ -0,0 +1,79 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class OperatorPrecedence extends PApplet { + public void setup() {/** + * Operator_Precedence + * + * If you don't explicitly state the order in which + * an expression is evaluated, they are evaluated based + * on the operator precedence. For example, in the statement + * "4+2*8", the 2 will first be multiplied by 8 and then the result will + * be added to 4. This is because the "*" has a higher precedence + * than the "+". To avoid ambiguity in reading the program, + * it is recommended that is statement is written as "4+(2*8)". + * The order of evaluation can be controlled through placement of + * parenthesis in the code. A table of operator precedence follows below. + * + */ + +// The highest precedence is at the top of the list and +// the lowest is at the bottom. +// Multiplicative: * / % +// Additive: + - +// Relational: < > <= >= +// Equality: == != +// Logical AND: && +// Logical OR: || +// Assignment: = += -= *= /= %= + +size(200, 200); +background(51); +noFill(); +stroke(51); + +stroke(204); +for(int i=0; i< width-20; i+= 4) { + // The 30 is added to 70 and then evaluated + // if it is greater than the current value of "i" + // For clarity, write as "if(i > (30 + 70)) {" + if(i > 30 + 70) { + line(i, 0, i, 50); + } +} + +stroke(255); +// The 2 is multiplied by the 8 and the result is added to the 5 +// For clarity, write as "rect(5 + (2 * 8), 0, 90, 20);" +rect(4 + 2 * 8, 52, 90, 48); +rect((4 + 2) * 8, 100, 90, 49); + +stroke(153); +for(int i=0; i< width; i+= 2) { + // The relational statements are evaluated + // first, and then the logical AND statements and + // finally the logical OR. For clarity, write as: + // "if(((i > 10) && (i < 50)) || ((i > 80) && (i < 160))) {" + if(i > 20 && i < 50 || i > 100 && i < width-20) { + line(i, 151, i, height-1); + } +} + + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "OperatorPrecedence" }); + } +} diff --git a/java/examples/Basics/Math/OperatorPrecedence/applet/OperatorPrecedence.pde b/java/examples/Basics/Math/OperatorPrecedence/applet/OperatorPrecedence.pde new file mode 100644 index 000000000..7f8cf52ca --- /dev/null +++ b/java/examples/Basics/Math/OperatorPrecedence/applet/OperatorPrecedence.pde @@ -0,0 +1,58 @@ +/** + * Operator_Precedence + * + * If you don't explicitly state the order in which + * an expression is evaluated, they are evaluated based + * on the operator precedence. For example, in the statement + * "4+2*8", the 2 will first be multiplied by 8 and then the result will + * be added to 4. This is because the "*" has a higher precedence + * than the "+". To avoid ambiguity in reading the program, + * it is recommended that is statement is written as "4+(2*8)". + * The order of evaluation can be controlled through placement of + * parenthesis in the code. A table of operator precedence follows below. + * + */ + +// The highest precedence is at the top of the list and +// the lowest is at the bottom. +// Multiplicative: * / % +// Additive: + - +// Relational: < > <= >= +// Equality: == != +// Logical AND: && +// Logical OR: || +// Assignment: = += -= *= /= %= + +size(200, 200); +background(51); +noFill(); +stroke(51); + +stroke(204); +for(int i=0; i< width-20; i+= 4) { + // The 30 is added to 70 and then evaluated + // if it is greater than the current value of "i" + // For clarity, write as "if(i > (30 + 70)) {" + if(i > 30 + 70) { + line(i, 0, i, 50); + } +} + +stroke(255); +// The 2 is multiplied by the 8 and the result is added to the 5 +// For clarity, write as "rect(5 + (2 * 8), 0, 90, 20);" +rect(4 + 2 * 8, 52, 90, 48); +rect((4 + 2) * 8, 100, 90, 49); + +stroke(153); +for(int i=0; i< width; i+= 2) { + // The relational statements are evaluated + // first, and then the logical AND statements and + // finally the logical OR. For clarity, write as: + // "if(((i > 10) && (i < 50)) || ((i > 80) && (i < 160))) {" + if(i > 20 && i < 50 || i > 100 && i < width-20) { + line(i, 151, i, height-1); + } +} + + diff --git a/java/examples/Basics/Math/OperatorPrecedence/applet/loading.gif b/java/examples/Basics/Math/OperatorPrecedence/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/PolarToCartesian/PolarToCartesian.pde b/java/examples/Basics/Math/PolarToCartesian/PolarToCartesian.pde new file mode 100644 index 000000000..f1f2b1e7d --- /dev/null +++ b/java/examples/Basics/Math/PolarToCartesian/PolarToCartesian.pde @@ -0,0 +1,52 @@ +/** + * PolarToCartesian + * by Daniel Shiffman. + * + * Convert a polar coordinate (r,theta) to cartesian (x,y): + * x = r * cos(theta) + * y = r * sin(theta) + */ + +float r; + +// Angle and angular velocity, accleration +float theta; +float theta_vel; +float theta_acc; + +void setup() { + size(200, 200); + frameRate(30); + smooth(); + + // Initialize all values + r = 50; + theta = 0; + theta_vel = 0; + theta_acc = 0.0001; +} + +void draw() { + background(0); + // Translate the origin point to the center of the screen + translate(width/2, height/2); + + // Convert polar to cartesian + float x = r * cos(theta); + float y = r * sin(theta); + + // Draw the ellipse at the cartesian coordinate + ellipseMode(CENTER); + noStroke(); + fill(200); + ellipse(x, y, 16, 16); + + // Apply acceleration and velocity to angle (r remains static in this example) + theta_vel += theta_acc; + theta += theta_vel; + +} + + + + diff --git a/java/examples/Basics/Math/PolarToCartesian/applet/PolarToCartesian.java b/java/examples/Basics/Math/PolarToCartesian/applet/PolarToCartesian.java new file mode 100644 index 000000000..75a8ea736 --- /dev/null +++ b/java/examples/Basics/Math/PolarToCartesian/applet/PolarToCartesian.java @@ -0,0 +1,72 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class PolarToCartesian extends PApplet { + +/** + * PolarToCartesian + * by Daniel Shiffman. + * + * Convert a polar coordinate (r,theta) to cartesian (x,y): + * x = r * cos(theta) + * y = r * sin(theta) + */ + +float r; + +// Angle and angular velocity, accleration +float theta; +float theta_vel; +float theta_acc; + +public void setup() { + size(200,200); + frameRate(30); + smooth(); + + // Initialize all values + r = 50.0f; + theta = 0.0f; + theta_vel = 0.0f; + theta_acc = 0.0001f; +} + +public void draw() { + background(0); + // Translate the origin point to the center of the screen + translate(width/2,height/2); + + // Convert polar to cartesian + float x = r * cos(theta); + float y = r * sin(theta); + + // Draw the ellipse at the cartesian coordinate + ellipseMode(CENTER); + noStroke(); + fill(200); + ellipse(x,y,16,16); + + // Apply acceleration and velocity to angle (r remains static in this example) + theta_vel += theta_acc; + theta += theta_vel; + +} + + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "PolarToCartesian" }); + } +} diff --git a/java/examples/Basics/Math/PolarToCartesian/applet/PolarToCartesian.pde b/java/examples/Basics/Math/PolarToCartesian/applet/PolarToCartesian.pde new file mode 100644 index 000000000..fdcd948db --- /dev/null +++ b/java/examples/Basics/Math/PolarToCartesian/applet/PolarToCartesian.pde @@ -0,0 +1,52 @@ +/** + * PolarToCartesian + * by Daniel Shiffman. + * + * Convert a polar coordinate (r,theta) to cartesian (x,y): + * x = r * cos(theta) + * y = r * sin(theta) + */ + +float r; + +// Angle and angular velocity, accleration +float theta; +float theta_vel; +float theta_acc; + +void setup() { + size(200,200); + frameRate(30); + smooth(); + + // Initialize all values + r = 50.0f; + theta = 0.0f; + theta_vel = 0.0f; + theta_acc = 0.0001f; +} + +void draw() { + background(0); + // Translate the origin point to the center of the screen + translate(width/2,height/2); + + // Convert polar to cartesian + float x = r * cos(theta); + float y = r * sin(theta); + + // Draw the ellipse at the cartesian coordinate + ellipseMode(CENTER); + noStroke(); + fill(200); + ellipse(x,y,16,16); + + // Apply acceleration and velocity to angle (r remains static in this example) + theta_vel += theta_acc; + theta += theta_vel; + +} + + + + diff --git a/java/examples/Basics/Math/PolarToCartesian/applet/loading.gif b/java/examples/Basics/Math/PolarToCartesian/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Random/Random.pde b/java/examples/Basics/Math/Random/Random.pde new file mode 100644 index 000000000..5fa97b8f0 --- /dev/null +++ b/java/examples/Basics/Math/Random/Random.pde @@ -0,0 +1,19 @@ +/** + * Random. + * + * Random numbers create the basis of this image. + * Each time the program is loaded the result is different. + */ + +size(200, 200); +smooth(); +background(0); +strokeWeight(10); + +for(int i = 0; i < width; i++) { + float r = random(255); + float x = random(0, width); + stroke(r, 100); + line(i, 0, x, height); +} + diff --git a/java/examples/Basics/Math/Random/applet/Random.java b/java/examples/Basics/Math/Random/applet/Random.java new file mode 100644 index 000000000..ca26fea54 --- /dev/null +++ b/java/examples/Basics/Math/Random/applet/Random.java @@ -0,0 +1,40 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Random extends PApplet { + public void setup() {/** + * Random. + * + * Random numbers create the basis of this image. + * Each time the program is loaded the result is different. + */ + +size(200, 200); +smooth(); +background(0); +strokeWeight(10); + +for(int i = 0; i < width; i++) { + float r = random(255); + float x = random(0, width); + stroke(r, 100); + line(i, 0, x, height); +} + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Random" }); + } +} diff --git a/java/examples/Basics/Math/Random/applet/Random.pde b/java/examples/Basics/Math/Random/applet/Random.pde new file mode 100644 index 000000000..5fa97b8f0 --- /dev/null +++ b/java/examples/Basics/Math/Random/applet/Random.pde @@ -0,0 +1,19 @@ +/** + * Random. + * + * Random numbers create the basis of this image. + * Each time the program is loaded the result is different. + */ + +size(200, 200); +smooth(); +background(0); +strokeWeight(10); + +for(int i = 0; i < width; i++) { + float r = random(255); + float x = random(0, width); + stroke(r, 100); + line(i, 0, x, height); +} + diff --git a/java/examples/Basics/Math/Random/applet/loading.gif b/java/examples/Basics/Math/Random/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/Sine/Sine.pde b/java/examples/Basics/Math/Sine/Sine.pde new file mode 100644 index 000000000..848add369 --- /dev/null +++ b/java/examples/Basics/Math/Sine/Sine.pde @@ -0,0 +1,46 @@ +/** + * Sine. + * + * Smoothly scaling size with the sin() function. + */ + +float spin = 0.0; +float diameter = 84.0; +float angle; + +float angle_rot; +int rad_points = 90; + +void setup() +{ + size(200, 200); + noStroke(); + smooth(); +} + +void draw() +{ + background(153); + + translate(130, 65); + + fill(255); + ellipse(0, 0, 16, 16); + + angle_rot = 0; + fill(51); + + for(int i=0; i<5; i++) { + pushMatrix(); + rotate(angle_rot + -45); + ellipse(-116, 0, diameter, diameter); + popMatrix(); + angle_rot += PI*2/5; + } + + diameter = 34 * sin(angle) + 168; + + angle += 0.02; + if (angle > TWO_PI) { angle = 0; } +} + diff --git a/java/examples/Basics/Math/Sine/applet/Sine.java b/java/examples/Basics/Math/Sine/applet/Sine.java new file mode 100644 index 000000000..a29502d3b --- /dev/null +++ b/java/examples/Basics/Math/Sine/applet/Sine.java @@ -0,0 +1,66 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Sine extends PApplet { + +/** + * Sine. + * + * Smoothly scaling size with the sin() function. + */ + +float spin = 0.0f; +float diameter = 84.0f; +float angle; + +float angle_rot; +int rad_points = 90; + +public void setup() +{ + size(200, 200); + noStroke(); + smooth(); +} + +public void draw() +{ + background(153); + + translate(130, 65); + + fill(255); + ellipse(0, 0, 16, 16); + + angle_rot = 0; + fill(51); + + for(int i=0; i<5; i++) { + pushMatrix(); + rotate(angle_rot + -45); + ellipse(-116, 0, diameter, diameter); + popMatrix(); + angle_rot += PI*2/5; + } + + diameter = 34 * sin(angle) + 168; + + angle += 0.02f; + if (angle > TWO_PI) { angle = 0; } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Sine" }); + } +} diff --git a/java/examples/Basics/Math/Sine/applet/Sine.pde b/java/examples/Basics/Math/Sine/applet/Sine.pde new file mode 100644 index 000000000..848add369 --- /dev/null +++ b/java/examples/Basics/Math/Sine/applet/Sine.pde @@ -0,0 +1,46 @@ +/** + * Sine. + * + * Smoothly scaling size with the sin() function. + */ + +float spin = 0.0; +float diameter = 84.0; +float angle; + +float angle_rot; +int rad_points = 90; + +void setup() +{ + size(200, 200); + noStroke(); + smooth(); +} + +void draw() +{ + background(153); + + translate(130, 65); + + fill(255); + ellipse(0, 0, 16, 16); + + angle_rot = 0; + fill(51); + + for(int i=0; i<5; i++) { + pushMatrix(); + rotate(angle_rot + -45); + ellipse(-116, 0, diameter, diameter); + popMatrix(); + angle_rot += PI*2/5; + } + + diameter = 34 * sin(angle) + 168; + + angle += 0.02; + if (angle > TWO_PI) { angle = 0; } +} + diff --git a/java/examples/Basics/Math/Sine/applet/loading.gif b/java/examples/Basics/Math/Sine/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/SineCosine/SineCosine.pde b/java/examples/Basics/Math/SineCosine/SineCosine.pde new file mode 100644 index 000000000..4a40ddee2 --- /dev/null +++ b/java/examples/Basics/Math/SineCosine/SineCosine.pde @@ -0,0 +1,59 @@ +/** + * Sine Cosine. + * + * Linear movement with sin() and cos(). + * Numbers between 0 and PI*2 (TWO_PI which is roughly 6.28) + * are put into these functions and numbers between -1 and 1 are + * returned. These values are then scaled to produce larger movements. + */ + +int i = 45; +int j = 225; +float pos1 = 0; +float pos2 = 0; +float pos3 = 0; +float pos4 = 0; +int sc = 40; + +void setup() +{ + size(200, 200); + noStroke(); + smooth(); +} + +void draw() +{ + background(0); + + fill(51); + rect(60, 60, 80, 80); + + fill(255); + ellipse(pos1, 36, 32, 32); + + fill(153); + ellipse(36, pos2, 32, 32); + + fill(255); + ellipse(pos3, 164, 32, 32); + + fill(153); + ellipse(164, pos4, 32, 32); + + i += 3; + j -= 3; + + if(i > 405) { + i = 45; + j = 225; + } + + float ang1 = radians(i); // convert degrees to radians + float ang2 = radians(j); // convert degrees to radians + pos1 = width/2 + (sc * cos(ang1)); + pos2 = width/2 + (sc * sin(ang1)); + pos3 = width/2 + (sc * cos(ang2)); + pos4 = width/2 + (sc * sin(ang2)); +} + diff --git a/java/examples/Basics/Math/SineCosine/applet/SineCosine.java b/java/examples/Basics/Math/SineCosine/applet/SineCosine.java new file mode 100644 index 000000000..c308f7fed --- /dev/null +++ b/java/examples/Basics/Math/SineCosine/applet/SineCosine.java @@ -0,0 +1,79 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class SineCosine extends PApplet { + +/** + * Sine Cosine. + * + * Linear movement with sin() and cos(). + * Numbers between 0 and PI*2 (TWO_PI which is roughly 6.28) + * are put into these functions and numbers between -1 and 1 are + * returned. These values are then scaled to produce larger movements. + */ + +int i = 45; +int j = 225; +float pos1 = 0; +float pos2 = 0; +float pos3 = 0; +float pos4 = 0; +int sc = 40; + +public void setup() +{ + size(200, 200); + noStroke(); + smooth(); +} + +public void draw() +{ + background(0); + + fill(51); + rect(60, 60, 80, 80); + + fill(255); + ellipse(pos1, 36, 32, 32); + + fill(153); + ellipse(36, pos2, 32, 32); + + fill(255); + ellipse(pos3, 164, 32, 32); + + fill(153); + ellipse(164, pos4, 32, 32); + + i += 3; + j -= 3; + + if(i > 405) { + i = 45; + j = 225; + } + + float ang1 = radians(i); // convert degrees to radians + float ang2 = radians(j); // convert degrees to radians + pos1 = width/2 + (sc * cos(ang1)); + pos2 = width/2 + (sc * sin(ang1)); + pos3 = width/2 + (sc * cos(ang2)); + pos4 = width/2 + (sc * sin(ang2)); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "SineCosine" }); + } +} diff --git a/java/examples/Basics/Math/SineCosine/applet/SineCosine.pde b/java/examples/Basics/Math/SineCosine/applet/SineCosine.pde new file mode 100644 index 000000000..4a40ddee2 --- /dev/null +++ b/java/examples/Basics/Math/SineCosine/applet/SineCosine.pde @@ -0,0 +1,59 @@ +/** + * Sine Cosine. + * + * Linear movement with sin() and cos(). + * Numbers between 0 and PI*2 (TWO_PI which is roughly 6.28) + * are put into these functions and numbers between -1 and 1 are + * returned. These values are then scaled to produce larger movements. + */ + +int i = 45; +int j = 225; +float pos1 = 0; +float pos2 = 0; +float pos3 = 0; +float pos4 = 0; +int sc = 40; + +void setup() +{ + size(200, 200); + noStroke(); + smooth(); +} + +void draw() +{ + background(0); + + fill(51); + rect(60, 60, 80, 80); + + fill(255); + ellipse(pos1, 36, 32, 32); + + fill(153); + ellipse(36, pos2, 32, 32); + + fill(255); + ellipse(pos3, 164, 32, 32); + + fill(153); + ellipse(164, pos4, 32, 32); + + i += 3; + j -= 3; + + if(i > 405) { + i = 45; + j = 225; + } + + float ang1 = radians(i); // convert degrees to radians + float ang2 = radians(j); // convert degrees to radians + pos1 = width/2 + (sc * cos(ang1)); + pos2 = width/2 + (sc * sin(ang1)); + pos3 = width/2 + (sc * cos(ang2)); + pos4 = width/2 + (sc * sin(ang2)); +} + diff --git a/java/examples/Basics/Math/SineCosine/applet/loading.gif b/java/examples/Basics/Math/SineCosine/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Math/SineWave/SineWave.pde b/java/examples/Basics/Math/SineWave/SineWave.pde new file mode 100644 index 000000000..da47bed36 --- /dev/null +++ b/java/examples/Basics/Math/SineWave/SineWave.pde @@ -0,0 +1,55 @@ +/** + * Sine Wave + * by Daniel Shiffman. + * + * Render a simple sine wave. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave + +float theta = 0.0; // Start angle at 0 +float amplitude = 75.0; // Height of wave +float period = 500.0; // How many pixels before the wave repeats +float dx; // Value for incrementing X, a function of period and xspacing +float[] yvalues; // Using an array to store height values for the wave + +void setup() { + size(200,200); + frameRate(30); + colorMode(RGB,255,255,255,100); + smooth(); + w = width+16; + dx = (TWO_PI / period) * xspacing; + yvalues = new float[w/xspacing]; +} + +void draw() { + background(0); + calcWave(); + renderWave(); + +} + +void calcWave() { + // Increment theta (try different values for 'angular velocity' here + theta += 0.02; + + // For every x value, calculate a y value with sine function + float x = theta; + for (int i = 0; i < yvalues.length; i++) { + yvalues[i] = sin(x)*amplitude; + x+=dx; + } +} + +void renderWave() { + // A simple way to draw the wave with an ellipse at each location + for (int x = 0; x < yvalues.length; x++) { + noStroke(); + fill(255,50); + ellipseMode(CENTER); + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + diff --git a/java/examples/Basics/Math/SineWave/applet/SineWave.java b/java/examples/Basics/Math/SineWave/applet/SineWave.java new file mode 100644 index 000000000..165700473 --- /dev/null +++ b/java/examples/Basics/Math/SineWave/applet/SineWave.java @@ -0,0 +1,75 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class SineWave extends PApplet { + +/** + * Sine Wave + * by Daniel Shiffman. + * + * Render a simple sine wave. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave + +float theta = 0.0f; // Start angle at 0 +float amplitude = 75.0f; // Height of wave +float period = 500.0f; // How many pixels before the wave repeats +float dx; // Value for incrementing X, a function of period and xspacing +float[] yvalues; // Using an array to store height values for the wave + +public void setup() { + size(200,200); + frameRate(30); + colorMode(RGB,255,255,255,100); + smooth(); + w = width+16; + dx = (TWO_PI / period) * xspacing; + yvalues = new float[w/xspacing]; +} + +public void draw() { + background(0); + calcWave(); + renderWave(); + +} + +public void calcWave() { + // Increment theta (try different values for 'angular velocity' here + theta += 0.02f; + + // For every x value, calculate a y value with sine function + float x = theta; + for (int i = 0; i < yvalues.length; i++) { + yvalues[i] = sin(x)*amplitude; + x+=dx; + } +} + +public void renderWave() { + // A simple way to draw the wave with an ellipse at each location + for (int x = 0; x < yvalues.length; x++) { + noStroke(); + fill(255,50); + ellipseMode(CENTER); + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "SineWave" }); + } +} diff --git a/java/examples/Basics/Math/SineWave/applet/SineWave.pde b/java/examples/Basics/Math/SineWave/applet/SineWave.pde new file mode 100644 index 000000000..da47bed36 --- /dev/null +++ b/java/examples/Basics/Math/SineWave/applet/SineWave.pde @@ -0,0 +1,55 @@ +/** + * Sine Wave + * by Daniel Shiffman. + * + * Render a simple sine wave. + */ + +int xspacing = 8; // How far apart should each horizontal location be spaced +int w; // Width of entire wave + +float theta = 0.0; // Start angle at 0 +float amplitude = 75.0; // Height of wave +float period = 500.0; // How many pixels before the wave repeats +float dx; // Value for incrementing X, a function of period and xspacing +float[] yvalues; // Using an array to store height values for the wave + +void setup() { + size(200,200); + frameRate(30); + colorMode(RGB,255,255,255,100); + smooth(); + w = width+16; + dx = (TWO_PI / period) * xspacing; + yvalues = new float[w/xspacing]; +} + +void draw() { + background(0); + calcWave(); + renderWave(); + +} + +void calcWave() { + // Increment theta (try different values for 'angular velocity' here + theta += 0.02; + + // For every x value, calculate a y value with sine function + float x = theta; + for (int i = 0; i < yvalues.length; i++) { + yvalues[i] = sin(x)*amplitude; + x+=dx; + } +} + +void renderWave() { + // A simple way to draw the wave with an ellipse at each location + for (int x = 0; x < yvalues.length; x++) { + noStroke(); + fill(255,50); + ellipseMode(CENTER); + ellipse(x*xspacing,width/2+yvalues[x],16,16); + } +} + diff --git a/java/examples/Basics/Math/SineWave/applet/loading.gif b/java/examples/Basics/Math/SineWave/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Objects/CompositeObjects/CompositeObjects.pde b/java/examples/Basics/Objects/CompositeObjects/CompositeObjects.pde new file mode 100644 index 000000000..8987bda9e --- /dev/null +++ b/java/examples/Basics/Objects/CompositeObjects/CompositeObjects.pde @@ -0,0 +1,24 @@ +/** + * Composite Objects + * + * An object can include several other objects. Creating such composite objects + * is a good way to use the principles of modularity and build higher levels of + * abstraction within a program. + */ + +EggRing er1, er2; + + +void setup() { + size(200, 200); + smooth(); + er1 = new EggRing(66, 132, 0.1, 66); + er2 = new EggRing(132, 180, 0.05, 132); +} + + +void draw() { + background(0); + er1.transmit(); + er2.transmit(); +} diff --git a/java/examples/Basics/Objects/CompositeObjects/Egg.pde b/java/examples/Basics/Objects/CompositeObjects/Egg.pde new file mode 100644 index 000000000..e6638aa79 --- /dev/null +++ b/java/examples/Basics/Objects/CompositeObjects/Egg.pde @@ -0,0 +1,36 @@ +class Egg { + float x, y; // X-coordinate, y-coordinate + float tilt; // Left and right angle offset + float angle; // Used to define the tilt + float scalar; // Height of the egg + + // Constructor + Egg(int xpos, int ypos, float t, float s) { + x = xpos; + y = ypos; + tilt = t; + scalar = s / 100.0; + } + + void wobble() { + tilt = cos(angle) / 8; + angle += 0.1; + } + + void display() { + noStroke(); + fill(255); + pushMatrix(); + translate(x, y); + rotate(tilt); + scale(scalar); + beginShape(); + vertex(0, -100); + bezierVertex(25, -100, 40, -65, 40, -40); + bezierVertex(40, -15, 25, 0, 0, 0); + bezierVertex(-25, 0, -40, -15, -40, -40); + bezierVertex(-40, -65, -25, -100, 0, -100); + endShape(); + popMatrix(); + } +} \ No newline at end of file diff --git a/java/examples/Basics/Objects/CompositeObjects/EggRing.pde b/java/examples/Basics/Objects/CompositeObjects/EggRing.pde new file mode 100644 index 000000000..2648603f9 --- /dev/null +++ b/java/examples/Basics/Objects/CompositeObjects/EggRing.pde @@ -0,0 +1,19 @@ +class EggRing { + Egg ovoid; + Ring circle = new Ring(); + + EggRing(int x, int y, float t, float sp) { + ovoid = new Egg(x, y, t, sp); + circle.start(x, y - sp/2); + } + + void transmit() { + ovoid.wobble(); + ovoid.display(); + circle.grow(); + circle.display(); + if (circle.on == false) { + circle.on = true; + } + } +} diff --git a/java/examples/Basics/Objects/CompositeObjects/Ring.pde b/java/examples/Basics/Objects/CompositeObjects/Ring.pde new file mode 100644 index 000000000..3baf5623d --- /dev/null +++ b/java/examples/Basics/Objects/CompositeObjects/Ring.pde @@ -0,0 +1,27 @@ +class Ring { + float x, y; // X-coordinate, y-coordinate + float diameter; // Diameter of the ring + boolean on = false; // Turns the display on and off + void start(float xpos, float ypos) { + x = xpos; + y = ypos; + on = true; + diameter = 1; + } + void grow() { + if (on == true) { + diameter += 0.5; + if (diameter > width*2) { + diameter = 0.0; + } + } + } + void display() { + if (on == true) { + noFill(); + strokeWeight(4); + stroke(155, 153); + ellipse(x, y, diameter, diameter); + } + } +} diff --git a/java/examples/Basics/Objects/CompositeObjects/applet/CompositeObjects.java b/java/examples/Basics/Objects/CompositeObjects/applet/CompositeObjects.java new file mode 100644 index 000000000..3da16d412 --- /dev/null +++ b/java/examples/Basics/Objects/CompositeObjects/applet/CompositeObjects.java @@ -0,0 +1,125 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class CompositeObjects extends PApplet { + +/** + * Composite Objects + * + * An object can include several other objects. Creating such composite objects + * is a good way to use the principles of modularity and build higher levels of + * abstraction within a program. + */ + +EggRing er1, er2; + +public void setup() +{ + size(200, 200); + smooth(); + er1 = new EggRing(66, 132, 0.1f, 66); + er2 = new EggRing(132, 180, 0.05f, 132); +} + +public void draw() +{ + background(0); + er1.transmit(); + er2.transmit(); +} + +class EggRing +{ + Egg ovoid; + Ring circle = new Ring(); + EggRing(int x, int y, float t, float sp) { + ovoid = new Egg(x, y, t, sp); + circle.start(x, y - sp/2); + } + public void transmit() { + ovoid.wobble(); + ovoid.display(); + circle.grow(); + circle.display(); + if (circle.on == false) { + circle.on = true; + } + } +} + +class Egg { + float x, y; // X-coordinate, y-coordinate + float tilt; // Left and right angle offset + float angle; // Used to define the tilt + float scalar; // Height of the egg + // Constructor + Egg(int xpos, int ypos, float t, float s) { + x = xpos; + y = ypos; + tilt = t; + scalar = s / 100.0f; + } + public void wobble() { + tilt = cos(angle) / 8; + angle += 0.1f; + } + public void display() { + noStroke(); + fill(255); + pushMatrix(); + translate(x, y); + rotate(tilt); + scale(scalar); + beginShape(); + vertex(0, -100); + bezierVertex(25, -100, 40, -65, 40, -40); + bezierVertex(40, -15, 25, 0, 0, 0); + bezierVertex(-25, 0, -40, -15, -40, -40); + bezierVertex(-40, -65, -25, -100, 0, -100); + endShape(); + popMatrix(); + } +} + +class Ring { + float x, y; // X-coordinate, y-coordinate + float diameter; // Diameter of the ring + boolean on = false; // Turns the display on and off + public void start(float xpos, float ypos) { + x = xpos; + y = ypos; + on = true; + diameter = 1; + } + public void grow() { + if (on == true) { + diameter += 0.5f; + if (diameter > width*2) { + diameter = 0.0f; + } + } + } + public void display() { + if (on == true) { + noFill(); + strokeWeight(4); + stroke(155, 153); + ellipse(x, y, diameter, diameter); + } + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "CompositeObjects" }); + } +} diff --git a/java/examples/Basics/Objects/CompositeObjects/applet/CompositeObjects.pde b/java/examples/Basics/Objects/CompositeObjects/applet/CompositeObjects.pde new file mode 100644 index 000000000..171c03ae9 --- /dev/null +++ b/java/examples/Basics/Objects/CompositeObjects/applet/CompositeObjects.pde @@ -0,0 +1,105 @@ +/** + * Composite Objects + * + * An object can include several other objects. Creating such composite objects + * is a good way to use the principles of modularity and build higher levels of + * abstraction within a program. + */ + +EggRing er1, er2; + +void setup() +{ + size(200, 200); + smooth(); + er1 = new EggRing(66, 132, 0.1, 66); + er2 = new EggRing(132, 180, 0.05, 132); +} + +void draw() +{ + background(0); + er1.transmit(); + er2.transmit(); +} + +class EggRing +{ + Egg ovoid; + Ring circle = new Ring(); + EggRing(int x, int y, float t, float sp) { + ovoid = new Egg(x, y, t, sp); + circle.start(x, y - sp/2); + } + void transmit() { + ovoid.wobble(); + ovoid.display(); + circle.grow(); + circle.display(); + if (circle.on == false) { + circle.on = true; + } + } +} + +class Egg { + float x, y; // X-coordinate, y-coordinate + float tilt; // Left and right angle offset + float angle; // Used to define the tilt + float scalar; // Height of the egg + // Constructor + Egg(int xpos, int ypos, float t, float s) { + x = xpos; + y = ypos; + tilt = t; + scalar = s / 100.0; + } + void wobble() { + tilt = cos(angle) / 8; + angle += 0.1; + } + void display() { + noStroke(); + fill(255); + pushMatrix(); + translate(x, y); + rotate(tilt); + scale(scalar); + beginShape(); + vertex(0, -100); + bezierVertex(25, -100, 40, -65, 40, -40); + bezierVertex(40, -15, 25, 0, 0, 0); + bezierVertex(-25, 0, -40, -15, -40, -40); + bezierVertex(-40, -65, -25, -100, 0, -100); + endShape(); + popMatrix(); + } +} + +class Ring { + float x, y; // X-coordinate, y-coordinate + float diameter; // Diameter of the ring + boolean on = false; // Turns the display on and off + void start(float xpos, float ypos) { + x = xpos; + y = ypos; + on = true; + diameter = 1; + } + void grow() { + if (on == true) { + diameter += 0.5; + if (diameter > width*2) { + diameter = 0.0; + } + } + } + void display() { + if (on == true) { + noFill(); + strokeWeight(4); + stroke(155, 153); + ellipse(x, y, diameter, diameter); + } + } +} diff --git a/java/examples/Basics/Objects/CompositeObjects/applet/loading.gif b/java/examples/Basics/Objects/CompositeObjects/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Objects/Inheritance/Inheritance.pde b/java/examples/Basics/Objects/Inheritance/Inheritance.pde new file mode 100644 index 000000000..6c4af0bc8 --- /dev/null +++ b/java/examples/Basics/Objects/Inheritance/Inheritance.pde @@ -0,0 +1,78 @@ +/** + * Inheritance + * + * A class can be defined using another class as a foundation. In object-oriented + * programming terminology, one class can inherit fi elds and methods from another. + * An object that inherits from another is called a subclass, and the object it + * inherits from is called a superclass. A subclass extends the superclass. + */ + +SpinSpots spots; +SpinArm arm; + +void setup() +{ + size(200, 200); + smooth(); + arm = new SpinArm(width/2, height/2, 0.01); + spots = new SpinSpots(width/2, height/2, -0.02, 33.0); +} + +void draw() +{ + background(204); + arm.update(); + arm.display(); + spots.update(); + spots.display(); +} + +class Spin +{ + float x, y, speed; + float angle = 0.0; + Spin(float xpos, float ypos, float s) { + x = xpos; + y = ypos; + speed = s; + } + void update() { + angle += speed; + } +} + +class SpinArm extends Spin +{ + SpinArm(float x, float y, float s) { + super(x, y, s); + } + void display() { + strokeWeight(1); + stroke(0); + pushMatrix(); + translate(x, y); + angle += speed; + rotate(angle); + line(0, 0, 66, 0); + popMatrix(); + } +} + +class SpinSpots extends Spin +{ + float dim; + SpinSpots(float x, float y, float s, float d) { + super(x, y, s); + dim = d; + } + void display() { + noStroke(); + pushMatrix(); + translate(x, y); + angle += speed; + rotate(angle); + ellipse(-dim/2, 0, dim, dim); + ellipse(dim/2, 0, dim, dim); + popMatrix(); + } +} diff --git a/java/examples/Basics/Objects/Inheritance/applet/Inheritance.java b/java/examples/Basics/Objects/Inheritance/applet/Inheritance.java new file mode 100644 index 000000000..6b517719f --- /dev/null +++ b/java/examples/Basics/Objects/Inheritance/applet/Inheritance.java @@ -0,0 +1,98 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Inheritance extends PApplet { + +/** + * Inheritance + * + * A class can be defined using another class as a foundation. In object-oriented + * programming terminology, one class can inherit fi elds and methods from another. + * An object that inherits from another is called a subclass, and the object it + * inherits from is called a superclass. A subclass extends the superclass. + */ + +SpinSpots spots; +SpinArm arm; + +public void setup() +{ + size(200, 200); + smooth(); + arm = new SpinArm(width/2, height/2, 0.01f); + spots = new SpinSpots(width/2, height/2, -0.02f, 33.0f); +} + +public void draw() +{ + background(204); + arm.update(); + arm.display(); + spots.update(); + spots.display(); +} + +class Spin +{ + float x, y, speed; + float angle = 0.0f; + Spin(float xpos, float ypos, float s) { + x = xpos; + y = ypos; + speed = s; + } + public void update() { + angle += speed; + } +} + +class SpinArm extends Spin +{ + SpinArm(float x, float y, float s) { + super(x, y, s); + } + public void display() { + strokeWeight(1); + stroke(0); + pushMatrix(); + translate(x, y); + angle += speed; + rotate(angle); + line(0, 0, 66, 0); + popMatrix(); + } +} + +class SpinSpots extends Spin +{ + float dim; + SpinSpots(float x, float y, float s, float d) { + super(x, y, s); + dim = d; + } + public void display() { + noStroke(); + pushMatrix(); + translate(x, y); + angle += speed; + rotate(angle); + ellipse(-dim/2, 0, dim, dim); + ellipse(dim/2, 0, dim, dim); + popMatrix(); + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Inheritance" }); + } +} diff --git a/java/examples/Basics/Objects/Inheritance/applet/Inheritance.pde b/java/examples/Basics/Objects/Inheritance/applet/Inheritance.pde new file mode 100644 index 000000000..6c4af0bc8 --- /dev/null +++ b/java/examples/Basics/Objects/Inheritance/applet/Inheritance.pde @@ -0,0 +1,78 @@ +/** + * Inheritance + * + * A class can be defined using another class as a foundation. In object-oriented + * programming terminology, one class can inherit fi elds and methods from another. + * An object that inherits from another is called a subclass, and the object it + * inherits from is called a superclass. A subclass extends the superclass. + */ + +SpinSpots spots; +SpinArm arm; + +void setup() +{ + size(200, 200); + smooth(); + arm = new SpinArm(width/2, height/2, 0.01); + spots = new SpinSpots(width/2, height/2, -0.02, 33.0); +} + +void draw() +{ + background(204); + arm.update(); + arm.display(); + spots.update(); + spots.display(); +} + +class Spin +{ + float x, y, speed; + float angle = 0.0; + Spin(float xpos, float ypos, float s) { + x = xpos; + y = ypos; + speed = s; + } + void update() { + angle += speed; + } +} + +class SpinArm extends Spin +{ + SpinArm(float x, float y, float s) { + super(x, y, s); + } + void display() { + strokeWeight(1); + stroke(0); + pushMatrix(); + translate(x, y); + angle += speed; + rotate(angle); + line(0, 0, 66, 0); + popMatrix(); + } +} + +class SpinSpots extends Spin +{ + float dim; + SpinSpots(float x, float y, float s, float d) { + super(x, y, s); + dim = d; + } + void display() { + noStroke(); + pushMatrix(); + translate(x, y); + angle += speed; + rotate(angle); + ellipse(-dim/2, 0, dim, dim); + ellipse(dim/2, 0, dim, dim); + popMatrix(); + } +} diff --git a/java/examples/Basics/Objects/Inheritance/applet/loading.gif b/java/examples/Basics/Objects/Inheritance/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Objects/MultipleConstructors/MultipleConstructors.pde b/java/examples/Basics/Objects/MultipleConstructors/MultipleConstructors.pde new file mode 100644 index 000000000..fd57edbfd --- /dev/null +++ b/java/examples/Basics/Objects/MultipleConstructors/MultipleConstructors.pde @@ -0,0 +1,47 @@ +/** + * Multiple constructors + * + * A class can have multiple constructors that assign the fields in different ways. + * Sometimes it's beneficial to specify every aspect of an object's data by assigning + * parameters to the fields, but other times it might be appropriate to define only + * one or a few. + */ + +Spot sp1, sp2; +void setup() +{ + size(200, 200); + background(204); + smooth(); + noLoop(); + // Run the constructor without parameters + sp1 = new Spot(); + // Run the constructor with three parameters + sp2 = new Spot(122, 100, 40); +} + +void draw() { + sp1.display(); + sp2.display(); +} + +class Spot { + float x, y, radius; + // First version of the Spot constructor; + // the fields are assigned default values + Spot() { + x = 66; + y = 100; + radius = 16; + } + // Second version of the Spot constructor; + // the fields are assigned with parameters + Spot(float xpos, float ypos, float r) { + x = xpos; + y = ypos; + radius = r; + } + void display() { + ellipse(x, y, radius*2, radius*2); + } +} diff --git a/java/examples/Basics/Objects/MultipleConstructors/applet/MultipleConstructors.java b/java/examples/Basics/Objects/MultipleConstructors/applet/MultipleConstructors.java new file mode 100644 index 000000000..db8031348 --- /dev/null +++ b/java/examples/Basics/Objects/MultipleConstructors/applet/MultipleConstructors.java @@ -0,0 +1,67 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class MultipleConstructors extends PApplet { + +/** + * Multiple constructors + * + * A class can have multiple constructors that assign the fields in different ways. + * Sometimes it's beneficial to specify every aspect of an object's data by assigning + * parameters to the fields, but other times it might be appropriate to define only + * one or a few. + */ + +Spot sp1, sp2; +public void setup() +{ + size(200, 200); + background(204); + smooth(); + noLoop(); + // Run the constructor without parameters + sp1 = new Spot(); + // Run the constructor with three parameters + sp2 = new Spot(122, 100, 40); +} + +public void draw() { + sp1.display(); + sp2.display(); +} + +class Spot { + float x, y, radius; + // First version of the Spot constructor; + // the fields are assigned default values + Spot() { + x = 66; + y = 100; + radius = 16; + } + // Second version of the Spot constructor; + // the fields are assigned with parameters + Spot(float xpos, float ypos, float r) { + x = xpos; + y = ypos; + radius = r; + } + public void display() { + ellipse(x, y, radius*2, radius*2); + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "MultipleConstructors" }); + } +} diff --git a/java/examples/Basics/Objects/MultipleConstructors/applet/MultipleConstructors.pde b/java/examples/Basics/Objects/MultipleConstructors/applet/MultipleConstructors.pde new file mode 100644 index 000000000..fd57edbfd --- /dev/null +++ b/java/examples/Basics/Objects/MultipleConstructors/applet/MultipleConstructors.pde @@ -0,0 +1,47 @@ +/** + * Multiple constructors + * + * A class can have multiple constructors that assign the fields in different ways. + * Sometimes it's beneficial to specify every aspect of an object's data by assigning + * parameters to the fields, but other times it might be appropriate to define only + * one or a few. + */ + +Spot sp1, sp2; +void setup() +{ + size(200, 200); + background(204); + smooth(); + noLoop(); + // Run the constructor without parameters + sp1 = new Spot(); + // Run the constructor with three parameters + sp2 = new Spot(122, 100, 40); +} + +void draw() { + sp1.display(); + sp2.display(); +} + +class Spot { + float x, y, radius; + // First version of the Spot constructor; + // the fields are assigned default values + Spot() { + x = 66; + y = 100; + radius = 16; + } + // Second version of the Spot constructor; + // the fields are assigned with parameters + Spot(float xpos, float ypos, float r) { + x = xpos; + y = ypos; + radius = r; + } + void display() { + ellipse(x, y, radius*2, radius*2); + } +} diff --git a/java/examples/Basics/Objects/MultipleConstructors/applet/loading.gif b/java/examples/Basics/Objects/MultipleConstructors/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Objects/Neighborhood/Neighborhood.pde b/java/examples/Basics/Objects/Neighborhood/Neighborhood.pde new file mode 100644 index 000000000..f70893d25 --- /dev/null +++ b/java/examples/Basics/Objects/Neighborhood/Neighborhood.pde @@ -0,0 +1,303 @@ +/** + * Neighborhood (OOP Example) + * By Ira Greenberg + * + * Draw a neighborhood of houses using + * Door, Window, Roof and House classes. + * Good example of class composition, with component + * Door, Window, Roof class references encapsulated + * within House class. This arrangement allows + * House class to handle placement and sizing of + * its components, while still allowing user + * customization of the individual components. + */ + +void setup(){ + size(200, 200); + background(190); + smooth(); + // Ground plane + int groundHeight = 10; + fill(0); + rect(0, height-groundHeight, width, groundHeight); + fill(255); + + // Center the houses + translate(12, 0); + + // Houses + Door door1 = new Door(20, 40); + Window window1 = new Window(50, 62, false, Window.DOUBLE); + Roof roof1 = new Roof(Roof.DOME); + House house1 = new House(75, 75, door1, window1, roof1, House.MIDDLE_DOOR); + house1.drawHouse(0, height-groundHeight-house1.h, true); + + Door door2 = new Door(20, 40); + Window window2 = new Window(50, 62, true, Window.QUAD); + Roof roof2 = new Roof(Roof.GAMBREL); + House house2 = new House(100, 60, door2, window2, roof2, House.LEFT_DOOR); + house2.drawHouse(house1.x + house1.w, height-groundHeight-house2.h, true); +} + +class Door{ + //door properties + int x; + int y; + int w; + int h; + + // for knob + int knobLoc = 1; + //constants + final static int RT = 0; + final static int LFT = 1; + + // constructor + Door(int w, int h){ + this.w = w; + this.h = h; + } + + // draw the door + void drawDoor(int x, int y) { + rect(x, y, w, h); + int knobsize = w/10; + if (knobLoc == 0){ + //right side + ellipse(x+w-knobsize, y+h/2, knobsize, knobsize); + } + else { + //left side + ellipse(x+knobsize, y+h/2, knobsize, knobsize); + } + } + + // set knob position + void setKnob(int knobLoc){ + this. knobLoc = knobLoc; + } +} + +class Window{ + //window properties + int x; + int y; + int w; + int h; + + // customized features + boolean hasSash = false; + + // single, double, quad pane + int style = 0; + //constants + final static int SINGLE = 0; + final static int DOUBLE = 1; + final static int QUAD = 2; + + // constructor 1 + Window(int w, int h){ + this.w = w; + this.h = h; + } + // constructor 2 + Window(int w, int h, int style){ + this.w = w; + this.h = h; + this.style = style; + } + // constructor 3 + Window(int w, int h, boolean hasSash, int style){ + this.w = w; + this.h = h; + this.hasSash = hasSash; + this.style = style; + } + + // draw the window + void drawWindow(int x, int y) { + //local variables + int margin = 0; + int winHt = 0; + int winWdth = 0; + + if (hasSash){ + margin = w/15; + } + + switch(style){ + case 0: + //outer window (sash) + rect(x, y, w, h); + //inner window + rect(x+margin, y+margin, w-margin*2, h-margin*2); + break; + case 1: + winHt = (h-margin*3)/2; + //outer window (sash) + rect(x, y, w, h); + //inner window (top) + rect(x+margin, y+margin, w-margin*2, winHt); + //inner windows (bottom) + rect(x+margin, y+winHt+margin*2, w-margin*2, winHt); + break; + case 2: + winWdth = (w-margin*3)/2; + winHt = (h-margin*3)/2; + //outer window (sash) + rect(x, y, w, h); + //inner window (top-left) + rect(x+margin, y+margin, winWdth, winHt); + //inner window (top-right) + rect(x+winWdth+margin*2, y+margin, winWdth, winHt); + //inner windows (bottom-left) + rect(x+margin, y+winHt+margin*2, winWdth, winHt); + //inner windows (bottom-right) + rect(x+winWdth+margin*2, y+winHt+margin*2, winWdth, winHt); + break; + } + } + + // set window style (number of panes) + void setStyle(int style){ + this.style = style; + } +} + +class Roof{ + //roof properties + int x; + int y; + int w; + int h; + + // roof style + int style = 0; + //constants + final static int CATHEDRAL = 0; + final static int GAMBREL = 1; + final static int DOME = 2; + + // default constructor + Roof(){ + } + + // constructor 2 + Roof(int style){ + this.style = style; + } + + // draw the roof + void drawRoof(int x, int y, int w, int h) { + switch(style){ + case 0: + beginShape(); + vertex(x, y); + vertex(x+w/2, y-h/3); + vertex(x+w, y); + endShape(CLOSE); + break; + case 1: + beginShape(); + vertex(x, y); + vertex(x+w/7, y-h/4); + vertex(x+w/2, y-h/2); + vertex(x+(w-w/7), y-h/4); + vertex(x+w, y); + endShape(CLOSE); + break; + case 2: + ellipseMode(CORNER); + arc(x, y-h/2, w, h, PI, TWO_PI); + line(x, y, x+w, y); + break; + } + + } + + // set roof style + void setStyle(int style){ + this.style = style; + } +} + +class House{ + //house properties + int x; + int y; + int w; + int h; + + //component reference variables + Door door; + Window window; + Roof roof; + + //optional autosize variable + boolean AutoSizeComponents = false; + + //door placement + int doorLoc = 0; + //constants + final static int MIDDLE_DOOR = 0; + final static int LEFT_DOOR = 1; + final static int RIGHT_DOOR = 2; + + //constructor + House(int w, int h, Door door, Window window, Roof roof, int doorLoc) { + this.w = w; + this.h = h; + this.door = door; + this.window = window; + this.roof = roof; + this.doorLoc = doorLoc; + } + + void drawHouse(int x, int y, boolean AutoSizeComponents) { + this.x = x; + this.y =y; + this.AutoSizeComponents = AutoSizeComponents; + + //automatically sizes doors and windows + if(AutoSizeComponents){ + //autosize door + door.h = h/4; + door.w = door.h/2; + + //autosize windows + window.h = h/3; + window.w = window.h/2; + + } + // draw bldg block + rect(x, y, w, h); + + // draw door + switch(doorLoc){ + case 0: + door.drawDoor(x+w/2-door.w/2, y+h-door.h); + break; + case 1: + door.drawDoor(x+w/8, y+h-door.h); + break; + case 2: + door.drawDoor(x+w-w/8-door.w, y+h-door.h); + break; + } + + // draw windows + int windowMargin = (w-window.w*2)/3; + window.drawWindow(x+windowMargin, y+h/6); + window.drawWindow(x+windowMargin*2+window.w, y+h/6); + + // draw roof + roof.drawRoof(x, y, w, h); + } + + // catch drawHouse method without boolean argument + void drawHouse(int x, int y){ + // recall with required 3rd argument + drawHouse(x, y, false); + } +} + diff --git a/java/examples/Basics/Objects/Neighborhood/applet/Neighborhood.java b/java/examples/Basics/Objects/Neighborhood/applet/Neighborhood.java new file mode 100644 index 000000000..d6646893c --- /dev/null +++ b/java/examples/Basics/Objects/Neighborhood/applet/Neighborhood.java @@ -0,0 +1,323 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Neighborhood extends PApplet { + +/** + * Neighborhood (OOP Example) + * By Ira Greenberg + * + * Draw a neighborhood of houses using + * Door, Window, Roof and House classes. + * Good example of class composition, with component + * Door, Window, Roof class references encapsulated + * within House class. This arrangement allows + * House class to handle placement and sizing of + * its components, while still allowing user + * customization of the individual components. + */ + +public void setup(){ + size(200, 200); + background(190); + smooth(); + // Ground plane + int groundHeight = 10; + fill(0); + rect(0, height-groundHeight, width, groundHeight); + fill(255); + + // Center the houses + translate(12, 0); + + // Houses + Door door1 = new Door(20, 40); + Window window1 = new Window(50, 62, false, Window.DOUBLE); + Roof roof1 = new Roof(Roof.DOME); + House house1 = new House(75, 75, door1, window1, roof1, House.MIDDLE_DOOR); + house1.drawHouse(0, height-groundHeight-house1.h, true); + + Door door2 = new Door(20, 40); + Window window2 = new Window(50, 62, true, Window.QUAD); + Roof roof2 = new Roof(Roof.GAMBREL); + House house2 = new House(100, 60, door2, window2, roof2, House.LEFT_DOOR); + house2.drawHouse(house1.x + house1.w, height-groundHeight-house2.h, true); +} + +class Door{ + //door properties + int x; + int y; + int w; + int h; + + // for knob + int knobLoc = 1; + //constants + final static int RT = 0; + final static int LFT = 1; + + // constructor + Door(int w, int h){ + this.w = w; + this.h = h; + } + + // draw the door + public void drawDoor(int x, int y) { + rect(x, y, w, h); + int knobsize = w/10; + if (knobLoc == 0){ + //right side + ellipse(x+w-knobsize, y+h/2, knobsize, knobsize); + } + else { + //left side + ellipse(x+knobsize, y+h/2, knobsize, knobsize); + } + } + + // set knob position + public void setKnob(int knobLoc){ + this. knobLoc = knobLoc; + } +} + +class Window{ + //window properties + int x; + int y; + int w; + int h; + + // customized features + boolean hasSash = false; + + // single, double, quad pane + int style = 0; + //constants + final static int SINGLE = 0; + final static int DOUBLE = 1; + final static int QUAD = 2; + + // constructor 1 + Window(int w, int h){ + this.w = w; + this.h = h; + } + // constructor 2 + Window(int w, int h, int style){ + this.w = w; + this.h = h; + this.style = style; + } + // constructor 3 + Window(int w, int h, boolean hasSash, int style){ + this.w = w; + this.h = h; + this.hasSash = hasSash; + this.style = style; + } + + // draw the window + public void drawWindow(int x, int y) { + //local variables + int margin = 0; + int winHt = 0; + int winWdth = 0; + + if (hasSash){ + margin = w/15; + } + + switch(style){ + case 0: + //outer window (sash) + rect(x, y, w, h); + //inner window + rect(x+margin, y+margin, w-margin*2, h-margin*2); + break; + case 1: + winHt = (h-margin*3)/2; + //outer window (sash) + rect(x, y, w, h); + //inner window (top) + rect(x+margin, y+margin, w-margin*2, winHt); + //inner windows (bottom) + rect(x+margin, y+winHt+margin*2, w-margin*2, winHt); + break; + case 2: + winWdth = (w-margin*3)/2; + winHt = (h-margin*3)/2; + //outer window (sash) + rect(x, y, w, h); + //inner window (top-left) + rect(x+margin, y+margin, winWdth, winHt); + //inner window (top-right) + rect(x+winWdth+margin*2, y+margin, winWdth, winHt); + //inner windows (bottom-left) + rect(x+margin, y+winHt+margin*2, winWdth, winHt); + //inner windows (bottom-right) + rect(x+winWdth+margin*2, y+winHt+margin*2, winWdth, winHt); + break; + } + } + + // set window style (number of panes) + public void setStyle(int style){ + this.style = style; + } +} + +class Roof{ + //roof properties + int x; + int y; + int w; + int h; + + // roof style + int style = 0; + //constants + final static int CATHEDRAL = 0; + final static int GAMBREL = 1; + final static int DOME = 2; + + // default constructor + Roof(){ + } + + // constructor 2 + Roof(int style){ + this.style = style; + } + + // draw the roof + public void drawRoof(int x, int y, int w, int h) { + switch(style){ + case 0: + beginShape(); + vertex(x, y); + vertex(x+w/2, y-h/3); + vertex(x+w, y); + endShape(CLOSE); + break; + case 1: + beginShape(); + vertex(x, y); + vertex(x+w/7, y-h/4); + vertex(x+w/2, y-h/2); + vertex(x+(w-w/7), y-h/4); + vertex(x+w, y); + endShape(CLOSE); + break; + case 2: + ellipseMode(CORNER); + arc(x, y-h/2, w, h, PI, TWO_PI); + line(x, y, x+w, y); + break; + } + + } + + // set roof style + public void setStyle(int style){ + this.style = style; + } +} + +class House{ + //house properties + int x; + int y; + int w; + int h; + + //component reference variables + Door door; + Window window; + Roof roof; + + //optional autosize variable + boolean AutoSizeComponents = false; + + //door placement + int doorLoc = 0; + //constants + final static int MIDDLE_DOOR = 0; + final static int LEFT_DOOR = 1; + final static int RIGHT_DOOR = 2; + + //constructor + House(int w, int h, Door door, Window window, Roof roof, int doorLoc) { + this.w = w; + this.h = h; + this.door = door; + this.window = window; + this.roof = roof; + this.doorLoc = doorLoc; + } + + public void drawHouse(int x, int y, boolean AutoSizeComponents) { + this.x = x; + this.y =y; + this.AutoSizeComponents = AutoSizeComponents; + + //automatically sizes doors and windows + if(AutoSizeComponents){ + //autosize door + door.h = h/4; + door.w = door.h/2; + + //autosize windows + window.h = h/3; + window.w = window.h/2; + + } + // draw bldg block + rect(x, y, w, h); + + // draw door + switch(doorLoc){ + case 0: + door.drawDoor(x+w/2-door.w/2, y+h-door.h); + break; + case 1: + door.drawDoor(x+w/8, y+h-door.h); + break; + case 2: + door.drawDoor(x+w-w/8-door.w, y+h-door.h); + break; + } + + // draw windows + int windowMargin = (w-window.w*2)/3; + window.drawWindow(x+windowMargin, y+h/6); + window.drawWindow(x+windowMargin*2+window.w, y+h/6); + + // draw roof + roof.drawRoof(x, y, w, h); + } + + // catch drawHouse method without boolean argument + public void drawHouse(int x, int y){ + // recall with required 3rd argument + drawHouse(x, y, false); + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Neighborhood" }); + } +} diff --git a/java/examples/Basics/Objects/Neighborhood/applet/Neighborhood.pde b/java/examples/Basics/Objects/Neighborhood/applet/Neighborhood.pde new file mode 100644 index 000000000..f70893d25 --- /dev/null +++ b/java/examples/Basics/Objects/Neighborhood/applet/Neighborhood.pde @@ -0,0 +1,303 @@ +/** + * Neighborhood (OOP Example) + * By Ira Greenberg + * + * Draw a neighborhood of houses using + * Door, Window, Roof and House classes. + * Good example of class composition, with component + * Door, Window, Roof class references encapsulated + * within House class. This arrangement allows + * House class to handle placement and sizing of + * its components, while still allowing user + * customization of the individual components. + */ + +void setup(){ + size(200, 200); + background(190); + smooth(); + // Ground plane + int groundHeight = 10; + fill(0); + rect(0, height-groundHeight, width, groundHeight); + fill(255); + + // Center the houses + translate(12, 0); + + // Houses + Door door1 = new Door(20, 40); + Window window1 = new Window(50, 62, false, Window.DOUBLE); + Roof roof1 = new Roof(Roof.DOME); + House house1 = new House(75, 75, door1, window1, roof1, House.MIDDLE_DOOR); + house1.drawHouse(0, height-groundHeight-house1.h, true); + + Door door2 = new Door(20, 40); + Window window2 = new Window(50, 62, true, Window.QUAD); + Roof roof2 = new Roof(Roof.GAMBREL); + House house2 = new House(100, 60, door2, window2, roof2, House.LEFT_DOOR); + house2.drawHouse(house1.x + house1.w, height-groundHeight-house2.h, true); +} + +class Door{ + //door properties + int x; + int y; + int w; + int h; + + // for knob + int knobLoc = 1; + //constants + final static int RT = 0; + final static int LFT = 1; + + // constructor + Door(int w, int h){ + this.w = w; + this.h = h; + } + + // draw the door + void drawDoor(int x, int y) { + rect(x, y, w, h); + int knobsize = w/10; + if (knobLoc == 0){ + //right side + ellipse(x+w-knobsize, y+h/2, knobsize, knobsize); + } + else { + //left side + ellipse(x+knobsize, y+h/2, knobsize, knobsize); + } + } + + // set knob position + void setKnob(int knobLoc){ + this. knobLoc = knobLoc; + } +} + +class Window{ + //window properties + int x; + int y; + int w; + int h; + + // customized features + boolean hasSash = false; + + // single, double, quad pane + int style = 0; + //constants + final static int SINGLE = 0; + final static int DOUBLE = 1; + final static int QUAD = 2; + + // constructor 1 + Window(int w, int h){ + this.w = w; + this.h = h; + } + // constructor 2 + Window(int w, int h, int style){ + this.w = w; + this.h = h; + this.style = style; + } + // constructor 3 + Window(int w, int h, boolean hasSash, int style){ + this.w = w; + this.h = h; + this.hasSash = hasSash; + this.style = style; + } + + // draw the window + void drawWindow(int x, int y) { + //local variables + int margin = 0; + int winHt = 0; + int winWdth = 0; + + if (hasSash){ + margin = w/15; + } + + switch(style){ + case 0: + //outer window (sash) + rect(x, y, w, h); + //inner window + rect(x+margin, y+margin, w-margin*2, h-margin*2); + break; + case 1: + winHt = (h-margin*3)/2; + //outer window (sash) + rect(x, y, w, h); + //inner window (top) + rect(x+margin, y+margin, w-margin*2, winHt); + //inner windows (bottom) + rect(x+margin, y+winHt+margin*2, w-margin*2, winHt); + break; + case 2: + winWdth = (w-margin*3)/2; + winHt = (h-margin*3)/2; + //outer window (sash) + rect(x, y, w, h); + //inner window (top-left) + rect(x+margin, y+margin, winWdth, winHt); + //inner window (top-right) + rect(x+winWdth+margin*2, y+margin, winWdth, winHt); + //inner windows (bottom-left) + rect(x+margin, y+winHt+margin*2, winWdth, winHt); + //inner windows (bottom-right) + rect(x+winWdth+margin*2, y+winHt+margin*2, winWdth, winHt); + break; + } + } + + // set window style (number of panes) + void setStyle(int style){ + this.style = style; + } +} + +class Roof{ + //roof properties + int x; + int y; + int w; + int h; + + // roof style + int style = 0; + //constants + final static int CATHEDRAL = 0; + final static int GAMBREL = 1; + final static int DOME = 2; + + // default constructor + Roof(){ + } + + // constructor 2 + Roof(int style){ + this.style = style; + } + + // draw the roof + void drawRoof(int x, int y, int w, int h) { + switch(style){ + case 0: + beginShape(); + vertex(x, y); + vertex(x+w/2, y-h/3); + vertex(x+w, y); + endShape(CLOSE); + break; + case 1: + beginShape(); + vertex(x, y); + vertex(x+w/7, y-h/4); + vertex(x+w/2, y-h/2); + vertex(x+(w-w/7), y-h/4); + vertex(x+w, y); + endShape(CLOSE); + break; + case 2: + ellipseMode(CORNER); + arc(x, y-h/2, w, h, PI, TWO_PI); + line(x, y, x+w, y); + break; + } + + } + + // set roof style + void setStyle(int style){ + this.style = style; + } +} + +class House{ + //house properties + int x; + int y; + int w; + int h; + + //component reference variables + Door door; + Window window; + Roof roof; + + //optional autosize variable + boolean AutoSizeComponents = false; + + //door placement + int doorLoc = 0; + //constants + final static int MIDDLE_DOOR = 0; + final static int LEFT_DOOR = 1; + final static int RIGHT_DOOR = 2; + + //constructor + House(int w, int h, Door door, Window window, Roof roof, int doorLoc) { + this.w = w; + this.h = h; + this.door = door; + this.window = window; + this.roof = roof; + this.doorLoc = doorLoc; + } + + void drawHouse(int x, int y, boolean AutoSizeComponents) { + this.x = x; + this.y =y; + this.AutoSizeComponents = AutoSizeComponents; + + //automatically sizes doors and windows + if(AutoSizeComponents){ + //autosize door + door.h = h/4; + door.w = door.h/2; + + //autosize windows + window.h = h/3; + window.w = window.h/2; + + } + // draw bldg block + rect(x, y, w, h); + + // draw door + switch(doorLoc){ + case 0: + door.drawDoor(x+w/2-door.w/2, y+h-door.h); + break; + case 1: + door.drawDoor(x+w/8, y+h-door.h); + break; + case 2: + door.drawDoor(x+w-w/8-door.w, y+h-door.h); + break; + } + + // draw windows + int windowMargin = (w-window.w*2)/3; + window.drawWindow(x+windowMargin, y+h/6); + window.drawWindow(x+windowMargin*2+window.w, y+h/6); + + // draw roof + roof.drawRoof(x, y, w, h); + } + + // catch drawHouse method without boolean argument + void drawHouse(int x, int y){ + // recall with required 3rd argument + drawHouse(x, y, false); + } +} + diff --git a/java/examples/Basics/Objects/Neighborhood/applet/loading.gif b/java/examples/Basics/Objects/Neighborhood/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Objects/Objects/Objects.pde b/java/examples/Basics/Objects/Objects/Objects.pde new file mode 100644 index 000000000..80a09a3d6 --- /dev/null +++ b/java/examples/Basics/Objects/Objects/Objects.pde @@ -0,0 +1,71 @@ +/** + * Objects + * by hbarragan. + * + * Move the cursor across the image to change the speed and positions + * of the geometry. The class MRect defines a group of lines. + */ + +MRect r1, r2, r3, r4; + +void setup() +{ + size(200, 200); + fill(255, 204); + noStroke(); + r1 = new MRect(1, 134.0, 0.532, 0.083*height, 10.0, 60.0); + r2 = new MRect(2, 44.0, 0.166, 0.332*height, 5.0, 50.0); + r3 = new MRect(2, 58.0, 0.332, 0.4482*height, 10.0, 35.0); + r4 = new MRect(1, 120.0, 0.0498, 0.913*height, 15.0, 60.0); +} + +void draw() +{ + background(0); + + r1.display(); + r2.display(); + r3.display(); + r4.display(); + + r1.move(mouseX-(width/2), mouseY+(height*0.1), 30); + r2.move((mouseX+(width*0.05))%width, mouseY+(height*0.025), 20); + r3.move(mouseX/4, mouseY-(height*0.025), 40); + r4.move(mouseX-(width/2), (height-mouseY), 50); +} + +class MRect +{ + int w; // single bar width + float xpos; // rect xposition + float h; // rect height + float ypos ; // rect yposition + float d; // single bar distance + float t; // number of bars + + MRect(int iw, float ixp, float ih, float iyp, float id, float it) { + w = iw; + xpos = ixp; + h = ih; + ypos = iyp; + d = id; + t = it; + } + + void move (float posX, float posY, float damping) { + float dif = ypos - posY; + if (abs(dif) > 1) { + ypos -= dif/damping; + } + dif = xpos - posX; + if (abs(dif) > 1) { + xpos -= dif/damping; + } + } + + void display() { + for (int i=0; i 1) { + ypos -= dif/damping; + } + dif = xpos - posX; + if (abs(dif) > 1) { + xpos -= dif/damping; + } + } + + public void display() { + for (int i=0; i 1) { + ypos -= dif/damping; + } + dif = xpos - posX; + if (abs(dif) > 1) { + xpos -= dif/damping; + } + } + + void display() { + for (int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Shape/DisableStyle/DisableStyle.pde b/java/examples/Basics/Shape/DisableStyle/DisableStyle.pde new file mode 100644 index 000000000..656132ce2 --- /dev/null +++ b/java/examples/Basics/Shape/DisableStyle/DisableStyle.pde @@ -0,0 +1,34 @@ +/** + * Ignore Styles. + * Illustration by George Brower. + * + * Shapes are loaded with style information that tells them how + * to draw (the color, stroke weight, etc.) The disableStyle() + * method of PShape turns off this information. The enableStyle() + * method turns it back on. + */ + +PShape bot; + +void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); + noLoop(); +} + +void draw() { + background(102); + + // Draw left bot + bot.disableStyle(); // Ignore the colors in the SVG + fill(0, 102, 153); // Set the SVG fill to blue + stroke(255); // Set the SVG fill to white + shape(bot, 20, 25, 300, 300); + + // Draw right bot + bot.enableStyle(); + shape(bot, 320, 25, 300, 300); +} diff --git a/java/examples/Basics/Shape/DisableStyle/applet/DisableStyle.java b/java/examples/Basics/Shape/DisableStyle/applet/DisableStyle.java new file mode 100644 index 000000000..14a716f4c --- /dev/null +++ b/java/examples/Basics/Shape/DisableStyle/applet/DisableStyle.java @@ -0,0 +1,55 @@ +import processing.core.*; +import processing.xml.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class DisableStyle extends PApplet { + +/** + * Ignore Styles. + * Illustration by George Brower. + * + * Shapes are loaded with style information that tells them how + * to draw (the color, stroke weight, etc.) The disableStyle() + * method of PShape turns off this information. The enableStyle() + * method turns it back on. + */ + +PShape bot; + +public void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); + noLoop(); +} + +public void draw() { + background(102); + + // Draw left bot + bot.disableStyle(); // Ignore the colors in the SVG + fill(0, 102, 153); // Set the SVG fill to blue + stroke(255); // Set the SVG fill to white + shape(bot, 20, 25, 300, 300); + + // Draw right bot + bot.enableStyle(); + shape(bot, 320, 25, 300, 300); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "DisableStyle" }); + } +} diff --git a/java/examples/Basics/Shape/DisableStyle/applet/DisableStyle.pde b/java/examples/Basics/Shape/DisableStyle/applet/DisableStyle.pde new file mode 100644 index 000000000..656132ce2 --- /dev/null +++ b/java/examples/Basics/Shape/DisableStyle/applet/DisableStyle.pde @@ -0,0 +1,34 @@ +/** + * Ignore Styles. + * Illustration by George Brower. + * + * Shapes are loaded with style information that tells them how + * to draw (the color, stroke weight, etc.) The disableStyle() + * method of PShape turns off this information. The enableStyle() + * method turns it back on. + */ + +PShape bot; + +void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); + noLoop(); +} + +void draw() { + background(102); + + // Draw left bot + bot.disableStyle(); // Ignore the colors in the SVG + fill(0, 102, 153); // Set the SVG fill to blue + stroke(255); // Set the SVG fill to white + shape(bot, 20, 25, 300, 300); + + // Draw right bot + bot.enableStyle(); + shape(bot, 320, 25, 300, 300); +} diff --git a/java/examples/Basics/Shape/DisableStyle/applet/loading.gif b/java/examples/Basics/Shape/DisableStyle/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Shape/DisableStyle/data/bot1.svg b/java/examples/Basics/Shape/DisableStyle/data/bot1.svg new file mode 100644 index 000000000..3c56f2d60 --- /dev/null +++ b/java/examples/Basics/Shape/DisableStyle/data/bot1.svg @@ -0,0 +1,160 @@ + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/Basics/Shape/GetChild/GetChild.pde b/java/examples/Basics/Shape/GetChild/GetChild.pde new file mode 100644 index 000000000..0b9b9d393 --- /dev/null +++ b/java/examples/Basics/Shape/GetChild/GetChild.pde @@ -0,0 +1,45 @@ +/** + * Get Child. + * + * SVG files can be made of many individual shapes. + * Each of these shapes (called a "child") has its own name + * that can be used to extract it from the "parent" file. + * This example loads a map of the United States and creates + * two new PShape objects by extracting the data from two states. + */ + +PShape usa; +PShape michigan; +PShape ohio; + +void setup() { + size(640, 360); + usa = loadShape("usa-wikipedia.svg"); + michigan = usa.getChild("MI"); + ohio = usa.getChild("OH"); + smooth(); // Improves the drawing quality of the SVG + noLoop(); +} + +void draw() { + background(255); + + // Draw the full map + shape(usa, -600, -180); + + // Disable the colors found in the SVG file + michigan.disableStyle(); + // Set our own coloring + fill(0, 51, 102); + noStroke(); + // Draw a single state + shape(michigan, -600, -180); // Go Blue! + + // Disable the colors found in the SVG file + ohio.disableStyle(); + // Set our own coloring + fill(153, 0, 0); + noStroke(); + // Draw a single state + shape(ohio, -600, -180); // Boo Buckeyes! +} diff --git a/java/examples/Basics/Shape/GetChild/applet/GetChild.java b/java/examples/Basics/Shape/GetChild/applet/GetChild.java new file mode 100644 index 000000000..2854fbb45 --- /dev/null +++ b/java/examples/Basics/Shape/GetChild/applet/GetChild.java @@ -0,0 +1,66 @@ +import processing.core.*; +import processing.xml.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class GetChild extends PApplet { + +/** + * Get Child. + * + * SVG files can be made of many individual shapes. + * Each of these shapes (called a "child") has its own name + * that can be used to extract it from the "parent" file. + * This example loads a map of the United States and creates + * two new PShape objects by extracting the data from two states. + */ + +PShape usa; +PShape michigan; +PShape ohio; + +public void setup() { + size(640, 360); + usa = loadShape("usa-wikipedia.svg"); + michigan = usa.getChild("MI"); + ohio = usa.getChild("OH"); + smooth(); // Improves the drawing quality of the SVG + noLoop(); +} + +public void draw() { + background(255); + + // Draw the full map + shape(usa, -600, -180); + + // Disable the colors found in the SVG file + michigan.disableStyle(); + // Set our own coloring + fill(0, 51, 102); + noStroke(); + // Draw a single state + shape(michigan, -600, -180); // Boo Wolverines! + + // Disable the colors found in the SVG file + ohio.disableStyle(); + // Set our own coloring + fill(153, 0, 0); + noStroke(); + // Draw a single state + shape(ohio, -600, -180); // Go Buckeyes! +} + + static public void main(String args[]) { + PApplet.main(new String[] { "GetChild" }); + } +} diff --git a/java/examples/Basics/Shape/GetChild/applet/GetChild.pde b/java/examples/Basics/Shape/GetChild/applet/GetChild.pde new file mode 100644 index 000000000..0e1e69407 --- /dev/null +++ b/java/examples/Basics/Shape/GetChild/applet/GetChild.pde @@ -0,0 +1,45 @@ +/** + * Get Child. + * + * SVG files can be made of many individual shapes. + * Each of these shapes (called a "child") has its own name + * that can be used to extract it from the "parent" file. + * This example loads a map of the United States and creates + * two new PShape objects by extracting the data from two states. + */ + +PShape usa; +PShape michigan; +PShape ohio; + +void setup() { + size(640, 360); + usa = loadShape("usa-wikipedia.svg"); + michigan = usa.getChild("MI"); + ohio = usa.getChild("OH"); + smooth(); // Improves the drawing quality of the SVG + noLoop(); +} + +void draw() { + background(255); + + // Draw the full map + shape(usa, -600, -180); + + // Disable the colors found in the SVG file + michigan.disableStyle(); + // Set our own coloring + fill(0, 51, 102); + noStroke(); + // Draw a single state + shape(michigan, -600, -180); // Boo Wolverines! + + // Disable the colors found in the SVG file + ohio.disableStyle(); + // Set our own coloring + fill(153, 0, 0); + noStroke(); + // Draw a single state + shape(ohio, -600, -180); // Go Buckeyes! +} diff --git a/java/examples/Basics/Shape/GetChild/applet/loading.gif b/java/examples/Basics/Shape/GetChild/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Shape/GetChild/data/usa-wikipedia.svg b/java/examples/Basics/Shape/GetChild/data/usa-wikipedia.svg new file mode 100644 index 000000000..247ba7383 --- /dev/null +++ b/java/examples/Basics/Shape/GetChild/data/usa-wikipedia.svg @@ -0,0 +1,452 @@ + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/Basics/Shape/LoadDisplayShape/LoadDisplayShape.pde b/java/examples/Basics/Shape/LoadDisplayShape/LoadDisplayShape.pde new file mode 100644 index 000000000..3d18b4b4a --- /dev/null +++ b/java/examples/Basics/Shape/LoadDisplayShape/LoadDisplayShape.pde @@ -0,0 +1,26 @@ +/** + * Load and Display a Shape. + * Illustration by George Brower. + * + * The loadShape() command is used to read simple SVG (Scalable Vector Graphics) + * files into a Processing sketch. This library was specifically tested under + * SVG files created from Adobe Illustrator. For now, we can't guarantee that + * it'll work for SVGs created with anything else. + */ + +PShape bot; + +void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); + noLoop(); // Only run draw() once +} + +void draw(){ + background(102); + shape(bot, 110, 90, 100, 100); // Draw at coordinate (10, 10) at size 100 x 100 + shape(bot, 280, 40); // Draw at coordinate (70, 60) at the default size +} diff --git a/java/examples/Basics/Shape/LoadDisplayShape/applet/LoadDisplayShape.java b/java/examples/Basics/Shape/LoadDisplayShape/applet/LoadDisplayShape.java new file mode 100644 index 000000000..f7dc4e0af --- /dev/null +++ b/java/examples/Basics/Shape/LoadDisplayShape/applet/LoadDisplayShape.java @@ -0,0 +1,47 @@ +import processing.core.*; +import processing.xml.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class LoadDisplayShape extends PApplet { + +/** + * Load and Display a Shape. + * Illustration by George Brower. + * + * The loadShape() command is used to read simple SVG (Scalable Vector Graphics) + * files into a Processing sketch. This library was specifically tested under + * SVG files created from Adobe Illustrator. For now, we can't guarantee that + * it'll work for SVGs created with anything else. + */ + +PShape bot; + +public void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); + noLoop(); // Only run draw() once +} + +public void draw(){ + background(102); + shape(bot, 110, 90, 100, 100); // Draw at coordinate (10, 10) at size 100 x 100 + shape(bot, 280, 40); // Draw at coordinate (70, 60) at the default size +} + + static public void main(String args[]) { + PApplet.main(new String[] { "LoadDisplayShape" }); + } +} diff --git a/java/examples/Basics/Shape/LoadDisplayShape/applet/LoadDisplayShape.pde b/java/examples/Basics/Shape/LoadDisplayShape/applet/LoadDisplayShape.pde new file mode 100644 index 000000000..3d18b4b4a --- /dev/null +++ b/java/examples/Basics/Shape/LoadDisplayShape/applet/LoadDisplayShape.pde @@ -0,0 +1,26 @@ +/** + * Load and Display a Shape. + * Illustration by George Brower. + * + * The loadShape() command is used to read simple SVG (Scalable Vector Graphics) + * files into a Processing sketch. This library was specifically tested under + * SVG files created from Adobe Illustrator. For now, we can't guarantee that + * it'll work for SVGs created with anything else. + */ + +PShape bot; + +void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); + noLoop(); // Only run draw() once +} + +void draw(){ + background(102); + shape(bot, 110, 90, 100, 100); // Draw at coordinate (10, 10) at size 100 x 100 + shape(bot, 280, 40); // Draw at coordinate (70, 60) at the default size +} diff --git a/java/examples/Basics/Shape/LoadDisplayShape/applet/loading.gif b/java/examples/Basics/Shape/LoadDisplayShape/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Shape/LoadDisplayShape/data/bot1.svg b/java/examples/Basics/Shape/LoadDisplayShape/data/bot1.svg new file mode 100644 index 000000000..3c56f2d60 --- /dev/null +++ b/java/examples/Basics/Shape/LoadDisplayShape/data/bot1.svg @@ -0,0 +1,160 @@ + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/Basics/Shape/ScaleShape/ScaleShape.pde b/java/examples/Basics/Shape/ScaleShape/ScaleShape.pde new file mode 100644 index 000000000..879f20b68 --- /dev/null +++ b/java/examples/Basics/Shape/ScaleShape/ScaleShape.pde @@ -0,0 +1,26 @@ +/** + * Scale Shape. + * Illustration by George Brower. + * + * Move the mouse left and right to zoom the SVG file. + * This shows how, unlike an imported image, the lines + * remain smooth at any size. + */ + +PShape bot; + +void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); +} + +void draw() { + background(102); + translate(width/2, height/2); + float zoom = map(mouseX, 0, width, 0.1, 4.5); + scale(zoom); + shape(bot, -140, -140); +} diff --git a/java/examples/Basics/Shape/ScaleShape/applet/ScaleShape.java b/java/examples/Basics/Shape/ScaleShape/applet/ScaleShape.java new file mode 100644 index 000000000..3a6aa5e19 --- /dev/null +++ b/java/examples/Basics/Shape/ScaleShape/applet/ScaleShape.java @@ -0,0 +1,47 @@ +import processing.core.*; +import processing.xml.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class ScaleShape extends PApplet { + +/** + * Scale Shape. + * Illustration by George Brower. + * + * Move the mouse left and right to zoom the SVG file. + * This shows how, unlike an imported image, the lines + * remain smooth at any size. + */ + +PShape bot; + +public void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); +} + +public void draw() { + background(102); + translate(width/2, height/2); + float zoom = map(mouseX, 0, width, 0.1f, 4.5f); + scale(zoom); + shape(bot, -140, -140); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "ScaleShape" }); + } +} diff --git a/java/examples/Basics/Shape/ScaleShape/applet/ScaleShape.pde b/java/examples/Basics/Shape/ScaleShape/applet/ScaleShape.pde new file mode 100644 index 000000000..879f20b68 --- /dev/null +++ b/java/examples/Basics/Shape/ScaleShape/applet/ScaleShape.pde @@ -0,0 +1,26 @@ +/** + * Scale Shape. + * Illustration by George Brower. + * + * Move the mouse left and right to zoom the SVG file. + * This shows how, unlike an imported image, the lines + * remain smooth at any size. + */ + +PShape bot; + +void setup() { + size(640, 360); + smooth(); + // The file "bot1.svg" must be in the data folder + // of the current sketch to load successfully + bot = loadShape("bot1.svg"); +} + +void draw() { + background(102); + translate(width/2, height/2); + float zoom = map(mouseX, 0, width, 0.1, 4.5); + scale(zoom); + shape(bot, -140, -140); +} diff --git a/java/examples/Basics/Shape/ScaleShape/applet/loading.gif b/java/examples/Basics/Shape/ScaleShape/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Shape/ScaleShape/data/bot1.svg b/java/examples/Basics/Shape/ScaleShape/data/bot1.svg new file mode 100644 index 000000000..3c56f2d60 --- /dev/null +++ b/java/examples/Basics/Shape/ScaleShape/data/bot1.svg @@ -0,0 +1,160 @@ + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/Basics/Structure/Coordinates/Coordinates.pde b/java/examples/Basics/Structure/Coordinates/Coordinates.pde new file mode 100644 index 000000000..c63c147b7 --- /dev/null +++ b/java/examples/Basics/Structure/Coordinates/Coordinates.pde @@ -0,0 +1,41 @@ +/** + * Coordinates. + * + * All shapes drawn to the screen have a position that is specified as a coordinate. + * All coordinates are measured as the distance from the origin in units of pixels. + * The origin [0, 0] is the coordinate is in the upper left of the window + * and the coordinate in the lower right is [width-1, height-1]. + */ + +// Sets the screen to be 200, 200, so the width of the window is 200 pixels +// and the height of the window is 200 pixels +size(200, 200); +background(0); +noFill(); +stroke(255); + +// The two parameters of the point() method each specify coordinates. +// This call to point() draws at the position [100, 100] +point(width/2, height/2); + +// Draws to the position [100, 50] +point(width/2, height/4); + +// It is also possible to specify a point with any parameter, +// but only coordinates on the screen are visible +point(60, 30); +point(60, 134); +point(160, 50); +point(280, -800); +point(201, 100); + +// Coordinates are used for drawing all shapes, not just points. +// Parameters for different methods are used for different purposes. +// For example, the first two parameters to line() specify the coordinates of the +// first point and the second two parameters specify the second point +stroke(204); +line(0, 73, width, 73); + +// The first two parameters to rect() are coordinates +// and the second two are the width and height +rect(110, 55, 40, 36); diff --git a/java/examples/Basics/Structure/Coordinates/applet/Coordinates.java b/java/examples/Basics/Structure/Coordinates/applet/Coordinates.java new file mode 100644 index 000000000..cc173b9aa --- /dev/null +++ b/java/examples/Basics/Structure/Coordinates/applet/Coordinates.java @@ -0,0 +1,62 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Coordinates extends PApplet { + public void setup() {/** + * Coordinates. + * + * All shapes drawn to the screen have a position that is specified as a coordinate. + * All coordinates are measured as the distance from the origin in units of pixels. + * The origin [0, 0] is the coordinate is in the upper left of the window + * and the coordinate in the lower right is [width-1, height-1]. + */ + +// Sets the screen to be 200, 200, so the width of the window is 200 pixels +// and the height of the window is 200 pixels +size(200, 200); +background(0); +noFill(); +stroke(255); + +// The two parameters of the point() method each specify coordinates. +// This call to point() draws at the position [100, 100] +point(width/2, height/2); + +// Draws to the position [100, 50] +point(width/2, height/4); + +// It is also possible to specify a point with any parameter, +// but only coordinates on the screen are visible +point(60, 30); +point(60, 134); +point(160, 50); +point(280, -800); +point(201, 100); + +// Coordinates are used for drawing all shapes, not just points. +// Parameters for different methods are used for different purposes. +// For example, the first two parameters to line() specify the coordinates of the +// first point and the second two parameters specify the second point +stroke(204); +line(0, 73, width, 73); + +// The first two parameters to rect() are coordinates +// and the second two are the width and height +rect(110, 55, 40, 36); + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "Coordinates" }); + } +} diff --git a/java/examples/Basics/Structure/Coordinates/applet/Coordinates.pde b/java/examples/Basics/Structure/Coordinates/applet/Coordinates.pde new file mode 100644 index 000000000..c63c147b7 --- /dev/null +++ b/java/examples/Basics/Structure/Coordinates/applet/Coordinates.pde @@ -0,0 +1,41 @@ +/** + * Coordinates. + * + * All shapes drawn to the screen have a position that is specified as a coordinate. + * All coordinates are measured as the distance from the origin in units of pixels. + * The origin [0, 0] is the coordinate is in the upper left of the window + * and the coordinate in the lower right is [width-1, height-1]. + */ + +// Sets the screen to be 200, 200, so the width of the window is 200 pixels +// and the height of the window is 200 pixels +size(200, 200); +background(0); +noFill(); +stroke(255); + +// The two parameters of the point() method each specify coordinates. +// This call to point() draws at the position [100, 100] +point(width/2, height/2); + +// Draws to the position [100, 50] +point(width/2, height/4); + +// It is also possible to specify a point with any parameter, +// but only coordinates on the screen are visible +point(60, 30); +point(60, 134); +point(160, 50); +point(280, -800); +point(201, 100); + +// Coordinates are used for drawing all shapes, not just points. +// Parameters for different methods are used for different purposes. +// For example, the first two parameters to line() specify the coordinates of the +// first point and the second two parameters specify the second point +stroke(204); +line(0, 73, width, 73); + +// The first two parameters to rect() are coordinates +// and the second two are the width and height +rect(110, 55, 40, 36); diff --git a/java/examples/Basics/Structure/Coordinates/applet/loading.gif b/java/examples/Basics/Structure/Coordinates/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/CreateGraphics/CreateGraphics.pde b/java/examples/Basics/Structure/CreateGraphics/CreateGraphics.pde new file mode 100644 index 000000000..7f1b1d0eb --- /dev/null +++ b/java/examples/Basics/Structure/CreateGraphics/CreateGraphics.pde @@ -0,0 +1,33 @@ +/** + * Create Graphics. + * + * The createGraphics() function creates an object from the PGraphics class + * (PGraphics is the main graphics and rendering context for Processing). + * The beginDraw() method is necessary to prepare for drawing and endDraw() is + * necessary to finish. Use this class if you need to draw into an off-screen + * graphics buffer or to maintain two contexts with different properties. + */ + +PGraphics pg; + +void setup() { + size(200, 200); + pg = createGraphics(80, 80, P2D); +} + +void draw() { + fill(0, 12); + rect(0, 0, width, height); + fill(255); + noStroke(); + ellipse(mouseX, mouseY, 60, 60); + + pg.beginDraw(); + pg.background(102); + pg.noFill(); + pg.stroke(255); + pg.ellipse(mouseX-60, mouseY-60, 60, 60); + pg.endDraw(); + + image(pg, 60, 60); +} diff --git a/java/examples/Basics/Structure/CreateGraphics/applet/CreateGraphics.java b/java/examples/Basics/Structure/CreateGraphics/applet/CreateGraphics.java new file mode 100644 index 000000000..8c2eaf6bb --- /dev/null +++ b/java/examples/Basics/Structure/CreateGraphics/applet/CreateGraphics.java @@ -0,0 +1,53 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class CreateGraphics extends PApplet { + +/** + * Create Graphics. + * + * The createGraphics() function creates an object from the PGraphics class + * (PGraphics is the main graphics and rendering context for Processing). + * The beginDraw() method is necessary to prepare for drawing and endDraw() is + * necessary to finish. Use this class if you need to draw into an off-screen + * graphics buffer or to maintain two contexts with different properties. + */ + +PGraphics pg; + +public void setup() { + size(200, 200); + pg = createGraphics(80, 80, P3D); +} + +public void draw() { + fill(0, 12); + rect(0, 0, width, height); + fill(255); + noStroke(); + ellipse(mouseX, mouseY, 60, 60); + + pg.beginDraw(); + pg.background(102); + pg.noFill(); + pg.stroke(255); + pg.ellipse(mouseX-60, mouseY-60, 60, 60); + pg.endDraw(); + + image(pg, 60, 60); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "CreateGraphics" }); + } +} diff --git a/java/examples/Basics/Structure/CreateGraphics/applet/CreateGraphics.pde b/java/examples/Basics/Structure/CreateGraphics/applet/CreateGraphics.pde new file mode 100644 index 000000000..5bd6710bb --- /dev/null +++ b/java/examples/Basics/Structure/CreateGraphics/applet/CreateGraphics.pde @@ -0,0 +1,33 @@ +/** + * Create Graphics. + * + * The createGraphics() function creates an object from the PGraphics class + * (PGraphics is the main graphics and rendering context for Processing). + * The beginDraw() method is necessary to prepare for drawing and endDraw() is + * necessary to finish. Use this class if you need to draw into an off-screen + * graphics buffer or to maintain two contexts with different properties. + */ + +PGraphics pg; + +void setup() { + size(200, 200); + pg = createGraphics(80, 80, P3D); +} + +void draw() { + fill(0, 12); + rect(0, 0, width, height); + fill(255); + noStroke(); + ellipse(mouseX, mouseY, 60, 60); + + pg.beginDraw(); + pg.background(102); + pg.noFill(); + pg.stroke(255); + pg.ellipse(mouseX-60, mouseY-60, 60, 60); + pg.endDraw(); + + image(pg, 60, 60); +} diff --git a/java/examples/Basics/Structure/CreateGraphics/applet/loading.gif b/java/examples/Basics/Structure/CreateGraphics/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/Functions/Functions.pde b/java/examples/Basics/Structure/Functions/Functions.pde new file mode 100644 index 000000000..b94fdb01e --- /dev/null +++ b/java/examples/Basics/Structure/Functions/Functions.pde @@ -0,0 +1,33 @@ +/** + * Functions. + * + * The drawTarget() function makes it easy to draw many distinct targets. + * Each call to drawTarget() specifies the position, size, and number of + * rings for each target. + */ + +void setup() +{ + size(200, 200); + background(51); + noStroke(); + smooth(); + noLoop(); +} + +void draw() +{ + drawTarget(68, 34, 200, 10); + drawTarget(152, 16, 100, 3); + drawTarget(100, 144, 80, 5); +} + +void drawTarget(int xloc, int yloc, int size, int num) +{ + float grayvalues = 255/num; + float steps = size/num; + for(int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/Loop/Loop.pde b/java/examples/Basics/Structure/Loop/Loop.pde new file mode 100644 index 000000000..0f6e96d01 --- /dev/null +++ b/java/examples/Basics/Structure/Loop/Loop.pde @@ -0,0 +1,40 @@ +/** + * Loop. + * + * The loop() function causes draw() to execute + * continuously. If noLoop is called in setup() + * the draw() is only executed once. In this example + * click the mouse to execute loop(), which will + * cause the draw() the execute continuously. + */ + +// The statements in the setup() function +// execute once when the program begins +void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set stroke color to white + noLoop(); +} + +float y = 100; + +// The statements in draw() are run until the +// program is stopped. Each statement is run in +// sequence and after the last line is read, the first +// line is run again. +void draw() +{ + background(0); // Set the background to black + line(0, y, width, y); + + y = y - 1; + if (y < 0) { + y = height; + } +} + +void mousePressed() +{ + loop(); +} diff --git a/java/examples/Basics/Structure/Loop/applet/Loop.java b/java/examples/Basics/Structure/Loop/applet/Loop.java new file mode 100644 index 000000000..8ef7bc7d1 --- /dev/null +++ b/java/examples/Basics/Structure/Loop/applet/Loop.java @@ -0,0 +1,60 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Loop extends PApplet { + +/** + * Loop. + * + * The loop() function causes draw() to execute + * continuously. If noLoop is called in setup() + * the draw() is only executed once. In this example + * click the mouse to execute loop(), which will + * cause the draw() the execute continuously. + */ + +// The statements in the setup() function +// execute once when the program begins +public void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set stroke color to white + noLoop(); +} + +float y = 100; + +// The statements in draw() are run until the +// program is stopped. Each statement is run in +// sequence and after the last line is read, the first +// line is run again. +public void draw() +{ + background(0); // Set the background to black + line(0, y, width, y); + + y = y - 1; + if (y < 0) { + y = height; + } +} + +public void mousePressed() +{ + loop(); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Loop" }); + } +} diff --git a/java/examples/Basics/Structure/Loop/applet/Loop.pde b/java/examples/Basics/Structure/Loop/applet/Loop.pde new file mode 100644 index 000000000..0f6e96d01 --- /dev/null +++ b/java/examples/Basics/Structure/Loop/applet/Loop.pde @@ -0,0 +1,40 @@ +/** + * Loop. + * + * The loop() function causes draw() to execute + * continuously. If noLoop is called in setup() + * the draw() is only executed once. In this example + * click the mouse to execute loop(), which will + * cause the draw() the execute continuously. + */ + +// The statements in the setup() function +// execute once when the program begins +void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set stroke color to white + noLoop(); +} + +float y = 100; + +// The statements in draw() are run until the +// program is stopped. Each statement is run in +// sequence and after the last line is read, the first +// line is run again. +void draw() +{ + background(0); // Set the background to black + line(0, y, width, y); + + y = y - 1; + if (y < 0) { + y = height; + } +} + +void mousePressed() +{ + loop(); +} diff --git a/java/examples/Basics/Structure/Loop/applet/loading.gif b/java/examples/Basics/Structure/Loop/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/NoLoop/NoLoop.pde b/java/examples/Basics/Structure/NoLoop/NoLoop.pde new file mode 100644 index 000000000..cb0d954d2 --- /dev/null +++ b/java/examples/Basics/Structure/NoLoop/NoLoop.pde @@ -0,0 +1,33 @@ +/** + * No Loop. + * + * The noLoop() function causes draw() to only + * execute once. Without calling noLoop(), draw() + * executed continually. + */ + +// The statements in the setup() function +// execute once when the program begins +void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set line drawing color to white + frameRate(30); + noLoop(); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +void draw() +{ + background(0); // Set the background to black + y = y - 1; + if (y < 0) { y = height; } + line(0, y, width, y); +} + + diff --git a/java/examples/Basics/Structure/NoLoop/applet/NoLoop.java b/java/examples/Basics/Structure/NoLoop/applet/NoLoop.java new file mode 100644 index 000000000..67681015b --- /dev/null +++ b/java/examples/Basics/Structure/NoLoop/applet/NoLoop.java @@ -0,0 +1,53 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class NoLoop extends PApplet { + +/** + * No Loop. + * + * The noLoop() function causes draw() to only + * execute once. Without calling noLoop(), draw() + * executed continually. + */ + +// The statements in the setup() function +// execute once when the program begins +public void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set line drawing color to white + frameRate(30); + noLoop(); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +public void draw() +{ + background(0); // Set the background to black + y = y - 1; + if (y < 0) { y = height; } + line(0, y, width, y); +} + + + + static public void main(String args[]) { + PApplet.main(new String[] { "NoLoop" }); + } +} diff --git a/java/examples/Basics/Structure/NoLoop/applet/NoLoop.pde b/java/examples/Basics/Structure/NoLoop/applet/NoLoop.pde new file mode 100644 index 000000000..cb0d954d2 --- /dev/null +++ b/java/examples/Basics/Structure/NoLoop/applet/NoLoop.pde @@ -0,0 +1,33 @@ +/** + * No Loop. + * + * The noLoop() function causes draw() to only + * execute once. Without calling noLoop(), draw() + * executed continually. + */ + +// The statements in the setup() function +// execute once when the program begins +void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set line drawing color to white + frameRate(30); + noLoop(); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +void draw() +{ + background(0); // Set the background to black + y = y - 1; + if (y < 0) { y = height; } + line(0, y, width, y); +} + + diff --git a/java/examples/Basics/Structure/NoLoop/applet/loading.gif b/java/examples/Basics/Structure/NoLoop/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/Recursion/Recursion.pde b/java/examples/Basics/Structure/Recursion/Recursion.pde new file mode 100644 index 000000000..2e77668f4 --- /dev/null +++ b/java/examples/Basics/Structure/Recursion/Recursion.pde @@ -0,0 +1,32 @@ +/** + * Recursion. + * + * A demonstration of recursion, which means functions call themselves. + * Notice how the drawCircle() function calls itself at the end of its block. + * It continues to do this until the variable "level" is equal to 1. + */ + +void setup() +{ + size(200, 200); + noStroke(); + smooth(); + noLoop(); +} + +void draw() +{ + drawCircle(126, 170, 6); +} + +void drawCircle(int x, int radius, int level) +{ + float tt = 126 * level/4.0; + fill(tt); + ellipse(x, 100, radius*2, radius*2); + if(level > 1) { + level = level - 1; + drawCircle(x - radius/2, radius/2, level); + drawCircle(x + radius/2, radius/2, level); + } +} diff --git a/java/examples/Basics/Structure/Recursion/applet/Recursion.java b/java/examples/Basics/Structure/Recursion/applet/Recursion.java new file mode 100644 index 000000000..c739d0b06 --- /dev/null +++ b/java/examples/Basics/Structure/Recursion/applet/Recursion.java @@ -0,0 +1,52 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Recursion extends PApplet { + +/** + * Recursion. + * + * A demonstration of recursion, which means functions call themselves. + * Notice how the drawCircle() function calls itself at the end of its block. + * It continues to do this until the variable "level" is equal to 1. + */ + +public void setup() +{ + size(200, 200); + noStroke(); + smooth(); + noLoop(); +} + +public void draw() +{ + drawCircle(126, 170, 6); +} + +public void drawCircle(int x, int radius, int level) +{ + float tt = 126 * level/4.0f; + fill(tt); + ellipse(x, 100, radius*2, radius*2); + if(level > 1) { + level = level - 1; + drawCircle(x - radius/2, radius/2, level); + drawCircle(x + radius/2, radius/2, level); + } +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Recursion" }); + } +} diff --git a/java/examples/Basics/Structure/Recursion/applet/Recursion.pde b/java/examples/Basics/Structure/Recursion/applet/Recursion.pde new file mode 100644 index 000000000..2e77668f4 --- /dev/null +++ b/java/examples/Basics/Structure/Recursion/applet/Recursion.pde @@ -0,0 +1,32 @@ +/** + * Recursion. + * + * A demonstration of recursion, which means functions call themselves. + * Notice how the drawCircle() function calls itself at the end of its block. + * It continues to do this until the variable "level" is equal to 1. + */ + +void setup() +{ + size(200, 200); + noStroke(); + smooth(); + noLoop(); +} + +void draw() +{ + drawCircle(126, 170, 6); +} + +void drawCircle(int x, int radius, int level) +{ + float tt = 126 * level/4.0; + fill(tt); + ellipse(x, 100, radius*2, radius*2); + if(level > 1) { + level = level - 1; + drawCircle(x - radius/2, radius/2, level); + drawCircle(x + radius/2, radius/2, level); + } +} diff --git a/java/examples/Basics/Structure/Recursion/applet/loading.gif b/java/examples/Basics/Structure/Recursion/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/Recursion2/Recursion2.pde b/java/examples/Basics/Structure/Recursion2/Recursion2.pde new file mode 100644 index 000000000..0da7d10cc --- /dev/null +++ b/java/examples/Basics/Structure/Recursion2/Recursion2.pde @@ -0,0 +1,32 @@ +/** + * Recursion. + * + * A demonstration of recursion, which means functions call themselves. + * Notice how the drawCircle() function calls itself at the end of its block. + * It continues to do this until the variable "level" is equal to 1. + */ + +void setup() +{ + size(200, 200); + noStroke(); + smooth(); + drawCircle(100, 100, 80, 8); +} + +void drawCircle(float x, float y, int radius, int level) +{ + float tt = 126 * level/6.0; + fill(tt, 153); + ellipse(x, y, radius*2, radius*2); + if(level > 1) { + level = level - 1; + int num = int(random(2, 6)); + for(int i=0; i 1) { + level = level - 1; + int num = PApplet.parseInt(random(2, 6)); + for(int i=0; i 1) { + level = level - 1; + int num = int(random(2, 6)); + for(int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/Redraw/Redraw.pde b/java/examples/Basics/Structure/Redraw/Redraw.pde new file mode 100644 index 000000000..01e82b6bf --- /dev/null +++ b/java/examples/Basics/Structure/Redraw/Redraw.pde @@ -0,0 +1,37 @@ +/** + * Redraw. + * + * The redraw() function makes draw() execute once. + * In this example, draw() is executed once every time + * the mouse is clicked. + */ + +// The statements in the setup() function +// execute once when the program begins +void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set line drawing color to white + noLoop(); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +void draw() +{ + background(0); // Set the background to black + y = y - 1; + if (y < 0) { y = height; } + line(0, y, width, y); +} + +void mousePressed() +{ + redraw(); +} + + diff --git a/java/examples/Basics/Structure/Redraw/applet/Redraw.java b/java/examples/Basics/Structure/Redraw/applet/Redraw.java new file mode 100644 index 000000000..f00e2d0eb --- /dev/null +++ b/java/examples/Basics/Structure/Redraw/applet/Redraw.java @@ -0,0 +1,57 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Redraw extends PApplet { + +/** + * Redraw. + * + * The redraw() function makes draw() execute once. + * In this example, draw() is executed once every time + * the mouse is clicked. + */ + +// The statements in the setup() function +// execute once when the program begins +public void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set line drawing color to white + noLoop(); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +public void draw() +{ + background(0); // Set the background to black + y = y - 1; + if (y < 0) { y = height; } + line(0, y, width, y); +} + +public void mousePressed() +{ + redraw(); +} + + + + static public void main(String args[]) { + PApplet.main(new String[] { "Redraw" }); + } +} diff --git a/java/examples/Basics/Structure/Redraw/applet/Redraw.pde b/java/examples/Basics/Structure/Redraw/applet/Redraw.pde new file mode 100644 index 000000000..01e82b6bf --- /dev/null +++ b/java/examples/Basics/Structure/Redraw/applet/Redraw.pde @@ -0,0 +1,37 @@ +/** + * Redraw. + * + * The redraw() function makes draw() execute once. + * In this example, draw() is executed once every time + * the mouse is clicked. + */ + +// The statements in the setup() function +// execute once when the program begins +void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set line drawing color to white + noLoop(); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +void draw() +{ + background(0); // Set the background to black + y = y - 1; + if (y < 0) { y = height; } + line(0, y, width, y); +} + +void mousePressed() +{ + redraw(); +} + + diff --git a/java/examples/Basics/Structure/Redraw/applet/loading.gif b/java/examples/Basics/Structure/Redraw/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/SetupDraw/SetupDraw.pde b/java/examples/Basics/Structure/SetupDraw/SetupDraw.pde new file mode 100644 index 000000000..19b5518a6 --- /dev/null +++ b/java/examples/Basics/Structure/SetupDraw/SetupDraw.pde @@ -0,0 +1,30 @@ +/** + * Setup and Draw. + * + * The draw() function creates a structure in which + * to write programs that change with time. + */ + +// The statements in the setup() function +// execute once when the program begins +void setup() { + size(200, 200); // Size must be the first statement + stroke(255); // Set line drawing color to white + frameRate(30); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +void draw() { + background(0); // Set the background to black + y = y - 1; + if (y < 0) { + y = height; + } + line(0, y, width, y); +} + diff --git a/java/examples/Basics/Structure/SetupDraw/applet/SetupDraw.java b/java/examples/Basics/Structure/SetupDraw/applet/SetupDraw.java new file mode 100644 index 000000000..9aeb6201f --- /dev/null +++ b/java/examples/Basics/Structure/SetupDraw/applet/SetupDraw.java @@ -0,0 +1,50 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class SetupDraw extends PApplet { + +/** + * Setup and Draw. + * + * The draw() function creates a structure in which + * to write programs that change with time. + */ + +// The statements in the setup() function +// execute once when the program begins +public void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set line drawing color to white + frameRate(30); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +public void draw() +{ + background(0); // Set the background to black + y = y - 1; + if (y < 0) { y = height; } + line(0, y, width, y); +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "SetupDraw" }); + } +} diff --git a/java/examples/Basics/Structure/SetupDraw/applet/SetupDraw.pde b/java/examples/Basics/Structure/SetupDraw/applet/SetupDraw.pde new file mode 100644 index 000000000..191aff0f4 --- /dev/null +++ b/java/examples/Basics/Structure/SetupDraw/applet/SetupDraw.pde @@ -0,0 +1,30 @@ +/** + * Setup and Draw. + * + * The draw() function creates a structure in which + * to write programs that change with time. + */ + +// The statements in the setup() function +// execute once when the program begins +void setup() +{ + size(200, 200); // Size should be the first statement + stroke(255); // Set line drawing color to white + frameRate(30); +} + +float y = 100; + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +void draw() +{ + background(0); // Set the background to black + y = y - 1; + if (y < 0) { y = height; } + line(0, y, width, y); +} + diff --git a/java/examples/Basics/Structure/SetupDraw/applet/loading.gif b/java/examples/Basics/Structure/SetupDraw/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/StatementsComments/StatementsComments.pde b/java/examples/Basics/Structure/StatementsComments/StatementsComments.pde new file mode 100644 index 000000000..9ab2417fc --- /dev/null +++ b/java/examples/Basics/Structure/StatementsComments/StatementsComments.pde @@ -0,0 +1,20 @@ +/** + * Statements and Comments. + * + * Statements are the elements that make up programs. + * The ";" (semi-colon) symbol is used to end statements. + * It is called the "statement terminator." + * Comments are used for making notes to help people better understand programs. + * A comment begins with two forward slashes ("//"). + */ + +// The size function is a statement that tells the computer +// how large to make the window. +// Each function statement has zero or more parameters. +// Parameters are data passed into the function +// and used as values for specifying what the computer will do. +size(200, 200); + +// The background function is a statement that tells the computer +// which color to make the background of the window +background(102); diff --git a/java/examples/Basics/Structure/StatementsComments/applet/StatementsComments.java b/java/examples/Basics/Structure/StatementsComments/applet/StatementsComments.java new file mode 100644 index 000000000..c3bb42923 --- /dev/null +++ b/java/examples/Basics/Structure/StatementsComments/applet/StatementsComments.java @@ -0,0 +1,41 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class StatementsComments extends PApplet { + public void setup() {/** + * Statements and Comments. + * + * Statements are the elements that make up programs. + * The ";" (semi-colon) symbol is used to end statements. + * It is called the "statement terminator." + * Comments are used for making notes to help people better understand programs. + * A comment begins with two forward slashes ("//"). + */ + +// The size function is a statement that tells the computer +// how large to make the window. +// Each function statement has zero or more parameters. +// Parameters are data passed into the function +// and used as values for specifying what the computer will do. +size(200, 200); + +// The background function is a statement that tells the computer +// which color to make the background of the window +background(102); + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "StatementsComments" }); + } +} diff --git a/java/examples/Basics/Structure/StatementsComments/applet/StatementsComments.pde b/java/examples/Basics/Structure/StatementsComments/applet/StatementsComments.pde new file mode 100644 index 000000000..9ab2417fc --- /dev/null +++ b/java/examples/Basics/Structure/StatementsComments/applet/StatementsComments.pde @@ -0,0 +1,20 @@ +/** + * Statements and Comments. + * + * Statements are the elements that make up programs. + * The ";" (semi-colon) symbol is used to end statements. + * It is called the "statement terminator." + * Comments are used for making notes to help people better understand programs. + * A comment begins with two forward slashes ("//"). + */ + +// The size function is a statement that tells the computer +// how large to make the window. +// Each function statement has zero or more parameters. +// Parameters are data passed into the function +// and used as values for specifying what the computer will do. +size(200, 200); + +// The background function is a statement that tells the computer +// which color to make the background of the window +background(102); diff --git a/java/examples/Basics/Structure/StatementsComments/applet/loading.gif b/java/examples/Basics/Structure/StatementsComments/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Structure/WidthHeight/WidthHeight.pde b/java/examples/Basics/Structure/WidthHeight/WidthHeight.pde new file mode 100644 index 000000000..c8ed0b5e3 --- /dev/null +++ b/java/examples/Basics/Structure/WidthHeight/WidthHeight.pde @@ -0,0 +1,16 @@ +/** + * Width and Height. + * + * The 'width' and 'height' variables contain the width and height + * of the display window as defined in the size() function. + */ + +size(200, 200); +background(127); +noStroke(); +for(int i=0; i}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Transform/Arm/Arm.pde b/java/examples/Basics/Transform/Arm/Arm.pde new file mode 100644 index 000000000..8169d914d --- /dev/null +++ b/java/examples/Basics/Transform/Arm/Arm.pde @@ -0,0 +1,39 @@ +/** + * Arm. + * + * The angle of each segment is controlled with the mouseX and + * mouseY position. The transformations applied to the first segment + * are also applied to the second segment because they are inside + * the same pushMatrix() and popMatrix() group. +*/ + +float x = 50; +float y = 100; +float angle1 = 0.0; +float angle2 = 0.0; +float segLength = 50; + +void setup() { + size(200, 200); + smooth(); + strokeWeight(20.0); + stroke(0, 100); +} + +void draw() { + background(226); + + angle1 = (mouseX/float(width) - 0.5) * -PI; + angle2 = (mouseY/float(height) - 0.5) * PI; + + pushMatrix(); + segment(x, y, angle1); + segment(segLength, 0, angle2); + popMatrix(); +} + +void segment(float x, float y, float a) { + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); +} diff --git a/java/examples/Basics/Transform/Arm/applet/Arm.java b/java/examples/Basics/Transform/Arm/applet/Arm.java new file mode 100644 index 000000000..ccec6be96 --- /dev/null +++ b/java/examples/Basics/Transform/Arm/applet/Arm.java @@ -0,0 +1,59 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Arm extends PApplet { + +/** + * Arm. + * + * The angle of each segment is controlled with the mouseX and + * mouseY position. The transformations applied to the first segment + * are also applied to the second segment because they are inside + * the same pushMatrix() and popMatrix() group. +*/ + +float x = 50; +float y = 100; +float angle1 = 0.0f; +float angle2 = 0.0f; +float segLength = 50; + +public void setup() { + size(200, 200); + smooth(); + strokeWeight(20.0f); + stroke(0, 100); +} + +public void draw() { + background(226); + + angle1 = (mouseX/PApplet.parseFloat(width) - 0.5f) * -PI; + angle2 = (mouseY/PApplet.parseFloat(height) - 0.5f) * PI; + + pushMatrix(); + segment(x, y, angle1); + segment(segLength, 0, angle2); + popMatrix(); +} + +public void segment(float x, float y, float a) { + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Arm" }); + } +} diff --git a/java/examples/Basics/Transform/Arm/applet/Arm.pde b/java/examples/Basics/Transform/Arm/applet/Arm.pde new file mode 100644 index 000000000..8169d914d --- /dev/null +++ b/java/examples/Basics/Transform/Arm/applet/Arm.pde @@ -0,0 +1,39 @@ +/** + * Arm. + * + * The angle of each segment is controlled with the mouseX and + * mouseY position. The transformations applied to the first segment + * are also applied to the second segment because they are inside + * the same pushMatrix() and popMatrix() group. +*/ + +float x = 50; +float y = 100; +float angle1 = 0.0; +float angle2 = 0.0; +float segLength = 50; + +void setup() { + size(200, 200); + smooth(); + strokeWeight(20.0); + stroke(0, 100); +} + +void draw() { + background(226); + + angle1 = (mouseX/float(width) - 0.5) * -PI; + angle2 = (mouseY/float(height) - 0.5) * PI; + + pushMatrix(); + segment(x, y, angle1); + segment(segLength, 0, angle2); + popMatrix(); +} + +void segment(float x, float y, float a) { + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); +} diff --git a/java/examples/Basics/Transform/Arm/applet/loading.gif b/java/examples/Basics/Transform/Arm/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Transform/Rotate/Rotate.pde b/java/examples/Basics/Transform/Rotate/Rotate.pde new file mode 100644 index 000000000..e70fbb8e5 --- /dev/null +++ b/java/examples/Basics/Transform/Rotate/Rotate.pde @@ -0,0 +1,36 @@ +/** + * Rotate. + * + * Rotating a square around the Z axis. To get the results + * you expect, send the rotate function angle parameters that are + * values between 0 and PI*2 (TWO_PI which is roughly 6.28). If you prefer to + * think about angles as degrees (0-360), you can use the radians() + * method to convert your values. For example: scale(radians(90)) + * is identical to the statement scale(PI/2). + */ + +float angle; +float jitter; + +void setup() { + size(200, 200); + smooth(); + noStroke(); + fill(255); + rectMode(CENTER); + frameRate(30); +} + +void draw() { + background(102); + + // during even-numbered seconds (0, 2, 4, 6...) + if (second() % 2 == 0) { + jitter = random(-0.1, 0.1); + } + angle = angle + jitter; + float c = cos(angle); + translate(width/2, height/2); + rotate(c); + rect(0, 0, 115, 115); +} diff --git a/java/examples/Basics/Transform/Rotate/applet/Rotate.java b/java/examples/Basics/Transform/Rotate/applet/Rotate.java new file mode 100644 index 000000000..6d37c00a6 --- /dev/null +++ b/java/examples/Basics/Transform/Rotate/applet/Rotate.java @@ -0,0 +1,58 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Rotate extends PApplet { + +/** + * Rotate. + * + * Rotating a square around the Z axis. To get the results + * you expect, send the rotate function angle parameters that are + * values between 0 and PI*2 (TWO_PI which is roughly 6.28). If you prefer to + * think about angles as degrees (0-360), you can use the radians() + * method to convert your values. For example: scale(radians(90)) + * is identical to the statement scale(PI/2). + */ + +public void setup() +{ + size(200,200); + noStroke(); + fill(255); + frameRate(30); +} + +float angle; +float cosine; +float jitter; + +public void draw() +{ + background(102); + + if(second()%2 == 0){ + jitter = (random(-0.1f, 0.1f)); + } + angle = angle + jitter; + cosine = cos(angle); + + translate(width/2, height/2); + rotate(cosine); + rectMode(CENTER); + rect(0, 0, 115, 115); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Rotate" }); + } +} diff --git a/java/examples/Basics/Transform/Rotate/applet/Rotate.pde b/java/examples/Basics/Transform/Rotate/applet/Rotate.pde new file mode 100644 index 000000000..1950efd7a --- /dev/null +++ b/java/examples/Basics/Transform/Rotate/applet/Rotate.pde @@ -0,0 +1,38 @@ +/** + * Rotate. + * + * Rotating a square around the Z axis. To get the results + * you expect, send the rotate function angle parameters that are + * values between 0 and PI*2 (TWO_PI which is roughly 6.28). If you prefer to + * think about angles as degrees (0-360), you can use the radians() + * method to convert your values. For example: scale(radians(90)) + * is identical to the statement scale(PI/2). + */ + +void setup() +{ + size(200,200); + noStroke(); + fill(255); + frameRate(30); +} + +float angle; +float cosine; +float jitter; + +void draw() +{ + background(102); + + if(second()%2 == 0){ + jitter = (random(-0.1, 0.1)); + } + angle = angle + jitter; + cosine = cos(angle); + + translate(width/2, height/2); + rotate(cosine); + rectMode(CENTER); + rect(0, 0, 115, 115); +} diff --git a/java/examples/Basics/Transform/Rotate/applet/loading.gif b/java/examples/Basics/Transform/Rotate/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Transform/Scale/Scale.pde b/java/examples/Basics/Transform/Scale/Scale.pde new file mode 100644 index 000000000..dc41a584d --- /dev/null +++ b/java/examples/Basics/Transform/Scale/Scale.pde @@ -0,0 +1,38 @@ +/** + * Scale + * by Denis Grutze. + * + * Paramenters for the scale() function are values specified + * as decimal percentages. For example, the method call scale(2.0) + * will increase the dimension of the shape by 200 percent. + * Objects always scale from the origin. + */ + +float a = 0.0; +float s = 0.0; + +void setup() +{ + size(200,200); + noStroke(); + rectMode(CENTER); + frameRate(30); +} + +void draw() +{ + background(102); + + a = a + 0.04; + s = cos(a)*2; + + translate(width/2, height/2); + scale(s); + fill(51); + rect(0, 0, 50, 50); + + translate(75, 0); + fill(255); + scale(s); + rect(0, 0, 50, 50); +} diff --git a/java/examples/Basics/Transform/Scale/applet/Scale.java b/java/examples/Basics/Transform/Scale/applet/Scale.java new file mode 100644 index 000000000..d8adf49b3 --- /dev/null +++ b/java/examples/Basics/Transform/Scale/applet/Scale.java @@ -0,0 +1,58 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Scale extends PApplet { + +/** + * Scale + * by Denis Grutze. + * + * Paramenters for the scale() function are values specified + * as decimal percentages. For example, the method call scale(2.0) + * will increase the dimension of the shape by 200 percent. + * Objects always scale from the origin. + */ + +float a = 0.0f; +float s = 0.0f; + +public void setup() +{ + size(200,200); + noStroke(); + rectMode(CENTER); + frameRate(30); +} + +public void draw() +{ + background(102); + + a = a + 0.04f; + s = cos(a)*2; + + translate(width/2, height/2); + scale(s); + fill(51); + rect(0, 0, 50, 50); + + translate(75, 0); + fill(255); + scale(s); + rect(0, 0, 50, 50); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Scale" }); + } +} diff --git a/java/examples/Basics/Transform/Scale/applet/Scale.pde b/java/examples/Basics/Transform/Scale/applet/Scale.pde new file mode 100644 index 000000000..dc41a584d --- /dev/null +++ b/java/examples/Basics/Transform/Scale/applet/Scale.pde @@ -0,0 +1,38 @@ +/** + * Scale + * by Denis Grutze. + * + * Paramenters for the scale() function are values specified + * as decimal percentages. For example, the method call scale(2.0) + * will increase the dimension of the shape by 200 percent. + * Objects always scale from the origin. + */ + +float a = 0.0; +float s = 0.0; + +void setup() +{ + size(200,200); + noStroke(); + rectMode(CENTER); + frameRate(30); +} + +void draw() +{ + background(102); + + a = a + 0.04; + s = cos(a)*2; + + translate(width/2, height/2); + scale(s); + fill(51); + rect(0, 0, 50, 50); + + translate(75, 0); + fill(255); + scale(s); + rect(0, 0, 50, 50); +} diff --git a/java/examples/Basics/Transform/Scale/applet/loading.gif b/java/examples/Basics/Transform/Scale/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Transform/Translate/Translate.pde b/java/examples/Basics/Transform/Translate/Translate.pde new file mode 100644 index 000000000..81b39af9d --- /dev/null +++ b/java/examples/Basics/Transform/Translate/Translate.pde @@ -0,0 +1,41 @@ +/** + * Translate. + * + * The translate() function allows objects to be moved + * to any location within the window. The first parameter + * sets the x-axis offset and the second parameter sets the + * y-axis offset. + */ + +float x, y; +float size = 40.0; + +void setup() +{ + size(200,200); + noStroke(); + frameRate(30); +} + +void draw() +{ + background(102); + + x = x + 0.8; + + if (x > width + size) { + x = -size; + } + + translate(x, height/2-size/2); + fill(255); + rect(-size/2, -size/2, size, size); + + // Transforms accumulate. + // Notice how this rect moves twice + // as fast as the other, but it has + // the same parameter for the x-axis value + translate(x, size); + fill(0); + rect(-size/2, -size/2, size, size); +} diff --git a/java/examples/Basics/Transform/Translate/applet/Translate.java b/java/examples/Basics/Transform/Translate/applet/Translate.java new file mode 100644 index 000000000..c62a13544 --- /dev/null +++ b/java/examples/Basics/Transform/Translate/applet/Translate.java @@ -0,0 +1,61 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Translate extends PApplet { + +/** + * Translate. + * + * The translate() function allows objects to be moved + * to any location within the window. The first parameter + * sets the x-axis offset and the second parameter sets the + * y-axis offset. + */ + +float x, y; +float size = 40.0f; + +public void setup() +{ + size(200,200); + noStroke(); + frameRate(30); +} + +public void draw() +{ + background(102); + + x = x + 0.8f; + + if (x > width + size) { + x = -size; + } + + translate(x, height/2-size/2); + fill(255); + rect(-size/2, -size/2, size, size); + + // Transforms accumulate. + // Notice how this rect moves twice + // as fast as the other, but it has + // the same parameter for the x-axis value + translate(x, size); + fill(0); + rect(-size/2, -size/2, size, size); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Translate" }); + } +} diff --git a/java/examples/Basics/Transform/Translate/applet/Translate.pde b/java/examples/Basics/Transform/Translate/applet/Translate.pde new file mode 100644 index 000000000..81b39af9d --- /dev/null +++ b/java/examples/Basics/Transform/Translate/applet/Translate.pde @@ -0,0 +1,41 @@ +/** + * Translate. + * + * The translate() function allows objects to be moved + * to any location within the window. The first parameter + * sets the x-axis offset and the second parameter sets the + * y-axis offset. + */ + +float x, y; +float size = 40.0; + +void setup() +{ + size(200,200); + noStroke(); + frameRate(30); +} + +void draw() +{ + background(102); + + x = x + 0.8; + + if (x > width + size) { + x = -size; + } + + translate(x, height/2-size/2); + fill(255); + rect(-size/2, -size/2, size, size); + + // Transforms accumulate. + // Notice how this rect moves twice + // as fast as the other, but it has + // the same parameter for the x-axis value + translate(x, size); + fill(0); + rect(-size/2, -size/2, size, size); +} diff --git a/java/examples/Basics/Transform/Translate/applet/loading.gif b/java/examples/Basics/Transform/Translate/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Transform/TriangleFlower/TriangleFlower.pde b/java/examples/Basics/Transform/TriangleFlower/TriangleFlower.pde new file mode 100644 index 000000000..e87e97c72 --- /dev/null +++ b/java/examples/Basics/Transform/TriangleFlower/TriangleFlower.pde @@ -0,0 +1,47 @@ +/** + * Triangle Flower + * by Ira Greenberg. + * + * Using rotate() and triangle() functions generate a pretty + * flower. Uncomment the line "// rotate(rot+=radians(spin));" + * in the triBlur() function for a nice variation. + * + * Updated 27 February 2010. + */ + +PVector[] p = new PVector[3]; +float shift = 1.0; +float fade = 0; +float fillCol = 0; +float rot = 0; +float spin = 0; + +void setup() { + size(200, 200); + background(0); + smooth(); + fade = 255.0 / (width/2.0/shift); + spin = 360.0 / (width/2.0/shift); + p[0] = new PVector(-width/2, height/2); + p[1] = new PVector(width/2, height/2); + p[2] = new PVector(0, -height/2); + noStroke(); + translate(width/2, height/2); + triBlur(); +} + +void triBlur() { + fill(fillCol); + fillCol += fade; + rotate(spin); + // another interesting variation: uncomment the line below + // rotate(rot+=radians(spin)); + triangle(p[0].x += shift, p[0].y -= shift/2, + p[1].x -= shift, p[1].y -= shift/2, + p[2].x, p[2].y += shift); + if (p[0].x < 0) { + // recursive call + triBlur(); + } +} + diff --git a/java/examples/Basics/Transform/TriangleFlower/applet/TriangleFlower.java b/java/examples/Basics/Transform/TriangleFlower/applet/TriangleFlower.java new file mode 100644 index 000000000..b4bf9b0ad --- /dev/null +++ b/java/examples/Basics/Transform/TriangleFlower/applet/TriangleFlower.java @@ -0,0 +1,63 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class TriangleFlower extends PApplet { + +/** + * Triangle Flower + * by Ira Greenberg. + * + * Using rotate() and triangle() functions generate a pretty + * flower. Uncomment the line "// rotate(rot+=radians(spin));" + * in the triBlur() function for a nice variation. + */ + +Point[]p = new Point[3]; +float shift = 1.0f; +float fade = 0; +float fillCol = 0; +float rot = 0; +float spin = 0; + +public void setup(){ + size(200, 200); + background(0); + smooth(); + fade = 255.0f/(width/2.0f/shift); + spin = 360.0f/(width/2.0f/shift); + p[0] = new Point(-width/2, height/2); + p[1] = new Point(width/2, height/2); + p[2] = new Point(0, -height/2); + noStroke(); + translate(width/2, height/2); + triBlur(); +} + +public void triBlur(){ + fill(fillCol); + fillCol+=fade; + rotate(spin); + // another interesting variation: uncomment the line below + // rotate(rot+=radians(spin)); + triangle(p[0].x+=shift, p[0].y-=shift/2, p[1].x-=shift, p[1].y-=shift/2, p[2].x, p[2].y+=shift); + if(p[0].x<0){ + // recursive call + triBlur(); + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "TriangleFlower" }); + } +} diff --git a/java/examples/Basics/Transform/TriangleFlower/applet/TriangleFlower.pde b/java/examples/Basics/Transform/TriangleFlower/applet/TriangleFlower.pde new file mode 100644 index 000000000..e46988519 --- /dev/null +++ b/java/examples/Basics/Transform/TriangleFlower/applet/TriangleFlower.pde @@ -0,0 +1,43 @@ +/** + * Triangle Flower + * by Ira Greenberg. + * + * Using rotate() and triangle() functions generate a pretty + * flower. Uncomment the line "// rotate(rot+=radians(spin));" + * in the triBlur() function for a nice variation. + */ + +Point[]p = new Point[3]; +float shift = 1.0; +float fade = 0; +float fillCol = 0; +float rot = 0; +float spin = 0; + +void setup(){ + size(200, 200); + background(0); + smooth(); + fade = 255.0/(width/2.0/shift); + spin = 360.0/(width/2.0/shift); + p[0] = new Point(-width/2, height/2); + p[1] = new Point(width/2, height/2); + p[2] = new Point(0, -height/2); + noStroke(); + translate(width/2, height/2); + triBlur(); +} + +void triBlur(){ + fill(fillCol); + fillCol+=fade; + rotate(spin); + // another interesting variation: uncomment the line below + // rotate(rot+=radians(spin)); + triangle(p[0].x+=shift, p[0].y-=shift/2, p[1].x-=shift, p[1].y-=shift/2, p[2].x, p[2].y+=shift); + if(p[0].x<0){ + // recursive call + triBlur(); + } +} + diff --git a/java/examples/Basics/Transform/TriangleFlower/applet/loading.gif b/java/examples/Basics/Transform/TriangleFlower/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Typography/Letters/Letters.pde b/java/examples/Basics/Typography/Letters/Letters.pde new file mode 100644 index 000000000..66fd2302f --- /dev/null +++ b/java/examples/Basics/Typography/Letters/Letters.pde @@ -0,0 +1,72 @@ +/** + * Letters. + * + * Draws letters to the screen. This requires loading a font, + * setting the font, and then drawing the letters. + */ + +PFont fontA; + +void setup() +{ + size(200, 200); + background(0); + smooth(); + // Load the font. Fonts must be placed within the data + // directory of your sketch. A font must first be created + // using the 'Create Font...' option in the Tools menu. + fontA = loadFont("CourierNew36.vlw"); + textAlign(CENTER); + + // Set the font and its size (in units of pixels) + textFont(fontA, 32); + + // Only draw once + noLoop(); +} + +void draw() +{ + // Set the gray value of the letters + fill(255); + + // Set the left and top margin + int margin = 6; + int gap = 30; + translate(margin*1.5, margin*2); + + // Create a matrix of letterforms + int counter = 0; + for(int i=0; i= 26) { + counter = 0; + } + } + } +} + diff --git a/java/examples/Basics/Typography/Letters/applet/Letters.java b/java/examples/Basics/Typography/Letters/applet/Letters.java new file mode 100644 index 000000000..da77d549a --- /dev/null +++ b/java/examples/Basics/Typography/Letters/applet/Letters.java @@ -0,0 +1,86 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Letters extends PApplet { + +/** + * Letters. + * + * Draws letters to the screen. + */ + +PFont fontA; + +public void setup() +{ + size(200, 200); + background(0); + // Load the font. Fonts must be placed within the data + // directory of your sketch. A font must first be created + // using the 'Create Font...' option in the Tools menu. + fontA = loadFont("CourierNew36.vlw"); + textFont(fontA, 36); + textAlign(CENTER); + noLoop(); +} + +public void draw() +{ + // Set the gray value of the letters + fill(255); + + // Set the left and top margin + int margin = 6; + int gap = 30; + translate(margin*1.5f, margin*2); + + // Create a matrix of letterforms + int counter = 0; + for(int i=0; i= 26) { + counter = 0; + } + } + } +} + + + static public void main(String args[]) { + PApplet.main(new String[] { "Letters" }); + } +} diff --git a/java/examples/Basics/Typography/Letters/applet/Letters.pde b/java/examples/Basics/Typography/Letters/applet/Letters.pde new file mode 100644 index 000000000..82e943f2f --- /dev/null +++ b/java/examples/Basics/Typography/Letters/applet/Letters.pde @@ -0,0 +1,66 @@ +/** + * Letters. + * + * Draws letters to the screen. + */ + +PFont fontA; + +void setup() +{ + size(200, 200); + background(0); + // Load the font. Fonts must be placed within the data + // directory of your sketch. A font must first be created + // using the 'Create Font...' option in the Tools menu. + fontA = loadFont("CourierNew36.vlw"); + textFont(fontA, 36); + textAlign(CENTER); + noLoop(); +} + +void draw() +{ + // Set the gray value of the letters + fill(255); + + // Set the left and top margin + int margin = 6; + int gap = 30; + translate(margin*1.5, margin*2); + + // Create a matrix of letterforms + int counter = 0; + for(int i=0; i= 26) { + counter = 0; + } + } + } +} + diff --git a/java/examples/Basics/Typography/Letters/applet/loading.gif b/java/examples/Basics/Typography/Letters/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Typography/Letters/data/CourierNew36.vlw b/java/examples/Basics/Typography/Letters/data/CourierNew36.vlw new file mode 100644 index 0000000000000000000000000000000000000000..904771486a1a6d241fb5184282eb99780f730615 GIT binary patch literal 114920 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 p1I#39Op8e4s4-Q(8grS&7FzR}3|8Ks5wrTh1g$ Create Font + // to create a distributable bitmap font. + // For vector fonts, use the createFont() function. + fontA = loadFont("Ziggurat-HTF-Black-32.vlw"); + + // Set the font and its size (in units of pixels) + textFont(fontA, 32); + + // Only draw once + noLoop(); +} + +void draw() { + // Use fill() to change the value or color of the text + fill(0); + text("ichi", x, 60); + fill(51); + text("ni", x, 95); + fill(204); + text("san", x, 130); + fill(255); + text("shi", x, 165); +} diff --git a/java/examples/Basics/Typography/Words/applet/Words.java b/java/examples/Basics/Typography/Words/applet/Words.java new file mode 100644 index 000000000..192678348 --- /dev/null +++ b/java/examples/Basics/Typography/Words/applet/Words.java @@ -0,0 +1,62 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class Words extends PApplet { + +/** + * Words. + * + * The text() function is used for writing words to the screen. + * + * Created 15 January 2003 + * Updated 11 August 2008 + */ + + +int x = 30; +PFont fontA; + +public void setup() +{ + size(200, 200); + background(102); + + // Load the font. Fonts must be placed within the data + // directory of your sketch. Use Tools > Create Font + // to create a distributable bitmap font. + // For vector fonts, use the createFont() function. + fontA = loadFont("Ziggurat-HTF-Black-32.vlw"); + + // Set the font and its size (in units of pixels) + textFont(fontA, 32); + + // Only draw once + noLoop(); +} + +public void draw() { + // Use fill() to change the value or color of the text + fill(0); + text("ichi", x, 60); + fill(51); + text("ni", x, 95); + fill(204); + text("san", x, 130); + fill(255); + text("shi", x, 165); +} + + static public void main(String args[]) { + PApplet.main(new String[] { "Words" }); + } +} diff --git a/java/examples/Basics/Typography/Words/applet/Words.pde b/java/examples/Basics/Typography/Words/applet/Words.pde new file mode 100644 index 000000000..e7622a4c7 --- /dev/null +++ b/java/examples/Basics/Typography/Words/applet/Words.pde @@ -0,0 +1,42 @@ +/** + * Words. + * + * The text() function is used for writing words to the screen. + * + * Created 15 January 2003 + * Updated 11 August 2008 + */ + + +int x = 30; +PFont fontA; + +void setup() +{ + size(200, 200); + background(102); + + // Load the font. Fonts must be placed within the data + // directory of your sketch. Use Tools > Create Font + // to create a distributable bitmap font. + // For vector fonts, use the createFont() function. + fontA = loadFont("Ziggurat-HTF-Black-32.vlw"); + + // Set the font and its size (in units of pixels) + textFont(fontA, 32); + + // Only draw once + noLoop(); +} + +void draw() { + // Use fill() to change the value or color of the text + fill(0); + text("ichi", x, 60); + fill(51); + text("ni", x, 95); + fill(204); + text("san", x, 130); + fill(255); + text("shi", x, 165); +} diff --git a/java/examples/Basics/Typography/Words/applet/loading.gif b/java/examples/Basics/Typography/Words/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Typography/Words/data/Ziggurat-HTF-Black-32.vlw b/java/examples/Basics/Typography/Words/data/Ziggurat-HTF-Black-32.vlw new file mode 100644 index 0000000000000000000000000000000000000000..84c2d4b59e9d3bbb8e7eada0aa5d8b3f7bea75a4 GIT binary patch literal 118799 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 20 && mouseX < 95 && mouseY > 60 && mouseY < 135) { + overLeftButton = true; + } else if (mouseX > 105 && mouseX < 180 && mouseY > 60 && mouseY <135) { + overRightButton = true; + } else { + overLeftButton = overRightButton = false; + } +} + + + + diff --git a/java/examples/Basics/Web/EmbeddedLinks/applet/EmbeddedLinks.java b/java/examples/Basics/Web/EmbeddedLinks/applet/EmbeddedLinks.java new file mode 100644 index 000000000..1ee4b1a64 --- /dev/null +++ b/java/examples/Basics/Web/EmbeddedLinks/applet/EmbeddedLinks.java @@ -0,0 +1,93 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class EmbeddedLinks extends PApplet { + +/** + * Loading URLs. + * + * Click on the left button to open a different URL in the same window (Only + * works online). Click on the right button to open a URL in a new browser window. +*/ + +boolean overLeftButton = false; +boolean overRightButton = false; + +public void setup() +{ + size(200, 200); +} + +public void draw() +{ + background(204); + + // Left buttom + if(overLeftButton == true) { + fill(255); + } else { + noFill(); + } + rect(20, 60, 75, 75); + rect(50, 90, 15, 15); + + // Right button + if(overRightButton == true) { + fill(255); + } else { + noFill(); + } + rect(105, 60, 75, 75); + line(135, 105, 155, 85); + line(140, 85, 155, 85); + line(155, 85, 155, 100); +} + +public void mousePressed() +{ + if(overLeftButton) { + link("http://www.processing.org"); + } else if (overRightButton) { + link("http://www.processing.org", "_new"); + } +} + +public void mouseMoved() { + checkButtons(); +} + +public void mouseDragged() { + checkButtons(); +} + +public void checkButtons() { + if(mouseX > 20 && mouseX < 95 && + mouseY > 60 && mouseY <135) { + overLeftButton = true; + } else if (mouseX > 105 && mouseX < 180 && + mouseY > 60 && mouseY <135) { + overRightButton = true; + } else { + overLeftButton = overRightButton = false; + } + +} + + + + + + static public void main(String args[]) { + PApplet.main(new String[] { "EmbeddedLinks" }); + } +} diff --git a/java/examples/Basics/Web/EmbeddedLinks/applet/EmbeddedLinks.pde b/java/examples/Basics/Web/EmbeddedLinks/applet/EmbeddedLinks.pde new file mode 100644 index 000000000..ab41385c7 --- /dev/null +++ b/java/examples/Basics/Web/EmbeddedLinks/applet/EmbeddedLinks.pde @@ -0,0 +1,73 @@ +/** + * Loading URLs. + * + * Click on the left button to open a different URL in the same window (Only + * works online). Click on the right button to open a URL in a new browser window. +*/ + +boolean overLeftButton = false; +boolean overRightButton = false; + +void setup() +{ + size(200, 200); +} + +void draw() +{ + background(204); + + // Left buttom + if(overLeftButton == true) { + fill(255); + } else { + noFill(); + } + rect(20, 60, 75, 75); + rect(50, 90, 15, 15); + + // Right button + if(overRightButton == true) { + fill(255); + } else { + noFill(); + } + rect(105, 60, 75, 75); + line(135, 105, 155, 85); + line(140, 85, 155, 85); + line(155, 85, 155, 100); +} + +void mousePressed() +{ + if(overLeftButton) { + link("http://www.processing.org"); + } else if (overRightButton) { + link("http://www.processing.org", "_new"); + } +} + +void mouseMoved() { + checkButtons(); +} + +void mouseDragged() { + checkButtons(); +} + +void checkButtons() { + if(mouseX > 20 && mouseX < 95 && + mouseY > 60 && mouseY <135) { + overLeftButton = true; + } else if (mouseX > 105 && mouseX < 180 && + mouseY > 60 && mouseY <135) { + overRightButton = true; + } else { + overLeftButton = overRightButton = false; + } + +} + + + + diff --git a/java/examples/Basics/Web/EmbeddedLinks/applet/loading.gif b/java/examples/Basics/Web/EmbeddedLinks/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/Basics/Web/LoadingImages/LoadingImages.pde b/java/examples/Basics/Web/LoadingImages/LoadingImages.pde new file mode 100644 index 000000000..325fbba56 --- /dev/null +++ b/java/examples/Basics/Web/LoadingImages/LoadingImages.pde @@ -0,0 +1,16 @@ +/** + * Loading Images. + * + * Loading a recent image from the US National Weather Service. + * Notice the date in the upper left corner of the image. + * Processing applications can only load images from the network + * while running in the Processing environment. This example will + * not run in a web broswer and will only work when the computer + * is connected to the Internet. + */ + +size(200, 200); +PImage img1; +img1 = loadImage("http://www.processing.org/img/processing_beta_cover.gif"); +image(img1, 0, 45); + diff --git a/java/examples/Basics/Web/LoadingImages/applet/LoadingImages.java b/java/examples/Basics/Web/LoadingImages/applet/LoadingImages.java new file mode 100644 index 000000000..76bab8631 --- /dev/null +++ b/java/examples/Basics/Web/LoadingImages/applet/LoadingImages.java @@ -0,0 +1,37 @@ +import processing.core.*; + +import java.applet.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; +import java.net.*; +import java.text.*; +import java.util.*; +import java.util.zip.*; +import java.util.regex.*; + +public class LoadingImages extends PApplet { + public void setup() {/** + * Loading Images. + * + * Loading a recent image from the US National Weather Service. + * Notice the date in the upper left corner of the image. + * Processing applications can only load images from the network + * while running in the Processing environment. This example will + * not run in a web broswer and will only work when the computer + * is connected to the Internet. + */ + +size(200, 200); +PImage img1; +img1 = loadImage("http://www.processing.org/img/processing_beta_cover.gif"); +image(img1, 0, 45); + + + noLoop(); +} + static public void main(String args[]) { + PApplet.main(new String[] { "LoadingImages" }); + } +} diff --git a/java/examples/Basics/Web/LoadingImages/applet/LoadingImages.pde b/java/examples/Basics/Web/LoadingImages/applet/LoadingImages.pde new file mode 100644 index 000000000..325fbba56 --- /dev/null +++ b/java/examples/Basics/Web/LoadingImages/applet/LoadingImages.pde @@ -0,0 +1,16 @@ +/** + * Loading Images. + * + * Loading a recent image from the US National Weather Service. + * Notice the date in the upper left corner of the image. + * Processing applications can only load images from the network + * while running in the Processing environment. This example will + * not run in a web broswer and will only work when the computer + * is connected to the Internet. + */ + +size(200, 200); +PImage img1; +img1 = loadImage("http://www.processing.org/img/processing_beta_cover.gif"); +image(img1, 0, 45); + diff --git a/java/examples/Basics/Web/LoadingImages/applet/loading.gif b/java/examples/Basics/Web/LoadingImages/applet/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ddae5089f0dbca27d59c7d8b8ae0568a569dc58 GIT binary patch literal 2232 zcmV;p2uJrvNk%w1VPpVg0K@}>*LOe9f#Jf~YMPyu5XIn*qdT-#}+3e)oz`3wAE++5m<~=qpPDei}BN|>;Pxkcl zFDW1*8xuJ)D*ylgA^8LV00000EC2ui0Av7U000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEf=?KRo+cI;@FdcZSwj~zWSmv( z(*+E0uOVQX%2YZ7tgIcvuoXyG4;(~}3;>`+0gxg)iDFQIz$|rijuE@&>H&jEeJ~gh z@Bo^kzCZq6kRXCU0uKW$jF9jq@vp{@#pS7^Y?tO;mvde2!x^-XuEREr5Rlu4g?&q?7IhW48lba=fD`ba-ko9IiK}bPn|=9Cc(3-VP3*) zz1)%(k>En=)vcxXnq$vZa0ndHT~&+!0k=3KKsD5D_C9_4s`C^ zG1X;w2_S$2?ie&p0$OeJNd*RgRf1TE3D_Kg*5Hw&98*cdlta5kB$11s?3CeZK-H1h zKcTD#jU6h{kq9J$3}O&A^*z!Z51TLvm;o7W)X_&F*(i#0?cwp(Ebh2sA_E#2l0XFY zCA7$vJN)$`NND*33Ug-?2x4T`tT_)mM)S&4tIU&#vz$R^P)C8aZB&!5+3oE$@K-8!dcJh@18FY|Axfv+1fUD>kdlZZGLCy+D$oraKef#Wp%1>*t*po^}$V~q`tYzi$1hs2j*gK^FWO~r@- zsLxO=Pspkxz_QIQIeRQqeF$eQfIRRk+>M|GOYky44hjbbpsFgXWGa~+*^6bR*|Zlt zP|PEuBV7As$6z0WshyDL3ImhAH*GMD=*ru z2^?}{3Ug>DX9~HBs1#5D1;`Hu^n0MoA{ZT&_znTi5ZwWaA&mj(O##6A;0r=1!sX%S z0x{E#2gu=o2n1k-1~>o!CLjR{1mK7=bO8-(s5C~6NMgn_hz}#+fYh*xGr4#`5?ioD zCW>Ndonne0as>$ggB?IE7AU}p0>P#&vY?Az6a`)$!9Esg1}_LOpa3?YfG86DK0LMW_BP|IyKm=|D6%1(7WSv=sAktxoNvfcd zmVCq1fap0`Fy#ORK$b!tVaQ?tPmq=j#|0`7fda6x8!}_S0e+Yera*!->T6L>a;Y>` z@(WQjlNvS@0K*8FD1&f;ixzR2$~(Z~GTSlHoH(q@Lp#V|FA4oM`iD(&Q^7v(7j14KZIZ=0SqwR6M+@C!@mU<$@~woGOMkX9b} z)CFO9rCT8XprHsO#5vR_2ot#z1@Ht1BGhyNh9(qa)?DZV7&fPHT63f<62M7MkkY^r z1T6?CKmZC5EV%uuUnYtG0Mw|-J`m!l2+-tCP0-U{KxL)EYydUS=n#x)>i`pgp(fcz z3=<)&08=eNRowzWMhGK_3=_Zr;#9g?;G%~U7=ZMwS)V~@;8%J}D+$)>7RY?UU_;g9 zIj%CNRfser3XmQlU|B$+noL*%by<5FQHR8J5N;i#Q`$7c*Z@pmV;h6v01DUu2{5by zf*k>2)5IQ1tTvq|>O(F5XxkyCHfNbs8~`@f0N7@>Y}H~UdZR!CCO||00Km8vec&k%oSM(t2w0u}(kYL805;hL-g6o{<| zv{ysMStC2*+zvK=RREKj?1Cgc*zycG%FE#Uf+_J%CGps=B+g#XM?^<936QBS!g?dEax^Q6I<;ZIrfYug| z;vJ&YjwXRcnBqzx$3zWQ0TnPX_!4c(7-HCuzboM`iLewbvgg}sN`dc6zyd@D@_N0? zUI17i0N2$U00sreo G1OPih>8w-$ literal 0 HcmV?d00001 diff --git a/java/examples/GettingStartedBook/Chapter02/Ex_02_01/Ex_02_01.pde b/java/examples/GettingStartedBook/Chapter02/Ex_02_01/Ex_02_01.pde new file mode 100644 index 000000000..82539334c --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter02/Ex_02_01/Ex_02_01.pde @@ -0,0 +1,4 @@ +// Example 02-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +ellipse(50, 50, 80, 80); diff --git a/java/examples/GettingStartedBook/Chapter02/Ex_02_02/Ex_02_02.pde b/java/examples/GettingStartedBook/Chapter02/Ex_02_02/Ex_02_02.pde new file mode 100644 index 000000000..0455e4836 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter02/Ex_02_02/Ex_02_02.pde @@ -0,0 +1,17 @@ +// Example 02-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + smooth(); +} + +void draw() { + if (mousePressed) { + fill(0); + } else { + fill(255); + } + ellipse(mouseX, mouseY, 80, 80); +} + diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_01/Ex_03_01.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_01/Ex_03_01.pde new file mode 100644 index 000000000..2220a08fb --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_01/Ex_03_01.pde @@ -0,0 +1,4 @@ +// Example 03-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(800, 600); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_02/Ex_03_02.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_02/Ex_03_02.pde new file mode 100644 index 000000000..abd536f2c --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_02/Ex_03_02.pde @@ -0,0 +1,5 @@ +// Example 03-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +point(240, 60); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_03/Ex_03_03.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_03/Ex_03_03.pde new file mode 100644 index 000000000..ba7ab8280 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_03/Ex_03_03.pde @@ -0,0 +1,5 @@ +// Example 03-03 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +line(20, 50, 420, 110); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_04/Ex_03_04.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_04/Ex_03_04.pde new file mode 100644 index 000000000..eb117b98c --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_04/Ex_03_04.pde @@ -0,0 +1,7 @@ +// Example 03-04 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +quad(158, 55, 199, 14, 392, 66, 351, 107); +triangle(347, 54, 392, 9, 392, 66); +triangle(158, 55, 290, 91, 290, 112); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_05/Ex_03_05.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_05/Ex_03_05.pde new file mode 100644 index 000000000..9e297af1e --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_05/Ex_03_05.pde @@ -0,0 +1,5 @@ +// Example 03-05 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +rect(180, 60, 220, 40); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_06/Ex_03_06.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_06/Ex_03_06.pde new file mode 100644 index 000000000..d4016401c --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_06/Ex_03_06.pde @@ -0,0 +1,7 @@ +// Example 03-06 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +ellipse(278, -100, 400, 400); +ellipse(120, 100, 110, 110); +ellipse(412, 60, 18, 18); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_07/Ex_03_07.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_07/Ex_03_07.pde new file mode 100644 index 000000000..a0dc019a7 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_07/Ex_03_07.pde @@ -0,0 +1,8 @@ +// Example 03-07 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +arc(90, 60, 80, 80, 0, HALF_PI); +arc(190, 60, 80, 80, 0, PI+HALF_PI); +arc(290, 60, 80, 80, PI, TWO_PI+HALF_PI); +arc(390, 60, 80, 80, QUARTER_PI, PI+QUARTER_PI); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_08/Ex_03_08.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_08/Ex_03_08.pde new file mode 100644 index 000000000..75b5f4f73 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_08/Ex_03_08.pde @@ -0,0 +1,8 @@ +// Example 03-08 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +arc(90, 60, 80, 80, 0, radians(90)); +arc(190, 60, 80, 80, 0, radians(270)); +arc(290, 60, 80, 80, radians(180), radians(450)); +arc(390, 60, 80, 80, radians(45), radians(225)); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_09/Ex_03_09.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_09/Ex_03_09.pde new file mode 100644 index 000000000..525f1da67 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_09/Ex_03_09.pde @@ -0,0 +1,8 @@ +// Example 03-09 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +ellipse(140, 0, 190, 190); +// The rectangle draws on top of the ellipse +// because it comes after in the code +rect(160, 30, 260, 20); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_10/Ex_03_10.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_10/Ex_03_10.pde new file mode 100644 index 000000000..b765d8fb9 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_10/Ex_03_10.pde @@ -0,0 +1,8 @@ +// Example 03-10 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +rect(160, 30, 260, 20); +// The ellipse draws on top of the rectangle +// because it comes after in the code +ellipse(140, 0, 190, 190); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_11/Ex_03_11.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_11/Ex_03_11.pde new file mode 100644 index 000000000..d40ff08cb --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_11/Ex_03_11.pde @@ -0,0 +1,8 @@ +// Example 03-11 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); // Turns on smoothing +ellipse(140, 60, 90, 90); +noSmooth(); // Turns off smoothing +ellipse(240, 60, 90, 90); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_12/Ex_03_12.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_12/Ex_03_12.pde new file mode 100644 index 000000000..fdd8e9a4f --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_12/Ex_03_12.pde @@ -0,0 +1,11 @@ +// Example 03-12 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +ellipse(75, 60, 90, 90); +strokeWeight(8); // Stroke weight to 8 pixels +ellipse(175, 60, 90, 90); +ellipse(279, 60, 90, 90); +strokeWeight(20); // Stroke weight to 20 pixels +ellipse(389, 60, 90, 90); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_13/Ex_03_13.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_13/Ex_03_13.pde new file mode 100644 index 000000000..e47332559 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_13/Ex_03_13.pde @@ -0,0 +1,14 @@ +// Example 03-13 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +strokeWeight(12); +strokeJoin(ROUND); // Round the stroke corners +rect(40, 25, 70, 70); +strokeJoin(BEVEL); // Bevel the stroke corners +rect(140, 25, 70, 70); +strokeCap(SQUARE); // Square the line endings +line(270, 25, 340, 95); +strokeCap(ROUND); // Round the line endings +line(350, 25, 420, 95); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_14/Ex_03_14.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_14/Ex_03_14.pde new file mode 100644 index 000000000..31f7d5f93 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_14/Ex_03_14.pde @@ -0,0 +1,12 @@ +// Example 03-14 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +background(0); // Black +fill(204); // Light gray +ellipse(132, 82, 200, 200); // Light gray circle +fill(153); // Medium gray +ellipse(228, -16, 200, 200); // Medium gray circle +fill(102); // Dark gray +ellipse(268, 118, 200, 200); // Dark gray circle diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_15/Ex_03_15.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_15/Ex_03_15.pde new file mode 100644 index 000000000..83b5d3c44 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_15/Ex_03_15.pde @@ -0,0 +1,11 @@ +// Example 03-15 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +fill(153); // Medium gray +ellipse(132, 82, 200, 200); // Gray circle +noFill(); // Turn off fill +ellipse(228, -16, 200, 200); // Outline circle +noStroke(); // Turn off stroke +ellipse(268, 118, 200, 200); // Doesn’t draw! diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_16/Ex_03_16.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_16/Ex_03_16.pde new file mode 100644 index 000000000..833ce14a1 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_16/Ex_03_16.pde @@ -0,0 +1,13 @@ +// Example 03-16 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +noStroke(); +smooth(); +background(0, 26, 51); // Dark blue color +fill(255, 0, 0); // Red color +ellipse(132, 82, 200, 200); // Red circle +fill(0, 255, 0); // Green color +ellipse(228, -16, 200, 200); // Green circle +fill(0, 0, 255); // Blue color +ellipse(268, 118, 200, 200); // Blue circle diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_17/Ex_03_17.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_17/Ex_03_17.pde new file mode 100644 index 000000000..d7bbbd22d --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_17/Ex_03_17.pde @@ -0,0 +1,13 @@ +// Example 03-17 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +noStroke(); +smooth(); +background(204, 226, 225); // Light blue color +fill(255, 0, 0, 160); // Red color +ellipse(132, 82, 200, 200); // Red circle +fill(0, 255, 0, 160); // Green color +ellipse(228, -16, 200, 200); // Green circle +fill(0, 0, 255, 160); // Blue color +ellipse(268, 118, 200, 200); // Blue circle diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_18/Ex_03_18.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_18/Ex_03_18.pde new file mode 100644 index 000000000..c19099ee0 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_18/Ex_03_18.pde @@ -0,0 +1,13 @@ +// Example 03-18 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +beginShape(); +vertex(180, 82); +vertex(207, 36); +vertex(214, 63); +vertex(407, 11); +vertex(412, 30); +vertex(219, 82); +vertex(226, 109); +endShape(); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_19/Ex_03_19.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_19/Ex_03_19.pde new file mode 100644 index 000000000..0e1e8d785 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_19/Ex_03_19.pde @@ -0,0 +1,13 @@ +// Example 03-19 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +beginShape(); +vertex(180, 82); +vertex(207, 36); +vertex(214, 63); +vertex(407, 11); +vertex(412, 30); +vertex(219, 82); +vertex(226, 109); +endShape(CLOSE); diff --git a/java/examples/GettingStartedBook/Chapter03/Ex_03_20/Ex_03_20.pde b/java/examples/GettingStartedBook/Chapter03/Ex_03_20/Ex_03_20.pde new file mode 100644 index 000000000..76b283bfa --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter03/Ex_03_20/Ex_03_20.pde @@ -0,0 +1,38 @@ +// Example 03-20 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); + +// Left creature +beginShape(); +vertex(50, 120); +vertex(100, 90); +vertex(110, 60); +vertex(80, 20); +vertex(210, 60); +vertex(160, 80); +vertex(200, 90); +vertex(140, 100); +vertex(130, 120); +endShape(); +fill(0); +ellipse(155, 60, 8, 8); + +// Right creature +fill(255); +beginShape(); +vertex(370, 120); +vertex(360, 90); +vertex(290, 80); +vertex(340, 70); +vertex(280, 50); +vertex(420, 10); +vertex(390, 50); +vertex(410, 90); +vertex(460, 120); +endShape(); +fill(0); +ellipse(345, 50, 10, 10); + + diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_01/Ex_04_01.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_01/Ex_04_01.pde new file mode 100644 index 000000000..22ab9a5e3 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_01/Ex_04_01.pde @@ -0,0 +1,10 @@ +// Example 04-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +int y = 60; +int d = 80; +ellipse(75, y, d, d); // Left +ellipse(175, y, d, d); // Middle +ellipse(275, y, d, d); // Right diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_02/Ex_04_02.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_02/Ex_04_02.pde new file mode 100644 index 000000000..01d3cb29a --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_02/Ex_04_02.pde @@ -0,0 +1,10 @@ +// Example 04-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +int y = 100; +int d = 130; +ellipse(75, y, d, d); // Left +ellipse(175, y, d, d); // Middle +ellipse(275, y, d, d); // Right diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_03/Ex_04_03.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_03/Ex_04_03.pde new file mode 100644 index 000000000..b7cdec584 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_03/Ex_04_03.pde @@ -0,0 +1,8 @@ +// Example 04-03 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +line(0, 0, width, height); // Line from (0,0) to (480, 120) +line(width, 0, 0, height); // Line from (480, 0) to (0, 120) +ellipse(width/2, height/2, 60, 60); diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_04/Ex_04_04.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_04/Ex_04_04.pde new file mode 100644 index 000000000..294092ded --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_04/Ex_04_04.pde @@ -0,0 +1,12 @@ +// Example 04-04 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +int x = 25; +int h = 20; +int y = 25; +rect(x, y, 300, h); // Top +x = x + 100; +rect(x, y + h, 300, h); // Middle +x = x - 250; +rect(x, y + h*2, 300, h); // Bottom diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_05/Ex_04_05.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_05/Ex_04_05.pde new file mode 100644 index 000000000..beddf453e --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_05/Ex_04_05.pde @@ -0,0 +1,13 @@ +// Example 04-05 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +strokeWeight(8); +line(20, 40, 80, 80); +line(80, 40, 140, 80); +line(140, 40, 200, 80); +line(200, 40, 260, 80); +line(260, 40, 320, 80); +line(320, 40, 380, 80); +line(380, 40, 440, 80); diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_06/Ex_04_06.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_06/Ex_04_06.pde new file mode 100644 index 000000000..b7f5fa3f4 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_06/Ex_04_06.pde @@ -0,0 +1,10 @@ +// Example 04-06 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +strokeWeight(8); +for (int i = 20; i < 400; i += 60) { + line(i, 40, i + 60, 80); +} + diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_07/Ex_04_07.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_07/Ex_04_07.pde new file mode 100644 index 000000000..6c641d898 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_07/Ex_04_07.pde @@ -0,0 +1,10 @@ +// Example 04-07 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +strokeWeight(2); +for (int i = 20; i < 400; i += 8) { + line(i, 40, i + 60, 80); +} + diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_08/Ex_04_08.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_08/Ex_04_08.pde new file mode 100644 index 000000000..68092ced5 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_08/Ex_04_08.pde @@ -0,0 +1,10 @@ +// Example 04-08 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +strokeWeight(2); +for (int i = 20; i < 400; i += 20) { + line(i, 0, i + i/2, 80); +} + diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_09/Ex_04_09.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_09/Ex_04_09.pde new file mode 100644 index 000000000..67493fd0d --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_09/Ex_04_09.pde @@ -0,0 +1,11 @@ +// Example 04-09 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +smooth(); +strokeWeight(2); +for (int i = 20; i < 400; i += 20) { + line(i, 0, i + i/2, 80); + line(i + i/2, 80, i*1.2, 120); +} + diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_10/Ex_04_10.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_10/Ex_04_10.pde new file mode 100644 index 000000000..2b6f7cb4f --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_10/Ex_04_10.pde @@ -0,0 +1,14 @@ +// Example 04-10 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +background(0); +smooth(); +noStroke(); +for (int y = 0; y <= height; y += 40) { + for (int x = 0; x <= width; x += 40) { + fill(255, 140); + ellipse(x, y, 40, 40); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_11/Ex_04_11.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_11/Ex_04_11.pde new file mode 100644 index 000000000..18bf46050 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_11/Ex_04_11.pde @@ -0,0 +1,16 @@ +// Example 04-11 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +background(0); +smooth(); +noStroke(); +for (int y = 0; y < height+45; y += 40) { + fill(255, 140); + ellipse(0, y, 40, 40); +} +for (int x = 0; x < width+45; x += 40) { + fill(255, 140); + ellipse(x, 0, 40, 40); +} + diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_12/Ex_04_12.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_12/Ex_04_12.pde new file mode 100644 index 000000000..565af4f4b --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_12/Ex_04_12.pde @@ -0,0 +1,16 @@ +// Example 04-12 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +background(0); +smooth(); +fill(255); +stroke(102); +for (int y = 20; y <= height-20; y += 10) { + for (int x = 20; x <= width-20; x += 10) { + ellipse(x, y, 4, 4); + // Draw a line to the center of the display + line(x, y, 240, 60); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter04/Ex_04_13/Ex_04_13.pde b/java/examples/GettingStartedBook/Chapter04/Ex_04_13/Ex_04_13.pde new file mode 100644 index 000000000..a57dd0f97 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter04/Ex_04_13/Ex_04_13.pde @@ -0,0 +1,12 @@ +// Example 04-13 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(480, 120); +background(0); +smooth(); +for (int y = 32; y <= height; y += 8) { + for (int x = 12; x <= width; x += 15) { + ellipse(x + y, y, 16 - y/10.0, 16 - y/10.0); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_01/Ex_05_01.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_01/Ex_05_01.pde new file mode 100644 index 000000000..f1359dd0e --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_01/Ex_05_01.pde @@ -0,0 +1,9 @@ +// Example 05-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void draw() { + // Displays the frame count to the Console + println("I’m drawing"); + println(frameCount); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_02/Ex_05_02.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_02/Ex_05_02.pde new file mode 100644 index 000000000..4dd7dafbb --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_02/Ex_05_02.pde @@ -0,0 +1,11 @@ +// Example 05-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + println("I’m starting"); +} + +void draw() { + println("I’m running"); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_03/Ex_05_03.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_03/Ex_05_03.pde new file mode 100644 index 000000000..6151ad601 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_03/Ex_05_03.pde @@ -0,0 +1,18 @@ +// Example 05-03 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int x = 280; +int y = -100; +int diameter = 380; + +void setup() { + size(480, 120); + smooth(); + fill(102); +} + +void draw() { + background(204); + ellipse(x, y, diameter, diameter); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_04/Ex_05_04.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_04/Ex_05_04.pde new file mode 100644 index 000000000..f5752a2e0 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_04/Ex_05_04.pde @@ -0,0 +1,15 @@ +// Example 05-04 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + fill(0, 102); + smooth(); + noStroke(); +} + +void draw() { + ellipse(mouseX, mouseY, 9, 9); +} + + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_05/Ex_05_05.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_05/Ex_05_05.pde new file mode 100644 index 000000000..fcd3daa4a --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_05/Ex_05_05.pde @@ -0,0 +1,15 @@ +// Example 05-05 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + fill(0, 102); + smooth(); + noStroke(); +} + +void draw() { + background(204); + ellipse(mouseX, mouseY, 9, 9); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_06/Ex_05_06.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_06/Ex_05_06.pde new file mode 100644 index 000000000..3346117bd --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_06/Ex_05_06.pde @@ -0,0 +1,14 @@ +// Example 05-06 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + strokeWeight(4); + smooth(); + stroke(0, 102); +} + +void draw() { + line(mouseX, mouseY, pmouseX, pmouseY); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_07/Ex_05_07.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_07/Ex_05_07.pde new file mode 100644 index 000000000..5f0415957 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_07/Ex_05_07.pde @@ -0,0 +1,15 @@ +// Example 05-07 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + smooth(); + stroke(0, 102); +} + +void draw() { + float weight = dist(mouseX, mouseY, pmouseX, pmouseY); + strokeWeight(weight); + line(mouseX, mouseY, pmouseX, pmouseY); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_08/Ex_05_08.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_08/Ex_05_08.pde new file mode 100644 index 000000000..d32f682bb --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_08/Ex_05_08.pde @@ -0,0 +1,18 @@ +// Example 05-08 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float x; +float easing = 0.01; + +void setup() { + size(220, 120); + smooth(); +} + +void draw() { + float targetX = mouseX; + x += (targetX - x) * easing; + ellipse(x, 40, 12, 12); + println(targetX + " : " + x); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_09/Ex_05_09.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_09/Ex_05_09.pde new file mode 100644 index 000000000..0bca76b71 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_09/Ex_05_09.pde @@ -0,0 +1,27 @@ +// Example 05-09 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float x; +float y; +float px; +float py; +float easing = 0.05; + +void setup() { + size(480, 120); + smooth(); + stroke(0, 102); +} + +void draw() { + float targetX = mouseX; + x += (targetX - x) * easing; + float targetY = mouseY; + y += (targetY - y) * easing; + float weight = dist(x, y, px, py); + strokeWeight(weight); + line(x, y, px, py); + py = y; + px = x; +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_10/Ex_05_10.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_10/Ex_05_10.pde new file mode 100644 index 000000000..be0cf8ced --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_10/Ex_05_10.pde @@ -0,0 +1,18 @@ +// Example 05-10 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(240, 120); + strokeWeight(12); + smooth(); +} + +void draw() { + background(204); + stroke(255); + line(120, 60, mouseX, mouseY); // White line + stroke(0); + float mx = mouseX/2 + 60; + line(120, 60, mx, mouseY); // Black line +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_11/Ex_05_11.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_11/Ex_05_11.pde new file mode 100644 index 000000000..0fb127237 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_11/Ex_05_11.pde @@ -0,0 +1,18 @@ +// Example 05-11 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(240, 120); + strokeWeight(12); + smooth(); +} + +void draw() { + background(204); + stroke(255); + line(120, 60, mouseX, mouseY); // White line + stroke(0); + float mx = map(mouseX, 0, width, 60, 180); + line(120, 60, mx, mouseY); // Black line +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_12/Ex_05_12.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_12/Ex_05_12.pde new file mode 100644 index 000000000..b69e2f422 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_12/Ex_05_12.pde @@ -0,0 +1,19 @@ +// Example 05-12 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(240, 120); + smooth(); + strokeWeight(30); +} + +void draw() { + background(204); + stroke(102); + line(40, 0, 70, height); + if (mousePressed == true) { + stroke(0); + } + line(0, 70, width, 50); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_13/Ex_05_13.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_13/Ex_05_13.pde new file mode 100644 index 000000000..a5f4cd85d --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_13/Ex_05_13.pde @@ -0,0 +1,21 @@ +// Example 05-13 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(240, 120); + smooth(); + strokeWeight(30); +} + +void draw() { + background(204); + stroke(102); + line(40, 0, 70, height); + if (mousePressed) { + stroke(0); + } else { + stroke(255); + } + line(0, 70, width, 50); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_14/Ex_05_14.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_14/Ex_05_14.pde new file mode 100644 index 000000000..a75d0a93f --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_14/Ex_05_14.pde @@ -0,0 +1,23 @@ +// Example 05-14 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(120, 120); + smooth(); + strokeWeight(30); +} + +void draw() { + background(204); + stroke(102); + line(40, 0, 70, height); + if (mousePressed) { + if (mouseButton == LEFT) { + stroke(255); + } else { + stroke(0); + } + line(0, 70, width, 50); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_15/Ex_05_15.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_15/Ex_05_15.pde new file mode 100644 index 000000000..78a1bdae0 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_15/Ex_05_15.pde @@ -0,0 +1,28 @@ +// Example 05-15 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float x; +int offset = 10; + +void setup() { + size(240, 120); + smooth(); + x = width/2; +} + +void draw() { + background(204); + if (mouseX > x) { + x += 0.5; + offset = -10; + } + if (mouseX < x) { + x -= 0.5; + offset = 10; + } + line(x, 0, x, height); + line(mouseX, mouseY, mouseX + offset, mouseY - 10); + line(mouseX, mouseY, mouseX + offset, mouseY + 10); + line(mouseX, mouseY, mouseX + offset*3, mouseY); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_16/Ex_05_16.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_16/Ex_05_16.pde new file mode 100644 index 000000000..7092b86ab --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_16/Ex_05_16.pde @@ -0,0 +1,25 @@ +// Example 05-16 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int x = 120; +int y = 60; +int radius = 12; + +void setup() { + size(240, 120); + smooth(); + ellipseMode(RADIUS); +} + +void draw() { + background(204); + float d = dist(mouseX, mouseY, x, y); + if (d < radius) { + radius++; + fill(0); + } else { + fill(255); + } + ellipse(x, y, radius, radius); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_17/Ex_05_17.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_17/Ex_05_17.pde new file mode 100644 index 000000000..cf3ebe452 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_17/Ex_05_17.pde @@ -0,0 +1,24 @@ +// Example 05-17 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int x = 80; +int y = 30; +int w = 80; +int h = 60; + +void setup() { + size(240, 120); +} + +void draw() { + background(204); + if ((mouseX > x) && (mouseX < x+w) && + (mouseY > y) && (mouseY < y+h)) { + fill(0); + } + else { + fill(255); + } + rect(x, y, w, h); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_18/Ex_05_18.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_18/Ex_05_18.pde new file mode 100644 index 000000000..1031bb201 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_18/Ex_05_18.pde @@ -0,0 +1,16 @@ +// Example 05-18 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(240, 120); + smooth(); +} + +void draw() { + background(204); + line(20, 20, 220, 100); + if (keyPressed) { + line(220, 20, 20, 100); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_19/Ex_05_19.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_19/Ex_05_19.pde new file mode 100644 index 000000000..96bb0217d --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_19/Ex_05_19.pde @@ -0,0 +1,14 @@ +// Example 05-19 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(120, 120); + textSize(64); + textAlign(CENTER); +} + +void draw() { + background(0); + text(key, 60, 80); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_20/Ex_05_20.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_20/Ex_05_20.pde new file mode 100644 index 000000000..df7a032eb --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_20/Ex_05_20.pde @@ -0,0 +1,22 @@ +// Example 05-20 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(120, 120); + smooth(); +} + +void draw() { + background(204); + if (keyPressed) { + if ((key == 'h') || (key == 'H')) { + line(30, 60, 90, 60); + } + if ((key == 'n') || (key == 'N')) { + line(30, 20, 90, 100); + } + } + line(30, 20, 30, 100); + line(90, 20, 90, 100); +} + diff --git a/java/examples/GettingStartedBook/Chapter05/Ex_05_21/Ex_05_21.pde b/java/examples/GettingStartedBook/Chapter05/Ex_05_21/Ex_05_21.pde new file mode 100644 index 000000000..b3e3afabe --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter05/Ex_05_21/Ex_05_21.pde @@ -0,0 +1,21 @@ +// Example 05-21 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int x = 215; + +void setup() { + size(480, 120); +} + +void draw() { + if (keyPressed && (key == CODED)) { // If it's a coded key + if (keyCode == LEFT) { // If it's the left arrow + x--; + } + else if (keyCode == RIGHT) { // If it's the right arrow + x++; + } + } + rect(x, 45, 50, 50); +} + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_01/Ex_06_01.pde b/java/examples/GettingStartedBook/Chapter06/Ex_06_01/Ex_06_01.pde new file mode 100644 index 000000000..534292bd6 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_01/Ex_06_01.pde @@ -0,0 +1,14 @@ +// Example 06-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +PImage img; + +void setup() { + size(480, 120); + img = loadImage("lunar.jpg"); +} + +void draw() { + image(img, 0, 0); +} + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_02/Ex_06_02.pde b/java/examples/GettingStartedBook/Chapter06/Ex_06_02/Ex_06_02.pde new file mode 100644 index 000000000..38ede3e47 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_02/Ex_06_02.pde @@ -0,0 +1,18 @@ +// Example 06-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +PImage img1; +PImage img2; + +void setup() { + size(480, 120); + img1 = loadImage("lunar.jpg"); + img2 = loadImage("capsule.jpg"); +} + +void draw() { + image(img1, -120, 0); + image(img1, 130, 0, 240, 120); + image(img2, 300, 0, 240, 120); +} + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_03/Ex_06_03.pde b/java/examples/GettingStartedBook/Chapter06/Ex_06_03/Ex_06_03.pde new file mode 100644 index 000000000..11d0ce517 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_03/Ex_06_03.pde @@ -0,0 +1,15 @@ +// Example 06-03 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +PImage img; + +void setup() { + size(480, 120); + img = loadImage("lunar.jpg"); +} + +void draw() { + background(0); + image(img, 0, 0, mouseX * 2, mouseY * 2); +} + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_04/Ex_06_04.pde b/java/examples/GettingStartedBook/Chapter06/Ex_06_04/Ex_06_04.pde new file mode 100644 index 000000000..a59ea353a --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_04/Ex_06_04.pde @@ -0,0 +1,16 @@ +// Example 06-04 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +PImage img; + +void setup() { + size(480, 120); + img = loadImage("clouds.gif"); +} + +void draw() { + background(255); + image(img, 0, 0); + image(img, 0, mouseY * -1); +} + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_04/data/clouds.gif b/java/examples/GettingStartedBook/Chapter06/Ex_06_04/data/clouds.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad52b85a1cc1f336f360b4d82742723411ea6380 GIT binary patch literal 138979 zcmWifX;c&E+s2<~)`TQ5N!Zr}!j3q|jtUdjphyD(f?6986$K&eh*T!*BHFkw)f!xJ zX&ZNJwH+44sEA z1CdD7)6+9!#*B6A)*U%=E8DVVOM83!@#Dt{g82ON&r3>5YHDhlnwnm|d|6&ze)jCyyu7@V zCr{?&`ugjy zmoEMA!w*KIv9GW1-o1Nw@7^_;Oc;heeE9Iu zqes8}_S=&uPp(|K!g1WSYu6A2`Q(#N=FgwMdGltSPFGx9%(ARrukY&W+P;1J`|rP> zpPzr=z=1`J7Oh{ue)sO(2M-=BC@5IHdiB+-SHJ!CTk9W}zr`Q`%^(C=U;lqk06D?Z zmGu&v;5aW=R{qIlJ^^oW)9-suHSX*F&Vhe{^gFQHbMlA55(jYtaiZq95z z(|`7hFVB53r@5f{>vP~#UY_+!GgE4{Vuw{RGwtHj!&2f97k)KbAztoQ<674skxFW* z=(5_1=!8^}+~u{nqJoHv$Oy>|>*&|3d5DK!dO6K4_9Yw(Gt2e70nLDoj9GQ*Eqt)BS z_v+S2{i<5>Pb_BIkrlR2R+tYYevFY8bD;4Nr;9Cp`Q)38%zN{M*u+bjX<;Ym_>%Wb zp`w^;uG7TM0fra77sU#@3wMjg$u5LXAx|vp<-Aai z^%$A)5`cKUkt0O6208>QYs>^8;u%^UDlGC&Jl+2KCQu*3Br3vq3}2eiMGtzE$trcy zVA?lP6r4;a0*3%vPC47t9O~A?j35q2*LP01dFV|Hr3$GX_DXAd)Mb}hQi(gpzXa`W z@?lwvSe~p!sXzZ^Z;2z`DKAXwg?-s2LzXjwUCls^N%N97;F20f!?~|23)6u~>x_d) zd5-~j63&#)4GrNqR8Y)rcY~}C;~{z?YXSb}dO@j#3*bZ<^P$=1v%k~C=s zMbV7YRl6NIG&$87AOA#t4Rr zR@9u$-8z9!Vp*NG!J>q41+R=FU3M^6mh`q?9Og-{u1`8#|L_3All0F<>3&S=zq7xM z04M96xgo;UR5&P1i78Ck6wlKn9&&uH)M~{)wKGVmK9>RI&My^IdW<+DY|gvv6v;R9 z$7hIEo*Q6^rVtY&_AaAIoAP9%@~%9>l733HtE z-F2dMnDUNbXWNx(9EbR+T{%fSzgx#hFZ9xNMwDPQv2ebCN>O+}8;6o~7&dGdUi?QA zI{81qIu`v*4f5TbwIi^p4ERXwFNr(dszTU6-0d915>vNvEGEjo&P@dSJT$l3#Z4#& zZ6dBxNhzY86!ee>(1`D`K+)U>>mExU-)ElO7Iy>8H3IPJw{d-sOdUMuLc;$N1GYJR z&F7V2cYkH!Lz?B4Fi1mwYntn+_=AzMAgQwsG+LlU&k`3jEj$GWq5?E|KD5rUn?XFE z$#cSuh~pm6Muf;fseXu8u8)N=>#^u$r!-tsf$vE}dPCk%bBk-}90UZm$8N44LiuV;oRR6FVHtKzuXlYueP}s4*8h z8)nXL@o}OW7<`fu%>$>2pDA_%K+E+-%a|6$v(L+#c>^e`CLh*l?7U4ZqB5a(#-4Tm zvv+>UaR!6WbkJ>-v#T()dR?+$!41i%g3`qd7e?olUh#MM#`vJbYc5ymg6;RS zsy8|no!G*QU=|>>jmM~wmA=_<@L5hEuL^5TQ1~wOp8M#kA4`+`)kvlDfKXv1?1WXY zmKE;}P_wv#v6X0-VR_obn(bz^VjD+3VOo-TAfiC!=;q!F>|6nop-mL|ajcN)Ris}Z zaDL22MhA>wdsm9lcp2gpVVKo1v-Cmt__e5#i$K5)flL$2(`)SDHl@Qd;HK!Cb;9G) zd^8S__ILMVo<tnVICvs&u zL`JuG-(?Wu3Gfi=M}N_rf~lirwwq?R{;SAw{z4SK>ZoP=M$3}QN*luA-0C)|-XSmj zA0_V%#R~O|AZ(lNm`WdH)8A`b(3R-e!vUVVj1=jBWJ4<7U#3(b7MVrR z-si9-L*Z4?w;gL_5Sgm8cJpSY*n#7D#Pq^x+Ez4=X}?2RIJI%eHA3A=y!joS)(+md zS~?s4O&lspP2V|V5KZH8puA)VmFP$(%?Wf)-!cb3O`G?ytUp)-uGp9yr#7%)vIThA z(1@t*9OypET>72W#ZD_LY>MH^8Tx5^*8Z>7-$HqF4K2QA+2cm=ci)|=bnIyFPd)h{ zWVJ?8QKanlc(Y(*B88<*VhOJ|Ns^31V+)fGhBfnAz|NB)rzh<}Ke~hRGZ_=`pUqdI13aFY9ps`8r%>*$<}}p^!Ep726hykf}P`VogrM z8*qFvO{J;Ki!YX!TA-RbZ^u_5Wjq#onf-v!9FL2aV0_Bt0CqVOElTZuR(A;;IMc+8GJWjtb!07-KlwP~rAI?*(Am#( zTYo@Z>EN0=^!q`=jsmW1RM{qvpQ}{m400NuCS+;KtccT=ei=QfXMK@^h6G4+lP#h& zIAQ==8Hs2cuO1^`k|dAzTxkUF0V0Ts*m0j|&;tP=<;A2O13(w)%#sCZ@E!}6Q;Bmn zf_0?RBn{;0SI;IjF)V@^6qpI&v5xhH?rs)fr&YQnV*Wb3M>*35K*R!Hod7m6Bv#gT z{)ShtF892Y3X{#=K3jf|XlOUJxKgl*CL6_J;agN`2T6Nbd#wRY7Q5w8_>O~R1sXg} zjpwivc)9^qsF$O(dlk2^*GCdZL#+X3JHT2BEd!)PgG^`0FpD3tNawOe?Ht{4)*>jN zS7liQc44lf3(kw`Bw1=q&MIOx*c@i@)?T#SNYrb|3K`&Gq|lOd;yM+sVdIz?2#xkC z@xPOke_D*Kv?Qg{((|*iU=4P%9lIX|m$TCwKtlyZ-t>jhCUEkJOSA#T-qMKu)BHEV z1P1fw2+D}MaHIz#ZP2@i8jB)jFeqN%h%b6KxBHTA zEZK&WE`V&J$OiSoN}8;&z=4;Tt}0|%V#{|Y>vk5%_We>ECy0r$O0 z8$Be9P^$$(4){^PlU*>`f>j#O6&Eoj4JjkB-F`*|7r26j0W8?jN2>0Ji8ca#e}l6D z$@ps*Umy1V98hf_M^k~lX%|loJiX_m6!1`ouaF2YThIu)*~dth>EXj7k= z$6kF+UQSFoa-#l!w+lWT2K*Xw-BM7=z;}yQQ?tVy_G%%3h1vGUbXWyqsQ*ilPH*fUdtW!`i%?xb;8Sa zUIR>%ldKp3ubGRHbQ4v}VfFe_Z#CqzWb`6DSdH%Xm%J^;XTRhfd`Ufs5a+W2$HLHb z8RB+(YT7q8KI^;JJ&zK|Ksmh)XLhdM51Pz`)Y3TPdr+g!ji6BH;Uz*7k>dybDNJZW zCp|7nXCpda%yMjq*(hCH`CL%!PlSM$Ty~TEHBqZ^8(C5;Wfj#_Hwiwd0?|2RJ$F*N z`rv#Ij_@!omzo+YXk`C$Vw7P*)idL%YF7>*%$!P%Xi6-sH`^3DPT&$FXp)u1vpbH= zo{s{&#{^7Ohi82uxuCI+G`LT?0sTw>rGbqR{pl=VjAXDDSz%6|O^}U7OlAS02Jb8b zt};Ra+f}QlSLjKeo~&e5-xbr2Mkhyr{8OtE`s`lU2LEjdTUX;qnvi+=v=4NM#bH|t zjwd|_5;fKXfzGiJks(S;XiBa%jcYr&TLx~b+0Qq`ZAKUiL>JrL}IPx`@IX-2$dsS+bh-W)eS zDIx}bY};MdU$bSrQ8z%L$>x&fkrPv!4d{upGtUrBEB{7OSao&L=>h;$l+R7vPeRSj zRBy~@7bR%DmP^p}XeQ9Ym9_Y^D_F}T)L)}WSSfV{%Nx@I33HB=20jI3zpDJtUW3S( zbmOr5-BP#1)SM1 znRX$`LQjD5n0!YT4Kg>(*+`bsWP|l$nb1isq~@WNdAb)fzru`!GRTR#JiGP#&ahbE z;QJrRz{AwJ-@Cw%c5Jr+8MO+>YNk5e(f#H=ZM7P@&}Bmn7))*wuJ%u%u!&8Vpgz6I zg2J2?&SP2;jry2-N4JBg$q?nxoIEt1-9O{7+AZqi_LcjKmk2Tp=bM?jGnSR*ugD^` zFw5fCiee{yK}Zqii@P=7kI%?O8>4$fO$C=2eD?8~rh$pIE9a7TFU?AN8LKsdKeOhY z`AuyK8ksOT1mWpT zmYcU$QSfw$}F zdbQ18$FyT~fEm8NjZhC%xMqTsY2LqZZ1viQ4UR^9l>zCVbo_ZFNnD)25CvIU^msiP z2Sj!K0B=Ok9B@8w4j(jbxw~kM7whIiLov0lW!(AE20N`GGqTU&{FvMMO2_wOx4nJ3 zYVAK{M|D}%$2Rq5pw+4ts)4`BxcP@wp(l~|QWYzPNFGIMU-)K3rNrzNYP2_q7h5p%?9y~CUZzD0=%Dn%kW6j-j8<%W>S;tRJhLS} zgmV3`1*42efdQYZ!E?>%<=(_-q+n(W()<>n42(7+R?S&!xM*X@j5eb`jG^Dp-|Wp| zE59I9xQVsXwv^UzsEZ}n|Ku$SY~Lrv${luq6<6N1R$k!ZPOGuUv**^!NMi=9GZEQa zK@32#p<#*1VQ(~2Wg^z7?~~>+GAWSw-KUmmXk+HeqY6Is0hSREc00@aTO!y(h_s&u z#ZUFtLloU9(r1WFi3&aXbfKVM5o|mDg6qD#zU=tOrWX`^^<$Oh#H$U^pNTs(AA9nHYXyZ|_y#=6bvzWV z@X({d>4yXN3hIuBS0p~1758~FBT!PVeY0YjuV($Y)n7OTiPYmTcq;r1T#>mcEmwdZ z`|bW0AsWnI2)f77vpK?tFV~94T(ZD}Sz$q!l2`mPNc^=)y2fag59cG60n}{eLr98o zc_>4Q)ob3%#TxU@i?zs9zsU-9IjSApC&a>x?FfUl)Rq3Vex=JL0W1()c!mXsW7!db zgA%gIf{ccf{_g{dt2V1isgZ}V2uhJ@-lU^s!YV~cvk`X8mwxt0Lf`lKCK-uj$XXgn z&>%G^Y}7+8eD7Mxj!`-ATrfQ}0wW@@%*q1!xtO+@ga17E7N(qTHdmbjSOqP~G@(s; z?Q(S-F=y^-iYODkWPY-I5A68$#_m0=pd>U-2?%nhSR&&sAd7oo?L2F6nx!n(~{?mNED zCna_4l2Cf9a>N$YSuXN?ZjBFkp1GwRB&XkElEq%e38>rZ*vBX@iHG z;!*ANy??9Q9dl#Ww>f|a(8h~?B114yzxGr2xv{f5F~YzoJ-zPIgG5D_xkcc5?%1G6 zvXdI{u;E$xpzR{u;O_HmY!I1NLk-6{&978C=EuleY(@D=i1@1*m_F@bIVr3QSmA0n z!^wT#1(CdlVR7`Fm~o@5Tnbhmm8W4;fJ}*%a)nH>bDs(EYziq%LaL5lPsO!4>H$KW zVQ@tor_d@YQl%c@g_$NAJFSChoBR^6}iXWSd-yQfmU_(e> z&B*zs>z`^KW9eb`g_t<9-!ecD5rx3M9J6pqcKx~*Hx~{Lh3K7pJN@H^nGpbGek0qQ z4aQ+fP#J6`gZfz3!*O){i97#^SiqaC>c?#N`Lmqs3U^~FDLDrr7N*GBB91h{5f2Bo zfm>*IPMOHN9=pCWj(f8K6UXi3K+6i@r0w5Q`}_tl*JNq{)%b0+!Rs^{9WHaHJKY3# z2Z+%B&Q*U`pLRLXp__8yIh&!BWxt(b>39>+iKUh>KR4;y6~eJ5G5{cVIT9_N;MiCT z|B(5Z?FYt`$sC>bKL!_ezQu+~g>}tHcnR`JyqAOdJhF%igk*T6IX2Gv_Q~ zIXBFRh@TBu4@MG|tiio59W3*wIge%5`RL3bq50o<8R?Ay-3*rL1Jjybt&@LB<*s=q zsJkJy3u#Ehk}h%RLz(VHm<%{LbELZ#k?zzi6R1;(P+iY8k<8BX$q@RImdBWNbon-p zH)_!dn-Zad`_XNhl7wxT+ZNRaEM{&It9-gA+PdaqZDuy^mf0?WLDHMX5>wSzxWnZ$;cU0+F)@U%{d7W=luhXbE&v$=vQ~JHgH}=-R-z zNlY!iWn*|i$);av13BHQ>zlfgJd6J7c038NAPZ{i7?J(Y=)huF#bQMo>rjS0glf^G zOesK*7v?SzqfWZWi@T89p{G(qH;chh==Jb2zSV|NQ!Z4Wb3;GK;>xc-)R3 zn=L&;wV$~A)aFm4VDLZC_BCYrDSDRIqEF+$VK9MV$Yxa2vg+8F)HQz%FT=p%w0S}H zTrPi4eKkltIJHrgBd)GN|ZE(hfa%CqRx3}zvX^@mZ4?Af66n#Ess@o zg$L{VG;Oi~4JMW4fGE%|Dqci{cMo6>yGfCrK|K1NwxMd^&|se!WD?_uWykdMy^QN6 zmX8?#s;)%{y@9u>)7AOK80Jj}@UQ)LO8TsDFrjhMjB~TEU0HBi_2j7Y-HCIped2dY zxUytxkhfMC|18_?o4_BzeFp?9WzZi!RcO!+L(tb^`4} z+Z81#pZv}M`)%dL3->VYHs%hSVP#Bo{(xN+aw;x_wR0%h>2?p00U;-Hvos^GW>oP` zf2+ae8sHhiLYtij4u8-A(6+7on4KXRsnWHcjCDd#KZ@+~SxjYOWrl?(w%(`^KD^U< z;3e1FdVt&ehn1w8dYcrghr;7p-C0@T7gjR?k#9+!QHQO3)4Jr~D3udZi@s_S;y*KEUzN!DbG3-u zDhs*bot7EeukEvdt|IIe+c|@rT(o=0Tk>rWbpyq^^^Ke4^Vo zptQZdXx#T61*6N}5+gLr?^d@FZ8A*S$5#H^;_;jP+yB-6^l;*jmNU-6hiJ1NP*rN3 z-Q9qyl}~^dUES%B0c;NqY~ar~Z48=NRD_lqIB12*xQ?kQ%tw$MN1)p6ZCjn+`seee zcaBFx>q_$(H^MS4;7SvoqCxI#`dbIpW|8JB^rPRw)+g-?e=EVf%Pkw-)pJuEx3%8) z)NWtAgdgq($UYg_#M(6INuMDZu36G#gf0{kX-N`~1ulBwEn(1P05cQ)?Cz_D^fVU( z^r524Vc|NnT@3@(YJgjSn~byr@XFYN;&F2C{q$xU>pKYC#u9#p(T23f0Xk^!hT<2C zb5vTN?|mmJHTbk*JbfD)YXZQ`yEP^NfWN&CFL;7UEGYw=?K5spK7~KsfQ4#Sco{V- zxd}%Fvs6n1LT0_k{?HssG3595SPH;OUP7r1D9A^p$<9ghC<~ zg$m8e%NNN;DuK3|D0)f&i^gam4sfUm|Jcg^sv9pS3=y^-Irzc8Y0 z<9pWUQk^NwGku8_?@f_9mnT*F4IpXv8wXCpDftn5w~)D;)!E1S6&%6PC?fVO(pCtE z3UO{KO1W%dkRmxq&{NG68m>pBW+a6|4k3J(RvvR{-Tq4(G3dEBI;q(LeKeR0v*!FU zpj5lfrK28KB7v3g{%!CP@LzJfA`4*CEvWQFV1YrRV!Pyph=&nTu&L)yA;A=EP?rey zyH=Sdpeuk2M~E5=Or@OuN<_RY-Eu9d(1wQBPCk)^ZVhWV;tl!=r-^{q&|c`JSrDeK zW&?#I_t8{+_lJcA8wzsl$w_GqisW{WXNGpPMnPmbHY(St!2jce8#1SOCU@!cMU^ac z){vzX?8A__4Zr>TPZlFy06H*Wrq%gdA(uM$W7_w>mq7eQkBwI5eqcFHlek`anQj?1 zhW=;Xvs#TI7Ls2KtQ?JENrL)t=>~qg-tk99!@l1%jqoj{l@PakSA*1 zjpIlxgL+W59h$(O2LzLM*aql$Wvng4+EVUEF%+`2g>2CHqedi-N(s|qe(Zvuv#@aU zo;-l%bI2dd@C~daGOjpq3|%h%B$xyBMuJ?w&1y3%!KbB1(-x9Uqxa zG|a?v>8R4m3KyD8H6uR;LpP1FM$6BhviXZtawS71ScotaxOZE+4J_I{L~7(9j9zC2 zutVd7hZgbBVBs1>z+LdMvb+?pdK%5pAnBF~^wxC{&0v$AJkz`nYg@w_uP1!|EAJXI zZ=5`#cMh(N=4V zkCW5Q3$DI}$ueXHZV+j(baUiqh2iBIGJq*<>HtB8zB&_Dl5{YZMr=^S>4S_N0|V|) zz438rH6T?fMrRK9)UwuW@@WRIO@r)t*hH9@9jfUWPHJAbkh&%Z-<{f0tN*TvxhB8E zs!-C6KIr=7T+z`^7jA;&TjL77teVZO1of-4g^#q3cV3Vq+tG}TeDWl$mR&9${M6p; z>Y_cm@6Np6e-r#^jv^z#40XPT3ECM^svWx?81P3el4OLq5y^RIw`nu)KiL%n$w#xW zI5Q$-uB?`gH0*5bgXBs*oN9~|7%<3?3Jz08Y)_+iG^-B-J^o1wRxnzTo3nczsQhpk zOErCt=&^8jrH=uwdrj<9z;csG|2-u3EqikSU9l^``E}Xa@gaW$8fnJj^^qzT%Q^we zWiZ&_JEyhUn?kK|6hUDT^xl;A^l`o8s)1TFyfJ4NFXQyY2NAm8QSjfY2BsbF63GVm2(sx$x}<*rfNv z6OB0=;MWBt#oEXt$+q=2<@yLALrN$tDD0ziYV_9riJbG!4KDhxf*!z0)PXZop_KaR zJMZqMLac!E{qZqgN3|Xtcb&|Ku@w6HuSF3ikfITf6!9AN+SUBykx6=D;xmo z1}ud^_9|p+_K?-G?x~P%K@xqlhpTP_~73T#Vz@nfJ*8`Ltq!HQ_$%4Z}Z@W z_Z(!THCg>M3BITHeotNcsn6!2n2DYs4YY>Gr?%wyg>dX zI=lT8bkz?e|4sZN(Ot7FzmwgydHw6JYWymxBh}5}^=y8X-LqgLS)cr+!+RTi--5GS zB4VlKOL{-)pMfGq7z=deFI~SqfMlDH5kYK~-mjiP7me-yd5pJr1KLc5Q}m3rXNV*@ z@SxR*HsX7Bg4a~3Xxg=odwulWEJ`J-OHyM=X1l#N0^jIsb85;%HOP10fN9obYVmn! zf$4f&WKDrI_#>Kn9fdZgBL$}9t7X%J1`yw!I}jKkkyWqpx!}hj9~ zCayptBjcO%3apgZsd;GR0@s||JP4XWM04il=DAnAZ(h7Scr$C{E=WJmh(1>(ATHvD zYNBdVOkEv0FK80Zue8QCb(5x@lo^nrj;IxLL-?p)`zGH2O$c01CarOFoOo2$VAOqw z#tUQt+e|~lLT~0j``C*`+fNnK3;n{spW=QhA+<+#;^L=^9D|#iZk4cYmv?W;-}%k_ z9Y+sL*)h_Ug4XT-#m+V5=v8Wf$OJL22(35jSX{M&r!j7nz2_D%)w@fz=fEX?oFXwK zZa|~!5LFwPSYxX0UR-nw(+70$V_wydC)XR;OjJ@k+M@x5XgjojH0)x8@3jlP>~jX~ z69-olq1aBnUd|bSy{-P9#*nlSx1nY^FF3e?C00fxhca^8Pk_ng&!sZ&4qHRs@Vj)$ z!|y15e1@@rmRW(ni%{5S7|6ozt;~2gxay_zY3J$gmP-@kK*^Hj5eAlc7N~BmXy)m0 z$)NMbwpo`cABWlYdHFv(q}qqAC8jGbfyj&Oi%sE~$vTWmP>cMM@~- zgAT(Aal6#J3nYt`JQ@=zVzS!kkdyoNO6SHDVv#aWa25)JSWTU)b)kFgiH z8!lx*uc~B9M--n88wgxRnBRkCT_ZnuY+h<%5xVhaTkH=q)-R9hPxC zZ(huxTNxLi198sd!iaR(E{q;#d^*DNnAu4Vg8?_Q?GxUGCAGeikEdm)%2AP6Wv?6- z{VF@wf>2j0xvixd^?GuGo|c6W_7QU!H+!zI6L-w8@5CpaQzOm`_nApy5C@V3JS(E^ zCx^vpcvXmOgeb?194Q}Wk|YJ12lmm9gTtTCGJ&z-R;F_3^Y?ywOD72<11`*p{66M( zMFtVPcUQ0~g7KIfeD2slNrOfHSb$yCbykyIj;uSh043Vo2RC8U+km?VRRTK8J(%mE zpRIhT85RoFM#kGiMJsVa&#|@=#q(4`U=fc%tm$-zTa!h;wJGwbjEj@sqLNU#sWL6! z;b;~Eq4N|a>2i1c;{VEwVUcdjK9?o#u2NeBYdMXiY8jl*XD>zy6FeghkVZ#cQ50X&`dvAqN^hEBKLzn0J%s zpzZQ})~?7H@uJO)mG$dvYYYsIY0!Etirtg#&g(K`e$F=6ta8IAUx()zKB6`F5%s@H z;d_6hq657i<-8$YLP_o)r)Tee6o~S(ViI2!X%KsP;e?%=zBMh1X0eyOz|GX@X{*tp z=H3D~6WIFF4Ba`y{K=e>->+_=^@4em)H-q+3#mR1*$}q=Ea7#bRmp?N0xMbBJWV;fTvs0}R`f^w3)a z;$<2EZE%D?Qeg0?KhSMwcqMu~XqdI#yqyh=FtRZ$=+^dYE74t1O{hT}WKWWuY$1sz%OZo{wA$}hhOG&F{=wHLsGQ>z>f@lCDzYA##b)87 z6f|va{xAIb=C+`i0qk18wg0BUiIYnZKT4T*oH{J%yJ3?920gtknT3W2Wau`Xc!9Wm zPO1i}&1XeL4HOhXI3h}p~Y%U9YeG+=NCYg=G%Ms7(+{LvUb*}_0a%kJq%No*uD%X>Ikf0FPn2yoQ+L$iqS)U5nxp%>kPn7W$j)V-8$VWkua^4P1>x`Z z9a$Q^!zO5>yyt@q=fw0=RLoH$3Cl=c+7pOnm|On1Yw8@(CJJ{v70z0A@bkofFJL>D zx9sSsIC{;bTTt8HrbvN{Qz*__C0_rtiI)v{#T!DVE#_N!jPOX)=Mg@$c zNBrosd(d3U^ZC94fmN)S6Wl0(w=Z6ym*1$44+dCH5-iulN{g4vNl92vni~ zEa%MVs791rFS?=+x=l6C0rqhgG|r%lw%QmYu}4l;v%r#w)R;U=^EBJ;4son4_CjD?U&|-R0?O- z6n+b^A1*XVfGb7Aw5|A{-hR*;Yu7CCGNI`YPzIE~Eot3fEM<;Kg6f3)x8&2kmDnce z9mW$dsS_-O-y;cRw)b|HUb zkxQ+*Ihevy%xKXGa-{{H){^m?p$+91YzR9{V18OGnOYb(ZUt<3f*PIqz_A4-n@?FO zC27;Ceo6?5)nx}>3U1kpLR)G>Erbt43iXmH7bd?$MAm)0VTZ=Ze0hq#x@QjBuvj+T z3cnUsglO?192|d+UP%(pWu~WF7fKe@OlR=SF8#2z#;CrEHGHfCG0)nVAOOb zXrn$?k~r%JL1M?l*+N=37gX;m#u+Z4o(r&31LG^;z!8LHf+*!kYgIbdgnqshn_5*P zLgDNK{$5swNu%}j^p5X=KOHb>f0Va&b?T+`?m1p&3cqjwO?ayqWSbJyc!nB{(4t9( zkDNN%XX$2KGzlZLE*>=MXKtdu03RMCW%_jvmVm-GNGZVWFw{G?EN=#hUNh$WAy zY%}@zKIF+lt<|MKJyK}IJT(wwz`M-=GZM@70B38Pv}n9F3|5QO4~1qRI*!N>C{oON zJVTG2rfjNA(CZiBBxN2O3-|iM4||tgdo6HGl}|q=%seQuOO)P!P`%R$DVh?wOKt-> zO_gaKPrvd*3o_GMv}7k>BLjbb&Yz}tnr(SMUl+59v1Q|@HqsB3H zjbD_<>lqW_u8<@7Y-W`KAo}-%>7~II*EKh`Zq+qK6}Upc=M<#YS|9p`IOWT>IH8ON zvwFdrvxip(u3b;~)X(0UWQhNO*P(=h-|hep#uMdAwVYUtR? z;a^b%MtV``?*_4taiQq%u=rEfoC}e$sI`44lH-LG@uBGuZH6CG#Cse*(*}Lif_Soa zJQm0dWGUykz!fM@?FyF#5B?HlN?9|a7KJfL8o(66DLq9hTrEN9oYkFkmEo}NP)~#m zcrj?Y@>rijn9Jl^dF<1TU(M+CNH4@jcA#>40+T(QZAXERh~1EhbfC%KyT0UcdzY(c zx-!r<>T|9ah~5?m7`Mtwa=HUIDK-Vd>T`3bPok2Tw+ioi;Yg2SD&K zN%TH@pQ87VeJ?>|u-O8FX}B(b`uPuM*zOe?RMY7Pf%SJ)w)a0Zx$jlUkZvPXQ)E?bGND(^w(c_$H9R(~Kc1WA^~ecbflu7L^}4rt%-&g=OicylOE5~OG32>|M*fHYuLpMGV?C-)0e4)1m<^i(7 zFPdsB#qqoG4QYuy5A2?W{BC1YmW#}>ne#x|3S9?(JB^M)E2q? zVd^9;2%u9dt+e+#h^)po?vpubR)zF=^xE4e9%O|r(#7GJ4YxpQgwu>b{Lb1Sg`X~} z@aC`&*P~nw>HX70xs%_FWQ)wtk{PY9o>wPg*5@jS;6j=9J)Sy#3 zdGa^p+aB@{#o>S&1TkYGt+MC_Yyj3&lMK9v&I|1BoFPmx>GJyTc+-g7MAYs@|Bs^c z4rt=+ySR4z<+gQ8*`4er%8&N`?) zhJx0%(c)@t8{d-_IjgugQJ4xsI7ztCm`tZx~LT5o)G3 z4e0rE=Gq!u#O90jMBwWFxzbi%N1-YVpq@8p`FMiVDyLHcVb!gkY`pLEG^Uw~-rn|* z&PUuy{P{@8Bx1pC#CH2A5))ciIyc-UW>E_0mk1moW*>Pu?L(a9n(LPSCfF+eT!>e| z_qMRV-bVNg`8o{pKscD%X2(eGT>YMWQ_DI}c))Km@uH+<%7qc}*+U}?%->AzX69Z0 z1t^W~ML(zKo}ahpQOJ+d9bX*4>kRm4y;B$e#nhYHbJwvcQ}7MdUoR|>EczX$jF$En zQ}PYFpX}QZpt7x2Ah#4lKh+#RJ9{T={5fm_N>JF=HpAz1UN)u~w+dp^zqOqWoMFGM z%db~d??;EJP#+q14Z@MD_#V#kR}c0DFe_{0^D7A4G!L3b1C->TO;|e4cT05P$?fGVQ@f}nh zdJVT$q0{e64a{QY%)Sl#@aQZgQ+9 zJPf>k^?<8S^WG2rC)eNk)aPQ}i<{M_?tIGOqvwQKOu~lP*wWkg+p|5=>|4^j7R)$v zboPP^Lm!lJ9C}i^%VBp<53_U@6sBAfJ^`V$tta)L;hg@PYnEJj;gjWm5A&w&4y|4Y zjCa;;-Ipk@s>}W@S?CHUrKt4%-=4J=-S4xZ+}dDH_kF5Ixi`JlR)k(x2bNyuaUI|s z7oiey3Gc3n8UYFGw|J%gCtmCGXq~^SXUFLKSr0Nch=QbT;qQjq*2jwGpHrE~)(GWo z)r;%@@{Gqh6_INQvJl%$nY_a{3$I;n^46z{tR>_U4c5?tqZGnYl-uZ10AHJ#ZaUQL^{7BhV(S}aJD zZgLnB52fCjJy@?-Jp35F@(EG`gc%CK->0_TU}8LkiAy)!<976Kn;X? z*r_51BsKGBbfD5DZae2Mz#h5Sk-MQ#3(6YU8CN-m>$ zF>PRoCmP9&w~Qasv$z^%Kzz<@HpW|91nc9uvc4{DVb%K|zU4Zrvg}gDDi!6VkpReX zvD=K!q9Ygdtpfix!+?d)j+-=a^)f)NWnP*V*uROIY!!t+&EeSmvX)Nyq++~a43=tk zv~CVT16&F!ZVhG6pZy_VX?oDVUGbo~6eJhPxu(H%`T7sZn!Nc5@krAd)zQ&|+7(|bIj;yg>P_xih5 zmX0O6W~FEgEefK>9*8Dl`xDo@AAJv7&&zAUec2BuH3^9&z!fuEoUaD3G>@`eqi>yV z?8VBb#tHu;*YFJ_w^?VCcO^TVJI<2ehIq?^?y&3K7PQec;`)b1?BA~D%BcZtEhQR! zk8)i}rPX}3*uFF!tyT}N1bU9Q>N7SuV0fq+L{fUtV5Xfts{LbfOc1n&!3I3>+#(FN zEZhpu9qX8OqgS+oL0mQN_`0vOP~+kF%AtMh!y$&}sn9NZ%NC5=Ojs!~fYZR!xekIS zt4vy_w7V>bX{z|QVQ}dK3g?OUW9|x|vQWw3)BVY>i+Qon%+O_OsHOU_mRm@*gl(W) z<>!=KDH)CRDYrO3=_iY7I3KCT{HQhk&Uf{+bq*ycsbfO&rXG#8>@7NX)S{q@2;6j| z&EDP^2U&x5r!>BG>zZ%ATmE4C9#R_>x&B_x(Sa=!MM{s<@PS!oE$UGW@pGRjQH+96 zvl7GtYhnX%ie6^m`Wgq04xqr!BoEI&{PFPemMuOBy$!iWj$O@r#6F>)M;sk=`Nh}~ znx=O_NF^dCwN?rpRIML$e4=S}laEQ-h&BBE!_%A%z1C3pWIy~sp@q7yK~+5vQOwxc zp*XNIE5%g-!JmMBJA3YTwvwmzyA#H&M0byXOYwV7avtMhIvU}sp|Jbx+pL(fOdz)S z8UT1}xnVXqb>h?bNog%4MnQ~#0oK_VvSu?-Wn+3+Ss?(?OTP%XB7n>mVUQ^ zY5A49TG_0o_eN@FNk_&j@8*>nbeb+npRdGKp`826Uq8eiPql8on`G%>$dflE;FqtD z%xf~9l(N(}q>1NPsG(vPwKX)7;57M&?#vUatx6=6Q%z(`IF(?1+DLu;fYL^c%OK8S z3U7Ff>3sowWur2waA2F8x}TS5%0|jGtqxB>wd^kP(Xnm6M6%dw6tkY2qClUvF(67! zVYhEhYn&ZgR({UhjMKQq$XJfo>v6{f;U%uY2UV(ed(M0GiAcRjU}8iD zui92^=G+{oQJb@aQZ9Ag;spaa8d=6WC}SsqdB%DjPd~kvPc9+RI8#4fq3YZ*QMB*s zu`TKvrDPN2u~g^recd{f&_!m4P9lXnG6QAv44Y82^VP`OGj8da|= zHElmrNVIv6cUya?k*_QbIHzwW((vuR%)bX+$h5fugn`}f4$}JAY zzzfmDebkVf$SEJg3w8v)p2c`$Fw+ zQAHngJU56{uv0gov}fN;h!cQBDYm>O+al}SWYK4@{}zbLAyjJacse;AcPsp-lC*_^ zhhyJU_&@M~a0$^yv) zalXzhUNc(a9H>HeHJPlf6;xNGs?$;4js>V0P)9)FeOi>w@pyL$<*)YYEY9nf^CS)Bi-ZaRql~&TI0_6&v*$f4up$e1M<=0z}6_+-<0`=mC+PT0BD9j(ZvMK z0vr{^`?kPUeM(#nfh597dP|(sDj;-|;JHoXKC`{-Tu}91{%n)|pKTmT=d!DVeDKcE z>kaO2whL202`Ww!1+&=57xrMc+agUSa=asWOEOoQfVN~Ku{7tbojoMu(gDjNwW#Nm zz*KVP(Fe#T2xU`~AcNp*RQz`ccyZ_?XreL0Qq4(Rl;{2yPoPEj$Wia_lQD5lE+-@4w}UwHYrYvALR$ z7Inr+DZKCrlB~s58a$f8`c46v0_wM)1oj81sXL#L&~M3p$|}*^E>1YKp**lOz{p!@g1i`HVHGHRDOdED)u}}pe~#M^c8JqO_9^D{hr&-Br|d+MS9q{3Lvx5P!C^%ce%%~5 z_0$z=a6pwJC(!Ln69Npy(Tpc6Qu$TZF<9>GuRy*ypDA0!VZq)IZf%Gm-}S_tQ$?LC zRk$UYzc>Im>*Ymu2&+aAnS-mTuy4B|9|n~v=t#ANRXJ{L50@!wEYy~~;c10|E(1$o z%7i9RlSr&8MBkXH_o*?lACsZDpZ^`tO(y1)Fy=MDpn*YidT1* z2JXxF=shk&&>S7g5{}Lai&Hf{VpdP0D=Me)6(%d`7{8!3t?fcnPRm5C1YNZOf z@31$BLT8C!XR5f_1l}D8i2`kNwdjw-&MQ4YbOVmDg;bElY7F+D#cC+fxdU4DsxfWk zi`J*ue+JxL2Nf=99$IH$1Aia=4uJ-DHo=n7fUVm&;0=DMS9$CuAk|x?Bx*~*(-6^X zH0a@pMR!gp^C|na?)9E}i&9O`y$iO}<^{g(4Z5I5Qox*nZZw#gb2v!zD!cq^Q{sup>^B-?mvBeY*N^<<*HuLFp@8_azXZc9j&ZlcHoYgCX z22+wuC||TJq_Ey$Mu*juv+I*raV;;RiD zc8BxPHO^Esnqh(jYTVnvIrJNT_z3*537SU34Vq(igc=_J41xUf6j`p%T+WIOG|2a% zP!)wl5HW=>(?9mW9CMHe5<0fXDg9-j#!WQPxPP?}@u!f+yVHbXz&Ar-Ne~~v=d_c8 zomDrS_o>qi4uNZuH zg+$nL2FSMs5FHLhn?S)kY-cFj;m&)rm^DdsuBngd)e9z~`tR~1XIPLor< z*0|999@ao_`nSEI+yDuUJdFx!U)E4_!Ev|;TA@g_EK#0;Ppoz*vM@QNGfSF1f}|I1 zTXcxE4s6~Gh_~f~%WT87S^gmWo6NPx_Z@c*J>lGdzb6Anf&#B@S+e>ae*APOtp9p* zXNTuZ6bcB+Dp~l?K`@=c7cb>h$^zF^e_qLa6UBmgy%tA$Cz16t&w83*Qufu)CivkS zBtBRxBVm7?c=ZYUnDUHRf=S871GYKbPJ;zL(9M6=ZC(rz9n?l3NUy+WOro9f{WMNp z_tR4;1gd2FA~fqcfRLl0QPrBpEMl|ZcVcv)dvl^HYFfd*?za~mFN;n*zZm+&UZ#i2 z8b#~|VNkZVJRl?x=}S2pbT#tyRR+BD#2s`)RmQYhGNM8a=naqy4f*Ld&cA>jni5-J z;JlANm_e}Srema@J((l(XMn3E^Uj>XBntMa2GZ5&k~;`0ga6D)yW+(0cR<*_z=OqT zlnxhD7K2k=mQyp=Pe8T9%5x)=7oG?AH6_l@%t5}khpI`4uK}(ekiRP2O@%6TXo|_I z-3?C-#a;BcmkxjUx}FCHjE&W|-)40K_NT;~2x#>7nraigmAB>1A;@;0#8$mE`XnekDN+y)n$M3SAoM` z*xQJE(@;H)tNNhytE62Gm`ohtav_H-NT`F}he39uAUjy!69E5w?Zm_TqQX|rXK#^s zqWsoONH)6E`Cpq{bGqr>-IHzdWECD^hAeWmpKnH@%plRSLUHa_dt=7s_C2mf;;91N z>^XTjl38b0vhepV)I&X1Ek1qRv4dhaRvIp*V&5|eqF74w!QVez^R*i-BcYa8Nc%W) zh`b$PE_Ei5pGWx=U6T5Lmy(pwAZ>bNrTQ*?v7ow>EQqR8%Qd7Ww|6YCAavxEGFiPY zg?;qEp9C&4%`9Jbf#R&)vV83iNR-0oic0EiBw_+txx}GBx6#9?xBLv1iAxWv^;I+P zxP?<-?$NJivg=?P65sy9oN|k;{Z!7uGa7+~20wE0M65<^V}|nXPCm#I!@9QZjfeP- zuLCFlVU-5k*fAyPn+t|zqWF@C=Qq4<4d+i;L2ci5ko{qo@;&^4$Gck?dw%AqmirlD zdjx4!tIc zm>CH~g9YezZdcQpQc||y*k_)>+9-SF_)3>GwZvA|tP}ZekVoU6GuAsQco*h^CS%3C zW!br*@Y%M{e%iaWJsNUWJWDst8E;?aYr1;p4bIbGt7zDjvNsjkK9q4`tst72Q_?Dz zsmDCcrBb8dQf*)`^`-5UpyY|nNEz&7a)>ZFV5Uh>n2guP!e1?e8)?G=w;3^NZqatA zRs&nUnN{&z9%0bHD#r*C9X(f3YLc+^lW${SH*(={%@Dir@g&X*yJ{&DoIDXYmx2Es zM>pmnA&gD7)8ePY*vdch6o+g&r#l5{kdb~H&hClSBi=!a`(#AfzF1aE#ul$%FV}H? zq2m@mo}&ubpF?w!RKcqQ0=FNH^54DR=}pb?lC|EytRbdy^*zg?;=ju%T)*uqRz?)L z5~w*1FI7O&nvsns519Gfncm?u!&hagi;5Ph=Vi^GQZ#iYx4yyKi*&K8ME$&4H+%Ut zM5bHto7_E1`K5_gR7wmbl{?2zxp92=(4g zv~>wQa^nZLO}ipETsciBTX%9TEzji}!1&HEOE=vpc?jNR?JjTQ_LD<9Bi+!^BLRb) z4Evzf#AUIpUyBZeJJ5u@*}d zH^DBvT=89gC6(SbT_k7nHH(s3BW2I-pO0VK#v8CyTfA?*{KVD!r_F_}7%idY>6Ud~ zHy(Wdp!ELcCF>`*wP73G;rT|P(ye2Q159&`2gYXMp|wfA#v33`42Jinm6!?>x(X6b zzJJoIh1x7dCNGtt1!|3qK#jeXhYn&uNNR9FVMZ*Y8RUeM7~!HaV_g^)7Btw0wMej1ufiM zr>;ahkW+Knb*uA%joa_HO?}k!yqza4PCSga@dAc)ZJK0l{-d6K!UEWKcyhFtN+@eG zAuE>9h!E#sZ%!og{rU_;`(~D&xGYld*A0lKYPwqFS#_+=VS@)jIokOKT(Md0 zI{{mImui7yszexv*cO`@Jo>$PknkK;CObFxm|A%@!3x+(HPTBV%a&Afh-OwA>pGE= zmy>lleCyz8{fZy_Y$$Mp=FywUe%>BodAvB63_zS?d`nu+Ma1bh>9EtXVQ8AEmYLUN z=pDpGRcZ<}X6kSki4(y{Ii@i)!l#V=n4naz{LDcDv@7hk1P?gYHmM31#T+zSl zei3w!P!6TV2|Qk#l~!(G3?-E9s*lSYi_9`!l0lt_MD!Ifa5KTsypMO%7J?_m)N!n| zO4q-@;>o#(XjL(Tpd3mFPz|N0tU|<@_gwdCAKr6~WYb!1fLTpN6UCe%!DyAL6AfBp z9u%a9XSRz{=&$Hu>8Ts7+`RcD{K{ci!=l(jhG0jxHq9_x+s0syJ`yF$JixeM1r~6) zU$BIQBYXQzLpCqW!PAdJ0=6iK+7V#-lQDoA2Z2Nf@iyoY;hK9c za`Rc@xLT0%jQPt_(Lz{0v`CFevf16fV?O}=m>w@zZ#5lTYU-G|VW91>xYdPgvT~@S zxNqt29NwF(BU3z`H%ql)Z8T4*qAYFBcSdkc5T_2HX+y2fW)q|eXQVEQ7FO2)yR{&H zu=v`KUKC=iM|d%2wv|x;x$C!0F1j$=fh2k@f-c613rUElqZTi&j1w<>b&kJ|joi<) z*m^XMR_>Z@9lLvn)SzhfHZoRMD&mM-({|e@ChT@^{Et%dyXka|pftQcY6D5yf2KZm zYS|99`gbPGSRin{JIK2k+P`2(%@wld;RgVUc_GV-r8kJ?n_K0UVqQ*)%UHv?!Iyt1 z>N8VX&TTTKjwQHvj{kfmV5C+I=F>dE250q|%KO|jCJuTsWG_?`C;_m7x*S(mS-T=? zjMrY*BHmB)#C2-Xp1ZIm_vRP&UPn2$I>c$5#$na=B9$@ITCBV3z~*c=d4TucfWdXW zfUjfzVg0Xdk}4*0=tx@dv#GtYIY2P~WU_&`+r@D`nLC}XU;pv>4akW#cV=Zt9dB@3>^4ws?rs5&1Al1+ruAd;^fo+ zPehstP(TaAa>3lzW`EW_Z(zN(5Jvhns-`;{(yE!DN;YO^vn?GWR|LzA6Dk=n&! z55+!efNQ`CL$Iel>`xMA4<0L8*c}Kbm*U9Z;UE`6G(N$V9AJik265FvO0(2W14kNg z>JSpC6Zuf{<_1{18QF)NgDNl~k%4{nz!TVA$#s<$Rp-5f+=(*F6G1HP>iw!Q#RTV3 zz7}S1=}VjiQ2$>dRmg^4)%=~eP_L~`o5RU5p{aUKrrP#eX!)X(lQR+vI7wt(e1!xv z2l<=)8x@f9F4mv|VhZvzpbdIFoWKh7UMz|y^5FD5hCbU{aB(Sgz`nIGc==2kW(ka$ zI#6%GKA(*!^~i-WtiTr7p9GF(=;WKF9V`?li*hGnpt7V0>ej97cg68DiW5ozht(TQ zv`3jJWS}7Rrotgr$kB`xrK%8JTU^%=ekT~Pa=khQ9HZlSQc&rc^3Z;KWdSZwWVRT%dC)q`EdE3MIxGMV8 zO%VA+dmXWkAv?u1vdE0iGf#GjX&eY~))QF5!lnhpw!GO(&$*Wx0|X%5lY+0nI071L z%TqRHhW)6YvM?g(+X?*O30MVJoRq;f_MBl|)F89Mm1O16bzi}f=)l13iSP;qw2}lC zHc*wpvDQ?cO4qKxjM!4pLe)A>0A6NTDkU0iIJnRZ4Ue_C-++!MCWiI{8|q_!Q_;^i z{bn5IB;NpE92DkeLl%a>%U3>JHvBTY+VqIXaJx<(7Fwg7}=voC!RJXi2;C3G0%R>mb&& z=q>UW1w(i?u*sZLp~G2F&)dX$E|DpJp{o=}cyHl(dKRt4cdHBRj9x63U1P3Ss3EBm zKxX2I`6Jx8+PNG?89X-_f@u6)Ufpy(SnwWCGE9jMKuZA!F#xHiDK)sJ1k}&X_jr4H zYY>8F>Y`?JtU|V;2_~n7*^Abm=QM|dlh<%hhCPTW2#uta!Ds9Mb!3zafn&ma>x}~BW<5%4#;{%_hAdyVeGB<3wP8?#K1UbD?ziPtv-?K_qA`eJ7!2k<1 z$PfclV1Fft!Dn3}%f~GP*|=PV z=4z&FxiKZF{DA*i@K-tRXoBPE85fHWrKv4%8vXr=AT}wSw8iBG^W+e2O+x7u>$An& z0$?fCy(E6eox$~6A@Hl2Q>-}pcPJRlg*a-kavyNJ0l5*V-0bXBt~^|iRO``LTX?63 z$Gc#wXLefJ;-84Z(%O}O?x3=-OsNmI`lAYGEt9v`qB0W_rU#!_ak6h$t+|X% zo^d~B$nhu8RvaC#nT&S$2bq46U&<_zu;~nUDrDckt zZ~a7NEE$~M+rBjNt3@ZLB&x)lgDQfk|9fFlm7I+Q2e(h)3E(27A`dFzD$4omw}_0w zok0}4qDegOCNN;=?XJQhj+($WyEU|#VLJoXxD6-OcB}%iTLX3&VL|)nzk6~%&H^0M zHX9SBVYc&)fNz*a5a2*K&Ntf53qksBMK`kz(Chf;@2$RhYsFK+&1z`a82{@(IJ@x4 zWoqsWmnI3Vl8p#o-7U~GHyEeY0C>$)r=vm`suY|Q;U_v4Ss0*|dgxm*KunXGdc#ql z9{ghG7Q|HYZ-TY)Mpm_Y$Gq9nKNoR;LUu3#{q}F9^UT^uZ>)}>?t=szniD*hjSy7N zmUXaZ>Vj{pz@ZLSGto0+!+ZywaySH5T)b#Af-QP(M-b^Uok!@yt;_zgihyif$uC*T zzE<%uWf&ZV{h&s)W%jDbem0E;s~-69bxUNAdXh9yC3|GJfT&cE%ij693e>}tO3z^h z^pGPBHc{Z_?4`EUY437aGX;)&b|^$4s?{tGBOo@CjV4rM&j-WDC9PpT7~s7B@+8Ze zCb1|DfZW(6HCpvz3uou-u&rZ-%^IAeuzZsy^Vl_6k*E2}O$R~icGjAFtPFvX*B0a+ z+A#lF0Fz1jNL(%-0j`>?+yh9d=CX+HIP+!TucA+k4_MU&$Cp9b?!hYp`5}w_!s@S- zufjjG`cu7IsYKaHBu0hiC^l{i$ljvuV|SANgr$`knGM|g%BwG7bAJC3+IY@gqrhMP zow$F=)C`I%t8ba9hU%#RM2|PUhCg-dQK<0=i-8&%mYBR7jF_JSZ!%(E2jfj=frGwF zq&sY-j%D#H4hGHssJfY8~6w;ArBbcA?W>94jt0lb?jm^0=pRfV0r}tuy9mK03|0=%IsFkPR6+fRMt< z+lhyBw}k6XmNS^Y&K?rWy%OON{dHc}0_PWvah+)2ldYkPf_tJ z8x9!Zi&S9V!`L>#kl*};ef3pd|z84OpAWr;a3 znxp=x$mY_&A1dQVqy53m^6b!R2FL;KdP7)7u!WTEOU7{*9XE?SvYMW{imqQZ4oN`B z@d1vX?oL%^zr%dcb{@S^fS_P{Zu~A6PjJtlua)X1FQ}?pIJO zcm~ywrHIpU@fM5khEyzI{O%oKx8?J5?9T39wAveb`W^eC;`VKF57WlfTpzu}y8WL&KL#Dtapu|Rf(+r!df3j0+E9@8cUEL1c=3?%%R)bT?}C{Y zPknuNyT8XgH>X?noFl$)gc{hYpo@}CBdwL0`PRUuM9M|!LyCD6Isqp!jp1*`7I0QbG3omc5_vx)!|U=?{GA9B}9c=uD?)+?k0$oZZ{3xXtM)z&AGm_VlrGgWV#P zN}Ey-pHiDLsj#BSL5kGj;fht>SsCH0R!^Oxo)>QT+*=}<=i-N#*VWh5Llu>N3SPOC z!B+5i=n9UQSHk5~AT=)B$}&qC9I#Rj!}7#Zhe{#lXz9`X{~WilxwbyTyX;Tar2tZz z;qvh)jp89ZY2%Yde>ee~1UB-dy~ezRLI#9A4Lx_yP}0H^)_E5*KP-vIBY5w}Q|Y}e zTEd1jSBUfjyO5#KD2cIS0GbX3m*oMivXd*4_k_y|hEUgJCs>z!V8qgu`mk6#{2(Ld z3-w?}`}W^5y5&jBKa}?xeAc=Ir=+M%1*sB=H`kP=$K(07Gtc%>N_`v#xuW-(hP_F; zHfr^8T3?`rBH50UaI7tHu*nR<|7yLwmg{Z>i|M$6!9B4H`Ulp(JT%}MnKI;bzhu&wErds=M)- z(mkDRl}A^CWw6?|m20t;^Kstk1uBk}+c^b{G~T~UIj{9oD6O`(X*%JjedWn`)A6oh zXkMu>&sD9(;`^DIjQqrefOw(J^%+2%)FVNK z9$Za=kVNDXu@W56ZeHS%B+3 z4w*0W#=C}{Y7R&8(u@s2_`I zew3Zarp%fB=tuztCb`XNq#&w({o^)%!r{OAQHLlq<0!~6B{?Bp69B2FlyM2>(ATn!U@X3v%!{yxU$-(Co+Va*T$6+;vHWvOf&?{a9$i6?l|ZDP}aiX+--srK30cXaBlF@>9o0TSEq2T@{&wWNOY>JmRhi8Wg<#UWYDy ze_I11Aquj8eInH&SVFY8qCm4I73E1ut@PY1;D30~S$(s6`u#Olp5#Ky)nrSoqCl3q z@7tJ~v!`xwe{b_@%AQl>F%TQ) zS#hKl_IAg^ESE0k87RjbbBn@6aeAK(-r7dDPGK0qyph)bbG~zFz?Mu97J2fP)alnV zn=vmp%@HffH}FiB{(V3J+tV`yLtNVN4+AaO#nOUC`o0^$T`Ymc42N&WbOglz(2rDm z@c~Vr7QRpl=mf@EqO%ok(BqNhfcv8Zh_HvmHFqUW;|9N^B#Jc=F^MxE;hrIAYo zXE&sVmP#Vc120oMB%kHm{OlU>AElL?>*d}n_A`fY1H{O{_5q4Q|=NiH^`{ve?RAdwV_vIO~*M0tF(|8+tvN8Gw-c7 z-g+Xw&P4pOd4m~oKAg^8&=A+%!#3A$nXHxvLHn0$AfNe4$n&snQz!|s^Nn@J@*iCe zMre6W^gf5W`0U9chZf=-gYWB)v&++jf6??P<836I!QVF3{3SV(8xT}!8=|^vc=MD1F zICq~tE517jYjV)9va}~6#Oq^eqE$9ZWA4V~;-mUgu{s7=>IWNSXyZXt zZu-e3=L>v6q!uhUw4^H8!B$P7q2{+m$02m52e3F-ti5nppZ)l5x71JX!oPp5MmsSW zCty0G={lH2{hc%iIz4HXLC)^H?Mj*;=_#NT{DJwF%?!1`e83~XSDH=W~GFh zAv9FiZJ-4zs+F^l0!~dzUWopM)xxSzrz;rH^}QC7sy1fZQUdYaUGQ5&r*KsMny<(s zyvt{$5J!*JYeAg?G@6i0tYA#-(VxVb=~f|EfdvYnAwVQxd-ohz&B@dw zRpY{$C*cqUB5k2J-Xda{;08O`m4K5CL4TR7eYT;|34#eGZ6_Uq=rF1kvd$r3VP|4j*JYX)Adm`$BHO~+sK zW$dPxZ8dt!?X+fI2b7J zpKzLdt?6N$2IZ>FBy2j>)hG?M}dool5*?oVJcH7qh? z)d0V=B_`HXcMO9F0xsEtT0sKx9scQWa6IFXZbEz>!7tTon%>*`nqiyS=?m8!CnnnGp|id1?4o0rb>EZ>;uC{?qGC^YdVW#?10ioumM=R(dR89BKr zOf^jkmzYn>QuMBU-H6Z(qK(U24ho#d(U&y(g2tP`+>xtQ9k*@g&>UDEze~s|t(2yi z&?Jg?2y%HRnS@QZqAY&R2sN`=9SdLLG7lR>PMP5%!vx!>Wk&~4JXkT+nVmTd5NkXV zQs6V8mAM#NT{L~Q9(PpWCtFxaL6$@XroMq!lN@9%lJy#-*5hR=(4-MHbRsTlypF~z z)gjAgc+UiQl>t_g5nHdOJXi_@dX%Gp>#x9hhRGl+10tj`LgN|Cf?7nPoeHv4<4&qo zkMI3o3K5``zghw+G@I_^u*X>M3t5%|JqS_2d?VM>gv7rD7*$kZav4F93yNmXF0lAC zc$Es-KM~ba@=wjAhTc+3;VS`jwE}1q&3=c)k%y5%d-OvAbx_uEm@XLeTsLLE zFD7^i&?CW4KgCO2GBF&ah@lb%k;XN0nfy7lmL{a*vdVcHSznN5c$T8%yE$la0mkR zFN#}na#9dOIR)!D`^v#LFyyA^1gW4Vg|*CtS!rBLO;hSU=69v&bJb|GnY32m3t2kQ zw7vOc^`9m|mFGMo90vZWXQQ)f+Eg66xexI-z%~>dZ-6^5WB1vc4+v^kisKSDec0dUJx6VkL!47d zXn-Ece=PVb7Y)%#8bXoeFYSi+Ay34D*?OYsH`G<<5Ic_X>D4&1IqP*sf8 z9(aktSEFMq4Fqc%|JV^HG$8pLY|$^}0X#Se{Lm0n%ia`-;iYy!K;j{1A;ge055OJv zAC;@1u6Gb}Y!?3_X2XRlNr=U@hbLMHLx-4#Jm0Re0Qf?WK!IW^J}QmRgsOCxZ1gP2 z4{gnFBXjZJNA*r}uz`XfSGwlQTvp%P)AU4;ra_a<4XN$|jA1{gpesMtN@y6roz!MO z2peFT#@5mV@6tmd<+$4&(DQ)(UhY@z=PhKwc6ccGMjaeZL?B+!4C++$7A}$bVIr`84dZcXDczsZl>^gNJ0bqSl8qpj?)>_d* z&5?}g22Q|%yu|El0s>ZXIqXGx37V^GUf~qE(*6Yg_WXwaZ9&g&I-g8gwFp5AVV5LT z1FYh-(x`=o$1H=>38YEa>CwVz1lt?++tLcrFnvXUj`R2jFgYx5Hcok=Lw6mUum9&e zukJ7_rDJ3sij2}p?JNIdeetG_79IMZY3&~j@sf4HkX``_c3%n~+s0!x)T}-oR{)l> zKa0RUSBkE%kgMkMwVQCcDuh(%X6j)vNU%{r?NfYE45m*{{faz&Oo7eU!z4Ac^T)~T z(NWPeExc5N&C)FI33v0k&j{rDt*!3Dae`+$>(5%=NNaX$Q%u%vh8AMiNe>kl6$hrXD__Ea!QZ=W90hY&dm!F(+C9{Af6w@kQ0p z06?Z0&}qQ8Tql0SMXea@d2N3QgR!moNcF8I%BsQuSsS~TL;LZHIlJk=z6GpScuK-C zVqe!c{T*ReH)6w%_suYIrt6&o^Li3hb{VPtT;1f4ViG^oH&oaU_x*h4=vBeRS+L5CLcwzQ(l9LeS^7(*k#E~U1<{sLy@ zg0tg=mk!t(R{z(IH&7vb6$qaiQKpi!H$j(CBEH_&cP+cj168&7r|N(*8gIDR{Vd>a zg<8a3X_Y})vfG|=D*Z#)Z1*Sb504sM{>yyt;W_-?bDx*{KSpKbYuuShI%e(Tr>{L| zg$(LIg`VA`E1w<#brg{5Kpo@kLudAXyQGQ1r>of~G>9dovkiiLgGZPF4=&i$z21r4 z3#B@FUD+y-R?Kf^u%BLngTJ6S0pxnlvmf((&B$~;TC9hExWvvC03)GX{)vMA$-E!x zp+XJ0q?h>E31%yE~C(@ie7LB)sslg4+8kE&< zoVM`ad^it}<9t7|K*s(tX*}Vk!)R`N!f~X~hBHTv+8PJyOf%)H*=-t>Y1}3tq3-1k z0R-|(W?bH4yHk(QYX}-Pem>UaulaXu*_#Tx~iw&^Y&tnlYTzcuyla;X0e?E%n|ycIduzJ}&W60;n`WJQGH!0zDs!GBo@@ zwgZXj$1L44`WM)GGlUV)yx+aO32X@iO{KtrRKGB{No|x0SQ|i$iSpO81FxuB^*TF{ z`zIl{VKFdv@TUChe}u1@?B}9fykdp8j?>|XIBWh#(|P|jb-r)>dCp8iLQV*q5W)~p zKo7D7wWq9mseBX9-h@+o>l5#+8|%)P1bok1$h{lunI$s_l~uy zn$=8MWo@i7y6l-mA2lSL643PQH9% z-8cDz|0Yb@R$gpQ{HN+@3kV4{t$6sq90zs4<&HPWeOCu*JjLwnt_uB02cautL&a6IkD>>=+ny$U`_)LY zQKM?&GeLO|Y|!eKm$b-7BWcXxDKuW89be5CutaA#pv)LxdNF7+rQ?{jiv&v-9`SOX z5@5}Mt~y(CJl$=hsWrB6psD?rZlDacCKKvVORu+YDceg|q?wXQmy1SDvn<#Gv}MZ~ z=vDJ98Rbup8wVu;_Ha~5Wa$dhcmyJUlZO0uK7fmSxz&tm@9RgIE>1V+>>BS5dW zL(?zRuEpiA03Ot1!_%){eATb`ZMD8tQ<*bj&yX$|8T*>pz zuA42=L2TbnOP^2X?4XURyjW!V^$(~xLw=+xS{8RTzp-GKgC*@~lr#Qe`og>bRTBu> z%?-*F3&mDV&0!96&AwOBCn-#O+@#8F<1%SaKoc77`g1{9J{*ODYbuK^_WZBc9v%Cj-Ks0v1HB^r(2)=Jdo|St*S}lQ*A&`8V@qDk<|h? zJB~5+IXO#uP(U|y%|;$2gDZ4kwd|}z&67gRXPjXv|MyaLTI&fVs}w&w#11=CdWXO5o1oYyPsdYB`?+TunSY=ZX)^BR}# zRLaBBGB=0Ay!Bbw4s(NBu~~6(StE7ZLa&vIB&Y9tYcJBnH0$RHGqR%tANMr6w0adA zDCW98Wm)wBI`KC0dfHH~{~|X31$f=JtFTNiA}IRD*@pCNSYMu^&OUeU=@Df(*NaVJS`@Dr(d%Tu zSuX5yS>Ei~_-6rAsRugeprsqX%&0Jlt`fTrc#1m{KHE$dl$4Cm0hrdy(n<#l#00D0 zb=?n;67$w+rvO-b?HnnVNK4uU$3ng}rc;#dk4S#fCuuT!1hE^cE>8-~yt*Z$e1Fk< z#>~%y$LDYPRPx*Lv(e_3Nu%eFb%@A&I^uI*6mWi-V|l63OJ({n!Hh_2649GDKx=L{ zY-h8?_*V#~aM3uutPOwmLcj@8bPOwna9e>86#x#e%YtsaAwKSzFTQ^bXyr|XUfW8f zRr*HtV;XeT>2UcF^n6Ps{(I5v!$?FtOFX5L2&4*6QM#H5?6z+U-Bto0zXXcq^P#M# z-{fj*@m!OJ)h`k@)QPRAy9a-T?Be&?NzBDoEMdFg`zHqti8gba_y$QL=C!bk)qz>?p*G?v!4vIUl>pUTjP>v2dH+a60-hOb!!! zU)e{jP=3`&q~FGUZkmj738Dga3h=d|?Jrx2m#w( zT_~S!Cfkt6Z)hO?Vd1=ua@-r#|^*Fq$Z*Y$kG00=iD_PW4Cs1GCbp$OD*y9PXdfvT^ z%8q^7s{18$rNlTjEBe}uMbIJF{6Ky<6!X5GjAQmH%F|*b(`=}AaPlP?LyfNywuY7?8(q}Ergx!}Y7M42^AdRZlEet7s zcTOGOm{<)kf5g4W0!A&{FGa9tjJOe)v^~mOZsocjvVyV+!JaMGWV7v*(_uZ~4~|G9 zP4JG39*dF)*vzkCy!{U}wkk9XXmCpvlq%bQ@G(NG@%->nr3t{tVk?m*Zd!S&pVluT z!Y(QVU;Wu^>*$S#+D0CG+!xLc^lX^)?t0*HtM@pnBWTg030h_rw2#F>SCmy5V{Jq~ z$T_A*Crr{kqTEfNIVJ!{uaAIl&yVvYrLz;CsZw3DEcBfh`kz#__|R=bqx(JmMn9X; zi_l@GXXh%uHDq{v2AZUX(PY3=<4w}KwKBhi+H<8HChTuT1FEkNgSgKrPm=O`iMU!( z6K#hRp7oMpRT(S&PVl-Oy~Mwhb9A(k6Dtf@K(UfLjN3`Lh zeDJz_Zraj-tfjuB_vd{??REKmoBX~N+^iweS+|uHPX3=ONcWYTFySVcbUhQ27PzT_ zHt@2uF+hhQjfo~L1ZyEC3rO3ikk8Rwmp|`lcp1RbGJ(_-KHFa2n+mQsLL})tTAZe{ zP@YF;>z|g7u@*R^PBAm`ZAEk9^hqV)&~I)9CFDcvgdT#1tlopg{u=~63oqqK_+ngyt}V`DflhM_MIqn?DrFYSzzEzpx0+cY$5=27ai;jrBY z>)aS}>;eo0-=)KXkAYsx(@q9dr9n99d4|VVK5>r7b1Y9b)q}O9op5J~ay#u{!cYG( zC9RQ+WbkiNeM!5H7bAXJ<^8Q{{AvayuuyH7kZmIhg$3yh8MqCtXOI@$kpO#oI#Alc zXHVU)TO(^NFq~U(xq>W!>`t1X^uWuGm}lDAY2hx<>sKxI&JtbH7$Md6cGnp&p>>2o z{aLsj=j_P&;-0+ zCV%wSi`J+Dqf0VhY*r~|m~nr75^BUzzerwgfsvJfx-uCbUs%O}9i3<_E0b`**|L1z zYizb1ld?3LME>39MaOS(EZCO+10yl9LPfc|IfHu4?FlY9582?{x-O?l78!$-b*jLu#oVx zmm-;g3&Qr?o`yI~S+?;LEEBlt#e=;X^>js!usZQYsV`e1E2bTIUt>``VjD1a{6skZ zT)6~~XWV^I&OAUlm22;CwDCsLJ8Z|kv4VUK}l#yj3F))WD- z(RsvU^K*}t6-2Iq$hVBiwC)HuqkWrRwi6=jlAnQ=FwVuu&!L}HClqxTlM`8!n@t{( zrT2@!}7@sG0L{>&+#2| zuQ>^uKnViKpAbEoINq-I28b+`cJe)0|6{c--Jm{%o=yKiX z$!YXTJuL}b0V)CuKd1lN3M&|=z0ASeP8jwVHS-TxW0CJ%>{hQ|bRvWJ(oaz}ystPy zJ?e_S@6lemfR5*Yzep)~!rA_X)Ba7YL79t?u6$$?4=H`cMC=Q>onp9mJu88~(}#B} z>6PyW1c3J8!GL2n-rM9BVuu%t@!`#32!!m%lOJR5H-O@y756X^9_`o^26T>Db8d-S z9*0M+!Ig;CVkO3%aD6CrZp>5oS#ZkEF;k%gb@s|$Dh%cz^q2@7rXH4DPMJ9Q?w|1!p4c<|xgzyV+ z@%Q=Y4&lnutDX|RIv9Q&;(9o(Ei7d7r^V{I|6Mb1^?7W@J@Brmh)3G=QOz@&}#```0oOpeLl<*PGcE|;x994O#KtqImU~_(2Q|yDdG&Txp zI|!(w&|}jkXBq6rDy)?KQLU_3fJi|c&-&RrRvg6DmYqrqTAJzYN0YoQVFM?qI{k=; z%n+?ZA#u|?W5vnk)l*~pE1k68JaUqgj&gH#02UgjsL>5ceuUvZ* zRCp%cGrtG!O}lABq!8~Qj$JkYoJ4dlg2_58$pT{av{Vo6mIMdWz9ayWEd7bBkjRAyTSI*vF+nFviOk;H#iO98)(eThbe!;c=* zE6JPTXZ*H0{nmssBY2`sHJ1ODvGMMVpTT_MtCa*rM^4z=Xr-$?`lTV2)qgDqEEL^2q z5z~Y%(L&9sk$cialN#d~=%yP1sdngOlh3e3&Ct)8 zI64O1FlSA7F&}ffl}D%Y>8NsXxPPft9B=ic~ys0tZ26{ZkYwpC}eYWoI zHGbvuF`wO^{Lumb!`(-soAB^O*TJGf8e;V zXIGy`JaPm`%u><>N6NsWoLws|yBC7V6NOuxbOYVDMzI0~OXz ze1Q4$XVGaq$o%ckZ^7)O<(PqYFqb=@@VG>d(Eoi(Og;X~ytVG3xhXK@e9*mM?~WT%%o{~9By4`eh+=E%AO zZ)YE!FHKbcbjqpv6A-f^7a0EgBSU%&f@(JBGL*R0=Y?Yq2~2Xea-tt6uTPvYBd?&o zFh4i1Fz@|BFrx?*ji6?+&~52XaZbsr{8v#j2N&F-&dVjHtW56Ux!S7|=GJF5BBeI8 z{?g@dtyivIyME*5t%gf8zP)qld(N+(o7r&SK;CyVX69w&ocZqi4=?|O7z*j>*}0j% zn1_;(Ts+qZ8@=OBKj`sb50b_x_{6z0f)xdVp80f!KLYN?;*w%y=7NqIy}``G)MlB( z$``kf=zHJ!U{tW7SS)?QX(*2grz`M&B^|8QULRfA{GKjkaCX-1mrrPw_pX23yPg~2 zZZg0x-*9a)r%iBpK=C^Y0ydRV{%pnxd8AoHGYJ^49ZG)aXRaa&)9o+kCj(^`3!Ng|RcXsTma~mgf62j%hRfTq z2T|shF+X=(Yi9;THPmG_RbDFFM{e91i!7rVZ#Z(}uAQ=O*Yjz4#Kt1sm0g4^%P{DL zJL_A$C2~WizDlrSQzi$n#jxU09we7tJd#0H*~9yYGNiQ1nG$R3iUSgAx{o{_o7e40GlRJyTA0`>;`P93V&8ir2=pN&Oz67 zq+E~!kx7(a_eF@lXQO)QwRIMb8mUV&CrcKVunk)LaB}Za4|i(@wz8J(!P z93<-q-Lx7PYaJ(@CT<4aThAO3FoU~&oR8sN;IC9&wT@$a@Ab;?8iZO%oN#_?lVg3p zZ>8jh z9C_YLC9wJwB}K5An5%~6KzRpGOR+WvXOd#KG=Z4TbKG~s+{uTdFwQavrH4y^M$WR> z9L{;V%;^kJ_2DX?sT;@pSi6i;=}WM;**M)35!D_1tsyMntEPnEZPE)E7fr1KZg~ z=x1yI9exM5K`^;^Shfo^IC?Too~$j(-6DD>AO)lcNmxVull(~Z3Q>?RAYfeg%7g8Yy=Bi&&m zYJ)}Mra+Uz(OIi%g)|A1aThspu#dPePSqgcw-V5HAdvv*aJ&Tb8g7ue+NkGGhj%dC zWPn*GOdK#`xT*gwXG4SfS&6c`P5Wn?iC7cdFZ1g$8Y~7myl$q#B}R#-q17?XjH9|O z+|$zF7^+`+D+l=OiOE>(p_in&r#S5nP$p~kP2-1@PaksvHk7USRSk;LERE5JOJ-Er z(#Z)rqf5edRi+M85In8s^pw-<#vc-%$`>z3yk-V{76$jFLS`!kwn>BBSH=JRv zMQ%&pFXe`n0g_hTNM|^HR&Vs+bbUTgfpJI1=))I-)BpD5TDy)KsSEnE2Rl`pJS<(R z?8+v|-g7`Q%_{r3C&iV6vUy>R&PK%!bxLr9@{K6Vi4BWSL)$q3k{fEM8DCBJDFm;i zi=ULQzOC>bbHZa``<3zAh8z7uGd&90FsDr>;zvV6&hsHEac62sHE(Gv=rK|=57N#$ zan>q(uhyCQk|_QV=q&x7b>nH|Dj>C4g4WSYCxn(L$`I>xuGs9{+3Q#~1T-=ZBtAkN zoXE8wYHx509hQd0f?R5Ps?1rZtg7W!tYI46FAD87fA^Q&Gf11m{iT_V5fuJDLi<>Z z%1O3fN1N4n#vLdPpttA|*qwOz@S?R(MXJYBz{L#5*=I=EGnS6i*r3~6$?o@VQ*oia zjujR_BF;pE&Aj-^PVQ*nv}oKWQYU}nCi*a~N5o-RS^A=M{+}>9M~AD0Daz2n_4DtY zlSaHwmDHI?f8-&>5Z7bq3pc0JFjHFgsbqPims~u8$vTZ1XGU<16?=9BXS}mGs!1wL z_LE8^nAzUK-4ezv+MBGrr&pDid0fK~IHnrGc-wT+d_8tw;OTJ%Co)U^!d=>}jR%c7 z5Yuf;eM@(1q1yLWJ)c^f{(Z*}iyJ-C1);8KddkP=#UAx}DZaXpeC&5d{G%i>SB*n$8t~;;xhUiP2&UF@yJ^{fZHu+43Uf9|$ zHvBPL)tC-|(-u4K)?tG|I-j%SE#K|EK5^ZU z+M3jFe6fy3apPkV+{*_emt9PA>HAxLnSg?3$?*bpdaS3cRK$MRD2-QJn$htnnBsr+ z$pdQl&=T-nWuqoRXmHN*#b`r6+@m*s`=wENYy<9dmxmJthre)h1s}~AZzclGy{kV6jo5XTGs>*FSd4y#B7lMLDF;6KEjcOPw(x@tJ%-vOP^Ew?Ak*yHtR-a{ zr|G;v)102rA(4-GpVg!@j)5ZhXn6YT&yfoj`+K1qa;Q$-Mr6lmIP++jUr^81uhNBi z@-&9%13JeS{>neMHWb_GI9=W}XT?R4SbP9T5tggcaN&w(&+059AEWRS$hWk0==PGC) zo<5gX>((@5Czy5WW#EddU^%1s-ac#G7j0i2NVV$bL^e387LsmeGQ&XZ(7UAbiFqdC z{G#-O80y3Q0S?*o2kZ zX>WbP%;&WB!)5h$c+hVdDo#Y;k9gY%x}7jP1L#T?A~>&4vnS3(-R}kE)>S$aEw{ib z0oeiR-Pft$KH5DGxSD7OJ`=ac{p!4=;}3Ve2$!)KZ6SkMiqHdz(P70vK|u@c8jVPU z@!uYt+Gj1OSkzD!i-%Zn^A z3#TQv4mJ`^Eb_u}!psbP&^@a}7S5Vxnjrm<&{+-&#%+1l{32c^7F zKqKT&LCHF;Soa$pKZMmzugzxh5O(`mJM_@OoyS3aB<*S2wp_o$V1{R7={FDNvih*u z2j@EWs1)z1g2fz)@#eGt4Z@B+LX5N0Z(E2lwmDi05t9wVfa;suuFK3&X3k6J2yYu4 zt;gpvRH=UFx<$m8!ih+{8Y^lVO>9LUTJ0dijle3-xAXX%bX!W#(I`$z3XzoH zm0GA>&6&$A5anuhHuY(io_BLmcsQsP;AF!T3Sej$bmjmQ@Von`sMphXg6LWA(zk{R zmgfO^GK|>Azi%S{cP-wJ#nrlG%nA~9Fi~vs5SvzsMXRE*2yt141v{A!9l>}cUCJ0N zL!`Af^2Gw>i1IYh;T_V^yTx(vLll%Q=@MBM>^r<+&f8T`LGp6xsN_rnQ#Yy z0G4(z5N98Z#GE%5FTCo%Wel;TeTO@M;#R`P38oy-8T$jXE?gB)34Ut57M zj~9zU|FNfRHIoJUpp*##qhj#MtLTUC9epr54V40kJLIb>$@gp_#vMd6TRPS@aiS@C zoqPNDEg!s#6GOfj62E-(#5YygtFARj!!5~2AZ(X%2CHV@4zua!SG(TF^fzg^Iuca1 zVrv+%sS5WM-tjhvvW8WYEriZO>O`kM!)Y%&DCglN|ERfcK&{)BrN@*u@-ugx%vSrm z+Hp$UJ4476%pzohD>|!4c&IXjdYHD8$j&W*3Ol8=Q02Dc%TWKD5;+q^u*@2UbUPP* z#@V>+6#hbZb)q4XF~hRHrW#$NaqE%Y4@Tcde-wWO^}e7{pE*KT z2U&riSu>U?t)3o$nEN#hf$20weCIXJf7l=&IxGL(4t;e>pjU46&|yqz8s_Kr3i(Lj zFQ(+k7w^3=li?y2Xb*hUFan$zZGaAX8*&y8P+kl#^kcs>tqo`kv=K+6u^fZva)j}< zU>R0t7w6<$o+uDXWnx}9M~|5`_~n7N;k)u2i*z9dlBUU&F+2QCF!U;zXeixjl23JS z|MkOO&g!LNwkMkt*V@x5E4sW zUt(bvGB@TjuBS^Z1PQ1M%fj}CuN)Pwjw%2buVpL#W-6>OCoYJ66?pPPFz*GvRtKV1 zVu!Nc`)(14J_i32fFZ$mX9Tv^{%+nI${Wxg7A)0H^Bi_*c(iJ*($}6BzKDMNAcl0l z1g5|jbb8hrC1=CrP_8_TP@FG zF;Bg3RJVM+MDe*t`>8F810wasBJ$eB(Oy>HAe-N%yYd&V7{y=;U9!Wz!tc!*Z=UWc zVQ>NBwo)&FzPA8V8*tf_?zCpIqdodZ0A?m<>M)s&_>q>CX_9wt-4;5Z z7+ElQ^!-`32}|dv2YKh;ek}!&24d5RC3zNQmg#-^x1jSUH8agcRlYFik|m09piD5y zG-HSu zJ#G^GB!adPYWK6Xf&4kQhT`8+16N(Tqu^Y?YkJ43TR#VCzCDV^ivXPxzqV|5 zwu7}=V#in}cQqFuvp$SI2|j)el*JB6WqXmMMumbyPv^Y;1dC=UPu*Tpz{7O(Es2+l zK9e?OX>He}2G{l`)zvRYLffuPrbMbK^Y~XU@so&eP|%LQ_8E0Sw}aggyh}&l`y{I zXG_xP3iwR!biF3|g zmG*ImdKbHM%c{%iYDY|KgXPw+TEiNHJz}kM24Sc%n3nvRg-v{qT|VcRSKZ<1^T|w+ z_|EpUUR;*>68NATl?BVojE^(Whj(2nXX(3-DBG1xdI#R`xHvTeC2MhK^6cP-l^-4tGb9MuHXx*1(;vPmAu+GG2Am$9V>3Ftmd!?B*63Z z_K#p>A$;&=T!9;yR_A+iI-bb)hnhdA7k}OO1b4I+wS2-JxOs}2KLQ`mrze5L5cBd} zw&DzThp`3Edqw%0uO_P@YJxf|KK-?YTytj9I44=5lMEFM#6Lq+e;8qzQFo;_&4dRs z#P2PS^JUWOzcn5Z2H$)rufEeTF{x-BeU1 z|5w#;7J&(M`L^)A{f$^+z-i-jTdy&id@Sj}gZdgAYyCVst8ABARbFxc1#X?6Kx009pgrqHfQ{}7D*N#~`c`Q2|y zEc*mELY64p+x)O~WJmF-8n5-LwSC?bg3>fF0fwJZP$P2=+yur0u`OnoA zPU&m|6;Nm9G*Z!&>CQ5|QM>H;6%|R8+QPJT*Gt4Rp7!t=nwQ5dBsJ|e#O32^^*}2P zus3)}G+e7!`EonJ@#99LR#(>{dP-j1bCn0{OqDRr%hW4Tu@;3lb&*SvR9jUj_8w}b zwD^$mk%qM888u#Mh6afu$KE>i6g2(lvjWNL>rXA}9{H@YP$F_*v9E0hy@s%H%I0-H z`GTxYWPde0J3>cOIXc87>&R|&s5WtgI{P~6<{b5(6Z=$u##J<_@^mFlT?)d0%~hQ4 z628Pbf}5ak&y`f_pLJZ{rh(z$A6nK{x}V=Ou$!OlUH0w_0u+G~qz`uveOTwjSwx>z z`pv#}cbT6k3-7e_I|jJ(qQYPEw3b$U*(In!=@rr2C#_=gsH4Rt&7O)T9kSh6Qe3JH z4T;y2K}4`LfE{e2CiK!MjEDc%@KwSLdxQINeM>{o2g834yJpoktC%0P6(zn7@#p(O zb{kUs*5nM=9Ic=uH_w%n&5j%u2x~ptXOX1Q~g4Ri3rhcuLYLRj{{wNifCMZ0HGHA~wnA+k?INTPy=bi-T28>Er+CP%;Ku1qZ zKq@TLD=i=L`<_Sz|J$AJGvciA1G*~4ELM5GY-mB7itMQ{>T}%${tfc}+A&FhuEFzq z*IWmaK;*Kxs>e*P6*$HCLCnw6n&!s{l2X3O+3C}OR0gO}-T;cew5$gwGI+Vl)~i_e zix{((YlzRvX8gL->7-!PTIC=3BJM2FZO_u`Boi}h)8z{T1$oclbiZN|4`jE_FjyKt zW0K_$tZ-CtufhpwgpnvtRV~&~vC!LQM*MNou6EijGyVz*UF32D zds6+2%tj?=QXrBsdZioxH{0gwzopT83=dpH9b7P4&}7Haqb~Y_zlEn>*VjV_jfjmp zCLVokYf19dBaJ0hl7Qy*1VQ=Xc3flUVEk#l?2bb8`JKUoG^zA1Pvd8{%n#fn^=O7@ zbbDYneq5>t@!Y1mZt%gFXOfA~jycZE0Pe>Hi~@3su^&-HUiKnawORlOL5Qtmh)AkWuo7zA zI^E?6w1bf1^uUVyY3!1xZ!S1Sih@fAaBywE8uE0yd?xeI#rvNA*wojwf;W?lM=w#z zVIlkNN+12Ej`K1Y_UF0A6&w3%7sI#vuGedAZ9iyk<% zGYv-*1!_j^up;AWQ}FeCb<%6&%XSkn`Jx#TD^tiB7oKl=GV;?@&y<#N);S#?fBM$! zOiS9~WrxVB{|w_hU3#^FmIj@rcbu|Y)U?;OQpa~50>v-jO-`uwJm(mTUQHQ4Mak7F zcl;@ON860M!XP=uf|EJBa@U_8c9eDZ{^6&aYG10uH#J(c`PNqHVPBYbVR`srj+j97 z?o*U1nLwZwiOwuopQS18*|V`x4g!2+K7`q! z^78(=tiD0~s_;Px)QD+cMJ)g!)OYcnx{ zqaAE`u7Pwjk)dXC25RN7;+`BB)FDC56EhL%7A*QWhVYR)46B-7;CmNIIiC1t6fz0t zYl}wOT3%Opr>KYQvib}MVAlLKOhj-M*>-J#i7eo-KxCxQL0=0!!6H@JLYM0k<&4e= z8|`M0%j_!N%B~ccHGr%z6H}}N&C)WF3Np~|XJDQN@b?XOEsFgyy4^)T0#bz2&6Chk0-*xQaO4nZ$sVyW^AWpxEs7 z&A!^C=d>5XK3It=(-aA6u0KjuiHj;(T3Ru$tv7v)sUG#wh{VmF{Uk9h5Cb4B7G@{rT`4FQ!A`+f9Bew z#G1w>YiA!+e9tdeu*6J1`2bIbn{aniNuJs3uS$n?7&xXwQD^r*S51J{S0KDNbsxH_?vys8sJ%uSS#YyHs?2w@l-y}0njUSm_bJ`H_w^x zhL5$4U|XY8#%&{zuoLIf+8Vp((YeO&{bgSm94=C2c@l^Fu4Eqam`$7h$<2fa7EiWd z-dr+b38-9XM8ONO&`u!Vo5jqQ_94q?2fMS<0_sf2oax~V$RBPf1B7Mm$3R0kNbIjR z!~hq@d}AwoF$%nO9C@w4xJ)|LSyjn_lHYMPAS*dIKXc~1WSx^0XIS)2V-6lA=CS0Q zg>Vr^)f*^3y6Af~IhOH1_Q+AoxqK$Ug3TSPd1mIV?G@}=rFFc*zvJjDEb|IwdIEn1 zOaC>)uH4j&~IF7A1*w6l$J;YT24iMcn}z42y^IWUlFb zg&nTYO|KEd&c|Za+{S9Lb;qdLXST<^3U7G?Y0@5&v99he`E^sg0*};WAUF*ZGztR zqI(v&GX;yFp%dQ}V<3CEyn4%#Wg=c~L8Uq+wF^8r@VU1Y&p80rUZE~egNO)IC1AMD zYvMxT{o$mHSUhj^JVBuNMGYdZnV>Xi<5XtrbaoWH6Wc1e{#MFPyXQ?S=`pzE&tRjd;9nUd-K`bo1wh z4P$6VpP{@vw?>aG9iY;6m|uW%#KUbF0%5iV$;JTbc3^#OayKthv3Q|Cz9ZSdv)B*V}5 zMqLU9_r}1P@Ng?!b*%~e>-6Ri(z=~axl8Q} zeV?z-yaobHvx8>?Qx`T%N3M)qG?jJhD^`8pKu@a(AA5p+xnOU(MP)E8t~AdQ*M$N-X+&jU%`^iq)$()jI#&@!9 zK@3Fh!i#Uf#J%uU#9QqDyva$}d#UpG`cIzi@)-iD*^GMa)wV)?xSE+AH9$$-r!o4u zt8czHP(hyRB?iRQ%4QGFUFPNIv-s`kU#xo7Dq9yL^LQ}B zY}~7u1cJ<@4|*@m&DpwhH>lCa7*g4{kvdBxKOpvG(ar`uf+su7x?5|H`&pXrkCq;_ z%Q(~JhBx0Gs=0Z(?@7BJ*jb7*v!ssSTjO5NTInecDJGAHr) zhPC*EO1$3w)=x(f4S8396-7f}MhUhQ5aWW_zpuqu?O=`hN@zE{jV?B!ML*MHC-hR) zHY^5N-9dNk!ZOHdSM`HmiWjKaB`cVzlUUc{%<+LY-4Pv}w?lh{{6DHu^_B90%~b|; z9pT6*fliO1d2vCx36i!$d3kel3k!om^gD;@W)bes^r=TTud3$1&io&cTDOP(w4k#A z_^YQlgEgzIYZ1)kTR)Y*Zl&rBxO1>j$-xS<(lorfPQ2j!^2Zx{=cQhSNQq~=@p;eb zb}w=wcMdV~IglD^APdk{QWvXtD|_RfG+TlpLQGiQu&l7GG6SUtP!hl9AEo<2B8$gLjN!niDM`sW4* z*A)2uS&TEof7C>qEjHYOp)1e_XQ^`sK|oj1h6Z_9=&X3`-tX&znsQ_VQyetEzvWm+ zKk7W%l`c&;;2U%+Yxs)>5%|Q@|Iq^kf?OsRJ-npev@$vu9m32@DAbW^hksi^R9e0{ z13$I(49SeZv_W^RkbmyL4}ohiDhazioA%|fv3%~Hs{o(*A4XhUVLy#DOr`DfuLh~_ zEbPZ0VI{3C7JGBgsveJJDbm->s#rx)*uQQ)g zV=MT?rHg=f3BB4nPXZ=a+Ld4Sy`A=Q@n6phtQ0_H|{AO$}6pg7gfgDlpks zuBaWuy2=9my{gy7<@SxutWN<6Ng#>6uyj~4G4{XrHsQf}Drl8)PQMImVR^AtQ z$2mXHBkh%d%;XcH&($pgs@HjT{Ej{?UqRJ7YB783CS#JrBT4M_BltU{SKuRSKbMLT z?~mb_=lgOM66!u{xHc@p_|+6&Y)WoubB~!A+O1on&o$8^s^ojC@*&wE~;Toy_w9j z5^POIB-5zOE!~{u>WcDzobs=@EtmZ6vXyPnW2mGr)sy8gWvY6|2Jm-xrMG+-onjHO}S_Zw>TDv%cd&_XnOZLbr`uP1H zO=lj}#PzuSJ6k3p37I4W!kP)YYz6^Yl}T7t#6ST7sRl%gf*LjfMVSBsD%Ak)+8S^v zwk~nEi~S~miq+Pj)M~YDv{r3v+i0!T)|TJxd(Qhmhr^O&?tPZe<7hPcl88FR8Lcw| zPxT%ZDRMTeQ(QJ&(5Cpv@Ag3OLXrvaN?^SeSDd5Tfb!Nsj7pm@gLaWapk%uP%T3EX zv2(`(LHg4fgc#<1J;nY;lAxbI#kozeGN>SjZ3e>U6QJQ&o0X;B4R^m@$aQ|5V}WEz zVy0;NT_xD-5o`lkQuGoN56y(&-^9_M(!EGKMB93vQ+I-&UBx)2w-`EWn{APXCB!WQ z=|dK>?A})}a8$MIR4ju}`LYL!%;i)of(W!0*Wl>43{I{Oa?}KNxSvG0{=n1c%IzEr z#vk#z1o*UG<`tD%O1S2@jBS#^bW)d8A^;b1Tuw!H)?th>)itaxy zv)hp%;~S)=N_n9-{rFxVFKgfr>LJ1Px$W+Eb%bf3t0Kfmio#gD7!bjO`=@0zIojy` zoY?yfT&+$m9W7EG2_4LakGEvzV$6@HjI zYnQX6P5PY09V#pOP{%sC*qu`bfy=*7S>9vie3|X5UsgFf65F9v@R~(weXGKDj5|X= z@x7ozg}HSxxbjv?Yl5RgJaRz@zhj}Zsndzp3FVJdc>8Uw`_G$1^B!ZIXa`8V)lY=e z7RB>thLSh!beW@rat5Twmix4cYgM$`+LGmCd4etrw*%^%hlOavj|k?(0tnnpNR%2x zt@bwGb9BTqU?7u>?3O&}V8jarpB2Q@5hfjPN6Ia@0^jpC6X|rW4G&=qNmM5w3R_`b zzf%)2TjXj6T<0Pel+p}(%r zYBw@scXAtrAYo&>w9YaI8MQbq1*DS$Mt4U$@rfxW)|Pn$P+jPwh=ntGsaDdLJCq~{ z=@KuWytZ2v;Q22kki5PpG$oE5Ezz;E@lsSMxBjA^)alv99W2szoP0MJO)F80H|QY% z0D>sHEo5q!LF`W%-NCi@)&U~P_9cKG@8oc^1-I)Dwi|s}Co#}0zrb^0LOLCoV9Y|R~3x5BS~*J;?G{tNm{fYVN@Z)nm^jA1y&-)GLC*tfe6A5 zlI(31ZETZr*%CaawGN(U6N94=C!59NYi0oA7-Hh$7_va$#`(k`A}w&Z&1P7>6B3DD zf_MKL;VOi?V~hpacDprx#Co;T1UTE)pZT$nKE^Y?y~J)}6Y{EsuE9eMf=4LQe1+?J zVu&bY&{%;zzLI)?lw;(J0tDm_w)VLh{icSQkU*AQ>E~cwCbsrC7e74yMlXej+bl%X zOSm4#v{iS}KFbeiHe3F>@xjpp3;iP6i*La;mgSyj>FYM6c*%I1sx5rLjAq+ataJ~yOfww>@}E=zpp8z)| zF&F)s9n;v>fXo^&K47WvI73j65e%;|kSdmRI(+Yc*vl;9z8Mxi+jwf~yPsDvZDpVQ zD5`qQ5L=)Zqt!V}->C`uR7&{o(24vejfvf812UU&*0XN519CqV0t09vkFZsx=(+7k zJTpOt?VFjdCwNHmmfpaf0ZE;f)Kr28w@Q+A1f!C0XyB@;yh3vW8SMi@(uW#n*v85? z`oN88w-*M14rwsEdl+&31woN+W}ppAr|?287NM_+XD|_yj~Sv=3Q&OJ5naqY5b2bQ6)&o|<*dWY)KP#xM( zSDfy@vcbYx6&I4Mb@n$Z-j_L_t>I?s{eiY+iV}&S&}as;UPt=vSfHNtv|+<1!2MIT z{tmju#Cd!?>5~gf2fqZtD+Bs^2{k-681Y}$;jvROwQVA>>KUk^$T|zGO0Q|MM{@xw zHY3-^&>nRZPbYJwfUUgggM$lNbYhVsbzwd6=^vzh$nR{R(-&>}84k|T2N1tdFEj(; zP<);duX_$l&UKaA$#VPT8m;>q`~RDUnxi7?^;nD^3$(?pq+#+En^IcimXp?8TmBi2 z!K-12C94s5wZJ?liv{cEtVoyT7JypX{iO+6d?t2j42G@e4X5Yz<>CqpCOd@ZOBFp* zQli734;R1tA0P?YaL?6)4uhe<)Oc754V&JNK$Urg9zA`sjj~}A6`>DqOkJ6(Oc1eN?J1_}_NV~si zBm=KSO_*DQ_MeAM3I@y5?oLIW+|s%6i_mroli9EcDyWTFqG0Gr84Lf=`S0dUZ&!1Z z?dYe61eqotFqV`P_>LLN7(0HFiw~7=igm?3ZBv_ocH}GqRrXc(MWlXW@ha^~Tt^}h z;A`3vnv)ttq1s2B$&cDv*jaTnSGS(~732}k?fS5H0N(Qy44(EFO=hqaMM%wiIAOwX zSjqWOC}Lhb2XIOpAZ$2s*APj7d9jwjga;gr6!H(7UCnr@g($U?!4A_8?TE^Ot~KLO zsN>pHoP#9MN!D6OO=Ox23mVPn#U*GJJ4<8(fEKvvi9+~#nM!K4Yoz&L+?VtN?> zfC0StDXBpw;0{8ou*pZGOmI`H5kO=5lbE9FYBmXbPAkI=-lB9Ik%)yvg8cL z`$`=f>+H^8Epzdy0Vs^?rkqeetK~)lT+N7b{RL^d^rFWHk=)i#i|`{~g1ii8UtRFA zqGK;M2p>gpFFgN1n&EHXw{AV%I(IuhMcp+o6C!oy)#>NK(7Eg;c>U_#ST@7xAV;N` zNvFK;9yCM6eR+FI3#^jn6H&IN&Qa3aPAgT&c`3S|MmPRWrkP8!ZO1#lSMFztJR0RI z1y7jdEcS!(be|{_VtZZ|{9iO0f$T8Yh^=fWhoSiEbE8suhzJnPmKG-qCUTH93nxIN zaY_u0l*GU9zrp`)#%Vz7<0K}Wk5f_l>ID1xL^GzlfmfO_<$+032JtZylK@885B_r! zg;Hm&j%+W@aNaL*F;BL3%?MTi29gyu0k6i8G*!VW|Me}9`A%0de<zYQJP)VtR% zaPlwU=?R!G8MZUqgZh;p3>ie_C7DrX6l!uq!__b?yj> zGAe#$BBB`n*5hWS&i@!k{&ZO`es@(;)u1|Nyokz%JHq{)8lRwV+d=L$> zaegx(avQn~)HhNMF1p;W50JBsGv3r8EoKCA3gS+8{qZsP67zmemcRFvWp)Z}B}DPI zx(0wm=8)O^9ul5{ye9C9=X`b}cvYGbt4H7DppMuaxNtYwfzP}{y4vL%pCI8Z*m33R zEVicmSrrAbQfB4jU@#{zgUy5+rAKv#Scu=V39x`76C(ox~}W!K?0}vdrnz zhFn{J@V$Hoqb$JLHj)}};fhIU(q1fLK82C=18MknWeP-~c+zM#gL&#P$n50k@x?^b z|Nd(4nUWlN4lUf>?`xUz$y3rDO9pnKzbYc-K}M0C?%z4Ie+bBoQL*~cK+8naJ#}JY zUF~(J;l)DD*~NiHthAr*Fy-$q-j2POw!d90^0^DDj9-0LME+_6aO(3DnRuz2e|fT5O)H^lZ*w zW8m(`U?c~fV?soyIdK58d`OV?w!Fms-{0bi)LgWm6G4@QF2H_y=$|e&dz2h_@nLh~hPe z`KYUX<7_VvUkjdK?DsP+;$0uyqYiImc|jxsEyQ>FNun5;B_*rv(OL(5K$0oO(7s$Q z4{<6p4oss9pKqX+R&MgO&B&(FFel{TQ)ED=d^~SwN-vy|3z%C%oH+39YyP|Uzh2(L zpr5`Xl_ty%KD%N;Pd!GbIBoVz$*8(MQ|X(u4#OSpxV!2&aA4o(@B#&&1iAgE&=#7A zC^I6|$7j=p@7D?5^8Rr*QOvXMRhvHe$|Nk%UrIJ>io$?Dg&pfyTK)<4GVX0pukG9nEXdM7oZ=~ixD%Tw~)38gclXuW2j4!N7@rba zh|=6L`}O_wi_{BLy=|t13QGSRtTZF3^$$MyNtoe47Q2GE7HY3<_pZ;`w?I{Msjz}t7?ir>Ygjg+vt%@wX4&xXt{-1TRHAI*zV`pI(b+#j)Q7<2Q>3WnPv{Hk z6-U2qeA4IcoVs~M#811K-JPc|IG>rJ&D```&^O!x(`{!lcH;4h$G>+yPdOX>eVmIK zOR)^h2KM($(=gZti}i*v)i*HrVFS!Ba%YvynarQ&U!xVGP`aIPYw79jF>dbb-MVd8 zSW8ak^qAEY#jkZ;DH5Q*jBjj|(7O@GoMK~9bj5O9<%1K|t9aq1^WuE?)Urx4IK(GT z6%u!;bZz)5g1Zu*rGkTHa&GlJ zN?z*6?8CeSD#2F0P&d*l6m7}x(wSPPC(+=HIc3TwNpSP8uh**|Y~Gr@M^*n91PyHU z@c;KNJ2En=5J#20MjV$e2@_hTIzFsvyVyzjN2D5D-pI|$E*N;dQ;p8rlphpPsBRtE zus&At*AJG~1H){X@L!cZXJKZ~k%&dtEX=1axM`p9uk-mwgb_EOnX^Z0Y($a#8 z-!(~14AYg3v z)Oo#f-`2NrX;49zF0=LXc4B!*Qe%{1AIItQCoXcEVdQO(g84NYiVg)zJv95u5zRv7 zZdpPqcQ9oL=OqModsPp$N*CQCJ?X#9o;?{nL-A$JplL`_8)ma&audTU;s(L6 zbY8nPZEB#zHneNSaPi3FM*w-mW`^_2=N#}ooFu`hiJML$pG(iYDm!H_+vp? zkISJ8itKWvPrKm!(+p9hVC;$F$aB^BEJb-<8~@yFKF??@f7*up=U9Yom10B=jgElaDV6pG3HSM8cmP7s~c=rf-zhDe_ZsRVw^F`91Pin9I{BQrdg6XfTx0m&fmf)*m%xaRS z6zrMhJ>z~)hHCj;k4spim!1LD!89sq_>c*oo%vPjZ3PxOx^^%J{w{YMZO?o%x=k`P(U zvSh_{B_W^0K24Q3hXE3w_Q~-S5c*H^Wp*9d2T$LdJnm&rhr@8C2poL_!;)ivA73}IK~AxdIrfQp?bJ#w1=6H< z{{miBJLZU+A)7#s@D#VUK-H6->SA$LF>3zI1D%M)ibr%I5z{RkBKjD*oW;C+;P<$y zE?jOL=80^fg2&d%RZy&&dfJc-$3u29U+`BYl4~Br&Wy#e6jX&CXD(vn$ zd>R+NAXROj5<(_*{g8MQ(`kF6CUeZFtC4Q?TSTK5-3_RZ#Xq=?<|!BYo)cW`+Wz?0 zK9k@;@Wl6c{L-|{!rPxsh&tf=Wc;2pTKFz5aInHWkoeyY8fxo~tFY%&+*Yp3r)ENu1B(d)iCw27bV7?vD$VTEBjQpUFWm}qtv z<-ElRhN9kKrST4iS6z{Y&3|?9%{9)bpfS7RmI{@?M8LdEhEsDJ6}|qESjlBL%h#j2 zKM-PGT!+)c*ksDKg1@G)b%#pVnRB6EF+9K!c5SDuSrDA;P`hU9JGn_g&L8{2*vbTJ zXv0~wfwu0G*R(Dx+po|Q^VFziPMeD^507VkGUoy%&LW#kGpo94+#>awPyvg%Y=OCS z6&(@7^FOUolff?bMH`#e2R*7-|HqSi*osCN{H0oBfffI|8^ce{oFzGIAj*$x&VKR2 z^DAbEcV)dHslwJK8aD;zE1kdw>W@KjPd(fuI=q1uR&y0VVUa&e}m6U+E?5)>iHV>A7i<8a#7^5WvvHg8~^QhVyJ_m zd4Fu-_^X9WUk-~;4d6d6j&rWggu!lehtEP&HaFb*bHUu!)=w?ye@K2*dpt}-r!7|Mo?hGI8zOvc?a9w zw_{z{Rfst;Sz{peQK_1^Uu5_`RTek4p#*11s>{OhswaZZnX=sW8N{re>j5el?fhO^cRsC&F<-C(xT9NLI@@Iy1ondA2%%J%MItg0ft|^0LOE1Xn6b&ZrzlsPvqAc z8;`6zb<>fy$zN*OgzHI6uERWx4=|3cqdmjotT(2-7YsjguhKlI{s>d`ZZy@O=`{;I zm!;Z~Jkt106nEbixnmJWV|Sh=M_bpFrB!_15j-09r>KI#5TlL|T4qqcqAZ`efya-k zF&cFK^12n!anD>|)5IjpV`Akhb=(jYmZ)z#I_=#y{thD^sCqJx*oMoF+TD#-xUgGY?lvlxwfrz$$x-1j$|7mB>KRlMQI~yn->PSdg!Lw!qCs>0^J|!ZL zxt-tiy^WJ7XiIHmQ}9-R`;FU$&t5W|1k0q{{>`A0I}Es{&h(w&NrcLP|NC?Q!Y1yj z+Q&i3U5`R>;}-{;=BGRl-qQE=#q`j8a!3*ANdGanR}?30^ZH>0!VtBCc%&!Vg%07$etQ9!j1!$0G8!KAX7lhsAa~74$iq+WT^%9 zk)lB~fXOUazkhK7tS}=SOZdFw^pj`p+Q+de8ka~%urLx4*s%MpP+yRge~-atWfX;q z&9iVjQTmJ@NBP~Ok`GKFVXgRU280;FtsLNDA@vq+{8((Uc%~-9rMU-xeI1KeVO2VG z85bG5$MJL^wJ(7%dLyjrR@sn!3lqX^=)M!2;~mJ~>((tdd4Kv=C6A_P-Re?`vxatF zOQ(Ep<^)J40$=r!)lh-3d3q61LyaVxi5wpEz2gW9cc6q3aX-ObZ2@94s8Io*T7e5-b*Z4joG^e5R__>(7~zF>mp1m zSJ==N2l%$NG5!Xxn8G6&EKQ3q+Ct2wvW*P(nHo)Fy2F(j1*E5uA|e^|e1Fc=5qZUM z<8VwLtSkG1m8YJgq^`S}LVF)`2osWE#Gez$x-GF{c50Z#jXzYK)wsRUedZoZkAlK{ zIzpP|h;t5kXPo1Xpv^|))D+~{I4Dq+`Yl9l7qF1Aa5FW5D~y;Y3}IfxuSzi68L~Ik z=^vw$m`32WacgP&oZGunOT&S#u`&~nF*$o%0EB1C%iQv{#IALC6qL>_SR?Qy^%}Wj zGnCwDu;$|vb7yZQe`*7BYr*U(h%=iZv~%;f^S&cIQA`p9|B=#V^V2=ei0?=k3z^w?}P<>|yf>5U*Pjt=(;$f*salUmOQw zZKgyE@&|msR+7t9f)ECYG3E!UkP|03!BUtyeJfX6UTQv30udFOHLJ{X!&z+K4ODIu z3t2piiiDT|watsK1&@E{zq>HmPetmD$s9ddXC~_y@8i43GmELi>0x(r0#*X_+*wE& zIeCha&;JrE#?0Ha{>?o^0pp_7g?}C>7wHmO?8Ii>R0WJM4x~x-ey9VK(RJ~Llx+-g zH5c!G1DD(iD>mQ-(c#8t;WtmHwlC$K`(uI}>6E$AbxWm0EIC`K#hrc*K3s$Ko+_77 zm3&<=kM@;0>O72CW{)HV;pNdS-z+(FZuiI9OqYv)BIkab`CANHM*|5cc6S7K=aRSI z2b2*@h2A2&h_s>eO+ZoL{*IZP_L-B$ZObWl?8o(_Oogg0&rUn#m*a;0{ZpTGvCt#hxRLce|)1I7XL<20uT07b15JL8@iw;Tu13%maUma^v9Wj?i-7TP4 zg*DK8t~Nog3Yp+yKhGsS;OB}QS;3I*?6$ARLccbNVDaFp`7~TzD}la;&-X`(X6~fVH7*6J?eAE^CS8b3?Ma1|2FSc2Z29s1SWNBAIb7acoAkn4Qkcih z@~`9P))%X*lNN^Gtw%YmPw{?Pv$CZN=`N{XDmA~i^tpTnz`gDu0p-Z{>&X|nc$j_t zDPKgB;v!VZ$ia`tySMuk#YM3Gvu+~u3X3~+MrRwAOyOVE&Mrwp&-^v9U!lKfcJ5y5niIq17pQ!O}Y{CA;=h62Om(b-`NYaH$ksE;@ySMcxPAogG-q_S+ zAy=}9r;+^5jIZp(axH}Lqrhtrv$}8+|;r+H|UW*-Fnuf+$B*`=gGGfhkLJRTyW~_okAjX<{ z`vkV8mWUaPz4}Ztmm%WCBcu*l^6V`{59R<2)^8^1LHSg)hDlz-0I?qZQS6grrjM4) zmw)f^z*@xDpnvm`;B9d&Kon?0VrlfNaisSp=glyZr@9#InEQ7$DP|Dr9lqEY$^+P1 zlYaO8T@-QR8 zX-<)snpVZU)l5}BiSu3i=jM)!M|b;?92K(D+EaMRZ|(Akw6L=OcaSe2#J3BjU#K6ci_!$1*-KL zKzdq!_|$W`1b|FC52B?$yZ?*7rMr?t%xBIv(DQ!gMU}VV&$rY~x(Ol$h<2W0eo&L> zX2AJ0>}UTBx+J^x4++1&;D1=ea~g>qK(rP(X2FGv18;1F#0fNtA{4JLWEa%Gc}pXbt@CT~k@Kb>?=z2W{J1Chn|sF&Z0T6`Emq~g z>T6x=DMjY7(7$XP%;LA))V++>Y(70(#!Lvqwa5qOgwxW5M=>m<6~4Prm5uCM{+~;0 ztpPAlRN4L0$!K!n6Xa{{z7U#dGLaX9$=y>&^uW8uXna5JV$jg)Th;yV50Zm#B#Wa{ z?re7^@pZw=RcWmuNzbAg6A@v#tNR_CNgSe^=4m3a=K&EC3ZMQHxb)obI~2^Y+;%gL ze$g7e)As4<$nVq?{zVm`wnY?+McryF0dQ05Ynr8=9)3>w`7u(de@=F!Otfr;Q0OmB zC{WiUvXz2JPP0TH3V&Z;p@2$D z`yXE*srPFsE^5gXwoGvJ^R?3=g$gG<8kH3_eR^_2R16w~Mudhs)uBvQ*7T?#zn_eS z$ODnlJ#F#J;+KzxLP5*>^8PVqLAN6N?(u=3``3(Ig)8KCGS+uQksDqkx*tSuCx?4) zcy&^vX$P3Zq|{ljZ4X*F#6FdF&cbOPyvCj6TiCY)#Hyta<+Q(Iw51Y}->P)rT3|uJcExFKD0`< zMchuR9af|Y3u?Skr8p?R&L<=9)q~9LW=|}^LI%T?Hi#XLR0QQ zyjI|Js&lpN?3F%k`lKJW{D^NWpRfVr7taQ<`Kg!lg z-G9^%i(B+l4)JRZ^0s8ZI6DXbB4VY+z8Hml=MvSFz+5D|I&1DfsXc zgU?EV8Nfhu@Xw*n>gTzFWdS+EWJ@Y-^>LF=M56ezI$ImB{5&2a36JcTLBMFPkEG5+ z`Ad7*k@j_SljTV1k(SJvHw*9ls=2RFJKP9KW;p`pF@*>&Oi`%|#lBhgIh5eAZY1i) zN;6v~u2M1lnmlW|3kqU2E)Rlt58seJ2UcGG!=r!y`pKPvd`ZOXNOe@p)myo<@(U61 z>ISYcP3@eJdO_&nrMiSUo2|eF3x?US)&4b!FiGsNk{2R!Q>ln%{ac)%OiKs%?MiW) z?8QXRlBuQn|6CHM0gZTmE9I|3cvlkN5T2lj=UlsJnhH$mV9&Te`9>PgwLJex${p0%GZr^fBW$mcj2;g3+Y4haRJ7jxwa~d2TJO_(V?frx|m+|@9;$D8& z3Q{oShQ!QD&83J;#SpLSqvbFAMUyM6{F`j&RNNx0wY7OASbX=vnJZVVT5-nm4mZyv ztTZ#|(uJK5T})Htqir=@U1v-xM^vfZL>M0$uEQUl2xhSw6XG#=D0f|D8df}|@AwGI z<97j6z6Co`y=3;%noKHe>kHE3n05K@5w~nHth$i@PYiZ!#z zqo)zcV++3F_`x%@p|WAp=zUk;j%|QdyFXTQBFFju6;6Pd@ly;lqWIS#+Os~UqzG;) z3Y+cg?id--6bFc->||79n`Z*(Y&xxUD%xQHI@eB0u12TdlDG&=7l@PTeGO3c(s8Eb4b*2g}&MvjVAHw(I?|zdc zd$jGI!86g&QAXHpZx1UsI7OV=GI>`>C@^+-d71pF4>=nD2I$BPaeD z`;K~ZOya?{tXZM@R&ne4b;lZdY5Ge>m`bzU#8)Kh81VFQ6bS3G@yo0Av-CTaCmz1- z6vf8m_t_+Vv}33`^ssBd*Slf>heq^MF`=KaK0QPM$1{CH6)egBiF zKVXO2d?cmU(HmOc?^oivv23Ajqd&8GT2`D!R;JD3ID+=%*NnCX0fP{dTooqLyBQb~ zl4xWgoF%@cFgIL{Y~l~0Q>mKJ*D%r!vjnLs-+G|rJF5UzN8ykNjJh{sTgf>uH!L2u z?w)$>pa&}0S~csZmcbP6baU?XRDpBA;uLPl6wIU9gwz)rKpkk04^oo~t^x1xN2f=1 zslVN`<$(SZO;D;~uanMAxYWM6wXh=8nI~TBG_>_h#f9W`6Q2Aw59WP~Ybw7Cv_ign z>$KSee3oee*Ec4$yr~y;qU9q2ke2n#i6NXoF6-e zZ7m1AZ-SbIKXrZ2vngptQ30# z9)$5ggsj#PVQ`JXh;WSfXLSClI_$QIv%!GZ(J1r=6ngSHMF!1nG|M-B)TTW3QkLn! z)a+DeO)7>{?^`fPJD3RwzVQvA#V1yWLYYL;fnV&vBWNT@3$L3<`V>5!>6~H2dtSr? zyDZNxgA7Y2I~0_|0vYUDFAh0sMW#R)9F1nG`g%LcmA>x1&9p{-HK@WlmwNUG8OX*6 zrbtbaq?I?yr`xbP6|(BjYK}Igh1zsmAJ;M{QwCI|n^JRS_%B>xQ2qpUAVVDUaM|Xk zoKTpT?*Z2ipvx@4Ne4x8B$$Eu6fd5M#7*QGv3uNBM5&#=oIzB&Wkcu`0WG|2;Xt9j zfk|1eBWbGSqo=sefmfOU*GBe^gdW7%N@|u#*SF&ohaX3hHa*W)5`7L|WoG&M)X?g< zlSUV4@M+Elo`-K*)k04rS7^zjA5uj&05go%?K@M4AdMQX$u#0>3(RAcmAdela7Pu77j2R{CTB zfkPezH0N~=7Vl_sXV7Ck6Zi^>Jn?dmZ3*Q1^3U7RyLO+^hg7CX5&>05TBY1iy4V*) z!P>OBE z`2%cY+xi97lTHWo=Zj<3q5>NZia_O}_hv6p6Bkfi&`TZPhP~sCP~*T?k3Z=Ve(^x| zTU^iDmB@=)x4Uk8qP5hVTdubq7+mO??%*}4NCeUf9GumRTZe_5D&+(^wDoq*G6rVK z+V5EVJ`OnG$q295yD)QW97UolQ7PO-qKLJ=Xaa?WngMA?X4yh#QJgtY?6OU8;PMHq z#|J>thK}smLOM50i@8W57V?BUcsIxW-`<&bs;5i_M3Mo+Xw zmz~laI%}cf=-77#Afbqx1Z>S>@8t?Z>&a;jFw^+vdiD1>A;&+}GA3LX8^ynwIM_-FS%&YQ+m05O>i2@!}(pFSF!?I6p564dxb=TPRc5)F&iL-_48Md6;o#Zl?BWJ~(2be~n-L5)s2vz2}9T z#|(CNJO0JEBt}a@cc=l7GbspvP**{Z&z?4rGFYv{p+S0jCm>8{_4|=rn>++ApqRW6^DcV7ZN)L=#(ggJxCKO2|}_ zkgNOCHlOpmx7a&iA9}D3z|>TW3N7rLb=1b6t`oja-A+7Z;_b3yp+XE+mJ(CxrMQ$P zCz~d4@&@(mT>OC*PfT3O4##9$z+NRT(juX*nrSK|8%Evf6Xj$4rBikRD)jnw1 z_QrR2ri*Evl96B0;V*8KXBhGAi zHU;Jx&Fij<71#N1miV;4SONpy*X;NkS9X0*qpK~eBlR^QJrg}BvpCs~o@=c=8i_Dp zy2whoU6FaQRm4&ka@xNCf_ExM$=3!9E`nXwW9}-X37|e;1<#BGbqzM^K&%#1b;Pf* z9GvA?aVv7hS{n)@*FrtHL(CB@L{6;(B!ldWAsg+>Fyj^f93-{S`|~s~$4>BQZ}$@Z zu4fqNDaZk*a(4>_0C+HGzD}3yT)c?7r#O59*>n{<>~*1Vn1lM}8n(tdE1Br0WEe`^ zRiRld5vwQmc1S{=b{gaPp1z^cmVKFLgi%JG7>Yb*j<*(pHr%zb>MQGxK#PIW;UC^Y zL^R$#fOs;ffW4T);(HIm{I?xfXc3+kf2ykc^No{LFqAb|7#v)5#$}e;hRGsuXYH%c=c~T;2?98(pKn9il^aWstr-K(5^q zqPr z9^gys#I)U~-Dx|~#7E}5b+~C?hkzk7wdEJwTsK|cH(#r$rAe&`8GX@Qa1T%>yhTUW zf-Oq>Spy+{v1oz((2}a($%lWPS8QDWwCUDcxrFQmnNfetbK4Er*ih=wW)*KFjZ`?m z8F#c+0?!CYO|NwZL_OH>r}r==v>x>UGh=**M>O<2sp~u~vX>Oho01d!&Hb@>R||y| z>1)hEyA%Pj_XdRt*{Qu{MB5LNXb^HCXxjXqo+vT4$FUZ*XM0oB{lmfb8z4ycWthD? zvQC_AsaO=7|Ea}?vG*vpu1y)2Ej%5#+->i~8`O(MKAT^`Yntl<@x-G}KQMn_Ae(xS zZP|4Arqv5(G*xq)?!{Fd$I^#@04BN|Ru~?wHzIyUB;gs%LU+y7lKBkQYX*~UsH_9% z0WoJS_-T#}Vt$nU6MYN}O-?vCZb+F2Vh? z-Q3L}_YY87>0cIt{?9HMj>U?t6EQV|5~&#zQL~OFg4C<{X+P9cl~Y7Xj{kf=BDwKZ z_oN^0fL=-3=C=ZlIA*_$tNGMIzxXp}_7kVAlJBA-rSEjAA22B2wk1ec#6F?KY?v}x9p>j~38_yG|_Y0F36@_GI1NV#&-rtOX4V{U@Y zc>V=ZLlxc!S8a7`gt}mQ5|FCEd>yE9aDwa}dn&+c6S6`#L(d$%xnzZ4X$#*n-%HM! zrSh0%_Rgh=0E#100WS5?y@$v~0a{JBULW{+_MvxS6G_zv`nHVj`53w&myewCo~PoJ z*pX%IOfJoy$(cX`7K7#_WT5Srcx@{Ox?;K~AM6J~LA57LvfGx1Y=#h>>Mr=wHQ8u= z`}WBO2l>UJlTB^J`4Jz1188-M7BlJ0bT5f{XW`S?s&DDYyQ>NS*Prs6Ci7#`;cVE3 z?v35XZntg-tIcYOnjW*Ff$|Vjv3&n3eHuIo<&?F|J<7DC^(70Pqzy^6J~L+*<)mds zc*jc=MFj~h>Yo1(MS#0wx5oNf?%0ln^{p?uap#-fp1$I3E#Gf_eDv(Q6*+Hpp6#;Gp_mpLl*?gQeK+(`n!^6_`bdI&r6pl6n>dE z(_XdVnL^)|f~l+Pe=UhmpR{}Su5lgmwttRMKB;VER4`lV!8Ju`Sk^stgG*$oiSe06 zM9cLzIneAg_SSqG7US*iG;lQb?X_tx#VB4w8)UJVCc7WrPd>KaQHKd`c`fGY~u z+KY_+7k#94-?kSj8N+U&=d&>0_m9@k_X>HgwIJB=Mv3mPQ#+%A5Dq{5`Kb@RUi2G? zr1o<8%M3$1m~Yz>XX>|hr^oaxus-t}*-Oq?j<0|EXyFIx{?UV%UE1DmPmalq7#f=5 z!*V2n%o6GWx!38Mv_5KXZLhpOyLW^#24t{=Kt-wRpXg3zx=u{WKiRW1Hc;OU^KPOTxNDZyr5_feawywnUo~3E zy77JsiNCGO5kyAoQJ&znc!(RJI@#xE%<9cG2IgxnD5l$BqHyDrNy6FbQ))^u#zmYb zvEEvk%ETPjwrxwu%x~wrbE_E?_cAef&ACzw$2-r4d{CWa0d48yHnp_&ss#mpr)-_D zb;LQqWkwRpHTnuhqnna3|kCV~&=SUvxKQk}tB-E36j(og!W$mEyzNVhpv zPg@D@C%R#2Y1iTm$k#Vrs_gvH+Ue=GRJR-RsG!wYYM%Ipg8%xs6=*6LP1v;bp1b<%z(7lIXo)E#G* z+D@NDt%DIog8m0F$7nwwPR-N~i;^pzGv__!REEgYVi06{_mw*`7(q3P^W#i}7bg>_ zMgHd;HKD&cD*pVY@zJ!mv#teu92)IRrw>-TYnb`iFQcK38r=@((sQ>(`X z7k|_aU-iAKzJyN%1=|d0T^+4SjWAc=@%GMgJTu)U6xmFXf%F&|$7CgwL7Ef0hgwb?~%gf;jUgnAY zweqTfdzUrhp;}UyWkNm7Z`>NSc2%D$Yxd^?ujMM_agGiwgQ?hr|6}UB|C+cTKmNXv zyKF9Dg?$NAKs^K$5aGf`5CbCO4v3118it69asd?F0a0<(2DKHfw!u2E)qXC5iq^Kl zy*_Plx3&GmQR}LF-~H|TC**M>_kNA%%K&`s9Y`$2!6W^rW4bm3s!ct4zD$$Phc#q@ zEh*#G`HMNrN2IIgw?*dFuN`rxG-2)p)k>bu z#=JTKUU#j*cN=J!JG4W9XK?>WDI<5W2z)8FUb_?_lEE0_GMKds-MeYTl@i60njG+v zZ9>o6{a-Iz9rtPJrt)iR<&mXxWWO={B)Se#S$N$m!%h$z?6T99=SQB8z;nyD6p!M1ZueVW|I4w9VcTAiqxy(svTl(V7_8or~D_d!snP_(g*H_u=DN7N|{2{aJO{)hbF-3wU zklwoRFXYm*S*Su~6#eEv)ISsQm4ScE`hM1>TVuLh=TFPb_@=9Q(&7Cl`qmceJvvs0 z^xhvjnGq?^Ya2x$I3m(KWq+;7PMBsRo==Cth37NT_5o1doqRXjj)tA+B#{hc<8Rte z#8Fm>h`x^4%(yaxMi&=u6+}21Jy!sNwkLZ@DNcO&nrxAd7wf+vN2cf}lNJnR_>$#5 z-(xP2o9*CG*UkkEt9NYo9%;KKaHxS(cd}DSM`ZARnV7s~P5H>K-d(mYWAW$Ml#%;q_AcPE;}HMnM1 zO#QFt`&-psYe&*8$`>wPUU!ALA)*WQt}s3SIY;X34mIt{<|i`xm_~XAd0PBkXvi9f%TpS|EeJ6hNhH%E_- z%;(YCX4W;&ZF0$q!S{Py{`{|U?*6e`4rE{0k2r5JG-j=|9}crAA5YVd_Y;~mqi#VA zF^#l-Wsa4={VN}yEKwi|9l3-?e{7TtOvKhT;^IkkUxd8CgsYX632gRi)cGr>ayImB zELnoR@-u>%qu5Bbvu2WB5TQr?lEx?Zd#|v8Y%72PNz{Ud(PX6#ysS^!cMgZ7M0v=+ z0F)%ApqLRA+A*;Ks5n^5Q}}Sf9(p$q8d<=BZ!Nfp_R2kgK1%uu_OUPK% z$4*SxRoMxOrIbm47>^z9y2YuEHFE&{zEK5H>|)US@LCL)S$tdg1wq zd%Xo?N(7<_NVNeZSwNXSMC0%=yA^%~ik(eL4=}{fF$jabSaE*M)z|X^3hCH>;e@zHPcKQrBwSs*dG-WzG>0 zNb!Nm3NyuJmy_Z)6!j(5nC>B- zPAMUAfh}SVrTh6uh`uuE?mR5plr&_hQJAKS3uCh0zanDaATUR~Oa<=FT9ROi`S3SU z#uHGIanWzQXHmla*QDVLn(LzQ(npm!)<7kXgcT`>EC*zOgZTIO&3QnP&vgU}l@C}- zc(4`mVo00=q=~$t1d-dSR;Y+PChuxJvXBBgSMaLAOK!l_M}_NkBZj>sFg=2^NRWeg zcpXW}^&MdxTMZCQVE<1BwDaT*KlGyP)VaI6Js<0=-_Z z{B*MO`Og5%)LnAH0$-N>q!T@Q{V!tBu$LoI3<%cR)%RmQeKlE@dSz;Lq^L`;Oh^*t>IOvxww!1Nf8MJ^JO%15 zQ8E|n$Dm>wjN-V+KxBm}qRmPyVS-U=f-_Hi;3N$^I8g%jz&w{3ff90S$dGeA@=28b zsHv@s3Vt}d@R?b_(ra@lK{h)+(zYr*V*N&X{_(%Xli1N)`O#}92((3b3X6Sx(51|R zh>i_yYy+eY)SAFT2k<~~wV}lS0K5j(L6yiB8l@Pr#;W{}gZ$((9I>PI@bjY(87wD< zF*B4P7HUnk7V;B-NbP7EnBZ?;P`sUVUcH^Rl!QVJKC~S!8ihJ01gAhJhFCy_!H`}i z6GEkjRGBczRRXsUE?CGh&_$`ErbL;g9r@13CyuDFArfkN3tUge(2BTk1zjEi)wqmUnSL(WW@lMmHl7QI-4(q;&AT$Hb0=ENaO*33yV zfjR^AZ78a(@OC%16apNzVTn8uGYR;=ocq`9uRb1{s=iX@KT!Jx>)W;ca70JTQJrz8 zGa6vRD)-jyGN4r;J1PVWRHHBs{JuI6(W+ORAor*+sCiRwi4zBb4B}RFBj#?!9~hi? zoghk&23W{TB|cx7l+qDjt_gA(eQ6&|Yd8FzvXzlH)C<(bPI&qk!3yUf1lNE;av`S( zW65Cs#99Uv2XAxH0T-S3g!<6gDrB@>;Ag_uQ~2{&qyKpc)!T8IdQfSe;O|%yU;+Ca z`4YY2TQ_tOhWIbt=A)N-J+O$)?L$rw%PFrlEh>h?R_ag~QQZ1XBL8B^G80+JZi}S? zGFZWS2gVpj>U4;Yt6QBrh}W^sx&<<><*{n?dKhU%!C!%6Q;!OVM1nd7DKH6_T}SA* z5w-Lu5}n4+u8%MXGNR&u(dax$PYbEhPrYdpd}Z0}X%~!UK!sgkU{Hu{IDVt_ z_!?5ck#SqWP#t2hfV2SAaCF@K@8tu}2?`7fBEihZZ@xm~`O!yZxvZ~s-Z20I{p|G* z-ln|w)MV=*lY3Mdg-ew9ifzcziv)}rK7RsJ#}$G$#V|9w)G{~7;renLa(uwY`|Hzw zmeVg9h3mHLQWmk49eq`UytoBs*B7#^VB?Lwj|-GxErR_`a34<@IE&eMREWGICpuaP zIH%Hg!jA&w3|VxFsH*}CS%k8?NU6o^`-!m>`m98tfvjl;tYAT)gA8Qmtp|uNnlQnIYieRro^^XF19ukppkN6iKSn)2W43+i}G2A+ zEE26Ud?U~!neJ>Qbt0B3@HnVsg45O(&?%ut98Rz-^p6@CXVQr-?N(~3kdhQpV1#@k zjlxp=VrtQhJkrDN^!!OjTf_`0-xg*D{%pscANVH?WnRAjOFt;P{6}V5sDcknet1~9QjIjnL3%1-G6aw4KR2{i7HF`l8 zKv-nR%~^}6*%%i*%|&brAYqt2{304b0qE_*SmH<>5okfPLL?P7oaPV@216`2{q;a< zbIY~OocI8}S&hN!hERp2*zw4d=#(*J^1+f&{SK84oeBtOTI2!Z=@l|%HX^bR8zlJ@ zH9dphe`oaM3oTHCBWrD_FL&tP7J%7f$JnrnIpco$Anu}IX(8l&+5RgQ;Xum>b0t~G z=u_?EzS4!f;)L5wSdJOnvnJ=;9$`?+h^ggY^ttkA|JfB*<7^GXr1 zE3(D`>TC_h@`K|H;ADsJx#yrpW5Va##Bv3iP7|5&HbTDXVYC0A<}#DWX(u(Li;obftMJP>m@o%t8)YP=6i_I$XAtUlw!#_wus}lg|;9{5F@8Iz$9tbJsKY z^;FF1V(zT!f%TR6%Vug(I9g!X5Fz}gO)21+-X}ijvv0nvvsj-ni%dzKvkVR}A*OCklx*O}Cc20ztK<>hN8# z-lp97Lhbnu_^3sP1*- zA{|20V5k}$WA+_xLy0y7q0wTKz;zm!;Xr5VkOIf(MZ5b^3cWYFEZshKdus1d+qm(s zke_-ym+O%oWjlVnk0^TuL-eO=tiRGrZom3Kyt+1Sh&q+-5MAH?;{wN4#!liklw{h* z>X3LUYlPPMvDt9VwVvffBcA+jqPCQ{p*jmPE6qH~B5Ob|PqNQT-s9JOL^1PchAUOkG#j1=V4=bP^E`bw;r>je|ZMH zIrYCkH`{M6cP^dcTV}`9{Zmg?4}D~4&J ztA=SuB_#Pg|%8us&ZsX4Z~f%^mD59{22%uRzu$AXDDXibHL@*fp_B?0w-)5oqi$}BI< z&CT@EhtEnUpkuw0>!j^(9-Qa4yNze*&b{Y$IfX2JJsmNh6Dx!24u7z=<~>@S7@qRV z#vOoy1~Y@tFtD3_@u_+H?V7+1eu*(vdmRA7*SI+q=U*&do!R1v9xc(n$Y?Od2<4aO zVHk#vCY1sFApc-U}Lr!#z>m>)kcKKHO}#R((JHA_}s$iAMic<9i{_du!s9PSruhth8y?xiQgyWC*3EVVlJ-t;CH!b^P!D*?ZRejsNcS+m}zTeldRV z#lufkm;Jw=E}AlXgJ(cOR4I#QQpk$aMPspvaH-12$z)HGDxWe9^5|OHDqF;ud0ARB z)gun8wOl~`11KJG-UDGGi%a$Opel;yy{c?QNi)x@9ze;Vm%}C1|8%TT^~@WJkaK9a8a(a$fQ zx`4QKa+o~pO;_(hnp3yQ0^7hEm&}9UtYl~>hYFVo>H4j?hG159XC=>hl?Ujxl4X~T z=|@5?cQh)I-hQJbvG*^J>2<2-=}Oymw+6{K?^q8-VrPEJ(k~{K=S-{1)TM-P^>|HI zMuO^1Tk5hO;+0Rnd)*qDQM$g@FDlAmB#;bl(Sk?ZKIsrP3SNJ&*j~0h^3iEL@C2V3 zq^guNy5uk)7ViFH;oR-*{;Zut>QW4UE|0od_VS0ACx^d2{m3A}UF)XD&5Y??wq~_k zWRx!1Nf~8m7#U$xTYbVzG%prM8InGgwO3$XgeTL3Q{7#h{L^OktQf^3l5eXXcAXXV z52MeDRy3X^?k+Z2Emehy&= zST}b_*FcpYCT=pcXKi~sZA2`KpuVSVgXwvUp#vrJcvHP>h)I3T`M@Ie7ddouD(_ox z&nL^eGe_}-GIK~L;)ApjJgM7s(ma0?GUS zBTmyb`Tct=Wzj2x#g25;BLyvcA?UgRi@x13`($Hpz%%K8uEPPRj3mVd^VYBpFtnr3 zj5669zv$L`CV=hoX#tsO>-75k&Ih$KW(h*$vqz-TNhh{7HqL-W8OQ-~`k4XZ!$oot z4G@P3-tzpoF$#97fqeNR5%S8ydq5v%yb*cOB*!zN!2fS`QtU zHpA(>)eu#ovm#{?N1mp064i3Jtj~x(r3ck2w#)9 zpZ!^g{SREmCdsNy{>7(}bWL9P02!H4?{wU}dS9wqeEw~N zQ#~W|X-@)h@KBh>uMw!&dFjo=7sP%p4IZ>nF!`MA7WXnG{m=DrWg)1Lm;RI=~VBD4?)l|`$Ri+_sYaUEVt`*5tI_RSe2v*gc z?a0@kX2R8iz^8lO>&&RD>JsKF#Kc0|ns^oKixe820(ed&9E%a9*4(o!K~eTy(v80$ za(J+LSEDa4Ps27ayGF4^XoU@UsdylK#ebI9aC2^cUcsN;c673>KxR&9(Cq%gyV#H> zUt?*ZkY?_8tWOP`Dc<`T$6Z>apW6Aui4!LmP6?fJX!OncKVo-x?00SF z@v^?1qSn_0mZ29=-B#b%lyP)B>ylQemHr%!j-6vCGBQxn2-7`^T15Q4q+T+|WE60n zvWVse@hi5e=KWB7)0?d;W;u@0juE2Fc0^W^+|WAdf+&Hq(%7=5Q4Ed03o;5jA2k|_ zvpmu}=hPRC$Zx2ziLxzp@JiEa)owjj4wC{?K>d`1WmUik#Z;jsXgZj9#TlEwV+9umM}vDWp`CNs z=p^9fzXv?$#4y4-yymRrJLWc8$nM75Bm6RWug8{$fm+(=w86%ud}$r%M_1q~TZ8Yz zq|R0k)yVuYihvC)zBpqw9^=#aV=sJcZ&l4c#?OnWdK_Jzd%oZ!zh+D?Cws2Db@D&{ ze@Y4^5x>>oITdsU|c*xAUK7PB4<#*sPgNgDdh=V7Ew-7u;_&wwR zOj`7Qa1f|`uSQ0hwW`O!^GAaqQ@3K22CcgaVC==9A4x)N4@>$`mtNX;;cs( zGl<6x;Jw#xNR=R!$N#<_n`)R*Ye82qhPdm4h|-)|*XYz`(F{AP8Im3}%z;FM%-a27 zg&K6Cvp&EgiUS#S`vZM?&~U!`Cob@l0qG}^n50irE(6z0)vVT)STkV}BT?&mrs#~KwIn+T)4WhVLQ;tMq zDKz?@;~T>aax4-lXAwA8^XS^RN;{#RGaiP8{&DBrmbIu3R^QjBB=;yM>LBb|fLx8v zti;AXKs{;FperS82xRmJSR_(@WDv~MSZ2^6)8T34*nZcJCz3?V^hAg;wIO$}10_om zTw_=<8cd-|CAxz0SKAtP*frB9;1l(+yHn7^*MORzTatvu@tNpW?h=d3EQ=@S2{Hlr zqhA}L$5~1iX+ejgAdN*Swr&x-j{1xo3a}UxTBLVlY=h)@i{R1MIPO4;K&UGl59{zF zi&7`wmwr{i-P*fNNr&LN+1UrsRVFmglneEC`y>BZvp_gVzedTFTZ2G~yuJGHqCkW~~it_L1thYwd9 z##Uj07l;%d(xCMtUXan0yE}`z*abQViP}5@^tES-QbSvO>TK}brTXpY4n@94XxG;7 z&Db;nfb)6r&@T`RZW2RA9rF}Ea(i-gIKD)_xPyUO24Vs=R|th^^a2~PWR22e+1`+y z3xTKnM~CN)p1m3zyjVSmvyPTXhb)0Xp{QJDMqqgEgO*%k5@R;RONUf3W%4&|!3+x9 zp<2c(%^`z?=Tqj!6?(MuHBgwbR0?x8W8P=wOK9Zf95n@V%RCtNcEil4nm9W)BThPh zANI_S<}#Q@KlT}$egan|TDC<|ct4wdh4G&*y|(&6R; zzjWPX6i%#6rDqR?AzhjrxQ6;VNQ4p;Q|^(;T#CyI2u_sp7)BSbZ*PYItg;&@?n1yg z&{Rh*H}_xJkF?h;r)JdX7QhH#1&iR&3!uo;2Z4tPJJyb0Vg}K%>|7_7xm6)(?jNzp zG<_0<$uEEk6Jh{lg@u?i2mJbae=-g3>>XN<1pGP|IJ2nO5`{oAiv_zGgcNY98x;%T z*u1AB%g;P>aXGHY8j^DnQ|bh_>5i^YkFRovPk(_lpNoPr(V2&M*M5L7q^lXn*!XXP zR^$FEuQY5Dk1w|FS!=}o__}HPaomFVP^A1FpbY5l9ec-qd#v-ihh)o;OLpn)HbLl8 zlyx8q3K?dzz$9v_1qQZ|#TN3<8|$6#YeGq6u^C)#6-@QOa&!WP^Omk-oTnpx8B5Oa zKwh3erM7?F4QCzMP~apxFgW64Boubhk6UH$`=cRnzNgWU#^b-B8}A(w2nC=b?DK|e zV3}5y%Haj}fb|mm;@i)j8M1Q>Xqc(WLkDCG>crKpgxn(#`q`Dxl`vh+VMQ&w7SBaO z%xp zHB%o%;nuaPX8$C$1;!pp7y*SwPCPR=R0n=it5{Bz17k7_xbUl6XgTgSVep$e19s%l z%peB$WYJ?8`B!iH+$mlKrAt^p9_@gI2cXk~C>n|8Ji80PBGZCN?Sce@eDW2KShHtF zacZj;Q-EsHCU9~bIsX)oW<9faou7X%t@63YryWv6ESoYUIpG!jVnBz_n->%tBc?^4 z8E98Ck~5!)JQ?@b9QPatT{R@`Z3LE0b*lA8{8_Thke@l3^kEQ%VSgF?_cDEMtR@W< z;%Y<2&yL<5wZGu%)OSH>t^qOb3wUPEoMIH@fF7BB`7_J5k{20xPv4n*Je|eHi{c_6 zp2mc%c@^wr81H|FfT9abzMuXEA8G(Y&2C$|2i*o-fX;?6x$?GtpFd;#;$M(qW^uf2 zwm`Rb^$@{Idr64Fd2c-y2=ZbKb&xAtt49_BO~Y(()IaCiPSV#fUPyg8UZc__eX~0$ zeXtNI%|%E9+4?mizd%0yo-7B|gtQbwF?MA$i(3Rwl!EXgJi`o7I*o#+=rqj379Cnt z{j=SzlCQ0DxDC_eDQlG|>ZRZL{o5pua6M@o6e*ZNBUW&y|XVABA+_-y94=c}gQe5#oGMMUb6)q-qF z23QPwWC{}!rW@RZ%Y(X;C`rzN@OR{Zw?eY2(mXY=m$hHUA#8YIb1f3Idq0D|N1zGAd^qyxL`Rr1(@-5i5_{2IHlliV>k1WKTx93n7*ts#OeJ&|W2LT8&7 zKpmL_+b)n5I_L6MGXJDYC<|Qdcb>dZHb*d5dZvUv_jIcyrqd+B4}v3*VPqpti}EGh zaRXPSph@VB&HvVr$Zr3{ik3geD0)t9E2d;IKbNv#8}{PV>G|wLkM~Vy8h_LPBmm5F z8~N$?<{jp)(pN@Ry_T$_g51pH3_IebXWu@Z=Pg??l?b#DI7hD$pSZ5q# z4HZDmILp#}vL4%7>avg~U2SpY_Pi-(XK5>u~5G2pm7ea%7bq_?p)( zwgtf%PFKg|^+SQ!3^Jn-sVVRZ-ugW+&zukDzaU3bT{lRdcor+uotw{jJX?y)XXhXL z$34O3QOKyzo0SHsmZ+KMyDPvCkPxCHFn?al9C6d(K_)CLi(JeFB|F@zD0EP>uT@Pn zTfP5djEEXL7#!f-9Qy0_G^!%z`9 zBo5o#{MH|w{nS_br*3|T{`^^ws^9JvwG2&DdImH%zxn!qN>k$PFJmvh>b!C`D=j0g zqnt$BWOXR}t78t*D2gB1J(;4p-D2e?8ziN(ZCPQnt}vQ89oszP>_Ssda*C5kc66dw z)``Qnzb?IcX!`djj@&(Ic<|lo{I!4H%4+3yA8TEhrtpi%b}6d3&?k&j(kU4uimYp$ zrBP*E^4W7u(#3dlcllne4E7vL5PHb^Z6V3o*ZNKeH`Xfx24Ab%8CJeWpbp)jV+Lg2 zm@Ar6XhDA34Lt9;3|)8NCQA4vL{a+s-dBWXolEA6S!*^C>YVnzNBgY1q>yCyhT3cW zRP%ma**43(j%cuxXrHOGBf8T z=8MG0=>SmgqY5|HlhdERX>tl1=f82=w1n2xu8ALVIX?ksN|(5FD~#Uw;anCSe&soV z`FBTHTkA-dCv^6+ z(qM(6ccnzz+UqwZ|EN-NXWDPS3Bc1?sfQBqek)e^?1oX1)!%^#bW)p0yG6yo2t)X} z-x4Op6#XjOvEel)a(%`3tWFB&TBqHs{{4@W_BCODo}5}x-n;U)xB9Foy4%(O_Q#gj zOMFThEkQ8)v-qORh_%IYH*^?x6kRu>K2mFM>1K;zt;nyJMnxW{Z)_nH9wzv?7)}{c zPZfJXD5$cpL42L~Chy)cw)G1ac7C`gRAxBN`>5L;g%tb7(IAZLwI^W^^!vS2!eM&4 z?7A#BS(-5z(`8cS79JXiW*ZI3{c331`?{5Nom0(eA4r$rPmNjxH`_^MA^)6PC}Lr@ zH}ly`E$Pno*!JE%PlFOezRrp|-&1H8xYjsQRKw|>{XS#P7n6IVOBClw;+81gOALq1 zyqCd1nsB+~J!Y2MDZZVZt8 z;V%lvcj*rW;f8vrW|Cw^v@g}%dF0aH(wvWPMyX;7MDYe+p(f?W7r zD>Vl;Ik7a-7XwGhL3jBn$7*InhjifRXWO#k0frlW7K230Xlt zW#d3rM@sfE(;*M3x@mqhBFbjJ4j5s^lGH%j&94pyB237_NqGjKmy293c=-6a&>(o4 zTBt6(7I^j;wLqsW4d{bN(m|aU^(TV*m1g*cvm8^_AqeFge4YW6I%Y&HfNZQVBd~pz$$AIwh#p11j9w= zvmvtM$@g>x#;Wcj?C(}qx&br>q^QL(nEX?c^J-0uTAbFb#XJoS;}u23)DmMrGZhp* zP16(`;utkQ<}(x zQad)PkY9{~2Duq7NAZ9Nu^T7ko8{_GtE|;vlrTktN_&IvJ)Kc5)k{=14CUR-37i?# z-MSWt-1%(SbWADfzu>2rV5m1Q$Dt65S~#SAa0$NT7D?UXxmbtYX+cbbz@|r>E+cYD z3@>r;Ns8P7+BM{C-k&_6v;T0)p@8=>ur{Qd-huWN$^UK=1u$ymd*;rh(Oh`i8MPR6 z_X_>XMWG)C$Q7XF^RX2hWf^w;iWuwiDd<|y-VSiD&nop~FygWq!blrJ7uMX&+x6~R z)jxBiOK!FvNV)GhskvTw=QihucgVxc*p5g$=AO?j_bBDjrwlUE`w*sJCWBixpKuG1 z6m+L3qk7Px%{&|@#{88NBOnzR3(oNNT6Z2GjQ}N#4UP55NX)q+q^7UIM;OZi7#gmz zEFJS^nUA0Dig0k%k}rc=IGl4X8j=v>{zWgnR#iB5{tY@wP(!JNrF8Dbfd(G~Xee?q z|M$=6uJ|ETQ>^JrS-H8#=~x_wguJx9+Bfg3wF|kJ!viCiyt#(u8#pB68+53H6XfYJ zNhiRDHGc{=+KK|g%`*3CJXBKd#~v$^*Vr0jw4N>)d&zV9q5l>>s}O}fv3YkK^jy&2~T)sU_~6XFq>qGd}GA_)tfZga87ZpNJlua_yk)ZIkW0qTFH{1?;tk zq3-}-nIp-^EUjfJ{$3f~XgaW@Qmdai`8_qRM31al+14it@B8JGItywUo^pA9)FAMN za$NQ_RJ84o(f30}LtHm4NurW`0(e|`jn3-a^xdliHAj=Iv#6VfmCx}MV`v&Kg+sNfMbU25=!sJR8QS0!DW_Xoa@1wi@$Ah8QJq!!*Gn=RG8iZXF@w>Lbz2RgGMbQ4FcgZ#*;Y7S zkz;Mf59uo%s?EXIgK>% zWWaU=wG5I58jVzlAS$8Efh0TfTM?v;60kbV&w@r%=*Ik3_yn%dVToq!?}~DzWksz8 zRKH03&qTFf`qTrZWL7&kZ6l)Rf!fy*etI;6o0em8$_AO~`uvYyQ+bbk;|#T}dX%EP z*_P@>c7hrrExju70x)8UME^?M-2(m|NgnTNiD1||J*wY6S7Q7@LqEDBV zt`WT{O|C{n1^OXTW>D)O-E2gt&A9IY80Q+)YLMN9{r4v$qFm{q88jYmM|>TlG_9LQ zbmfJ=Bq3(`$CrT*Pv&J9R^FsVQ~1>^i+5Xr+>(0oY2p+Rmcu|00vch!=e;KU^nR8T zL#JuB@4t$Y{VO#06R!^m`Ni)0TUTqcfw~&B8I3bnrEZQMS$$V2xXrsqO~f_2raF_~ z5)MD1Nli|UPyponNxm8Qbd6)`A_F?gZV;aE3!qnj^Jd`~TZS$jfi!av3}j|lh~Rei zLxVm6QZoW1uz)*Q2NU^f9l4D0`p-4#4@gOzl1wtjcu}NOudOfyxN>BrKdDep>kkB} zy6S@(@SZ0qyJjp4hC9~io?vm7gft5|#RXfauflC)C^U~87;B%D=s+rpeSKJA_yoks zFmIWux^^w8V#w0W-Me3e9;zsv+J@iNZ~od}wDiQT^wbCekgqi3P6KGL*1gpRTis-` z{gW}gsFI73={HYrowd<~Vfug7-pLG}3O{CwqBI84+!KjMBe5G=^iC3*L&@&)i66En zFV!`av7}9*`JrlKJ4?nI)bWfrSGf^NgQ%LDk^Dik#EGD&iHkavOjXKos_nV_WG|85vz zTNzJD!<`X7aHs*nwRF_pIIJTVtFj-BdY@vTeF6-qCsZAIpgceOoA)il$ zY?m5#Tp5=}y^P%Qc-r=(RP43SHq_5St|3rmgF4h`G=2enV%`?u7rcKdl}leIMi*Ap z)8uF~_+N2pn?Zz(#BymweVv$cgWMy=0((Boo+=pHgfDe~l?=q95kpL5t_er40k=t{ zFmm#ws;Q045fSKiG0`fTEOZ|PKTc6@wkQKY`{5VZrdu-)T%0c{m#uh7&fn{~)pFQ9 zY;8N&MA?Z24l;E1&i<^rWIIvEA*Cj=vo$mqiX0ZSjl;jYt1RG_?Tf&3*nI@Mv;Cwp z-JCH0m0~haKo=y=9vurd4OWS6>e2I_AV_&eLt(GAf|*J4+zkTyY?bp=tJ~$FZr{7T zX9WdJVxc`em6;yFk}1`|J`(k@K@Dzy@T~MD2CNFAfrfxMdS>`&pAqv>@5&glg-CJ` zDeFhnnqzkMgO6#3sERu!a<7C=VNJSu)+Pu6B=%jAS@0stNbWe>zP+$ks9U;%#fUkwn??dA&K!4$>7ozj&Wnw^Wd!*LajE$EgQ3tG0-&BJe|%)oo?}JhdA- zJNbmO2zf=Om}8T!f&doFFn2C4IVxr_Sb+#OkYWoeb;zX*GRy!)C5^b6lsS+xgKwB^ zycatsWLm0(t*GT7DU=k}U}+dGEWuOF?l-qZR_Txbp_5Yv@)LE$3R}ci4>c=meyr4! z#b2OVcBJ&bDC1blaNz9;Vt6sge4%q3rpL%puM_bXNz)2Hi&^t^0zN=u#6F&4U$s zzxR~pwn1q-8B+b04ER0Nb>Yrw6^f94Oyjy891rv_S{SPX1x)Hf8({hH*xvfU`xQl3 zQlmawngDQt;g|UiY?$6Bf(P}Qvc-1bY6F;II`lIX=#@3qKM&0njN7q0;%UXcvtQx0 zB0r!}{WC!4%omD(yluyWR#}qG9&_7|4L*hM6hdP`ll@VN9hJatisSm@lV>L#i%6^_ z+5Nr&6r|lCpW4qKShxLL6siRwW%L7&&I|8Vj3W_EO@oOon=%PR!8~S zNYdt#+;mXB@_NG6Bky;&?R5IKHWPJ%rzCO5PTR$?&kzZ$1QCvZl3Gv{m zWJaku>Lj|CbkmGUncjmH8>0g>za9;#f+ml}MflI@%HI=rVjb>ho{(;@SZe-q30o51h4D+qyhnU=dhgx3!OruNQ`V5}K0o|92FwR^!Bx}B z$-3?8pP#E_T|ya{#QC)@*b`|I{M(NabGV~dK z$_5{^^TR;T-KT^<{JJubEHhnfIOojR%WPK@sptZS)j65;aXj>MoOjkmp8tFE3g{Xl z58+b65~`VCjkFJbL<~5;WqF`KO1`S&dh_~<4?8&h9ZVQ$Ppd*n#01MCJ*0H zXMm5!JVa>T=4!xL8}*+>gJi+F*)U)*wDoN1v~{oj%YT9eze z(Nx_E>HgzYKh8sJ_!1zjRVuw=eI!%{Do#j~<*@29xIb3sz73><+=M#K_Bzm3+^*c3 z+tI!+bx-uR|A(>t_Vk(W{=*+{|9Vp0!GgNT%*i>qX~Uw!q!sEoO+Z|jc4@HBu%)Pf zqBb#2vm$y?O^u7%FEW5dmBAAK=qgvGp(>!vD{WPKyP`qvEnD)sma_5bTSKVS!`*}X zSWb?hzm@15k9$R;6&a>COtTCdi9RiPs#9;?6J05WVWs=$THP6z;!Pa72NlNON@?MK zY7jg5+UHF$BU>Tlq41Q#XiST*Wa4v;d&i3+OWv6a;g(5DNC7d_;H>Q-;;|E4A=Y%E z9s+U!?UeOiqG2IdC5)_w=t)d_uxsg z@7fDf1}B8~`T3dOY*OwU({{K>7cpD=;(&EyV&=!vpFXBb29Jj1e1xQ&~U^9DvME1;!0mep{q*d2DL2lyDzKNEBv%Wqh45E}( zIjkbIS=R_6+rLIdvUn=p+e4_sDOod>Bn&vMMivBA0jm$fT8#35@XUIV2m4@+x3u&& zr-=FJNXANjgS%s8_pH2cP^~Q&Q`@u`e3!t#c~MmcgWwB$5i9EQw1^}^JE4&*yww7; zT>)lPKD9ZO^{T9iNC#|mKRa0KxNKvIhIsP@#Fx_}^6~KzYh-zsJFGsM-Fy&6-8)r4 zxKhl8?sBP4n_5R#o)b)VDZ*v3QkE0Yyxr=#NT{=VPw1vn6_I!mPK|1&5y43Ad83PH zgMBlq=INygOjX{1zoWwLx2)C4fUSA3)Q&<{4PumL*CKGMUEb=5g8p-%?= zeAuBg^Z!sA8-;QE7yNuX(_7o%nvV~8_jLdEMazdh>aV}N^8pxWY*m+-tiH}Ld>ylM zEJ#t7?f$({aoIF4NoWgUj9z0*x&}q$H8t2(1>wa)pACj|3_Wb-eG~Mf>yfx#1`6F# zv=yDT{MTefPJntx?5JnfJHE2R{P|B8m%!N4;wok{ULLoHNV6gOjRfWf)3!p(n#gk< zfabQjoG69}s&jI9><|+SM&s7n*juc?+lGv(;eg1(k#Ip|*aoX~Woa_urfV8?tqA{T z7mwYezLx1gh>F_oMbpNrBG}_~W^uEgM4tsXDI6KTgYP&bxUihifclgw+9*FwqeE+8 z-+^rvmFYossnKWEQAAX;5pgc$7uZ`#^DTr3yv0uqVaU;!i;SmtHsposn*=63>J#(J z&02dsB%qSPl%P5ZaSa1T=T@)O5M2kCn6JmS+a>+e@V%3zvs`iv*2vv}8#@iGJs*-5 znig?9@!=C<$6d*zV$-MUUL)z3!96MtSTp#+$dOt!(~a#E@_Kno1M70)@h2$63kC3Z z{EAsTts3SC`^GQ3gl!GM5sw2|2jXsC{88`SuS#tmPw_aO&ag;8sl@x~By6;YmK+7e z5@@gu?WVVCRE3}T!vBAaStp#BQ4i)jKKro5Oo%;<&!rYpQDVbdRdf(YXDgdWhnwkJmjN5^LAW4Tc`i zONUUDEyCh$9Fo@}0L;Dx@ue6df4D~Rl*?3s9yh@4qf7b=J$~iIeJ8mXT#qj0IIqWg zqr0gLEY&Bw{9-xNexw7C86CcQ2E@~5unZXgRk^Y5{W7PTKXyE{AlP8vMc{9?DppxI z5ujZD7Oi$=avRi+&s6RD78PLjs$#g&x@2O^;S)ZWT-DRFYXnX|?-OV|kc5M(w1^j# zGc@!p!kubR70||zb`~IgT15^_JLX%-^uDBcw>)elY%59hm%KIH_0gB@r?cS|5m}6} zjemTT(!N`6(ycDpy|AJV^zS^()>nV?<{VQn_cwicV`4W=M8q5f*?KfR&|2$3X=g0b z*N<#~a9G!<>6ZikeKeuurgIpj$*cU*CAOzWnaABjU0TFTb z5EN9@fPjc7mw*gKjT>hJZfo19Xw};G00*|(#!*G9HY%=GzYS_zYHj&_`uh)js2q2% z_w)69jcMV(4e?V6&U`>N-8D5x=*AslbvLfCM*U56OQq`hLaX_kEybS;B3e#5r)e8} zBS@j;JAO~WPx_cTZWyT)c6<6$4m^gM zUj@*DlMan$E-udm@`-Jt{YHb!HWlGjngRqAnW%n?^ke~#kpPK3%*bfCq&1xbq7NtR zr(1sVKB~hV15K!+AZ2eqg?Tpe(n&Pq^clC0Bf4`cscuOp(7Q7{M9TWm+nhl?)IogX z(=9o(9|$jOL>EyL`fNtzqwQCVzdV)VRs3U z>EcjezS_`vAhwJaX$JcDedIpgD!rt9L`}WReYvZyDL$7rkR&2;We$aFLCAUR4-$-VkGkBNkRaK=8^1U00)8s&3zByT9 zps;^0aAS9yx?j%(jUTUK@VA`JJ#{T5KLe(rbZgHDJ}~_Oa^2T_ENU@jcD-*x3M*2- zx_p%zbH7klnfWOmePhGLFIfUv_vU`IjYIg`sJcckg7-B=@p~e$6nX1t88t0{17pr? zKMqHc#|{+Q1qC)p52t~I3+0c-MR7>9?uIAdc4Q@w3?CY6!2^}n$64lN`QmI;$RAwi zdmQaZ2aDC%uZ3CT9|uB^>UashB?no|XH#AHBnvspNJ=QIfG<9FU2wp8{+$fOjX@@# zBH}v8@lZR2CIDop`E#}J22%uqChuydr?uJ1+bfmTfLrl zM)-!F0H5o;e(FXq(qN(%lhD4KHj7-)*+(|Vf1-`7E64F1sAmxQvtyi~IGM-lp*V*J z36@l`?!QtjMxip+P3lq-X~SZ8NaEsQJT#vIc;(-o5}8DMU1IH~_=iGDG8=F-quD(Ec|fs`4nqSMukittRVTLz zPHkTyGU-0-^FOJ?qs&F{J6cSEMeyH9k9nEvRxt`M4i&-x+CnPSfdq$;xd0k#APyJ4 znY@;Z7ORPwHgxE5`075)UX4<0nhy({xO52rRP(_E)J*_1UOge7$0IG^(?I~)rYbdt z_Qi~%kR&T~P~hoWEZmBkh7z*X7zF3OsTf(ufK_n+DWer581kyGOaw>;PnKI&J}n{3 zO~x2K`h7CEa(VvoQv!82xm=e3Wp*+X7@bX|HxF>WBps zsl9S2*la;IMfkO)*mYV!07oS9z*R@C*eL3lEa`~IdKwjXk)N|@h?G$TU~%V{g7h3j zODX*u0mXww0FeU3mqsoQ3J^2+H5_*`?U-#PYSh!~X|O%W_nV0Jz-@Lfld*a&Hfd>V z-;Uk7We9y@%xyKcWeOHxTX94w)tIGl<{Cn+q1M1-f7*Zi*6VrI?5QTt4oB_c6!p!s zC>AN~@0EH}!>GGSF1F5fqmXj7$Du)FT^2;Zv3L_!5}Ocg0a03YjFwz|0*L4_p5|3z zHg<^?%cNxwrX}_716M0SPZKhp9sT=@5H*K=2qe@%Pq4^L4WKP#E_Aqp`J@dE0)qdF z!`2L_?t`%K$9|-}1xw{}1XdzwC-5>h`RI@cE!frUyG?CsgCn_N-yTAnuA{4J;e{)> z^wuU>gaw1BNOIUmVnR$tqFs$eQl(q=Rczyk zkP~PQ@3Yp`TLPkwXzjEeo_)572hZ*5uwZu>|4mPDKO?+Ylkqm7)dGwLaC=>A-3b%b zJ~NPUhsUxwd{XMbbkvAB8sWPXdFnms$a^nnXx*HGx!R(>-SOEk_a;Vau`i!s@NC!o zJI3h9Di*~r)w*%9jIH9P0t<3N6K&YGo4Lk5mua@JwVUu57O&Jnn4fub6A3UQmD(hK z9eGIQ@wujDens)t8|xQsTPJ1FGA&u`usMKBiMyEeRg=QaCRjO@cw3DwG1!NjI`r2& ziqbkqYQt7q7qejDRJ&np20I_BB7%(Qcn*aZn=rLt;RuYS7S@@7zznq3l``GxX%R>n zw>Zi+CQZ90hsO&{k_17}5*CoP@I^M!UT`F#`@{6G0uJoLoMUvA593CgN*m19E}ODI)=&5+0_Du932T{ z5Utkk8myWI*p92f(Ig45i+mP zVdfengu~6HeuWLIUq?yqm7l&stsQ>@ylWT>Id_$D?FxW|+txX9AJ@S9+&geyPD+YD z?{6rDH;)xo`!X}yQr%6jOrO3T89)>LQKFvE;r{eozO zwIZH?U`!ZKW8rPY4*0NMQI=q&YwS8r5h zE<}3(ImRkjW=5+R*7{DEZ^dhw;gQyXPz(#&)5qTu;Y;0=CG;rmYUtJq-G8}e{d$Io+m$puxaR`jH_-IL=Jk#@`>46BGZTua=0H< z8e7-uwqQFpV==Z_8Qiu-Ly1EMcR>CRzr7Rv zI%oVo2F28E&R--%Fys;=Ky>htjJ$bE+N)=ITM0LI@}#B2g}9VRTV$LW`khdfdBW>L zF`bMRI#ml3ZuoghvP@X?PvFY*l9qmC-CLnDRWZ1Zp9LizgSx*d?_F;`(zX*RbR;!AabVr%w+*PfsC6%2J=Oq zi#v3YXmO3O))|q_AW?!W=@NMTg3LLO|L<96`DZL^6Z=9tBxyCzz z+<$TSJhkA_cC;j0Fq67G{%?FTjZK34fB8x>8z<~d4LUSxgurZkjE9(F@+tV1cIB_< zkiu5Lkrj`h0{peO;~+5$a-kYri$#4*AZ5h*--Xy$ArI%y$Ftb)8T#PI2BMt? z5@zh7Xk1`J$AS6YMl6omo#L|_+H1!7h}wC4N6PNGC$ml~@MD}rn`38D%?i;K0tQbp zBle8L6e}JgIVhoO#TM-Rmu04%-g$d!BL5^`AB}6*1!gjPcczNB?%60YUyu6w?TE2O ze{~1`nlfyDIChf8ipI=4;h@ESW>BR3*BmotKa*&kI_|0d=ljR+w%@^iZ&)t-NjAf9 zL|`(N|A;KFL4CC3KU_+ACvxb7Lxn}lP8nP3eR0v3MJu>d6`vyJe?c8n=S1aKe463Y z1sovSHFE1~eRVo{2)faYX2I|2(}Er7|p&6hymlQudaOfX6V#}=>+^L zr=}X;Q-$8!cVA!Q=DxZm%<;$5DZeAjSbX~{9RFmBdbRH>)ei-I#5^7;Rg*6c<~dn) zV-Fyx8c|SJsPRAUjS4Sp#F7>w)8~`5)S?QWB(+G$;N&_M>^l`EHl|kq#r&aRWSGE@ zOd!%tek*&utEf4XjPRlk>@9z`V8Z$c2-Y^$yENtJ*C$My778cFd@Jjr+n{AvTSNN9 zda%7dt+Bb)FL;-KocChYl9>3A_=x=Uq-iP?4G+%CRJA&a{M}pMq@~qFB z-Zp(#^OY;osJjn;wmy3NWZ>zu=PzFV^6RS?Q?F=3RgsA~N$F{sN$-999IDFlBZnSg z!mk2TIeK~VQLT^8<>B0*H;;N{v*rD_riJ@pcEYHKY8ETeyT_H$yU#=<>rtUBQFu7w z(K^Ez0j(}DcQZKQ*z#3J(VPvaz%#n6z-DULg~-sZM~;VjV2yQH64GaWz7CIeb*2go zPY8k7jn*nzJ=d(B)WabumzpF=u=t>im^)56B0-|0yG_aa=6!dR{mXX_RQvhW&9tEO zTE~!WdoF0HDn=hIwDD)(9&A_}Bc-z`ChEM-T-p2_po)seadQJts4yv_8JJH z$PGwa_`F!V+zb52W5`C+C7KzqabDsV;g_*z5B{)^-USV-k}0tWXKzs3E=yhf2Adt* z2K>ME4gVm&=>J{&oN+$l?Ba_#;#ZKfOvoMvj6by6kyKW!st2pE*_y>y3*!CHs4-6<%7I8)F-w)1sgI_X&8g6 zI6O3vX5gDWkJ zXZQ=aibEBAdkNQ_M-VUZezF^-N@3kD=Bw^Y?yi}X-rbEacko!Qg=MfhtDN%?XKR1O zN4?fR_pBX2dSF}TB8S#N)>P;<)V+H4XdOs*oeZU&il`l!Q%3Lh$f9~_NvCs z8n7bpDra`evs`jp>c@49?;TN-l6#AeHF#1s6xR zDtyLmu7AgjJMTRJ$pMrxak4z4B_%6?0+9SIV;=}mzrq*Zi&M>)=~dWgtpRBfg?&Fy z-I4nq*e<4FIULdQf}Lo@+SJOmsQ&$T&rTH424u=<=k+JMhFg&fN?xi~5f&RteK z;Hni{0;iPxxVB|}ovz;P4)~i}4JhA1R4A>27sf3KWv0XmA@4z1P$w1$Miro<>2Su@ zWF^Wod5>r#CxUNpqJkfAm=BL>dxgk_2H}fgT5l%=_NUJw8yOtX>z?1nCC9bz0JZOz^nc(UGv_-5MluK#oh8Xy9)4dE^(_{DHv8ZyuS4pgZJ zgk`0`!G5km#_;uiN(NM0h(LxWC!a8cKBhRxce}3E3AfFOQ{~WDt*l%sg}AxL)&K3W zwH-?6#>cySu*y=|&g23Xr~7XPf3vR>biT8vuRfDuyOEKf>-0X{c(H)R+Du zm8&@q$OgvbaY#TZmmaOv7p$||FE;gBA}KJ2*Cckm$--}-`f+JY!TgZ#-R>EiV{bLf zYBRaK$2yN;tdy4?KWZ0F(*`BvD|b-cDP#C%5ycQiR7d_Hw!s0XUFtcgov?Bf)|_!M4nSWBE$=o)BujMGjyd;>Za^O zcjxP)ZfOcPmvSRqRb1?gC7Z87vxfsGSpGX#6Hu#t9r_oN^Uk5;#1O_N8!@8JD$8y` zFCxclB+L@_XBu-oKic(S_PH8#E57TeLeqo&JdHpAG)C_p4f7L17|wW z-XjYpCXQ$)NGgyM`H$r#*a}Vv5a`ZSygPc$OZz7Ejx zE_?oHqaN+oPotS(9t2tiiDxvyH_Cf4tJS0PQb&9(&3`6?my$DooO*oyH;>xeCy6`; z@zoVLxLHGfo6F)W<}x0yYzBpnZuA~lAVMvVQuNyetBNk{OVglq9gB!ELEivvSf8O0 zXL3@ijy5#>eY8bPjox_dJHuQB;+^%UW61n}JG3nw3h~gsDj|oUU7USfVXxQKgwwIg zMA=9)@0`ar-|`3e;%<&aP4p3`4gR4onB1Kwi(OtI_O;f7`L$}CSev|iJBdGUNuH(&b67l*!d6w2G8X(i0_ID(qIt8gEsOR>5tr-3*c6-G z!HDQ_B!c$?X3D_give*cXNdwr#uNY)T(m&iU_ND1&CVV39gRwes@;`XK&NWylciea z>YO2}!;$;-cHws>nNwGo4=;d0NQN5Q+8uMx!gZwxfiCL3KZv5y;2byvk_&s-j%H`y zazEE{$ZRXh%>pO00;(sMTbN}qR$dA&g_DRax5Com1XE4xsJ-$$TsKPJ3`XjJp&3Bb z$Ib{kRpfG5?^T1sjWd#O%~)hcI<|Rze#$e53#Ib}#cc9KEA&xDTDBg8lFC6PUdbf=zbC?L;1Mx4T~cty#ItQtH3SS)eAx z99qO8&V0zB7lNKbCOjo$B)}jh0~?Nutku;PG>`#{b@h%~;AYFIg2-TMh`yN&v5r1a zYV6aY2f+M&7D-r_U9bh~y@hJENHSRAZyDEQR{o~OTzJ2OjYWAC?kbphn!(L&0V*5# zUmot1Eb^Qu)LizXtnLw~(1kSO23wHkF>8Syrcx?3;>YVy25~kcad4Pj4eB|`X2?qp zEI8F$cb66&pc>*RyJ-K_#nZMWmduJ-j*pJTS5WBtXfg0W=?99&L@Ognx(@hYH^rq<%98l?GlNO zxbq)m)YZFNi*y<$ZTXvU-@D4aa|M6=9Xq)#|bJM*mb@+O?9sA8?Rl z!^UVKZ-r&pKvxjbpe0ju)uhnG!Z9B{ND_qSH5%#z+BRBH3qZx!C|hr|-{;T^JZ zqi}6BQg)O3B3$_LFDjkeH2*~4yt4<(&J|waqL)R8uJ-v!b$Aqy1C}yZ`W$YsFIh^! zH|VdLr#|dLQ3|i*4P9>>2K+&=3Dl;gha5&ER>3HQ#5gkKlz_0d+OaK+fjlwgqqp)r zp>C9tLuezI!J$XjpcTc4&L5u3K*-zkYk6pzuNFu>CRSV%{wG!T3x zGNuV1;*#RrJYa^iN)p`_q8(_SB&Mi^Ffocv6$9+7~0)q#1sgb<7jdZpm z^PV9OHvJdKOnQb+`F+`)juuFkLvhMP-=u&|dsl<_=~pBX=1pUZrs1r4r;VDHIfAO% z>`;z>2bp4Cu-1&KY{>V4s6dM#mi)>E`P<)-OL+C>xoY`TQoyfjwBk}D9&aN27#s=< z=kREv&b`2he`f_ZEE1DdF$BleM~mjQAF5|@0F%-?!v|}>{NiL$k#0Pm0`Sj@DU?N1 zcszH$P)yj@+&%H#$pwit5K6sx9IO+WLJjBh}en+1z?C&cVL!lu}gwIe&Hqc?xmLMsw$ zEQ1}bH-F*K7-esk>?~dk6aFY`35-u)?8L@G&%+>DW|5A|4VZc}wR9KmW5Qyr!KVzx z+8c!>5%N#B$fnv(@>{a%wTSoK6(S4%aRqpL{rn;Z?9W5WbpYc~(uzd9MXS0NPAb|Z zy63r+Lp4)?TvuI1k+m_yYuuURGF}kR?$lCS7Hq|b-cvuXj=rW9O~VnK0ke#VyAOAT zLW6KpWlo6Pjz`e$I*LfNA#pyAj#|9c5x}ami~4|HEanQmEn380P0F>4x_apFO+>tw zj0AX|7Ek)b&eK|(ZE~$UWEXKvm2Q??GYUIx;|`QG-9AZXzd^P|ZmV zQJ1C=pe2Lo_qTBwg~rUmH=4;pLbS;ixHrYT2&nUd2e*&-KG|YAD+mOr%Rdn% zw=74;0hU7?*MiXbpWL|BTw@WG^GTnpk#aM(w_DJTk3YOw*k(Qvm`mg^SezL{m?Qst zH(qsxoA5UlcB^5t1xx7yQEHE^4#8T}mEWrgB(q6MBNOTT3KkX9J%~DZ^#KHECyUg$ zNyO6rox2^i1UJhiQ}a5;F2`Law(ts^q)%X@O`9=LeDh1k3Bq} z4V=G$C2}~G12S7{!6AvyXn!1I##THRT>APU=C&Cm zGy3ZpA@xdfX}~UosUfLhQUZwCI*_1lUZIu8sAIZYrP(L!!cx)27G%s{z}X-9U$wB4 zkGf*AlTc_rJpS3ng;GGnjICo=BG#!WweAjsoBb@FmxNLsiaZv|r5y-gp(tW7U9oUNXVERT_lGPL0JI)ad!k_~kP( zZtUwM9@jFMBag)iMAvNfKTIX+N~SC|q2qJ_VF#uGy}$7x%3}mAG;zen;N4e^!b~+@ zKI8K7XZV9qp;#dLWSh)q*=BC<9}B|l@9^XQn6Uq&8@lH~Q@pLiXeRCMXF&{d%@PVv zGS9L30AJnIy(hp5Eh4iOi@BDIxlUz&9O;ph^XE-_SYCGR8Pa)|gh(?Kn_pgo##)aa zSp$kYNDQ9*AG6oQ$Leq=_Xk?mHSr?rs2+Pz24TCjEB=(Lv%!w&%Q-#$q}ait$2o30+QAW z;5GT%d5CE!w|fmB0qShVs~QpaDBTD|NMSN$F%g>^R*jK3ZYNx1r(D`*H+#v72r=P= z2KYs2>Jve|OZ}1XBXjCAru(_g9(HzKI@|rwk;6wOo;!OuAN54T{mTM0zA^q0E}+*8~M;?tXVHoE(3l?(p;}8V3$FsL^@1SjRbdOTf$zWjP4ixEIJCoZ*xYmzhkOVa(y4(_YZfa#FE0=n|ev=Z4 zY8VX|Usle0tAty`69ayEOFHK?@<6J6VeCeASIv5N!Bwq7>^Spew|oH`o06z_s_TKy z0T^x(=A2&Csq1*REG;%CRUTSr+bXDkcVo@OS-0OcJHKvxnKDLt%)-lmHnx7dYq*8J zAQ%q)a9qTwpB{O>x9*RZ&p!@*bi`+Z=h<5moD0Tj8=Z1mtQREG7iNHoEa7^)boF3^ zuskL|!b6ofNi0Pvq%xH7N{h&*(;+@@x#g7^g{(VMzi&ylTrdmmJ3* zZsXm^{^Pj4Z~7w4;`F~*R2IS8C2V~Ht2AR*}$a5maLY! z=fOj{FX-S!)32&~NS}m&Zei#Js1%lD+nP{Wf~lL#F{?=2vu|UH+=nfSrBuhD2Y2M& zmXes;pmLvmVo)qG7z@8$#5Q%ZCXY~tx#*ETJX1gemH{<__-!D0` zTg(^#9mVSSVJMA69a5lbfF1pEMt0%wHqL-|v;iT{*HR1!e4znpnJ9DED4zUco+`K< z?!G!V-1H8nKJF=!I>z2DfN{G9cOEUoHN`8*!oOTve?r06d+MIJLW<3oMQ-oc9;_= zRd!M4WL26D^X z0hnPhpN)KioIP)ypKDDPoq3rl;EVrQV}GRd-gzB`_${RHhV zMC^Qc2YW8sXP_ZFK;mwfXvMr3(_~dC=Qh23HTMs6U9sFZZ9pNv%8(HtnTq5AWS%Fi zz0nl3N!LJ9w5;)}!3ho`2NYxWB7UUInQBId%S@oS-5`mjiKH%8Jc@0bc3VyMFzQuw zsish5+Dp7LkrjtwJOz*`R}joA_V$%cw=>YlM_?P4jCrV={jX+hd~LP9&P6Ewc@-c` zy_mmtV|8aTovBWnl-Uij#KOV?xbGk_H;vB&==++-Ki8N^x8g?v1j@9}GkX7HYw(;v zrGr0c7U3pgCbZP9$!Q3*KpEj*xoh4O`XpS55hb>0gdS$j>(m@=!mZ>*@zyWgw@lt6 zoM<+H)^6!i^M3sMyw9DMKT%Yn2Hc+)ytp@T?2akrG0u#o>o%|6RWXBb(;lFH zeS#i5oI7FSW%Thy8gr{jK^|H-75wNcqc1qX&AH$TlO!ybTFzRU&@+1U;7IzzFJGL% zu66+A#cyN*4WO>~d$Ev5)T};nKW|oMQa8_88p(Gi)YY2ec;14K@MAHlHgn8moEy=j zAqt&;YS`wPppS%m_L)7h-P#68nbp3@k#m}-wa3c<+Peo3sg{PMTaZg0Mu0St<_f~t z#lCEV^9%J+vc-yvhj=$7i&y;1%6tPe{U0g(V+Z|2Rby+m=cil?|B*q;hA_~nrKD|! zZd!J>FC#QzgYAMahN(QWz#8T@ppCl=I%S3%oYy-}x=ah3BKHK-Z5^nhJw?yH2MKw+ z^gpk!&0IW|1z7a!z#^^sW#UkW%s)+={T9BBYaxzhW75Q0uhS;Uf*B06GUq0t7RLJiV7Vnj=? zHE%6t{QL7HVzh-LK5&@0cs(-KlrlW-cg_&7AG)QjjMAY)NU?XNM;DyCSIA+48}Zx6 zDE+bfIiygCpfb;oW+cR?my9r#&pg3-);?_UY_qz}{_;Vnn~l^?W}nAv-4}h)D&jbM zFYQYpL@9(iufh;YQypYkFIFUx>3omm7Ij9y+XVaKC_)2Y8>V8&P#r1*q}+-@r>3U~ zMtcgPo(XoHUsBBEH(0nU|_I!>+NdaRE*~d;^|Efjze)aZoiL z9md)^(3LcidYi25&aI(HSjb#z&TyTJwEd_YMH8EwLLgu@l3zg@BR}5+!YI<&;<^`_ z!722v4*iQGrkN-|7_e-{b8MJYhmNI@GI;W|q8e+Mj}{vpsgP>1U!I|ivgWpJ(kIpt z?xiD^ae@(Q;?K=koCR41Fgr6)0CWb8oe_FX5rpV;%FF;Vrid(6C3$Hhl#Dk_qTS3$ z$!J*P1MVQvjYc%2cW@C&nlZvmRP&&z(%G2;&D_RyUdJuYl~!N z5^_G_(dlDM_!BL7r46XLAs1a2XYsNgxDHYH*?)tkmLdi!ZYfq(c>>w zy?k3_yNRl4xVy0;kXHt+PF$}QPux8E{C2wFPvr;>d8{Io>O8n)w44Kk#aXK@l9&r0 z(uj&nc9g4!BQvvXOMKO_DjHO==&w&P4W(d=TYM>QIQMD$oC49Dv zNdRnXTzPE$J^+8fa2-tVbC&X00!NNvW-jOLNe*3X5$sT-K;s`+;qw<;=WHb$M!S8q zS+qkT2f9|R6{J}5S}`&ikT53k(jvn;-JRCXvTf)0jq{xcqqxeOAYCu={noQB+-X(GBVdSU-FbffgddjV__HP7~&ew@;TF8#f zK3H9y)3$6N_-zpr7`1*u$bK zHegwt4>}^4%^?G5nFYW#wk0;?-E9!V#%k!4OdF=rs&l8+@!=S*$MdXsxYhN0yi|T2 z8y60oP3Q=k_z;c|03(e#EVUvU(rz3!AouYyl7KH|w8ncYZjz{s7c_3A09YII^cKq%@H?f%pmUC%4`hjuTk zH*WfeQXA%pK)4&oA<|iCDis9t+$}fUmN9V8In0_Zh#0C{8c6lU$dk8&tB zF1N8sPf-UNSwbVIDH+wZM*4YddOih)w}zo38ZIo`yfcFtMs*D0Z2`pTV}&imNe#4M{EL2ZfZ8YT3jtzFC`RKCQ_+7>a^exxhhVWZ^eeCL*evqcB7;tm za0a#KK?N^c!eIVtw95|}v4!x_L8e*&FLrJg%!QRE+rUB^7k6gD*(+R2PNb0pD^?;V zJ-G!F{4<rgG0O<_Zgcs`9(nSqxB>CJo_XVhXK>C=*9 zBwO^j9i`1+Ifrc(2wGULS__Hkh;S2lv9Wl;RIl~n(2I^NqDeRKZT1ul=oa~FgWQbM z#+iWD2z{Adlx0R@zsONdjN*@$jSwn1B>#T&385X?}N}$$h&Qt84 zg&@uf4vLp7JTF)Q;ya+{6v6 z*?tCj#JXFVdji~)4w>T}MBN%f9`m9v z>xJ;+981`VN2ou0PGq*9y%Cv`g)Xxo?x1bJck;x`wW`PDD&u_jeWZ}l=>8EpTTo{z zX={$x{IhFmo`6`|q?@E#3;FW7y4^sMnpDfXHc({o0prL;u&{7?OTWU{xn&oM&vwF& ztljd_0oabI`1eGRU2oiCQ}qM}ktPr02>_?ew9ZJ5Vvhysl%uz9o2k9Ekn%Y@qqsqY zVk|L*@jZM>Fy6s?r3IZi6@llZaW-)3ZxCuhq%?fOAxS)#yGy(60OF`#HzzqTU=Diq zJ()rg_%-mUk@#7sjbKqXHgTZ^kJLES1X!|oJZXV6n_uZ}OIk`Jsm3kdHtb*9g!kDA zfA%AFwvCTVNjsf$HIE@iY`WDoikl#zuq!!a=nW+PE$N^&UdJ7Ne;_K}w8fQG6^;Z_ zKt!1cDBX?VF(*cxwdYCv?239cpl3CHTkW`EK)nBnl$~P!Ye=vR+*W)F_S`%*_p8MG zp<_m7IGs=SdZg4m*l|#|j&ABe4fDzKD3)s`K7CFG>Ox{E!KHtk*XArNw4sx1=+?pf z>4U1-`@uyPOy7z4n22;Ux^FtRz5P)Xgh=U>zZCcsdC+X9noM)TJ`pnd)Mtox@24YB zXlN`^`t-fQ4R*>upO7R(plL!#V7*k^4=zNTPND&(AAg>8TcHIS(sj8-xt?DC#iqoTa`3J^nAXyp=P_L|D;`}> zy3-TfHSZb8JP)G;+`?ydmEf@>`MH>^vQ811ZzLKamqSc}6HH8@RIT+lVa7Wx~bR(t#qDwbwDJ3YJaw!ga{@npgNCBy5tI4Fh=oGQMCsmyMYj2{)UF(V((#vXlUOvl_n zrQPai$#&7>Ynq^0SW=xLB7$`f?B$V`f@Q@qtUEFOp~6aL-hllMUSGl$<*qth6iv4`ct_zcH7ZGG#SwQcLx zZ!m7$w0Xgb&oLWDdzx?h{N2 z#1#rcvGg+Og|GwT^Lq9gI-##5H1SDN3Nv9 zM$Q=TT)U{E+|zN`YH1Dc?GxGgZ%S=_ykBIb6IZoRk5WLZn=~+5IOu;t<~wC~YS3t` zB@|)$6^tsa6{@dxD*|&Kr+uuLF;d4DBE37YnpL68k2iwdBB!$VgIp2k4E%(CLbJcj zfRiCt^+n_c2)Wv9J6Q0&$47~E_?6MeGwh}H$%?;xzm*?8w>K|q$oJU~d#M$QQmqXs zz=id-sTEbo6(Tr0-qJEiUUBzIs=IIovbHGZ#ys!y>0TpuTjt-W$f+rFDX=6LWs>CXjzyT88Py z&Hq0<_R$YtkKOnD6Su;Ri(?X3rlq@`egEW_vyT45*ETiEBCgULDps1iK@BWtdnt|~ z1}}vlNqR3-m@m26QJmg0=~KNX(TlfSR*tt?NYThHs<~PCZhtZg2Vh8n@H{|c#ve9i zc-7#ROLi-69ZybAziI(gdV&0+jEJHd>_QcXd&%JYkiwMKK|VG9!aFU7!c{U&nnjPI z(A=IOoo4Q6CT8~0n6e_9>v0>;bDU??J$?7?RlFr#Ia9K_fkX;65)=-7O+v3ft{Xh* z0<*wG6i|Rz?4jMLCfSWD{EeVpm^WIP4v~?$*{!tlmQN-s7^>%_<-G%Uxhs zYC~ojjXr2qcpuU&!D0t5+v#$aua*m-P~9Qkv@WRej20_v%>H6tW5 z_!1KV;OUvv4qrTS-kFm+b7=6A z$Ff(0%m0{|{Gi8geDWuidG`a>1bh~<?dUo_C&9;T8hN6jf1E_sW4`Q8~i!0h3w*z#rQzS>3fyuH9cP5 zL&gC~X5fWJIdh9-aJ_m%Oq@ec552m0nE{SNUY;f*dvPhWG3F{^=b?Qn>5QNq|)- zw3mgUOgTawwjXSk-?&|M;?o<;4N5%q{2=KS78y=T>urM>PZ z@AwQb(mI$DCc{k=?0w;yRjEzsTbYGMv={(Pn!G-AlWAw5VUfoKbQ3bA&*0>5YX(dq zkzzxzew)BI@>f~l#{6#+3P1U$KVzkft=pUHL<9Jd;t;+^ns}+#>%Fbnt@oi%^6(!m zAKKd-l8YOii=Q_7f=8sb*y-T{6A4@<+`1F0OnDqaxYq_LC$6B2j&Ob+bOyJS4Q`}zvs018iD5mtN5a-TQn)scr;Nh zlwaV905*kO@5?zVJJ5;k8Y<+CUIMTZ5!cX>$C8Tsg@XPX#Qx}Qfz*SSt+Xa9A<-+d zI!JPb8Da|ZMfgdAr1f8I>c$cZOv|cEdq19TY@Q1PvtA`QJkrdKwdkc0{U1p)O#*51 zp-`3Y>i2GipU2yt3tzYc-OSDtlJT9;E@nrcgjTf#cb6n<+aBBVY)dnXchx@Kx`4kd7E%Ot91!b{PPee*9ABFl{p9yXSgwabxzBlfwd z?jUwTP8vY%#z!B)Jekoxjw(IwRw8$4G}#AG$o3a%EEbAN_S|pqf54q2cop((X160_ zY=+5Odv1-v^I2n%nj0>Z%*fPx^XA3?UAN><8{;w3Xc*C`M*{+h^Uw<)<^iYf%s>LI zrlW+vfO6qlk8k7u^U>P-SU5Pgw&Mfno^5I|9J~5bR5dz8{=>`hg7daUJoQllQ}Fy) z=aW_e&I&>){)_&So33iBXKhQegCEzN1iGbH_vwrG*sx8?N2qhFMvjAU|4bQ>)Bum- z_lRFea6UPQ!A1gdyS+x3png>)s{X;{f0t|PhnNaP-SAv{+0icesIfVF;17?emF@gq zYU|8TaseX_Z?$viRR0)~S15=)+`I6eoQu1lvag_ocsk38x(eMaHS-WgeaEE*6AVYs zM+8ttp)kj})wW`27X1`C zwCqUwjH7+7FS(K+|2CRY*+*Dx@q;h(e3XTl-w@;JM+b-NF5#EsIUz7&g^XG}&7_ge zg!@S!I9zTq2oqV*evUQFVfEsErdyt8Ir7E6;S_uLVu>kvBEMkff^3Wa!o(j|tLqBu zil3q@&Z5uL?9W-6|LyhtA@AYG)(v0ne&-P!+p1C*W*&QXld~%|Nt4ga0nsLXOq&T4 z*YF;zawpu*<$I%5NB9qwiT`w7Vxv~4hRzc0#Ww<45>0`qa!$o zRkpV{p1H+kujkY%CE}jW`sF-M#x=SI4~fkZ1NLKbT`$N#(Kw=pCTaqK_iTp4w5(lm zV8elfQk1fq7SfzX8DdHIfH`;-NCw~AnnkIka4E+T@$XbleZDfo)=N=;cQ>Op2BfHw zInJil?gRXj1?{&5!zPxq8vxn%x8trPj+8W(%d zV$^72lC?xlOc@lFM3byaqDf4$C^4k3EfV8j-pzYo-UmOsEX&Tl=lsq&_6*@-!aO)U z$c(?K#U@yBw8?^sz(^?_V|7_(w>W`z0^vEj8S8uS`B%|3hF&cp>xG^s&?+9Yl@?D} zGp{-phZ-ihuf4|4dt-I*R`1vfoa|{@fFr$){$bgX2)p7bi2+GAIVBW)_}1 z3GES9f)ontGPMY*MRjv6Xgx)_%FfA!wupjk0+`0sP`iX)5R{7|qll4m(WMz?0Gxxz z&e9%+;t2vy4&ihSp6R&kkTVv<=p3zWtN1b6>A!)Q|B4N?43YN;57%Kir5Mt1(F%%+ zhqtbfksL)>sa0KcAV;Hy&tMDvU#XahTyGfPz!W|*V5x;_2P0f1h77iPm1CahQviZPJgefUscnJr5SOM4Us{%KrF!=m5e`<6_O0g>)CW90i!ZPq*HkrAcbPWV!`iS z>Hn-IjjSTX8bt!qL!cWG_6SHF1JGe;t;u7cGA{xej6Di#EVhDR{uO%yOSf!>n<2}yn+3FqiF#wCjbmxdYD zU%L1&+deLmA6It|t{MPd=C}e6h-xW9Jm`08>3SXQ`Y@QcGEpqX>*lnV5v#0d1xoLP z-b$+n$_smdxx&q2I3qC>O&5Wt36I<7Um^(;*^~&H1oVS}IhV*4BWptaO?Y{Ha+v668BCbgY4ROy~Ez4P}P>FvG!U!YDJGJxJACG|518 zKy?sSd~+i`NlJ|qqYGoTt6|N?lJ+`4&aC$j6MzkmMVTNflm2qZW-tc#5#VpJ?f*XD zZpJoG>e|M79-36NZHH9m=c)W92YamoIDqaX2ETbvIY*2h^jGrir1Wv{$E6_{({R(g zFL5g!$;|ukasq3e7;VWuT9({ov7^wADB_>FQe*+3*n6)(R3YQUM0>Ui17dD4 zbeV;tLXAMfQBMHtP4sFRpvutIW{2-?g!vdJEUsmdt->(y^$D}X4D@uN16t_%bjq8f zyu~r1UcXsRts=gBZp4@yj$Ix7(|9;kFcVQxO(g4OAon~XWjoEN-zE?!E9k4m?O z@TrOA2b*3nucw+3e}Xl>TsI+mjq0!1*O`Y2!y1KJkBD#}LIKrRNWk>wBl$ z8Snye#&U-Ih-p?M;_4^t+g|*oOuOi+oHQUE$Y z_z5_gQt>d>&o*zE#ks|PMZH;Amb1%mz5lj==O*T@nBP_%+Q%Py>L2bePO%51pffg` zjvSHGH?nPmz4-I^8sA3wd{iocc$^5&>`qEY^JN!fi^$(|5nl9xvjey!Y{WSjh$<(RCWCH!$@W84Mcf zZ!4h2OgRz_#d71hmFeh{?sfE z-{J53<2MRr2Wcv#=j!whR>TpuqJrRT5i7PrQ2t*qi7^w;LxVAf46st6mUmU#;}A-g zZtcX#n${UM8Nor+W9Rwy8l_g8zw$~Op zOhh}Nz6UwK2R%K_Quux`8jMhl2H;8EIx5nz0!(K(vWW zEDd<~Z)`uD+Y8MvhDOIN0?J1Trw3MUC6UWOi}>1l23KSQsxH^d4k%x~yHjAp zHRRcUy=R-<3apVB8$SLyUHxs)gdKfk%9l?z%?RA57{A*lv^5-7o_tvFnS+zpoFTYk zBw4ko{O^)zo{e;M!5xtmMh4W5KO8CTebWa2C}`?DQ$yajP3gDP)f{KMeR=K&*w)pT zRexxTxwIUVqx^|L9SPTBpxQWw{(;pd;A8|V!M>G-;PckZ`~4da{!Kj!r>jj=os^(K zXuUBI#kCReH{C*qapcEWr#f3tdCTxWkY0eU`(cxWp)R*H5xAQ`AaHX7$~o`9Dj3H# zSm;{uG@4)JUw?m^nYuE&^d#o9?*_#Ai-d6giYX2Uw8{W)*BnqjM!Sf$&BkkLU4+x& z=}!=QQ-`lL!PNr6NQxhpk!Tdsdk_y4*1dGcSIPJfO)W|t>ct`&d72U4Aq9wAfG0Zx zFttU7MY+a|6cd$h0Ds6On?5f+4 ze=C{@Jam=b5BO$zSqIBlR;{#B^E5~oPF=E{BlQc#V$#@+&IE46B=n zx|$*)I5LyL?09G=fF>PXWpwWzT6lFf@$*&0L5|TOEajDidW$fX3CqQ5#WL5~ zNb8I{UpoHuebhK%V2*Q_ExvSx+8bjm>1Z+Kl}Y(-tgjwR-5QhYq0%e9364~ zn0eyC9*4;$aLq}5bcaE0?OJJ~oi|`>$6*u1he4*4Ilr~n8g`KErG`Oz(hsyZz-ArL z?D-YW=U%B=@@VI;0WYolrkls;XalNcm@gPS|BU^7eGhF+Bvx^BRm1yD*14tkf3D#` zI!hx^Vf;@v2YP2NrFSm8Z?|;UKISuU^W#Oa8VvgjJ9rMJ2=K>rpxmYiEQ_9O0mwBB z;4o(v{uvM+W5#Wb`160@cfTM5pZw-3;i22ns7txnBCWI>AN}R+mG8UpW)Q;cco1Ow zmMgIu(D$Fd0y)iEtoQ7FuK$(v0C4MSE&XR(M1UJCuW?Cz4JI)~pS^reL`3doVvUvq zDHSI(?`*IGr1N~+n}AGVurDK8gWpuZYZHS3t})?P@lX6su(he7B5(m~9pEocUy-(P z<~RsD(SX4DT}7-lZmx3ZPcHvwJc!8-F+h8n_Oib8uw0t`FLX3|Zi>&}*M95akE_2W z6m*kj-iGP(3pWIp721T2;#yPKWZJ^in(f0Pu30cjh&2yX4;l6@ZtZ{CHl`0*qwoi)5nibL9Jp7ZX zd1iBNb6mnCe}B6*v`79gZX=*MyLpz!!N^AO-sh(xnq%FM>4L9J@cWH8Z#K8)cd}|W zZ?vYgmzv)+dd9)gD5KS;U!Pc<#PnC83S;N+mUb^n#|}RZMt*M61S}LS7zv z5i`V&?5JtHZ{2=ZywvUU{|}GNJN;t+f!6L>i`3&+H42Hw%zTjK z;vVtG(uSxH!qb+YKQ6HLkeImLJJ$%XcDDxZiMFIK;}xP&GrSRBswEZbAJ&cZ+|S(X zp89fhwD*KE9e{xa+M9OQUh@mgePVGnKIxdC%)hG_I$y;clQR{^$}aYIsXg2VJfzSq zzQm6B&66Jzn>?b}7iZjC1IXjfiB)%`f}@u^QpcZV3@!eoo1Nm$$$rea(E*D!jg)D< z0*ib4{c0LdN>ojdh~~hoHFBvl3YBCxTQ6N#dX72sNC+in@X$r>>-6&a-6~TBJ6@lj z^hMXGy-nP1CY|b%o zOwc+}qT;^L^9iiCnQ-<|o39WmXQSj2cU@?=%OgO#uWkVGu55%}?*sWhaL{&ONmfxp zaY38==0D+A&L%bTE3uplW-0H zK81nA!+!Q6T?e$g=A7uZc8c{+MBrRr%v^<$qxwsZ>n-L^<(e1HIdDaa3EdmYSv|;T z6EFJl&RW93zp&@B%Zss;to(^!zLoV-_y4oYi*lDcZ2a!_%C!G}ON$~Pp1q+Q@??(f z4>@E^_X}<-%=Qqsn{z^ZiwzfDgLN!!7i);g+Q10`q(|l7Lt1y{&JYbJGC)gWT~4J; zvtXI-Xj6~y&d6XB>F4gv^WN}GW}6e1+dthoK*P|`m(j_dl|fui-a6i7ORVK$?20~n z;gFF$dfo_}rvx!F=AcV>Yx7TCF?u3@&;*m78!lZ@XAc^Adyjqw*f@Sza8(^T5GecN z`^VGE92(!~^zoIf$n}me0je_5fmC7FEf*WMqoxV3%Bq4S2owLir3XRD(|hbGe`iKe zd{|{t{%&L6%s0!I#_VkaC|+u5M%MiifZ?tKMeV zgxh9{cFh&?>&LEsbo}yB>RqPQ^yDOh>?DLD%yif)Vh)+|kx^#E>T!xtBvz0{lJ1BTzaE3ZHc9o z3E~wghE~$bciN7W*fbOa!ddQc-~rkn%k?bi@Px| z3#*=I=nE9AAWCG>kzPCPuBp}ad>;&vTT(|0aN8Gsg~_A1-`AFQKZOL=ROr1&C(yf@ zb{b)h%)*jB8^N+;1(S){S>4`WA;O?z&}FNPZMZvf>YEo=ZMXNgf)vTV)_AY@@Gab? zOSaiu+7X*+I%|KP2Z7G8)^V5Ksb8|IX_R+HpxTiSS$mf*+}F_p)y_PLTho2#8;DSM zh$Xm7s(W&$*N1(!cavqglXUtS<0nK;$F&aLGFYRPP*>bWoS)P4A~}i$v=E+ za!cJL5`M*fbdXR$aTYr%uej*j)pqip`8F2%h>T*p6((^Lxs!G&rzQ^2W&1#8^C^;q`lhcD|wQwnYmI;0gC+M$JoB7rM!OPhdaWr^DU~Ey4Fe8S>@|R z?)Y|8(>nm|J&m$AhMH4`du?5g$rxjzCK>_prR9>}CK8nWPqy{9YUxcwEfdkY*Tj+Z z<+(iWndnd8d@I;*+4oyd#<h#RJUfMn zypr4!cS6_J;H~w;M_TZOLla9j|C)W>@{5(Hf?3;#e4hg+p^kL z75`nxEpZ`kf35#R_9s;PzVHcRTB!4u_YOLjD4YxRu<iw(w(q`}foCgamY>67xIPcD%jIqgJGo_M&7vqKXPFt#nm7 zBu08MN5w^KuUSu)TkO=uTE`$HboFihW`+4xlz*ih%Kg#wn{AQO<1gi22?iQ2xp-LA zCpBdtKJoT}msaJm7qVhDpX;FLu6=DPi&qy*TY?xpuD0A*t&q=hTxZ&2u+>fMuy+-K zpFyJ2b0u)XL@R!0D|{L+F?V}$SEd9fb{D$-Ew}XSZ1ui^wXEwAPbk2UaxOQv;eXS{ zo`3h+t?C<{v1i}i)W9T0K4&97)4^eM`V_IP>FBu}acM@_gh$GsYn?-y0J@Ct49MTt0AH9jsp;5s2fV3%N|a20 zINK4LV5J$0wgQYG8$^_PR||b(>U%|Wx(U{cjW!(SBacHA+?iu8%_7KPX2;8M?e%ug z&337bR}6>y@woNx(zy(|t+9Dz_p84qx=uKx_B(|+45l`7%@srT*Uf4O;pth#FtH`} zXQ`PduQ+0q4hR-N4dNuAwG18u@+OE8DBf>>X!GFxu*R|;t%+8$6NnihzPVU@E;jxr zEZ{J=N(NpsU58{9<16cRigCJ_oZ^h}991IBpAr&_uHHGt(1ugg7_lZK@9Ob6p?Hai ziUzT7&BQ!(5s;}>f7?IGq~EjR;h-TOfGiF~3veArx=J>U3>JJ3(YiD#jbVjzP{AI( zn#J50GV-ZYtqd>&!SiG;vvPGS!|>V+%LI*?BxIav2=wPFw*)MDc79oCm;E1HfxnI} zzZ{=t0!sRuu2AT$WxOU=Sz<@X$*d`6hi_gdcp=W^vogh)kpNZ5>|aQvtr@<7ya{n@mB5AY=&RX> zY}y)d2CE0qo}nv^bnZD~153Ulwv9*n=Qu;mbSuFb=&8K#be{4Ss4(;avCy0e*!^Ua zJ(G&HVrWH5W2G95MDVY0yM`KB4gauEVZ5EM1=t%&%$U<4McNq9Z!CRk6PiXObSD2P z9QHrQD6J8y--rAoc;%+u>OgG>0DtJ*nytW?zI@U0LR%9Aa+GbZ-I35}mw4QkT^ORn z!qG~XfFmhkt=Z_sCoKM|{k>C@7ijG+-oqG#2^NFe?D;ec9zJqL0$GBt%2<&j!MRraUK=sWM0c&- z;5_UVCnlhv^B+y_d`EeW^HIOw& z0LmjpTd`PvRT*kuKw!2sd(|N3{ovyj7OM9oq)e21zi}lCvKca9_gU_C>P&XgsL_)S z*ix=%K0b7MM{(hTUi)Ip7~yAtGkTYM3V57M+43E2?%=i61=fmbU2oZkJQae&fE2Q#s77E~Fa zQj7|?Lah~M_zMM2fUePXY5=a)WF!pMyMI6?8vWX0QFr9b#RhEDfvQCwpG@Zbi(sis6SOiWE?uvHwq%2M`)J31$HBl~ci2vLv&6R=8;G3aan(dF>$ zAa(Vu8!pyYiXn|AfC&6ti5#+Omh87n1Lu~lBHz7tZo;(_J1-u2&J=#1qV-!$C}m>g zG@#0{Mu`p;=b|Jg>}@f1GvDnZ;*DRZIWVhtm&5k`M<`egK(_2TwteMW3fpxi95aHo zrh+@KPs&NT;rzdI2^aCL{;Q1lCT6a?@-#`O)PcfHcH0JToC%0%yk|GYOS3IezsaY5 zAEgUqucKviX51(8cs$UM;Jcsqy#t)g0fYXf2rl-yO0DEB*bD0-8Jn2*75QJ+k9?Na z#D=C1kk990ORR)O=fatYZ8hLQOuM&C(jvW17|Yq;O8auuXY=ryL!TgMahoRM_bgJ0 z^f^n%8jh}(={R$vN}{6$@JR)9=abznD%M0DI@y{OQ{X6)FS(Zbq0%W@%-P}6-3Zsf zr(hzl9rV_&F591LtVPiUoPi#*JSi)lE0Co)M9r#*_8he~U%F_Y#39#|@a%;?ChAu4 z#=!P3{22Jt)wmzlytZX4YQ7=Xg1Kt*ib)(6!fo6-=f>Udzc0CgLlaS=qukAenSaf7 zlIz75=BkCdwl4U!yCUx3Pd1*{{^Ig*gQxiJA+dEa2($=(Rld z@jWami+snpQ!?_`3H1O!SxDU+xgwM$rOG~5_kK>TY0+vDXrD%tOLk#_DQ^aW$D-E)4cswQZ< z|9-_o&F9H(6YhCs8fK&#qKakvIYu(yc#F2cL@So^2LJMXZ1q_Xs>L3eXf%YT6dLDi z-kE2rFUVG+p5v4=L|Xtko+Eu<#e#XD6rhs6* zD}U2dq$Tz&T=;=&rITyrtsk5Dz)QDM;qDX19~~K%m|61|b$0KIGp)yT_~)s1yWGeq z^Bn#R872%ab|j*7Su0F*!D$!AKfP5qs0LkTXI{pmm`~@M+MGThQ}$ppOr%?3rvf4E z7WzQm*BeCKiG!rD*T(u)t$?MC677YJrck02 z`Khc0Wrx!C-?-Ccph=cq@GN48_V;eyl+X@h$P_=aX~n{W zUBIV#U7b$$3eQ442c?FyMNzAqy!-=K)-!7pQjPCF_qMg~P5%ul#h>p}(;*yVc$=*O**-!rX;V zQJ@8}pEJ9tsM6h1>l+t+-E4{7+{pmKi}bp8!ry$4d^I$9VEd5Vm)Gqq7Fvp9FK4^Q zg{zLqRwcbB#=Cq|Pf6=kNm)BA-*F64`zcGVFs7l-sjs=>77hD66eKJUL3gsURT-Ti z(P*^8_;jMHYu96I8)RDB}>hDYA%CbALDVi=*X=a=1 z*6ZUBtu1eB1Agjm!-=ntE4Q}XO0DU}`Um{J18=_AxOF&Vf0VuQ#WzNFPD0i*gU z>hJRO#IB!|O7t!vw%zWQI?(N-TtmHxaXcc1+W1(deh3Brs;^R`!+dOCoHS=K*_xp? z=UEm06OAbWvfnq;_={+buV7lzwPnMdKJQfl^1RSyqbh-5G z7p~GF{UFn&yF#Do5Kagvtus)NgNMYk>1zKx&}UDa$7D4%%1s zTBpPGEUE}i=uV_@#fqS9GET?$_QRzoPLeSF`bi#JGoqE~sg0mT>C1|GUs^C_W3{sO zs(SAH7~jk-gAZw2roS)8H{gkB8lJ6?6ag*?Ed%PbDpu>7JLr#r9sQ>C<^V&yjcQxU z)_%VP@1cz5;gX>ihhv*8muR0VV}>?p>i}j;|F5Rs2XPNsm{+4VooeQdu*$WO*HTH| zp|4*E(O7zMmGz{Itxf@YZ@+%_`}T-)zdstg#^sC-I0T$PGh$WDsVQgwG90__mwBDf zTJGie@OIR((d!DW@vf%#*87@^Z3=9ie8tb})!IInVpiJ*T#9)aU&-&8u`}^)Gp~rb zbM%(Y+Pf!#@5vuN`+CNb!@m^S%-8AD-52Zhz}sK$?c^dG*(}KFIO>vpF`(SmSoAG^ z8@w&qzIDSf*&gLLAgx%J2QE7*BrEUQ4GM7kaX~$;Hgmde0Mexuv@3mBE(f4X>P1KH zn8^ieXcV<7n_`{pZG%qScv{}0>djxd$Kd$1c>he-)bs2`bx)CYYjtv1Y`0U^CN{m5 zk55bo!kLdgBUHbi{BbNKd(*k8t+)8h_!d_0p}7_hMu@Z6&aSNAui3+1^%gx$=f#q$>PA$$1Q1%Dh?CL_>+pSJrmc;JeS1vROk{hB> zJsLME>UFr^APB;`HiGlRM{Hz03S3F_*N=|AYZwaO_S-yPkq0mQMd;MUAHHa$CzS(x zm6iA748VJLFENhI@QdL7Q?OuSZl80ZNMX(cc1^NYb<|4w&bPJkAAyR45*$+@sG#_m z7Vb2Y?nWd$H^~Z98SS#2SFRty)uKU~i&W&&R^PZ}YimSGsY^mrrbC`6MH+Y_$*8q| zQ|^CxCfuihoorsGYYob?K6A)<$McP+SL+y z&n?R*ILGnq`Ae<|qTconv~P@fUFm2d|BxI+3g7Gfp|K?eO@&3M{k>`#Tkj8^9N{*P zi}KaBdgTI?%f02-!N$!8a{Nr@nElJb&5~xb-f^<+mzpPC8pdDYrG#Nj3={6Gr`Ag8 ziz(#4jEYlYm_^=RNXS+iL#sr2-Ph<%`*=)Lt&eE+xbvj#_=mvGjDUL1gQ&K}>d@f6(8uOZ({@OFR)sHqVr`2UkC0!?dCYX8p_#H%h5c_eE|BW;1tGuULnQXXm482e!|~ z^3`h<;x+FBBZT7#D-~Weg!#p$Q}LjEQVI(KM4qs#e1{PsnBCPMf2P5Zqq(^E)*3t8 zStm2PymON1pE4OEm+Gn!(epALP!iI&Eb0YlRO@hAz!Vl@YyG$TaMla7JcLIXTk>-9 z?m3>TIyR=+>W+^XVW)J)H>z|X;82Xg>%|b>{L7clr`xw=N0d9qCewqz$8=M_bDrH@ zHPgI|U%6U_?Cv?CiUorc9F#UE9P6`1D6B)<30t~CSMckj_hYvkBf^R=(%;Cm`Y@o@ z8}!Pv61^YQR<96c;;xBcK4i(VMy;1s*E->RFNxYdepJY_oy{d!Wnz)LP6Cu!JahL& zEB%0P!TOD~kC0B@w31N@-WD8_>AwMVxg(DoS25`7{uEOS6s|yB+Me_XRFzBvK>NKD&8!*eOGP5$-UPy+|}!@W4T%oi6v9-4lQ(d9${@#duSW zLsn+Jge?Sp-i#ojv31O8pf4yd@6pzM^L>mXgwsny8)b6Gnnm93U`FrD4<>GE?vfXI zK0m!Ds?>9{kzO& zI*4EJuX*XD;UO3|`gg=UK_c(;;=-0b%GJ`5a7MOUV$!!Ak3gwOh;!i5ThBI0<9{#N zqbN>S8XifE!B~E@t>r|cs7f9-0&l}b)fih~n`oBaU96D&s?06Hx}jN@Tl*Xrnla4V z0-8oMT2EPpTY2}C*#Zws6$IqL=K4FmU1NMr-F)r(+2_+8qYTv!g1-_QkW@iDM(tF8lkGC5k?#}92u7nED9acQbg|~k^ zum1%Hn235iNx?#|02tDdlKAx*4YiEBKA2V><5o8d^cOMpR-QQ^^IB=cXQ=aZCZpOO zne~Vs-%#Xq(W_aPfLf5|@EpRb1S4<|5bc4d>F|5FQv} zezpaeVUV1Pqom=7GednU?qU%mau3(6zRGcmj=1C>3}ND zr4}Q#NQY6D9f_6>#!6MnV|2BcC<-872#!ageZH`FJJ|g*Ng0Sz0aB zLM~-A_?5#8hy2n^>*lnPyaiJlBT(0l3hjk(z{?10jlLtnAjzZx6mgD!&HbO|7%T205@Cb$&j>X2o?}}^JP>lL)mjsVTO%DmjfGe{<3SNgqob-shb}2Wbzdnq45ye zxQQ~gl81#X&goiL7~vXLv-$=|V^#YCsCP>=2_93ZGOSXfDfSd)eiy}!{MxW(v%*_{ zf#x$*pmot#I&v=0*@MYT_2|aE$$uMNW2Pn<;YxXixxp^W6;}+!WTMlBjPXYP-zU)1 z?6z}x)@SfQh!xyE|4N@6}1n~u(7#-6%$ z3-tHhAHaX=hI%{|JHaFoi$doSJ|R#Bj7**FS)Am6`7v15F}Mz;nk_KWL@vRo6)i}X zRIlbB$~l+#zdj732(uduU@E^Cd0yr-KnLk+2BvR>YfLyU z(j_7szYNz|2!zbpSteapRLo}@rkbevPiYhpojMMWl;G}TbfjhJ`Jbk0gp0m_G=2rd z!-_jHP$3u5icr_xi4sj)L0>TK^E#Zw;BkWOPyus6V!uNZ&R)!9;}|(djttVh@%?+R zjaUe!h%H|Q!mPM)$ZekxctHpMxCBxRFqbE@LotM(*IPj)SX^s7|Is6?!ZMLWG>YK> zKwl7haKz+m%vc>Ff~?@6bnx|g1HBV%vxAJ>w*6Oo@UGtJKND}i5pL*a@UPfK$BqxU zUv$WQqlcD3QRjtJGe~<#h4b&$mG`dY=_(ekHtex1oBd6tn+9Nw7OMIm0%^N509I)N z;Uc(juIAlY9WywJ<^O~E&zzzbv4_13M7jl{9w8qKNHimor)eoe`$^clwbXPLA1Bhv zS+Gfbr$HnaS}_j^mRQ%mcX+JF)k;RQII3<|85&Dua-MNXn1sJaO*{J`@UsweWa3da z>BkZTAfJ>RxP)WQ61{d6t+SM_nOMJtom&(L9iD*`7(9Otoa$80JaYkXN*)loX86lo zBIyW`eI)Q|&sk*kI5X{@0x?@4lPtJWN3UT(mZ{Q7C)yk7Iv$khwl(vruZ(1mCFUFb z6jx(1k<83*VYW_r3vZ4l`ib}=s`p56#0jSb4DojZ+uSj?B9(c!y71}G+9C*q5F7;Gh{ zh_O=)HJe5=AN&L<5ky)@8Zqw%jSZkgBdn3=NR~vtaH8y5KKq(?4xMkt)5Q61I>Lto zcH*&G^Hq(3wvp)umUb|`5fn%8Ou2SG^Oqx*BOgbx57Iz zq2c&u^U;)>AcF-CJPgSF>h2+k{F?&f_bbgqUW~J=0esw!s2`gxOxtM_UTK{3-u$jr zX8eoiU!_Fpr#+@8mV;Q=8PitjHD8Tkkp_{w&4x$;Kk0gY66X(cMInZ`1HTNPe#5qi(n#EkI4oT$TcmpGpr0VlRkr( z&OpWhJkm;681UV4t)GM|g^v=K0op`O6>-!5POkx&yMTpk8F;Y4 zhk_sdsq+qZ%YNN}JIJ^l@;ObxLg~Ao{^=DuY+KJl)PF-%Tw+Z*(JXoX!47wR*?Ixi zuq6%%@8@XL9Wzg)>kC}V42dYT7b{-Auz$qciuqd=ya{%E0mIB7UnJ|T@M9n5x0kf5 z5zZ07dh?DQ*|zD4SXR?y`J4K|&tXd)nEpLoZXJ8~>M%XeL`EAi&O}uLx^|RPvLH*w zf{Zg~|Cl?^*hJaEsszLc07n`8dsJ_6u;EQ0PQJbdkUJi&MHMLbKCs)uZcX}&gbb)* ziP>ArH=AvOj3D2HXfk{?zqx8V!EnISlI~@pR+-_`%`cE0{$k&Z01dVKPw$oDC1f#p z&5A*VBsvcBvR5>>w6?W(bawrJr3meA%>~UN&3P?5xAz=uo^zlX#3lJu*QuL*n(Oz( z2QV`va&8(J0U zvoa_IO9%}dyYI2mQ)S;syRxjWhETAIx-}g1t=iL*$?wNED6IOE?Yy@#Y;0R8Xi8UxV)yYtfeijy0}X+vY9<;1oa~6@f)37Slmmsd+VVs zU0^E>a)o^+qGQ`$R^@)dQ) zX+W7?`(ncm4C4GWA3GDuG}v??C?v>XWL2WRV{ zbDLQYKl(l~B=BIOzwG0M9(Z8$hG%!#T=Q)it50F~IdYo54x*~a)S*y$gB)My3YI5U zxO3=WP6&PE8&*r3oo5l+&1pCTGW7o5Tsag8hN23qkTIv6-K6XHFhWoo3Cd6oe zv<*1H6bTnz996CVZvC^Z(HLj!^K%+;B=OZRYOuAhKY8W1vI{~@zh9ggwclcGrkst+ z+_^c5Do&P{I~sK9K90Fex{nuO)I(3XFUPCyy0*ZJjc|Y$6Ly=m(`qZME%Z2pw!?3| zAn2V-h6_5#afjI)l@GcZxW%3sThG&VVo#=HfC>v?mz7|cPOWqldUa2WEFD}Q@toDU2mIb=yX%o zqm{N5taUqVI#F`f&i?#EI`&ent2)}xS(`x-+!eX`b>ZZJfXU3mPWveW)91H#bis$g z*GH_fBHzI9dz|?Ky-g}-(xc)Hz20jT!_k!HI+Nj??9i8|@VtY&CNmP=--l&EFV9yG zcdk#e>X}WJK%zsT%rBjJE4+UtrzQXBl8GNjd3-rcEF27X-YIQyI$X02+b_mlOoUf* z&yT(GS25PweC)Q3lmF(nWdW2e1AV3p>L<0aM39()LNZdI(n2^kX87b8!QmAw=FpV` zFiwJ2f4jWzS`}}~r<@`nF&*^%a!}|tF)w(jwklB zdQW#2mKpTU`7FY`wZYFkoYuO_>XP}rtw$styp&0Yb$o~~QX&*$Cnp0sRs$8~LPunZ zzq&Pcu-7qx#?Y@Q#iHetb@gE=U!PwYF6+c%h`#4#jp(w0k}$pW+=XeaY^+BLCO;B;5& zwr3^6VAb0XETQ1C3~vOc-dbRbyBa!(&?z^%Yv0)C=G_*To84VqUEg}0>zmeLZoRL4 zu!wSOi{4&C=Iu7xZ8%*X^6IX>j6~e&a>nua6BCGlQJ{#~T|gxBoyt9kbIIj>QY|em zX1(2rS@JnSLWMgLVH>5R!zO)V#ekv!0FWtCqy_B(np!;u1j@tUk7e`e^stGD8<6mF zq;2cC_DSdYB9&EwAy(}8I%robwh%~~aO57?*>^AFE-v4QCk{+fu(D6T8AVA^sT$~W zFEo$$$kUIh$`zNK&YOrEPfJv7$=k`f7AlDccC?Y_Um82+jw+RvyK!vmEzAY+<_q-c zV7$e+w|0p$a#e|V!)1?Sy=_SeZJ~#A1{AzZPk3Knw+(%u)vqGOLrV-BzDo&`d_6wU zJDfqEoJ}E=|8DK~5un|d(8DNB#?YzygX;}8)9+v{H5NUVJ9vnB)zs#rFId0k(9D)& zZlBins={+Ar*rOYWp=$j)4O_SCIQp4Z2ud=nJMCRL&t!lUL7O!x@J~=emu==oyz?t9tv?-oo-v&>BU6OS4;o%$ls_}h<`Ax~^i9}DZ zXzl4ct?*AYRo7))ACRc^BCM1mp2cIN9p2ebq)Eg6bsBci^|{V|fBxu?pi`$`x4CO` zh}V$|;+1K`PNjb+F{eiktuK%Esna)|kDicse2g=)wD0fOH(w?RmxAZk{B>l|@zFo| z&Re-Q`&>CwHOkvAVI`aEeVA9`DKKBa9qyI@R}=7a=JaoUG2~C0GkhZ$YOrs|e0l_5 z8OEHA)%Dp&8YS-!PtZ4O<(uPJ$(iFSV>gv38=p&1$4F{juzDucdd`h+dGbQ9QY;?YUOp9i{I>Gf`BG|lFy;JB&3KHk3cu}>J>4=m)NR13K|FCq}@cwnpcYq3* zCA$h1B7MXQZWi5#2wPT*@8?>4KO7Dr=;@9dm{#w*#>27KN1tqX zj0gR$x6@5LKzWV@cP5PZLso_e)Wiad{82-3>(O-PeOfN5@#TTntX*HhDoBlL-XT+D zll0x#OJ=Zr?NO)h&DeFPZ~F-5na=Kwf`d2EiCq11S79e8Jq(EG0tD|$WQF2sVU6c3 z?eHoR?TE#oaQWf@3xnU;2|lmKgrBenu2?nl|K*%>Pr=76@$1m{s`@-ZPwUE*Ui zYfl(>>@~n+DnK(lR-+4ukwKgpPDPnE)7k=oP_dXA*?J5SeS6$L#yO~vG?4dZnZWrE zv3U%2y}jAu{^~PFUwXC=brqAp2KSzpwwf}iE}QF;`gLQ;#~s>>*0?=4qVZiNuLx_q zMVk*;>H~?GaFYH;w;{ngJ>V3D&`>8G7Qhg30EIH^M{)&Takg9(r{LJ=K6JfU_Fp%~J(zgFr!U3hEeK492e)z`u2I zYBO-Q(l(Zw=?1KUC1>_x5D*a}R$-;fC2v~B( z3wn^839Y;6dyV@CCfoE{#TRaSuas5)^j`N%&E6KvnEGPu!m-;0hmD;3|KaF76Vzq7ECl5ti+P6f;Hx!rPxif zmZ(vmWU<5&O;%$PllX-9e%`PA_yRk#GxvEN=W)#``%h_%XCmKk$Su}j(^c>Q4{9{% z6b%}zrZgbUS%ty#Of*C*fA_#N)Wk7t{V5P~?tdmfi5W}!lZ1y^1>eL0^3of8DqKaY zLVvKPUT&r)Im};;1{tYHW8@+o)jEu~8ZuyA8|o9@I3_t7k@-2RUG!uw1EN&qCTpUY zMKbEi#YP~f!HaX`@Mhqlr;7HWt(uk9kCyD26CK2_P97r_25jjQ^oM$Q)ScyKqP)#$ zt{U~@GWz>rmQ5Mxwbv7|HvsALq%Z+Q=#`eI`g>C-NZ+A+QLS0|WgcIknY8&KAAuzN z3iBds7CCr~V0v^p3mnv-M3pZVmN(OoWM4oCUBUfU^}3yV=N?r2#8R7y zBXtxhh>eflcf74R(R8pSr|t`b*i{WZr>+)H#79IQPx^_%^p1acD{p$>VvScd?6A_P zkAd1Yggp5P3pOLmIY60lF^x)enK1zIVNe?#B(5-f6DH_)*uk;9IrBO)GIJWlQZ@YMPZ%obMr z{bTX(*O3??yR*;rb?xc$2X2NZ_TQYA9x2=Ru}Y#gZ(V$u?+|1?n&a;=%3n%X6>>zl z0b5`q7I-1k%;mm%%GC_-(}cepF`r^krCC26UY3v}9r4d;s+(SQ!tu#;P zI7|u`33BLa9=8uYWloyRcv^HBs)-=wIMd1%Y zsR?n`kTM=y@mJ$=J&p_1nIT-vBiXt_2p!DopX;ytTnO`fM}t)~z;$4SiEN-1XEc?V z8UzUFs3RF*%D8lNot4?z;)8gLC%Az|9qCVfG-!w9%)@+5{P^>^e{X_lBY<>l7@hQcJ_4hz1tz>mi1Xkt$I_Uq27l2Ea}IR2$@|C! zq^2BMZvJf3?aGH=eBRrGar)0A%_s?uH0lsrJsMyDP`}VhQ_eh^&0z)4kU#$+O8>^A zVZuwp>bgg{xiJ&|La}}kO?vZt{SC-GmTaNP3LYl8ww>2^Pz>5|oLKd#jWxhs9WZO? z{N*;nPL#?-9T+#j7{1nwTrC#u5oANn_%wi%i_q=1_#HlUYDFE4Z8x?S8CXsXk zQFA*3LFhk&#E&BYVG!u;bvaC>{`S#FPLzhHY5`J5Q&GV47tIW=llqB*Q(82dL7D}` zM?Y)994W0>t6BTqOqn>ULPSoJq^qUdhNT6dI+?>S8q?ZTQs(RadlT7}f{o`T46^Uaq4PEh9}{pl z?e_y+5u8*u^gi4}g$`4DF(a&#svmStn(wx3j%vl7+}KT zBCA5_giov#635=}qAU;J(2DKtFOAZ~knq6;Pnj|e9b%PJ3pRD=0{TrV;WYY>w%YL| z^&mgtbx!UhhmR+oNiBk9fdX+P0dwZbUmGk%Huw}4@r^~|7&Od`;5yVwcL8wtPBYRP z<=IA0-j=ynZBGMI^M_(R?A~M0+ipu!Xa8%r_stJSh^^ah-(}!Dhq3*?`;kX$dKRhC z$uGL4Ml|sRB01x?XwIj{iKjuDFP%SZTBIJ~3&?d9r08DfudmUa-C)|r8B?r(By}-k z9hKPsb|iXav%BE{XGg?Am3Q5enYg1~+|DQqY0OK1sJWKfV^%ucKE2n3sfF}lFY8%( z_%wqo?1bx61PSRVf?W7=Rf8yyOED(Tc-B*I#ym~7KOLwD(oxIJztRSDG6H2)05v0V z>Nd-p52ycN{$sc6Et|vbx|d3z%rOQGvF;WNAcOCEhSSvDcLNU``It%RmCtrr=w|O^ zWTVD_weq^d7jxd9B?$(~zz|U?z~l9>KLv6;K{SnBJz?d^ev%AuUjvlZUpd3T$~kuV zH6V3SqvjV21SFvud>e$7cT$KTtTrF>1J5P1cD{NyHiWC|7P2_99FVyN!s0S9*!X47`&h2Yw`kH!b7r(dGfzOYI=$v0#PX2rEvz@lRqAmZWByh2vdevPoXu1?dXU&DFt9{$L-gO(- zZ|p4wZNVN;Ul1DGwz+3xL7Os+?G9|qN@{D^_1@tlhjTvbjcXg~?#&8IYHZ4gs&n@U zo)$5sVOecsSXN3}Xkwe~N4vVw6_PfB?drC6SI%_un>uxwMY4MhxsoYuh4NZakZN93 zRCY_|udOWss_fRMHA{v{`A@t>cj2Nf5A6&q_@+^{INowokm|BV&y2}-So>ex*mulZ z=BR2-$VeY4m07B?pMKdidCkX?oVo0lOO%=&>v1X8-2@LRMn0MD#=tvgY=DfqySre4~N(Bs@oCcX>Wy@P_I~DLoPFiMerO#WxI}5#- zCH&D&H^xPO9-}!OOEfods4_^cYj^a%demLyBCtH+9rG%|!Qrw&Yf-sz~5C2(!9(^}18`qe^w@ z$px-C>5FdF@6z|&v)$Uw*jiC9~`QyXYdSU6y6ZcpC{PN`F0r%#B zQ%9Kgb4s?v11;Re>?UmVC4E8r@I2@G4PV3CtF zAk!N#|BE_Q7IgJ!mUBSh2(d2LWTaT?OXgf}Nt%C|IHZV+H_mIK`5P(&--C#&kp$(k zKzXH0#nsLZh2J2XBAIzlSL#^4)sU?$={)Maxnip$Df8<*N=W`^B939aG(Zszs}Od* zXLI5a@!^RPX%($U@X3SJj}nWuPyTY(9i#peuzJ^&OV1{I9Y(rQL}%`RFfT;BY#oHL z(OpUMXp6WacY~X2H5hfNu2!>@%ufYeX0ls45M-8m5 zb(?>d_y4xw}nNbNDkGn|ZT6&*$P| zKLN>jJ0?j|b%@upHV@A%oWfoE>eH(a$aj}Vzv5LLUWy4S4n7gvRq)JQUJ;noF5hYD z$Og0=uDEVY0S+$1JoV&xrx#-)LefW27-+h^mxEoY<`I+ zgNL=?a)8!x0SnMKBbEUdosl#9dnUcFR!Fk_M(k9Eu29}xHdU{68+p?iyB&}v#xh03 zmYLz{?o)9y?;%&8!ecl@nU-*6)+?Fxr&Sb>OblU>uH9s zm+N5o=)h1h!pC4GeT6a%EGX?ul2;l!<-H6_T*M>~bXu3`KlR0`P`jN1@T$Tj%_4=U zvJT9+Qz|AwyS$xkkIpMarBPbV#pAuXT*kcDnFpe8JARa0RlXB@aci%ae5U=oc(8T! zrf;mfI4j0u+TGK>YZd)$D$_3VdOHT%ecETvVv&dIo-8RE>do$_=A^z&q&utDd*M%~ z#TxgEvMwe>;*+Ue$;NouZe7=uvmQJ5XN{~sMSCARZmRNgNK{G|_fTmQL?-hbSpeD7jT11e(psR!qy(bG zk$#vmlRN3#FP>F-2X)w;^j)kVptWXT$(giMt>Jz<9fl?Nl1VTYm73!11DU?@S1k75 z_V=$m@3|6}x7*sW<{Nj_V|=Yg>7FU3LHV66n7jd4&X@ymf#&1X%s_vg$R2- z)relW`RRC&#v#j9yj8A`ZKxOQVe2k%`Jg@Nn+Z~PD8Zl*x?bu_@kx`@?djf^zj^)P zpYwhSjgQ{7rT6S9-tsnBRFr{isQ-F{t>Qf^&v)rxweGf&kCrCdLnJHmtUDFfAAfOb z=119g76p7_@b&r^NQ;;OQL1r7rtasIynN)-+C56CtFJmPf4s>|0UVphZh>vWC@cX)*1ex}!d`Wd_9bXM{-(SNEx zf~ID#$B5i-Jk#dr_xB6V#r*c)O^urFb-$LhOYHTNqm(T4At+10E#T1MDWjcvb_CiC zFS(q3_-)Fg$JWKF1gk$(yrc>^0=8ZJ+(3%`wj(lKk^)}4;Z1O+$Hq(NvV0T(qGBUz zt%CsxTwhx^c;uwr#M6|Gf1Wj2o{ahPis^08gObru$;y&f;)IF=w()qCXY7dWn)bTs z5#|xmR3n~K)q!+h7nb_$yjI|e=EDCQI7WAQzBAyGJKwg(+~?_j0a@dKxS(pS?uZHB z_j+HX&WMC0J;Sh?lavqMyS9MYZ*LNC zH&KGizoL#9FHW4vj{GsX^AVy`Z}Zh`8MUr9Xq~>Fy`+_?yQ%qx2zmU{Etk!as)emd zQEXmEC8XQJE*g=*hIyDAnVHwthp9#5_XQ^^;l#1z$t^Lh@pR1hG*m4A$& zaPgZ*NNIyCSf{6*8Ou=P2x?X>PuZKwKiKqtZ;m|vMdO)ZJw*q;8cz=S?&{mtUSrCG zLU(Z`UxpHQpiy3>1x?z81D#*{2GoW*$IvnkO<=!$Jj@_G^WNZPLA@e zNSWpxU_!b&(M(<7N*0K9)KMJqEvtrRO=1YjT>4<7Gm8=ekR}+Eys=QYr z`^@4(v#glLp6uqsO%_PK_;yclzXlD5&QBe+4QlIn5UxS&HCZo`7eWEO(gZVdJY5f* zG^<xxD@7^&uZf&YHOgRhTJs*(6G}R^ynIu^oL`b>xKo7M@8qO zS}r@Z94L22pGa2cV4`W7SAVM3X%_zS&~3<6mBqQvWYK9V>GeCnnZX$@;Bm@(N3@d3 zPWxLEOKvYFQdlh1=o)VX!SqxZdqMD6VqzQ_1ZGc8ERuZ`@iD<85SDGGa3k{cW-uH* zmTQWf*ku$?jduY*qqlo0S-iX5TSYEnr+MvIR07bL3*Oo0$R+s&MLtpE*U?!BnrWWa z{vCCtyFLn_3O=coUAbWQv_eJ1J37^?-D(+!%&+sP-V9b67S}U40VIQ)mnUez*D2u2 z7UZk?N%Vyr>rhd@i;$EFw}sczU%Uz#-P7d65$-JNX~06wZBLs-MF4l#K+G5!JcZc8 zEJzDfno(my%!2vN_jQw=giE*Xb@zea0o@wR#wag4U0N* zs7Rm!7|IdCpWg+o_mA$`;r!jHji;8hTzyO3I!X<5A6+vF|@xEdUWF*u}>-1Q&aQUys34stybT^nNy_r027 z2oJ&l{IVkU=|y^j+x+cVJx#42B7-=q7DZYGUFeHUTE|Z#^F>&ss8OxO^Sm+z+z{P(bu!!$KZtg>S z9ul*e03Tj73%)OzNSX#U2JCALM~xU^y1m{A%=*5o!es;8bDg zIEnKlOcJgcGGdG*G!E2jKsth1nbD?7uXK(Gv|Vv#qzW2=|82BC!fQ|OIB5QDCc7TLyuA=Ki>RNK{B=bQcZiGsxePnQHk?p+kF{zX@* zuy7+l|3^D7lNi8(ivape90kORrfSRp>V>N54RXlBYp4w#8@F7~U^voNwLW?~aG>`% zx3>qUkqsEEx_WEI>YF^V?DI&g5njD`xp6a03dIbiWT_RrXJ_*KX-g3=Co)7&%2}jY z9l)m7tmcRPfLQMYjQ@Z-%<@SsG*kY!MWq$k50U6HL|)d zAyI?Y8=`8|SoU1(`|Ig=15u#Dqt!AQkN5sTecZdLe>dlAm;_4p9cayHqt31qbi z3+1b3>bdDLW4J!%|*^jXo$HW zEL_x}(ZfJ-G0sjov;EBd&E&YmIo28RT6KeRO*hzuyAlV-gyRQDYz3 zps}p`7dd#S33X@JOI27hy&f|Wo$KrF{}i%M0~1@jU>ZR5AP7p188DrtX3Se(n_DDi z&?#o}u9~{`8}cjzctiy_2uQw;h&I5?7aTMnG!M)Z?IqFy7y?V?3}i2r9Q@?o#o>wJ zTfGZ*U+J|XFMi&)@iXBfbVOiW1fsLG&=D)OoL~mqw&(P!#aq_|e9?zPt@ww!NjH04 z9FkDlZ;g4u?a%_YNUNtwH>AVaWEGDqUV~JC=0-t?WcBULwU0XRgcJHUspLzfm{7z{WiA z6>3n&xQs29BnY71MA)%m8uL)z(W(t^Wl3hNNB}bpn3aA*Yo+9Ft|UxT+W-(Jp}SE- z1#6ZW>EVEBcCjjHJ`jiVl4=3JIS0W_m^BUiA8MpY{VC4z^IOKB{|;;n?Bi^%5jZ?7S%FF$&0ts=(pmX}G4rjlrFtdmUeN*HIl*sv;Icllu`$Wwgv|%v&+m?&Vmh z8ADuX^6uA23;Tc4Opj7SyFX98A5T_yV0IR05D)5j5IxfI=Q1Rvf2lUdN~|lmyg&R` z(;Bz?mNgh0TSm30C#`=6*v;de75fIq+@&aup2O->1{SogLI(EW3(VgVdQ76rd6^jZ z1ebndRH7PmnB6q2LWVZBX}iS>ue7Z;kxtOM1T+bJ@#?=_zqzjLTZ7yxCggBL36K;O zZposk5fST_QU>hCn8Q*Dus68rzNZ?Exoe8>q`&>&yRqrBgT?tZt3-u&QJ=)(*q^j_l0*IyWeYN(>6{;^+naRQ4YB%mv%|mMaLA+i+ ziFf3>H_Sh@x^Dt8AW?cyV>D`q>l@Cs&j}}sr&fBKKQCE~{qj#FcP{URGij@%vUSw) zD63{wQ3yk=wTm==y)tbp<+&cryj8J2FFf!sblCx`5;SV1s)+bMj}V4ler#X?ASzo# zt8*wz0|l+=F)C#7vVb)8`tNX5El3K$9IEs1I#$waz7nm$s|Cb~KHXB21!d9D-YsJ& zTb3fB%#^{GsXlAt4;+ybi7HgC0tZc4w;6+@;b}Ck8_oE?H*m57mNC?F4VF9c(c8b= z0#(>ACrJqaaE_41jW(%a6YIE!W}}(%-naTO$N;G<=?7B%rL}FFigl?Z?bhc!GhF8K-{8q7vBih*+}AjC^3Y z1lua43WNhuFpO&p+dSGPVJy228WHTnCxq%>LY zhcEAF(?Q5q+7@HwIWw>?PSR!@nigTP3SA||R@I`RuIXiE-F`t9+#dBia}qNuAFwX+buto0YlulDCWT~Azu=U+)) zHxGP~HkWzSX=7QX?;z*uh4V_Z-}s4p7~OYHrc{~EqmD^Ts*BA=dVP4}*SSfSF%7iA z66zGjh`>7@3O^ zZr=VTt#@s6xYR;a+?gx1?6wgPSX2y%JeAw>tUagw7g0n;f1OAOQ{GKcPME$-_R$hw>4m~@_g+Xc8qO2@nUoi&ZvJG0l_?ChCWTIC## zijZN$M@b~$%`4pD{T=b$<@Yy@6j$cnf&SV1J4!ngQJO2~9HK62f%BA$BUFomR;9Wf z8Q>5!zzagDb)4{#8;%=$Tp7-=^DB{{-%e$oHKUgICb*vZO3l&9b2k2O5lo`u0z<3G zhNZnWcarEX_fFdSA!>apXE$xtX=Le-S|4o^z5ixknsskQd=_CBoJabloUl~uz!i|`9sO*&%zzylt ztl@X_S^G4jd#A+8Y)-Qqz`@{**qqvPY?`X{)1661gROXGr!G+x8x@L$CNc3H^5k$+ zhdh)U{m#m>H@7ouCE4t^`_z-zK99EN%dOQ7Xu#QD*S02!JgMKk*X|AY_nLiD_nop# zi^zQCZky;kXuRBcT#dkxU;=T%*Xn$p?@m=u0`V4H-YJ>_V@M^$mB;?;_B6-fQghY4 zy3yNj#N#tgwD8>sQP6wM;W`8Bk0uK%^Frwfrt899Ube*@s|fb&xORt=MOGn>qh>U2 zt7$$gc1ula-ZqAhQdPyz_tQ}`;YKAtFoMt209y!~H9LIc@?bNC@*w7mTrDw|L)O=n zid)m-=bzw4Ush*U1nECH7X#X{ck#&k(HAASQIzbL0F^s{AbAQgmQroJmHWzEzp35h zb{2yjcB&CxbQA6;=CkF`84z@p#RoL;vZoA)d@*6+bgTopWA2`@mZiP4m+s!V-i??A zDxnmi-|DcG$%-y9$@B8vumm2HjNhpO_|o_d?yLbn(lJ`=QcEQB4?NFiChXYEZSXP* z4#%vuR!h~C{UZ|`mbSaM7{QI{Bcj;12)*&Ijxfg&9DS-4w+qCYzuszzYpi?w`gZlFYZAus6+8>sS7aIutSJ4rNSYd# zKYB=o8r}m9CR@4TSIo6HaeU?P=m{^*lA!HGfr5kORUpls`yuIL>U0(u_z4JZ;dHyQ znUi`OnUg+4jBMmns zQ8$pGtML|V(>KhZ4SK7zKC7ZPRJ9(6N!=LLB;b)cn4R^iKm4OTB07?%7S7^{TR^d@ zU+!9{xv+Fnje7yDIE~$F)0>Xjyb%zeD&X9zxBa?ZEb?d~1GT0O<`n;x7nB(%r~;Ua z^&kH+OW*#hV_)*XPGesC}o&O3sg> z_Ziel9}gGb@uZW_Jujg-7#tZaR~LECm9t0vXCYXa=B6hU zI=nUtpoD$ykf)*`0*Qr)5+#>S{h?bK;<-nC#Z{)mKh2lO4o-CV+i=7;FrL7QcsJ0E ze)~utOjThbxGz$s`RnBWuwzV6%pl5KS)c2E3y-gb6E%RfJNI5-R-aR%IT z%aV;`%tOo_0+!o%omD^jX2dS*^lYXptM}2mPei|5>{ZT^Zn#M}JYLrF{sR%((}TxLoCDkC{PXiQNzx7}9*h-*&2m7ki#I)423 zCg$IS*#Ax6jybj4qPA$68*YL6d_ICH^of6c*zclf0+@r&fh_nNb$H|6bNShrUCQ}G zhNvg&qRj1XAF3gyH|jc2bxRp;YM=cd-eTUL-(c%CKRDu|H23DTfwBV8)PiM4dWJ8= zmzmnh&UJ`X#lk4qmX6yRDM@{=q)T&szA8auB+W6j7EJ!(>5KBgS~ zG1ML6pp0D{$ZY5F*>il~Q~RCis0&Dq*=buJ5IR|J(VcDWu4Ww?&UIL>XZ<2mhiJ~M{m05 zeT3X|4Mj9TDxokVKXmsW5;r}$a8)irgOzNBACJsGS!K1Ync*mI`}&fKiU8gP=coYM z_0QizU!Z8}BjjHcmD~~i8!v4zffOB{rlw%CRKxYO1?Qu=}| zwcIc2i!9kftvi9Nq*s0g(;`@AH8pjw zLj!nZ_aEq2X~0jlOJ!R1(H&~RcP{7KQL$d~zIpyHW~@#X5U)ZI8aQakQ52b}2mL(W z&52?)v{(eV$VVN51|YGVcNR~S)g!%n`xg~9aO29d^aaxpki$+A z_d1ChG0tjyJOu3Sn^@=H5!>Hm!}Jtt1nOq0K}}6F;BMcwMC-(9dVi0V+t7bO`{&pA{vNRFHucR>k})2o?PWVL|ETw{<06uR)I?%k^h&J z;$ik#PJ=t`0IC9%I(!X3zc}6Rm9I3`y*p6wWJ^&fys%>MHUax%$I|WPtr8ZUZX)Yc zh>RyTEW%S@p3VCGHxX%LkNNNmivdDt$SbvxHoS#}2(tZPu#Q|#V-Ss3bJ9b&O|p8k zCylPqDUWFg)(FDQNW_HA%qM;=up!7t=lqOE7BuGH1}P?VmeDf>z*H(ag3t7i!kUY* zxw~hxdVlxQ1Lc2HNZr=553NIbe20woTkATX8AM_3k<;xviN_sruc$p`*1=Eq{h||F zm_^GzvJSPL!D_9mGbiQibwrVFfrXy(sX~2N3X-#H_=fX(wA3AOra`@){Ngm(^;5xW znrb$ZT=)MNYdL&+2nc0HoH(Ser^KH|=A|Na0<~A}`1AF=a+d7+pkFyoAy3GUhfbGxvTaXW=T-I!Q1F@db+&QNq?bb|v#4p z=f3otOU>=XRByph0Je0MZz>xBZH`CL?o+mUtT$#S4=l6etc{bPRnXl_%n{U`T;)IguAVs zz4$eD%@6!%cvj-`>bb|FJ$O7$RTCc(8hly9)JUkOnjI@w`E% zkn+@n#zL@~-+5x>44-~Q#5)rlXf+~1I^Yc7c8w%VxG)BDVm@+Gfj=I`&oivrJCawT zcJ$Xfl&Z*IbIC=3oCj9TF*&T8X#Sj?1SKYyQ#sB*_Qlz;Q$-jWqHC@iQLWBjGI-$3 zow}u`?yRQxjh)_!3!i*Dm_hy!SkcO3_H&8|UV0OgH15XEafHR+Wa0_3RzsxINE=@i zGa`a>!Cnp0slrGGEr>=ndQfdd`Us*o|G+N;-YEdFG$SqqloKIK8p?h*SvHzMo5{Kl zC}12;3HaN;muu)5vltR(Egu$89^i^x@14Wvw9)9k803LH^0U?^OoftaFxwR6w+^p) zM!P*e8vZuc!@Ox4XZ4q6_D|k>?Yb7GXnd|-Set6l<_njezmb1AcA(+Wr8Up@*E*eA zdd4>_A#>r&$&-s$XZ5_U+nRf6SaY&{DxM#6ZZfaaH&i<3>5Oh+b38j+Ux!+2P?&{F zpiYS$qjeG)blw2U`9Zmu@Knz6-w$=&T#bEEuSC6?NfgTSNdb_KX^`Ge zjuv$@qO;%GHwwqv1bhKaTC&Iry;T`aK(zdXyh9&`HW%fje*v6@FJjJ)p}fuZA@uRc zr}jX8cNLxxuq6xNyKU&ZH+|w*`W1U2MMpfk*_d(-welwWuxqi){*Y_`<%0?#yt5 z06b04TegVrXG=V~)>Rs)NNJ13f*s}@nd`4tYvZ}KV*=bETbZ}0qfGjOCAK3XK5e3qHd zp-$YHALT&C7iN!$%G7x51h{EKOy>XwUy$Yj`Y|zHN-Z(skbm7~`Ek(d(~wKcFhj!y zMXHgRs>>q3&e&@J&h2NuX@heF9}U&U67{@Gg4s60kcOJJ*w7fE!<@`0V!XOv8r5fp z(?_z-sJ5Qi{F=o*jGi@Zv#W9&YyR3@ncEo0-_qySCV5U-J<~Ub$HlpR>;LW88!L^K zOM1T@UikOP+Ak)peRY_nrrP4=*3S0t*LYl97U17wrf4(hee=n$dt*9V{!&kWHLtGR z0-^yd<;jj6a(&1?C*uy=vW_3s{PPlqSl(iMNO^X0i;ypr@Hckox!SD<*vy#dPh-pd%`}ToJFyNsa zP|mQbSvh^WwKAgZe>FdX|rm(x7V1!$p=I zxhL;5@O7r_Zl~}5_4@1KUXji-ZRgdup`Ma00dcL0^sdhIt;&=#5!hX~H-iZ;6Jm1l z^zF-@&)POOb$IaFp0q7?u7A(*+#Hau>%YA3%~Q2q@=@D!a~oZ63-h;azx?{4m2+&p z*>vo0Y92jMI%YY4eZy0km~_M6mM8zG#PjE$&byY_2S<8(RDwg-_;EL}=MVQwX=JoL z1}DcI4U6M_ry-ViUUhWvJEx(My~a|0{3BUTmO;faw}2dfH(q=TO`Vj?s7YD_#?FyF zp)MEq>iWtqD=g>yz1Jb^+$_g9@5_UC%BWdNTy-jN#^3!_q%iN_qG0=4bkAqpW0NxsT< zh@DHlQ-TZnHA$pqoKC={d4@6N%#9xBZIiF|b=mkA$0t&=^NcvM(hH8?mYL`t34ZgB zR7K6M(c3b<#mhjEIA>TAv(bEkJ}Dw^PjBl5h)YahU$@99k7X$Z4MwHX``1`v%`7M= z@K9YF5j)W|K&dAA1!dsY+;I_HK*2iGlZr*j*1UILvLY)WJ zr@HiYTK?3}jw!>FayqS8hlx4!3X}YOO3$u`+pDKt)wfIA&OXll{O78!*|rxWGmHGw z-|8u%4d;`i9hZz;Q{Mii`DS64oCwY-+x~i~^XyqFZ1;=p9=1i_oZqm`Ch4jw(PHBc z4eD%tc7P?fpB_m?mc=lsVC_YO!burNHHADn$`AfI`YHwU;YR?yTumcxN>~a~N@3*) zovO)cC+mw$TG!mY^lyr<`z9#IN)4Cj82vtS-og8#e%xV)U>vnmL8eyf5ObX(Ta!Gx zBrP#VyA-OJnm3GSlHuDad{8fw*tzH~h`i30YsU!}nj)IKRP5a3y8}JfR2*~)mWF@r zN;VlvSy}o`{RPMhugMH}>8I9WD{$=vP*bQ%oRfAo`aRLiqLd4+F|+jXBc z$J$UXbb>|lqh_s58-t7!1yzPbOAUJzv$D=(MwBNuI`;b)jO#`$mo*GD*e{Uzk0Zf_ zEGk}mABuWySv_j)33WCy?l+;wdC`2$m~$JiF)RRFzNFxT?#?6ydsTf%6!+Hfl{}8t zN|*AT?habf8L-i+Qo!U#4vEsE680bFEe_|=3tlA@e0G@ccQ97riB*8xSh#I+Bey4H z?yCZFSH#wm|8maCJFIA9*?VzsdCkkY1ODf?DfYh`5H&W9iOK+exAt*Bw2RF8hIX5u zSLyt4NVDOPQ-$lawya}e*}Vrd4WQ0O11eK%qXJp121Zyf^xcxPBi?Ag7WvqZvKU7| zR?!#)AGP*PtW}E+b*RvjVQ&XG4Lc$|p+k4>Gmw$Yn8Q1!EA$SSUgD4_Y49N&JGC+? z7_olK9*^D15>!>ZI7Uy{c9!=2@M_HN?QiX3#~`bWEnU>8K!7M)D9Y?x6Ekr@KucIPbRGO?Ux4jAz}T_ZVSvfDzHRb5&PM5 z14cg`u!vD<7p5VKL1sWS^jaJL;#{WB4Lf3=cl#*9;{w*^iQ9^{9Bb{7XHpGIS_BoSVA zSwi7xq_ku*@zUYKe_5PS43Mk(2eOwB1mSZ}=u?+WdEM&J>2S)x{CyC!b5v zMaG_~cZ9x5(`ObLjH{*M0y$NWI9vwZ3Oa-I>%~w%_kp0DFP7&2_MT!d7vcZLT{iD& zheV?%f=e#W41qVi*MMjS$6AS>@{*@2gm!@7;N`K~YY(>1D&jw!2hGP*_fl{P7qB`N zkHvEBu!{@Ww~3ZMW*#D{>Y70VzFhZ#i^@MJ!e67gy{4EfsG8T<#j?NOvMs2BVa) z5O?G`PBfV9YG>vbJa{7W)+l#>rs;_r<}7P@FtoIPN+1B@IDp!qMVRuwiS#)&Af2VA zK3gxix?egMw7m9HkF(J?lTQ@{e0+0j$t&CA7cy@tH<_`=@vO*ma7-C%v|kV}*1P|O z4W(U7v|aAqQU6T(Xgzzlq{Hx@uo_In3Yd1kJVew`6;FPq>2f$S zK-#iMZ5~HC&?d3>op$AUDD7!7f#rro=k12HzhdjAU-m~Fs#V0)G;LqGX|(I~vQL5n zwM*h6Iwfy}*WTQF(!zP|&Gb7|VS+Lg^O%jA2ip!YP<}FEch?MJVoDKF8gKPhkIZah zkoifVMFe}+QM(M{su3qYeK!gNWHKt*uB2ZZ8h{Xso95k@sR?_P2@8Xi`=ADwE8;OK zD$z!u-};zLq7)tP{EJ!}Gstg%D1)V+iBRB>kuq9~%XHrjz7a?(vxg|0>qYa}3)53B z+v*1U z^iJ@^rbCoQ?4?fbJ#6QuU7Xuje(R?KNtAt2C{DxkxT>khea6owEZ3c)jFI7}UHvQV zsC{)w&f;f!YZh*(QAdT-=;=z_*}X{8t4Qj%be6Lod`R9n>8V4;^svPjSwmOQ27s1o z5a^NBlb8w3Qmrjk`NM`{sgX)Ipy@_3>&_za9}EM?1ve(q7PVUmoT_n1=Soh!7;DvV zrC?!&9{1O~Iq>2BCMaH@%FSpwgSnWHWlY94Gah9mCATtQDYBJz`}HUeMF4GS;+w;G zhk!m9K>hTD9|J-L!)xF&Ba>gf3CY+K?w~H&Vx$zWnKd|S$5a2yh%|Vp-gB5jPN#zT zx|Q6XoE7RM`&10(naR+#U?!IX&((U$7Ep7c9npkZ7%2CXOf#h5_i7DlP|WReJ6<4B;deft(@{z--ddfvxBL>z@mB(0^9>MWqIZ9%^lc(I?-h? zkYeEAVJS9YCNgZ_H0xVa6>QLI;4NX1pI(8m{pFC~dEfmXc=-f`(>n5L&5C`+6CUlyf1}Qw*nB9o{C)QnUt3r!C!GWY`u}=PQ_3xf zr>P|i0GB7|S~FT;#)^giae5esIO%h{QhI7&0MFNHz1DB$t%3k~xpsj!OU~i2fco@j zwqyW@RkAz%nU#@3nW1Qh;763`&^woqQUkKxlzKQyY?f4}Uw~i%gr&p$N5oTrMGNWkoPCQ2JK9hq*&}g&;m#=KPbs$u|15Z<93)!p$ zs0Kh9hDOh4dd$i?2gwZ2qetQ+HNZP<#Ou(j&~eT+k+1K6hxxUM-Y}k%_9geqR{!ui zRMT}nPk1d5c<1qO)W)yCElO&t+SV9tDM>TvjNpPUZhmz$o=OKK(%bt!fC?+38PU7@ zAp6&$`!7=v2duG?6=D>ILSY6Xog>372Ugkf81|Fm9Ms!_hO^Y(Aj-WADPqa5PWgLr zILr6S_}&pI_HnfGRf^ELoaNVpd@B`eMT6CA#{2vC@EpjVlp~3K{9x3)E$@Vs*8lf%J1_S17Jpo17US>%p=OQ?bIV(;Gt?B(QK_LTN zSbUWN+0Mff?WBkS5D?sGLjor;{~|mtxM{`*OJ&d`hJmc^mE=1=O_V<^c3QzpR2Dqj zmb6cbOb<%N?T6!+B?JT@oA`VT0;q64;o<%xJkJ{ber#hlLp{w(&nHu!lKZXw_v=5$PbMuu5P}9iwO< ziv{p}x)`nD{i0~1VA(Oku>0;g6#C+G_yTRNDvS1$87{qeMvV;sjiEY(tDG}D?+XZH z!VXSBmNN6Q#N^Y?C>FY1=snmlQEFH#)cQ9JwG?8XZ7T&rGj^$hT2t~#eIMDg8{NQ> z%i%QbC=h9?Kj+w81xnc2HEThx7=IHKt9HyK3^5OH6K*@Oa`^Cq`|pAjB}rmJX+Ym6 zyVW^4OC6wwLn;j@6+*(}R3$udg}&%|~2leMC6?f<&h-{(T})cmBF&&H`~g z%=T(+dYHo#R`ke1#D$@@T7)TA+iGt1{-s(hRR4NFNfkKI$qBS&45JueK&~sr%nBAS z3Jy_7kIH|;JpC=x+mg1-ugErcVe&J3q`9ev`u_aya~*fur=Kk5Qs7oUk$LAFM0Q8( z{l_8EilNh`?Ke(#cV}Ggm%C?K7f@w)(;;AW4_dv68svvp(qwL4Goo z1Cu()?yimxZecSjTXj(Dd?sZ(;&f6m`=jb@$iRzmo%G<#hprE|EgSkDlos!!hd9+JIQxWJe*r~M> z8uavknNC`L!w^*~r`Gh5zB>e#OM>{Y$MU7!y#Lmu!y# zXIif?i+l$nCK1`u2_%tifQ-EhjS{@Zz-2zZ7q#D{*L=5t(G?4MaV3WobKsX2%ta0A O`1qCtq+BdO68;BrT0@Nh literal 0 HcmV?d00001 diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_05/Ex_06_05.pde b/java/examples/GettingStartedBook/Chapter06/Ex_06_05/Ex_06_05.pde new file mode 100644 index 000000000..0b157b55d --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_05/Ex_06_05.pde @@ -0,0 +1,16 @@ +// Example 06-05 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +PImage img; + +void setup() { + size(480, 120); + img = loadImage("clouds.png"); +} + +void draw() { + background(204); + image(img, 0, 0); + image(img, 0, mouseY * -1); +} + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_06/Ex_06_06.pde b/java/examples/GettingStartedBook/Chapter06/Ex_06_06/Ex_06_06.pde new file mode 100644 index 000000000..1831a30bd --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_06/Ex_06_06.pde @@ -0,0 +1,20 @@ +// Example 06-06 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +PFont font; + +void setup() { + size(480, 120); + smooth(); + font = loadFont("AndaleMono-36.vlw"); + textFont(font); +} + +void draw() { + background(102); + textSize(36); + text("That’s one small step for man...", 25, 60); + textSize(18); + text("That’s one small step for man...", 27, 90); +} + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_06/data/AndaleMono-36.vlw b/java/examples/GettingStartedBook/Chapter06/Ex_06_06/data/AndaleMono-36.vlw new file mode 100644 index 0000000000000000000000000000000000000000..34e243f0bd4b89a0838b9eca8ac21760e264d702 GIT binary patch literal 128059 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 D5eNwF literal 0 HcmV?d00001 diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_07/Ex_06_07.pde b/java/examples/GettingStartedBook/Chapter06/Ex_06_07/Ex_06_07.pde new file mode 100644 index 000000000..b96eff645 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_07/Ex_06_07.pde @@ -0,0 +1,18 @@ +// Example 06-07 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +PFont font; + +void setup() { + size(480, 120); + font = loadFont("AndaleMono-24.vlw"); + textFont(font); +} + +void draw() { + background(102); + text("That’s one small step for man...", 26, 30, 240, 100); +} + + + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_07/data/AndaleMono-24.vlw b/java/examples/GettingStartedBook/Chapter06/Ex_06_07/data/AndaleMono-24.vlw new file mode 100644 index 0000000000000000000000000000000000000000..a71ac78ac465bb3427f5cc4d63a9cf79b99c27a9 GIT binary patch literal 66629 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_10/Ex_06_10.pde b/java/examples/GettingStartedBook/Chapter06/Ex_06_10/Ex_06_10.pde new file mode 100644 index 000000000..417acc3c8 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_10/Ex_06_10.pde @@ -0,0 +1,18 @@ +// Example 06-10 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +PShape network; + +void setup() { + size(240, 120); + smooth(); + shapeMode(CENTER); + network = loadShape("network.svg"); +} + +void draw() { + background(0); + float diameter = map(mouseX, 0, width, 10, 800); + shape(network, 120, 60, diameter, diameter); +} + diff --git a/java/examples/GettingStartedBook/Chapter06/Ex_06_10/data/network.svg b/java/examples/GettingStartedBook/Chapter06/Ex_06_10/data/network.svg new file mode 100644 index 000000000..5ecd8d159 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter06/Ex_06_10/data/network.svg @@ -0,0 +1,4056 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_01/Ex_07_01.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_01/Ex_07_01.pde new file mode 100644 index 000000000..3db017b73 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_01/Ex_07_01.pde @@ -0,0 +1,7 @@ +// Example 07-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void draw() { + println(frameRate); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_02/Ex_07_02.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_02/Ex_07_02.pde new file mode 100644 index 000000000..615aaf154 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_02/Ex_07_02.pde @@ -0,0 +1,15 @@ +// Example 07-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + frameRate(30); // Thirty frames each second + //frameRate(12); // Twelve frames each second + //frameRate(2); // Two frames each second + //frameRate(0.5); // One frame every two seconds +} + +void draw() { + println(frameRate); +} + + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_03/Ex_07_03.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_03/Ex_07_03.pde new file mode 100644 index 000000000..aafb141cc --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_03/Ex_07_03.pde @@ -0,0 +1,19 @@ +// Example 07-03 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int radius = 40; +float x = -radius; +float speed = 0.5; + +void setup() { + size(240, 120); + smooth(); + ellipseMode(RADIUS); +} + +void draw() { + background(0); + x += speed; // Increase the value of x + arc(x, 60, radius, radius, 0.52, 5.76); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_04/Ex_07_04.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_04/Ex_07_04.pde new file mode 100644 index 000000000..b3c37bad9 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_04/Ex_07_04.pde @@ -0,0 +1,22 @@ +// Example 07-04 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int radius = 40; +float x = -radius; +float speed = 0.5; + +void setup() { + size(240, 120); + smooth(); + ellipseMode(RADIUS); +} + +void draw() { + background(0); + x += speed; // Increase the value of x + if (x > width+radius) { // If the shape is off screen + x = -radius; // move to the left edge + } + arc(x, 60, radius, radius, 0.52, 5.76); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_05/Ex_07_05.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_05/Ex_07_05.pde new file mode 100644 index 000000000..99ac8e396 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_05/Ex_07_05.pde @@ -0,0 +1,27 @@ +// Example 07-05 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int radius = 40; +float x = 110; +float speed = 0.5; +int direction = 1; + +void setup() { + size(240, 120); + smooth(); + ellipseMode(RADIUS); +} + +void draw() { + background(0); + x += speed * direction; + if ((x > width-radius) || (x < radius)) { + direction = -direction; // Flip direction + } + if (direction == 1) { + arc(x, 60, radius, radius, 0.52, 5.76); // Face right + } else { + arc(x, 60, radius, radius, 3.67, 8.9); // Face left + } +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_06/Ex_07_06.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_06/Ex_07_06.pde new file mode 100644 index 000000000..c318a2fe2 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_06/Ex_07_06.pde @@ -0,0 +1,27 @@ +// Example 07-06 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int startX = 20; // Initial x-coordinate +int stopX = 160; // Final x-coordinate +int startY = 30; // Initial y-coordinate +int stopY = 80; // Final y-coordinate +float x = startX; // Current x-coordinate +float y = startY; // Current y-coordinate +float step = 0.005; // Size of each step (0.0 to 1.0) +float pct = 0.0; // Percentage traveled (0.0 to 1.0) + +void setup() { + size(240, 120); + smooth(); +} + +void draw() { + background(0); + if (pct < 1.0) { + x = startX + ((stopX-startX) * pct); + y = startY + ((stopY-startY) * pct); + pct += step; + } + ellipse(x, y, 20, 20); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_07/Ex_07_07.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_07/Ex_07_07.pde new file mode 100644 index 000000000..045de5dbc --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_07/Ex_07_07.pde @@ -0,0 +1,8 @@ +// Example 07-07 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void draw() { + float r = random(0, mouseX); + println(r); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_08/Ex_07_08.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_08/Ex_07_08.pde new file mode 100644 index 000000000..f2d1b0ee1 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_08/Ex_07_08.pde @@ -0,0 +1,18 @@ +// Example 07-08 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(240, 120); + smooth(); +} + +void draw() { + background(204); + for (int x = 20; x < width; x += 20) { + float mx = mouseX / 10; + float offsetA = random(-mx, mx); + float offsetB = random(-mx, mx); + line(x + offsetA, 20, x - offsetB, 100); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_09/Ex_07_09.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_09/Ex_07_09.pde new file mode 100644 index 000000000..55f18fbab --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_09/Ex_07_09.pde @@ -0,0 +1,21 @@ +// Example 07-09 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float speed = 2.5; +int diameter = 20; +float x; +float y; + +void setup() { + size(240, 120); + smooth(); + x = width/2; + y = height/2; +} + +void draw() { + x += random(-speed, speed); + y += random(-speed, speed); + ellipse(x, y, diameter, diameter); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_10/Ex_07_10.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_10/Ex_07_10.pde new file mode 100644 index 000000000..cec7c2012 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_10/Ex_07_10.pde @@ -0,0 +1,8 @@ +// Example 07-10 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void draw() { + int timer = millis(); + println(timer); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_11/Ex_07_11.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_11/Ex_07_11.pde new file mode 100644 index 000000000..95ac8b2ab --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_11/Ex_07_11.pde @@ -0,0 +1,23 @@ +// Example 07-11 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int time1 = 2000; +int time2 = 4000; +float x = 0; + +void setup() { + size(480, 120); + smooth(); +} + +void draw() { + int currentTime = millis(); + background(204); + if (currentTime > time2) { + x -= 0.5; + } else if (currentTime > time1) { + x += 2; + } + ellipse(x, 60, 90, 90); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_12/Ex_07_12.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_12/Ex_07_12.pde new file mode 100644 index 000000000..21c2f7701 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_12/Ex_07_12.pde @@ -0,0 +1,13 @@ +// Example 07-12 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; + +void draw() { + float sinval = sin(angle); + println(sinval); + float gray = map(sinval, -1, 1, 0, 255); + background(gray); + angle += 0.1; +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_13/Ex_07_13.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_13/Ex_07_13.pde new file mode 100644 index 000000000..b6beee4f4 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_13/Ex_07_13.pde @@ -0,0 +1,24 @@ +// Example 07-13 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; +float offset = 60; +float scalar = 40; +float speed = 0.05; + +void setup() { + size(240, 120); + smooth(); +} + +void draw() { + background(0); + float y1 = offset + sin(angle) * scalar; + float y2 = offset + sin(angle + 0.4) * scalar; + float y3 = offset + sin(angle + 0.8) * scalar; + ellipse( 80, y1, 40, 40); + ellipse(120, y2, 40, 40); + ellipse(160, y3, 40, 40); + angle += speed; +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_14/Ex_07_14.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_14/Ex_07_14.pde new file mode 100644 index 000000000..55bf6952d --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_14/Ex_07_14.pde @@ -0,0 +1,20 @@ +// Example 07-14 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; +float offset = 60; +float scalar = 30; +float speed = 0.05; + +void setup() { + size(120, 120); + smooth(); +} + +void draw() { + float x = offset + cos(angle) * scalar; + float y = offset + sin(angle) * scalar; + ellipse( x, y, 40, 40); + angle += speed; +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_15/Ex_07_15.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_15/Ex_07_15.pde new file mode 100644 index 000000000..85a550f76 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_15/Ex_07_15.pde @@ -0,0 +1,22 @@ +// Example 07-15 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; +float offset = 60; +float scalar = 2; +float speed = 0.05; + +void setup() { + size(120, 120); + fill(0); + smooth(); +} + +void draw() { + float x = offset + cos(angle) * scalar; + float y = offset + sin(angle) * scalar; + ellipse( x, y, 2, 2); + angle += speed; + scalar += speed; +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_16/Ex_07_16.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_16/Ex_07_16.pde new file mode 100644 index 000000000..981566038 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_16/Ex_07_16.pde @@ -0,0 +1,12 @@ +// Example 07-16 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(120, 120); +} + +void draw() { + translate(mouseX, mouseY); + rect(0, 0, 30, 30); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_17/Ex_07_17.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_17/Ex_07_17.pde new file mode 100644 index 000000000..c25f2919c --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_17/Ex_07_17.pde @@ -0,0 +1,14 @@ +// Example 07-17 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(120, 120); +} + +void draw() { + translate(mouseX, mouseY); + rect(0, 0, 30, 30); + translate(35, 10); + rect(0, 0, 15, 15); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_18/Ex_07_18.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_18/Ex_07_18.pde new file mode 100644 index 000000000..62530d982 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_18/Ex_07_18.pde @@ -0,0 +1,16 @@ +// Example 07-18 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(120, 120); +} + +void draw() { + pushMatrix(); + translate(mouseX, mouseY); + rect(0, 0, 30, 30); + popMatrix(); + translate(35, 10); + rect(0, 0, 15, 15); +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_19/Ex_07_19.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_19/Ex_07_19.pde new file mode 100644 index 000000000..3b8f61554 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_19/Ex_07_19.pde @@ -0,0 +1,17 @@ +// Example 07-19 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; + +void setup() { + size(120, 120); + smooth(); +} + +void draw() { + translate(mouseX, mouseY); + rotate(angle); + rect(-15, -15, 30, 30); + angle += 0.1; +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_20/Ex_07_20.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_20/Ex_07_20.pde new file mode 100644 index 000000000..599b07389 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_20/Ex_07_20.pde @@ -0,0 +1,17 @@ +// Example 07-20 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; + +void setup() { + size(120, 120); + smooth(); +} + +void draw() { + rotate(angle); + translate(mouseX, mouseY); + rect(-15, -15, 30, 30); + angle += 0.1; +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_21/Ex_07_21.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_21/Ex_07_21.pde new file mode 100644 index 000000000..323ed422d --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_21/Ex_07_21.pde @@ -0,0 +1,17 @@ +// Example 07-21 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; + +void setup() { + size(120, 120); + smooth(); +} + +void draw() { + translate(mouseX, mouseY); + scale(sin(angle) + 2); + rect(-15, -15, 30, 30); + angle += 0.1; +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_22/Ex_07_22.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_22/Ex_07_22.pde new file mode 100644 index 000000000..4eaf3f2b3 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_22/Ex_07_22.pde @@ -0,0 +1,19 @@ +// Example 07-22 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; + +void setup() { + size(120, 120); + smooth(); +} + +void draw() { + translate(mouseX, mouseY); + float scalar = sin(angle) + 2; + scale(scalar); + strokeWeight(1.0 / scalar); + rect(-15, -15, 30, 30); + angle += 0.1; +} + diff --git a/java/examples/GettingStartedBook/Chapter07/Ex_07_23/Ex_07_23.pde b/java/examples/GettingStartedBook/Chapter07/Ex_07_23/Ex_07_23.pde new file mode 100644 index 000000000..0c42b9fbc --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter07/Ex_07_23/Ex_07_23.pde @@ -0,0 +1,33 @@ +// Example 07-23 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float angle = 0.0; +float angleDirection = 1; +float speed = 0.005; + +void setup() { + size(120, 120); + smooth(); +} + +void draw() { + background(204); + translate(20, 25); // Move to start position + rotate(angle); + strokeWeight(12); + line(0, 0, 40, 0); + translate(40, 0); // Move to next joint + rotate(angle * 2.0); + strokeWeight(6); + line(0, 0, 30, 0); + translate(30, 0); // Move the next joint + rotate(angle * 2.5); + strokeWeight(3); + line(0, 0, 20, 0); + + angle += speed * angleDirection; + if ((angle > QUARTER_PI) || (angle < 0)) { + angleDirection *= -1; + } +} + diff --git a/java/examples/GettingStartedBook/Chapter08/Ex_08_01/Ex_08_01.pde b/java/examples/GettingStartedBook/Chapter08/Ex_08_01/Ex_08_01.pde new file mode 100644 index 000000000..4ca134af5 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter08/Ex_08_01/Ex_08_01.pde @@ -0,0 +1,16 @@ +// Example 08-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + println("Ready to roll!"); + rollDice(20); + rollDice(20); + rollDice(6); + println("Finished."); +} + +void rollDice(int numSides) { + int d = 1 + int(random(numSides)); + println("Rolling... " + d); +} + diff --git a/java/examples/GettingStartedBook/Chapter08/Ex_08_02/Ex_08_02.pde b/java/examples/GettingStartedBook/Chapter08/Ex_08_02/Ex_08_02.pde new file mode 100644 index 000000000..a4516b752 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter08/Ex_08_02/Ex_08_02.pde @@ -0,0 +1,14 @@ +// Example 08-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + println("Ready to roll!"); + int d1 = 1 + int(random(20)); + println("Rolling... " + d1); + int d2 = 1 + int(random(20)); + println("Rolling... " + d2); + int d3 = 1 + int(random(6)); + println("Rolling... " + d3); + println("Finished."); +} + diff --git a/java/examples/GettingStartedBook/Chapter08/Ex_08_03/Ex_08_03.pde b/java/examples/GettingStartedBook/Chapter08/Ex_08_03/Ex_08_03.pde new file mode 100644 index 000000000..9f17ec89f --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter08/Ex_08_03/Ex_08_03.pde @@ -0,0 +1,25 @@ +// Example 08-03 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + smooth(); +} + +void draw() { + background(204); + translate(110, 110); + stroke(0); + strokeWeight(70); + line(0, -35, 0, -65); // Body + noStroke(); + fill(255); + ellipse(-17.5, -65, 35, 35); // Left eye dome + ellipse(17.5, -65, 35, 35); // Right eye dome + arc(0, -65, 70, 70, 0, PI); // Chin + fill(0); + ellipse(-14, -65, 8, 8); // Left eye + ellipse(14, -65, 8, 8); // Right eye + quad(0, -58, 4, -51, 0, -44, -4, -51); // Beak +} + diff --git a/java/examples/GettingStartedBook/Chapter08/Ex_08_04/Ex_08_04.pde b/java/examples/GettingStartedBook/Chapter08/Ex_08_04/Ex_08_04.pde new file mode 100644 index 000000000..2a9eba4a0 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter08/Ex_08_04/Ex_08_04.pde @@ -0,0 +1,42 @@ +// Example 08-04 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + smooth(); +} + +void draw() { + background(204); + + // Left owl + translate(110, 110); + stroke(0); + strokeWeight(70); + line(0, -35, 0, -65); // Body + noStroke(); + fill(255); + ellipse(-17.5, -65, 35, 35); // Left eye dome + ellipse(17.5, -65, 35, 35); // Right eye dome + arc(0, -65, 70, 70, 0, PI); // Chin + fill(0); + ellipse(-14, -65, 8, 8); // Left eye + ellipse(14, -65, 8, 8); // Right eye + quad(0, -58, 4, -51, 0, -44, -4, -51); // Beak + + // Right owl + translate(70, 0); + stroke(0); + strokeWeight(70); + line(0, -35, 0, -65); // Body + noStroke(); + fill(255); + ellipse(-17.5, -65, 35, 35); // Left eye dome + ellipse(17.5, -65, 35, 35); // Right eye dome + arc(0, -65, 70, 70, 0, PI); // Chin + fill(0); + ellipse(-14, -65, 8, 8); // Left eye + ellipse(14, -65, 8, 8); // Right eye + quad(0, -58, 4, -51, 0, -44, -4, -51); // Beak +} + diff --git a/java/examples/GettingStartedBook/Chapter08/Ex_08_05/Ex_08_05.pde b/java/examples/GettingStartedBook/Chapter08/Ex_08_05/Ex_08_05.pde new file mode 100644 index 000000000..b477a30d5 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter08/Ex_08_05/Ex_08_05.pde @@ -0,0 +1,32 @@ +// Example 08-05 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + smooth(); +} + +void draw() { + background(204); + owl(110, 110); + owl(180, 110); +} + +void owl(int x, int y) { + pushMatrix(); + translate(x, y); + stroke(0); + strokeWeight(70); + line(0, -35, 0, -65); // Body + noStroke(); + fill(255); + ellipse(-17.5, -65, 35, 35); // Left eye dome + ellipse(17.5, -65, 35, 35); // Right eye dome + arc(0, -65, 70, 70, 0, PI); // Chin + fill(0); + ellipse(-14, -65, 8, 8); // Left eye + ellipse(14, -65, 8, 8); // Right eye + quad(0, -58, 4, -51, 0, -44, -4, -51); // Beak + popMatrix(); +} + diff --git a/java/examples/GettingStartedBook/Chapter08/Ex_08_06/Ex_08_06.pde b/java/examples/GettingStartedBook/Chapter08/Ex_08_06/Ex_08_06.pde new file mode 100644 index 000000000..df886744c --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter08/Ex_08_06/Ex_08_06.pde @@ -0,0 +1,33 @@ +// Example 08-06 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + smooth(); +} + +void draw() { + background(204); + for (int x = 35; x < width + 70; x += 70) { + owl(x, 110); + } +} + +void owl(int x, int y) { + pushMatrix(); + translate(x, y); + stroke(0); + strokeWeight(70); + line(0, -35, 0, -65); // Body + noStroke(); + fill(255); + ellipse(-17.5, -65, 35, 35); // Left eye dome + ellipse(17.5, -65, 35, 35); // Right eye dome + arc(0, -65, 70, 70, 0, PI); // Chin + fill(0); + ellipse(-14, -65, 8, 8); // Left eye + ellipse(14, -65, 8, 8); // Right eye + quad(0, -58, 4, -51, 0, -44, -4, -51); // Beak + popMatrix(); +} + diff --git a/java/examples/GettingStartedBook/Chapter08/Ex_08_07/Ex_08_07.pde b/java/examples/GettingStartedBook/Chapter08/Ex_08_07/Ex_08_07.pde new file mode 100644 index 000000000..51f496c9b --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter08/Ex_08_07/Ex_08_07.pde @@ -0,0 +1,37 @@ +// Example 08-07 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + size(480, 120); + smooth(); +} + +void draw() { + background(204); + randomSeed(0); + for (int i = 35; i < width + 40; i += 40) { + int gray = int(random(0, 102)); + float scalar = random(0.25, 1.0); + owl(i, 110, gray, scalar); + } +} + +void owl(int x, int y, int g, float s) { + pushMatrix(); + translate(x, y); + scale(s); // Set the size + stroke(g); // Set the gray value + strokeWeight(70); + line(0, -35, 0, -65); // Body + noStroke(); + fill(255-g); + ellipse(-17.5, -65, 35, 35); // Left eye dome + ellipse(17.5, -65, 35, 35); // Right eye dome + arc(0, -65, 70, 70, 0, PI); // Chin + fill(g); + ellipse(-14, -65, 8, 8); // Left eye + ellipse(14, -65, 8, 8); // Right eye + quad(0, -58, 4, -51, 0, -44, -4, -51); // Beak + popMatrix(); +} + diff --git a/java/examples/GettingStartedBook/Chapter08/Ex_08_08/Ex_08_08.pde b/java/examples/GettingStartedBook/Chapter08/Ex_08_08/Ex_08_08.pde new file mode 100644 index 000000000..04450188b --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter08/Ex_08_08/Ex_08_08.pde @@ -0,0 +1,14 @@ +// Example 08-08 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +void setup() { + float yourWeight = 132; + float marsWeight = calculateMars(yourWeight); + println(marsWeight); +} + +float calculateMars(float w) { + float newWeight = w * 0.38; + return newWeight; +} + diff --git a/java/examples/GettingStartedBook/Chapter09/Ex_09_01/Ex_09_01.pde b/java/examples/GettingStartedBook/Chapter09/Ex_09_01/Ex_09_01.pde new file mode 100644 index 000000000..3ba66c8a6 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter09/Ex_09_01/Ex_09_01.pde @@ -0,0 +1,40 @@ +// Example 09-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +JitterBug bug; // Declare object + +void setup() { + size(480, 120); + smooth(); + // Create object and pass in parameters + bug = new JitterBug(width/2, height/2, 20); +} + +void draw() { + bug.move(); + bug.display(); +} + +class JitterBug { + float x; + float y; + int diameter; + float speed = 2.5; + + JitterBug(float tempX, float tempY, int tempDiameter) { + x = tempX; + y = tempY; + diameter = tempDiameter; + } + + void move() { + x += random(-speed, speed); + y += random(-speed, speed); + } + + void display() { + ellipse(x, y, diameter, diameter); + } +} + + diff --git a/java/examples/GettingStartedBook/Chapter09/Ex_09_02/Ex_09_02.pde b/java/examples/GettingStartedBook/Chapter09/Ex_09_02/Ex_09_02.pde new file mode 100644 index 000000000..3b229def1 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter09/Ex_09_02/Ex_09_02.pde @@ -0,0 +1,45 @@ +// Example 09-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +JitterBug jit; +JitterBug bug; + +void setup() { + size(480, 120); + smooth(); + jit = new JitterBug(width * 0.33, height/2, 50); + bug = new JitterBug(width * 0.66, height/2, 10); +} + +void draw() { + jit.move(); + jit.display(); + bug.move(); + bug.display(); +} + +class JitterBug { + + float x; + float y; + int diameter; + float speed = 2.5; + + JitterBug(float tempX, float tempY, int tempDiameter) { + x = tempX; + y = tempY; + diameter = tempDiameter; + } + + void move() { + x += random(-speed, speed); + y += random(-speed, speed); + } + + void display() { + ellipse(x, y, diameter, diameter); + } +} + + + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_01/Ex_10_01.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_01/Ex_10_01.pde new file mode 100644 index 000000000..e2936c92e --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_01/Ex_10_01.pde @@ -0,0 +1,20 @@ +// Example 10-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float x1 = -20; +float x2 = 20; + +void setup() { + size(240, 120); + smooth(); + noStroke(); +} + +void draw() { + background(0); + x1 += 0.5; + x2 += 0.5; + arc(x1, 30, 40, 40, 0.52, 5.76); + arc(x2, 90, 40, 40, 0.52, 5.76); +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_02/Ex_10_02.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_02/Ex_10_02.pde new file mode 100644 index 000000000..ae04cde1c --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_02/Ex_10_02.pde @@ -0,0 +1,29 @@ +// Example 10-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float x1 = -10; +float x2 = 10; +float x3 = 35; +float x4 = 18; +float x5 = 30; + +void setup() { + size(240, 120); + smooth(); + noStroke(); +} + +void draw() { + background(0); + x1 += 0.5; + x2 += 0.5; + x3 += 0.5; + x4 += 0.5; + x5 += 0.5; + arc(x1, 20, 20, 20, 0.52, 5.76); + arc(x2, 40, 20, 20, 0.52, 5.76); + arc(x3, 60, 20, 20, 0.52, 5.76); + arc(x4, 80, 20, 20, 0.52, 5.76); + arc(x5, 100, 20, 20, 0.52, 5.76); +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_03/Ex_10_03.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_03/Ex_10_03.pde new file mode 100644 index 000000000..7902c2895 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_03/Ex_10_03.pde @@ -0,0 +1,24 @@ +// Example 10-03 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float[] x = new float[3000]; + +void setup() { + size(240, 120); + smooth(); + noStroke(); + fill(255, 200); + for (int i = 0; i < x.length; i++) { + x[i] = random(-1000, 200); + } +} + +void draw() { + background(0); + for (int i = 0; i < x.length; i++) { + x[i] += 0.5; + float y = i * 0.4; + arc(x[i], y, 12, 12, 0.52, 5.76); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_04/Ex_10_04.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_04/Ex_10_04.pde new file mode 100644 index 000000000..3b6830679 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_04/Ex_10_04.pde @@ -0,0 +1,12 @@ +// Example 10-04 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int[] x; // Declare the array + +void setup() { + size(200, 200); + x = new int[2]; // Create the array + x[0] = 12; // Assign the first value + x[1] = 2; // Assign the second value +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_05/Ex_10_05.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_05/Ex_10_05.pde new file mode 100644 index 000000000..53408bc04 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_05/Ex_10_05.pde @@ -0,0 +1,11 @@ +// Example 10-05 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int[] x = new int[2]; // Declare and create the array + +void setup() { + size(200, 200); + x[0] = 12; // Assign the first value + x[1] = 2; // Assign the second value +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_06/Ex_10_06.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_06/Ex_10_06.pde new file mode 100644 index 000000000..a3b551a7a --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_06/Ex_10_06.pde @@ -0,0 +1,9 @@ +// Example 10-06 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int[] x = { 12, 2 }; // Declare, create, and assign + +void setup() { + size(200, 200); +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_07/Ex_10_07.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_07/Ex_10_07.pde new file mode 100644 index 000000000..581c46a2c --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_07/Ex_10_07.pde @@ -0,0 +1,19 @@ +// Example 10-07 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float[] x = {-20, 20}; + +void setup() { + size(240, 120); + smooth(); + noStroke(); +} + +void draw() { + background(0); + x[0] += 0.5; // Increase the first element + x[1] += 0.5; // Increase the second element + arc(x[0], 30, 40, 40, 0.52, 5.76); + arc(x[1], 90, 40, 40, 0.52, 5.76); +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_08/Ex_10_08.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_08/Ex_10_08.pde new file mode 100644 index 000000000..a1738f00e --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_08/Ex_10_08.pde @@ -0,0 +1,20 @@ +// Example 10-08 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float[] gray; + +void setup() { + size(240, 120); + gray = new float[width]; + for (int i = 0; i < gray.length; i++) { + gray[i] = random(0, 255); + } +} + +void draw() { + for (int i = 0; i < gray.length; i++) { + stroke(gray[i]); + line(i, 0, i, height); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_09/Ex_10_09.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_09/Ex_10_09.pde new file mode 100644 index 000000000..74246b2b2 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_09/Ex_10_09.pde @@ -0,0 +1,28 @@ +// Example 10-09 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int num = 60; +int[] x = new int[num]; +int[] y = new int[num]; + +void setup() { + size(240, 120); + smooth(); + noStroke(); +} + +void draw() { + background(0); + // Copy array values from back to front + for (int i = x.length-1; i > 0; i--) { + x[i] = x[i-1]; + y[i] = y[i-1]; + } + x[0] = mouseX; // Set the first element + y[0] = mouseY; // Set the first element + for (int i = 0; i < x.length; i++) { + fill(i * 4); + ellipse(x[i], y[i], 40, 40); + } +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_10/Ex_10_10.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_10/Ex_10_10.pde new file mode 100644 index 000000000..6e1734e20 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_10/Ex_10_10.pde @@ -0,0 +1,47 @@ +// Example 10-10 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +JitterBug[] bugs = new JitterBug[33]; + +void setup() { + size(240, 120); + smooth(); + for (int i = 0; i < bugs.length; i++) { + float x = random(width); + float y = random(height); + int r = i + 2; + bugs[i] = new JitterBug(x, y, r); + } +} + +void draw() { + for (int i = 0; i < bugs.length; i++) { + bugs[i].move(); + bugs[i].display(); + } +} + +class JitterBug { + + float x; + float y; + int diameter; + float speed = 2.5; + + JitterBug(float tempX, float tempY, int tempDiameter) { + x = tempX; + y = tempY; + diameter = tempDiameter; + } + + void move() { + x += random(-speed, speed); + y += random(-speed, speed); + } + + void display() { + ellipse(x, y, diameter, diameter); + } + +} + diff --git a/java/examples/GettingStartedBook/Chapter10/Ex_10_11/Ex_10_11.pde b/java/examples/GettingStartedBook/Chapter10/Ex_10_11/Ex_10_11.pde new file mode 100644 index 000000000..8bac9402a --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter10/Ex_10_11/Ex_10_11.pde @@ -0,0 +1,24 @@ +// Example 10-11 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int numFrames = 12; // The number of frames +PImage[] images = new PImage[numFrames]; // Make the array +int currentFrame = 1; + +void setup() { + size(240, 120); + for (int i = 1; i < images.length; i++) { + String imageName = "frame-" + nf(i, 4) + ".png"; + images[i] = loadImage(imageName); // Load each image + } + frameRate(24); +} + +void draw() { + image(images[currentFrame], 0, 0); + currentFrame++; // Next frame + if (currentFrame >= images.length) { + currentFrame = 1; // Return to first frame + } +} + diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_01/Ex_11_01.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_01/Ex_11_01.pde new file mode 100644 index 000000000..189a80672 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_01/Ex_11_01.pde @@ -0,0 +1,29 @@ +// Example 11-01 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +import processing.opengl.*; + +void setup() { + size(440, 220, OPENGL); + noStroke(); + fill(255, 190); +} + +void draw() { + background(0); + translate(width/2, height/2, 0); + rotateX(mouseX / 200.0); + rotateY(mouseY / 100.0); + int dim = 18; + for (int i = -height/2; i < height/2; i += dim*1.2) { + for (int j = -height/2; j < height/2; j += dim*1.2) { + beginShape(); + vertex(i, j, 0); + vertex(i+dim, j, 0); + vertex(i+dim, j+dim, -dim); + vertex(i, j+dim, -dim); + endShape(); + } + } +} + diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_02/Ex_11_02.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_02/Ex_11_02.pde new file mode 100644 index 000000000..a0585cb85 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_02/Ex_11_02.pde @@ -0,0 +1,36 @@ +// Example 11-02 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +import processing.opengl.*; + +void setup() { + size(420, 220, OPENGL); + noStroke(); + fill(255); +} + +void draw() { + lights(); + //ambientLight(102, 102, 102); + //directionalLight(255, 255, 255, // Color + // -1, 0, 0); // Direction XYZ + //pointLight(255, 255, 255, // Color + // mouseX, 110, 50); // Position + //spotLight(255, 255, 255, // Color + // mouseX, 0, 200, // Position + // 0, 0, -1, // Direction XYZ + // PI, 2); // Concentration + rotateY(PI/24); + background(0); + translate(width/2, height/2, -20); + int dim = 18; + for (int i = -height/2; i < height/2; i += dim*1.4) { + for (int j = -height/2; j < height/2; j += dim*1.4) { + pushMatrix(); + translate(i, j, -j); + box(dim, dim, dim); + popMatrix(); + } + } +} + diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_03/Ex_11_03.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_03/Ex_11_03.pde new file mode 100644 index 000000000..7c0c0871d --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_03/Ex_11_03.pde @@ -0,0 +1,29 @@ +// Example 11-03 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +import processing.opengl.*; + +void setup() { + size(420, 220, OPENGL); + noStroke(); +} + +void draw() { + lights(); + background(0); + float camZ = (height/2.0) / tan(PI*60.0 / 360.0); + camera(mouseX, mouseY, camZ, // Camera location + width/2.0, height/2.0, 0, // Camera target + 0, 1, 0); // Camera orientation + translate(width/2, height/2, -20); + int dim = 18; + for (int i = -height/2; i < height/2; i += dim*1.4) { + for (int j = -height/2; j < height/2; j += dim*1.4) { + pushMatrix(); + translate(i, j, -j); + box(dim, dim, dim); + popMatrix(); + } + } +} + diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_04/Ex_11_04.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_04/Ex_11_04.pde new file mode 100644 index 000000000..fa63b0dd5 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_04/Ex_11_04.pde @@ -0,0 +1,27 @@ +// Example 11-04 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float x = 0; + +void setup() { + size(720, 480); + smooth(); + noFill(); + strokeCap(SQUARE); + frameRate(30); +} + +void draw() { + background(204); + translate(x, 0); + for (int y = 40; y < 280; y += 20) { + line(-260, y, 0, y + 200); + line(0, y + 200, 260, y); + } + if (frameCount < 60) { + saveFrame("frames/SaveExample-####.tif"); + } else { + exit(); + } + x += 2.5; +} diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_05/Ex_11_05.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_05/Ex_11_05.pde new file mode 100644 index 000000000..104c28c73 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_05/Ex_11_05.pde @@ -0,0 +1,25 @@ +// Example 11-05 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +import processing.pdf.*; + +void setup() { + size(600, 800, PDF, "Ex-11-5.pdf"); + noFill(); + strokeCap(SQUARE); +} + +void draw() { + background(255); + for (int y = 100; y < height - 300; y+=20) { + float r = random(0, 102); + strokeWeight(r / 10); + beginShape(); + vertex(100, y); + vertex(width/2, y + 200); + vertex(width-100, y); + endShape(); + } + exit(); +} + diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_06/Ex_11_06.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_06/Ex_11_06.pde new file mode 100644 index 000000000..70db3c766 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_06/Ex_11_06.pde @@ -0,0 +1,17 @@ +// Example 11-06 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +// Note: This is code for an Arduino board, not Processing + +int sensorPin = 0; // Select input pin +int val = 0; + +void setup() { + Serial.begin(9600); // Open serial port +} + +void loop() { + val = analogRead(sensorPin) / 4; // Read value from sensor + Serial.print(val, BYTE); // Print variable to serial port + delay(100); // Wait 100 milliseconds +} diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_07/Ex_11_07.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_07/Ex_11_07.pde new file mode 100644 index 000000000..8965855a7 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_07/Ex_11_07.pde @@ -0,0 +1,30 @@ +// Example 11-07 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +import processing.serial.*; + +Serial port; // Create object from Serial class +float val; // Data received from the serial port + +void setup() { + size(440, 220); + // IMPORTANT NOTE: + // The first serial port retrieved by Serial.list() + // should be your Arduino. If not, uncomment the next + // line by deleting the // before it. Run the sketch + // again to see a list of serial ports. Then, change + // the 0 in between [ and ] to the number of the port + // that your Arduino is connected to. + //println(Serial.list()); + String arduinoPort = Serial.list()[0]; + port = new Serial(this, arduinoPort, 9600); +} + +void draw() { + if (port.available() > 0) { // If data is available, + val = port.read(); // read it and store it in val + val = map(val, 0, 255, 0, height); // Convert the value + } + rect(40, val-10, 360, 20); +} + diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_08/Ex_11_08.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_08/Ex_11_08.pde new file mode 100644 index 000000000..444e8c692 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_08/Ex_11_08.pde @@ -0,0 +1,44 @@ +// Example 11-08 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +import processing.serial.*; + +Serial port; // Create object from Serial class +float val; // Data received from the serial port +int x; +float easing = 0.05; +float easedVal; + +void setup() { + size(440, 440); + frameRate(30); + smooth(); + String arduinoPort = Serial.list()[0]; + port = new Serial(this, arduinoPort, 9600); + background(0); +} + +void draw() { + if ( port.available() > 0) { // If data is available, + val = port.read(); // read it and store it in val + val = map(val, 0, 255, 0, height); // Convert the values + } + + float targetVal = val; + easedVal += (targetVal - easedVal) * easing; + + stroke(0); + line(x, 0, x, height); // Black line + stroke(255); + line(x+1, 0, x+1, height); // White line + line(x, 220, x, val); // Raw value + line(x, 440, x, easedVal + 220); // Averaged value + + x++; + if (x > width) { + x = 0; + } +} + + + diff --git a/java/examples/GettingStartedBook/Chapter11/Ex_11_09/Ex_11_09.pde b/java/examples/GettingStartedBook/Chapter11/Ex_11_09/Ex_11_09.pde new file mode 100644 index 000000000..ed28e4622 --- /dev/null +++ b/java/examples/GettingStartedBook/Chapter11/Ex_11_09/Ex_11_09.pde @@ -0,0 +1,41 @@ +// Example 11-09 from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +import processing.serial.*; + +Serial port; // Create object from Serial class +float val; // Data received from the serial port +float angle; +float radius; + +void setup() { + size(440, 440); + frameRate(30); + strokeWeight(2); + smooth(); + String arduinoPort = Serial.list()[0]; + port = new Serial(this, arduinoPort, 9600); + background(0); +} + +void draw() { + if ( port.available() > 0) { // If data is available, + val = port.read(); // read it and store it in val + // Convert the values to set the radius + radius = map(val, 0, 255, 0, height * 0.45); + } + + int middleX = width/2; + int middleY = height/2; + float x = middleX + cos(angle) * height/2; + float y = middleY + sin(angle) * height/2; + stroke(0); + line(middleX, middleY, x, y); + + x = middleX + cos(angle) * radius; + y = middleY + sin(angle) * radius; + stroke(255); + line(middleX, middleY, x, y); + + angle += 0.01; +} diff --git a/java/examples/GettingStartedBook/Robots/Robot1_Draw/Robot1_Draw.pde b/java/examples/GettingStartedBook/Robots/Robot1_Draw/Robot1_Draw.pde new file mode 100644 index 000000000..60b197205 --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot1_Draw/Robot1_Draw.pde @@ -0,0 +1,41 @@ +// Robot 1: Draw from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +size(720, 480); +smooth(); +strokeWeight(2); +background(204); +ellipseMode(RADIUS); + +// Neck +stroke(102); // Set stroke to gray +line(266, 257, 266, 162); // Left +line(276, 257, 276, 162); // Middle +line(286, 257, 286, 162); // Right + +// Antennae +line(276, 155, 246, 112); // Small +line(276, 155, 306, 56); // Tall +line(276, 155, 342, 170); // Medium + +// Body +noStroke(); // Disable stroke +fill(102); // Set fill to gray +ellipse(264, 377, 33, 33); // Antigravity orb +fill(0); // Set fill to black +rect(219, 257, 90, 120); // Main body +fill(102); // Set fill to gray +rect(219, 274, 90, 6); // Gray stripe + +// Head +fill(0); // Set fill to black +ellipse(276, 155, 45, 45); // Head +fill(255); // Set fill to white +ellipse(288, 150, 14, 14); // Large eye +fill(0); // Set fill to black +ellipse(288, 150, 3, 3); // Pupil +fill(153); // Set fill to light gray +ellipse(263, 148, 5, 5); // Small eye 1 +ellipse(296, 130, 4, 4); // Small eye 2 +ellipse(305, 162, 3, 3); // Small eye 3 + diff --git a/java/examples/GettingStartedBook/Robots/Robot2_Variables/Robot2_Variables.pde b/java/examples/GettingStartedBook/Robots/Robot2_Variables/Robot2_Variables.pde new file mode 100644 index 000000000..a20816e2c --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot2_Variables/Robot2_Variables.pde @@ -0,0 +1,54 @@ +// Robot 2: Variables from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +int x = 60; // X-coordinate +int y = 420; // Y-coordinate +int bodyHeight = 110; // Body Height +int neckHeight = 140; // Neck Height +int radius = 45; +int ny = y - bodyHeight - neckHeight - radius; // Neck Y + +size(170, 480); +smooth(); +strokeWeight(2); +background(204); +ellipseMode(RADIUS); + +// Neck +stroke(102); +line(x+2, y-bodyHeight, x+2, ny); +line(x+12, y-bodyHeight, x+12, ny); +line(x+22, y-bodyHeight, x+22, ny); + +// Antennae +line(x+12, ny, x-18, ny-43); +line(x+12, ny, x+42, ny-99); +line(x+12, ny, x+78, ny+15); + +// Body +noStroke(); +fill(102); +ellipse(x, y-33, 33, 33); +fill(0); +rect(x-45, y-bodyHeight, 90, bodyHeight-33); +fill(102); +rect(x-45, y-bodyHeight+17, 90, 6); + +// Head +fill(0); +ellipse(x+12, ny, radius, radius); +fill(255); +ellipse(x+24, ny-6, 14, 14); +fill(0); +ellipse(x+24, ny-6, 3, 3); +fill(153); +ellipse(x, ny-8, 5, 5); +ellipse(x+30, ny-26, 4, 4); +ellipse(x+41, ny+6, 3, 3); + + + + + + + diff --git a/java/examples/GettingStartedBook/Robots/Robot3_Response/Robot3_Response.pde b/java/examples/GettingStartedBook/Robots/Robot3_Response/Robot3_Response.pde new file mode 100644 index 000000000..dea4634d9 --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot3_Response/Robot3_Response.pde @@ -0,0 +1,59 @@ +// Robot 3: Response from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float x = 60; // X-coordinate +float y = 440; // Y-coordinate +int radius = 45; // Head Radius +int bodyHeight = 160; // Body Height +int neckHeight = 70; // Neck Height + +float easing = 0.02; + +void setup() { + size(360, 480); + smooth(); + strokeWeight(2); + ellipseMode(RADIUS); +} + +void draw() { + + int targetX = mouseX; + x += (targetX - x) * easing; + + if (mousePressed) { + neckHeight = 16; + bodyHeight = 90; + } else { + neckHeight = 70; + bodyHeight = 160; + } + + float ny = y - bodyHeight - neckHeight - radius; + + background(204); + + // Neck + stroke(102); + line(x+12, y-bodyHeight, x+12, ny); + + // Antennae + line(x+12, ny, x-18, ny-43); + line(x+12, ny, x+42, ny-99); + line(x+12, ny, x+78, ny+15); + + // Body + noStroke(); + fill(102); + ellipse(x, y-33, 33, 33); + fill(0); + rect(x-45, y-bodyHeight, 90, bodyHeight-33); + + // Head + fill(0); + ellipse(x+12, ny, radius, radius); + fill(255); + ellipse(x+24, ny-6, 14, 14); + fill(0); + ellipse(x+24, ny-6, 3, 3); +} diff --git a/java/examples/GettingStartedBook/Robots/Robot4_Media/Robot4_Media.pde b/java/examples/GettingStartedBook/Robots/Robot4_Media/Robot4_Media.pde new file mode 100644 index 000000000..1945fa3d4 --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot4_Media/Robot4_Media.pde @@ -0,0 +1,43 @@ +// Robot 4: Media from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + + +PShape bot1; +PShape bot2; +PShape bot3; +PImage landscape; + +float easing = 0.05; +float offset = 0; + +void setup() { + size(720, 480); + bot1 = loadShape("robot1.svg"); + bot2 = loadShape("robot2.svg"); + bot3 = loadShape("robot3.svg"); + landscape = loadImage("alpine.png"); + smooth(); +} + +void draw() { + // Set the background to the "landscape" image, this image + // must be the same width and height as the program + background(landscape); + + // Set the left/right offset and apply easing to make + // the transition smooth + float targetOffset = map(mouseY, 0, height, -40, 40); + offset += (targetOffset - offset) * easing; + + // Draw the left robot + shape(bot1, 85 + offset, 65); + + // Draw the right robot smaller and give it a smaller offset + float smallerOffset = offset * 0.7; + shape(bot2, 510 + smallerOffset, 140, 78, 248); + + // Draw the smallest robot, give it a smaller offset + smallerOffset *= -0.5; + shape(bot3, 410 + smallerOffset, 225, 39, 124); +} + diff --git a/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot1.svg b/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot1.svg new file mode 100644 index 000000000..e44805f1c --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot1.svg @@ -0,0 +1,1033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot2.svg b/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot2.svg new file mode 100644 index 000000000..bda32e6a1 --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot2.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot3.svg b/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot3.svg new file mode 100644 index 000000000..436456609 --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot4_Media/data/robot3.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/Robots/Robot5_Motion/Robot5_Motion.pde b/java/examples/GettingStartedBook/Robots/Robot5_Motion/Robot5_Motion.pde new file mode 100644 index 000000000..70c0a2eff --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot5_Motion/Robot5_Motion.pde @@ -0,0 +1,57 @@ +// Robot 5: Motion from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +float x = 180; // X-coordinate +float y = 400; // Y-coordinate +float bodyHeight = 153; // Body Height +float neckHeight = 56; // Neck Height +float radius = 45; // Head Radius +float angle = 0.0; // Angle for motion + +void setup() { + size(360, 480); + smooth(); + ellipseMode(RADIUS); +} + +void draw() { + // Change position by a small random amount + x += random(-4, 4); + y += random(-1, 1); + + // Change height of neck + neckHeight = 80 + sin(angle) * 30; + angle += 0.05; + + // Adjust the height of the head + float ny = y - bodyHeight - neckHeight - radius; + + // Neck + stroke(102); + line(x+2, y-bodyHeight, x+2, ny); + line(x+12, y-bodyHeight, x+12, ny); + line(x+22, y-bodyHeight, x+22, ny); + + // Antennae + line(x+12, ny, x-18, ny-43); + line(x+12, ny, x+42, ny-99); + line(x+12, ny, x+78, ny+15); + + // Body + noStroke(); + fill(102); + ellipse(x, y-33, 33, 33); + fill(0); + rect(x-45, y-bodyHeight, 90, bodyHeight-33); + fill(102); + rect(x-45, y-bodyHeight+17, 90, 6); + + // Head + fill(0); + ellipse(x+12, ny, radius, radius); + fill(255); + ellipse(x+24, ny-6, 14, 14); + fill(0); + ellipse(x+24, ny-6, 3, 3); +} + diff --git a/java/examples/GettingStartedBook/Robots/Robot6_Functions/Robot6_Functions.pde b/java/examples/GettingStartedBook/Robots/Robot6_Functions/Robot6_Functions.pde new file mode 100644 index 000000000..9d1878b54 --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot6_Functions/Robot6_Functions.pde @@ -0,0 +1,63 @@ +// Robot 6: Functions from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + + +void setup() { + size(720, 480); + smooth(); + strokeWeight(2); + ellipseMode(RADIUS); +} + +void draw() { + background(204); + drawRobot(120, 420, 110, 140); + drawRobot(270, 460, 260, 95); + drawRobot(420, 310, 80, 10); + drawRobot(570, 390, 180, 40); +} + +void drawRobot(int x, int y, int bodyHeight, int neckHeight) { + + int radius = 45; + int ny = y - bodyHeight - neckHeight - radius; // neckHeight Y + + // Neck + stroke(102); + line(x+2, y-bodyHeight, x+2, ny); + line(x+12, y-bodyHeight, x+12, ny); + line(x+22, y-bodyHeight, x+22, ny); + + // Antennae + line(x+12, ny, x-18, ny-43); + line(x+12, ny, x+42, ny-99); + line(x+12, ny, x+78, ny+15); + + // Body + noStroke(); + fill(102); + ellipse(x, y-33, 33, 33); + fill(0); + rect(x-45, y-bodyHeight, 90, bodyHeight-33); + fill(102); + rect(x-45, y-bodyHeight+17, 90, 6); + + // Head + fill(0); + ellipse(x+12, ny, radius, radius); + fill(255); + ellipse(x+24, ny-6, 14, 14); + fill(0); + ellipse(x+24, ny-6, 3, 3); + fill(153); + ellipse(x, ny-8, 5, 5); + ellipse(x+30, ny-26, 4, 4); + ellipse(x+41, ny+6, 3, 3); +} + + + + + + + diff --git a/java/examples/GettingStartedBook/Robots/Robot7_Objects/Robot7_Objects.pde b/java/examples/GettingStartedBook/Robots/Robot7_Objects/Robot7_Objects.pde new file mode 100644 index 000000000..5f0da699f --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot7_Objects/Robot7_Objects.pde @@ -0,0 +1,53 @@ +// Robot 7: Objects from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +Robot bot1; +Robot bot2; + +void setup() { + size(720, 480); + bot1 = new Robot("robot1.svg", 90, 80); + bot2 = new Robot("robot2.svg", 440, 30); + smooth(); +} + +void draw() { + background(204); + + // Update and display first robot + bot1.update(); + bot1.display(); + + // Update and display second robot + bot2.update(); + bot2.display(); +} + +class Robot { + float xpos; + float ypos; + float angle; + PShape botShape; + float yoffset = 0.0; + + // Set initial values in constructor + Robot(String svgName, float tempX, float tempY) { + botShape = loadShape(svgName); + xpos = tempX; + ypos = tempY; + angle = random(0, TWO_PI); + } + + // Update the fields + void update() { + angle += 0.05; + yoffset = sin(angle) * 20; + } + + // Draw the robot to the screen + void display() { + shape(botShape, xpos, ypos + yoffset); + } + +} + diff --git a/java/examples/GettingStartedBook/Robots/Robot7_Objects/data/robot1.svg b/java/examples/GettingStartedBook/Robots/Robot7_Objects/data/robot1.svg new file mode 100644 index 000000000..e44805f1c --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot7_Objects/data/robot1.svg @@ -0,0 +1,1033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/Robots/Robot7_Objects/data/robot2.svg b/java/examples/GettingStartedBook/Robots/Robot7_Objects/data/robot2.svg new file mode 100644 index 000000000..bda32e6a1 --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot7_Objects/data/robot2.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/Robots/Robot8_Arrays/Robot8_Arrays.pde b/java/examples/GettingStartedBook/Robots/Robot8_Arrays/Robot8_Arrays.pde new file mode 100644 index 000000000..396a5d6c5 --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot8_Arrays/Robot8_Arrays.pde @@ -0,0 +1,58 @@ +// Robot 8: Arrays from "Getting Started with Processing" +// by Reas & Fry. O'Reilly / Make 2010 + +Robot[] bots; // Declare array of Robot objects + +void setup() { + size(720, 480); + PShape robotShape = loadShape("robot1.svg"); + // Create the array of Robot objects + bots = new Robot[20]; + // Create each object + for (int i = 0; i < bots.length; i++) { + // Create a random x-coordinate + float x = random(-40, width-40); + // Assign the y-coordinate based on the order + float y = map(i, 0, bots.length, -100, height-200); + bots[i] = new Robot(robotShape, x, y); + } + smooth(); +} + +void draw() { + background(204); + // Update and display each bot in the array + for (int i = 0; i < bots.length; i++) { + bots[i].update(); + bots[i].display(); + } +} + +class Robot { + float xpos; + float ypos; + float angle; + PShape botShape; + float yoffset = 0.0; + + // Set initial values in constructor + Robot(PShape shape, float tempX, float tempY) { + botShape = shape; + xpos = tempX; + ypos = tempY; + angle = random(0, TWO_PI); + } + + // Update the fields + void update() { + angle += 0.05; + yoffset = sin(angle) * 20; + } + + // Draw the robot to the screen + void display() { + shape(botShape, xpos, ypos + yoffset); + } + +} + diff --git a/java/examples/GettingStartedBook/Robots/Robot8_Arrays/data/robot1.svg b/java/examples/GettingStartedBook/Robots/Robot8_Arrays/data/robot1.svg new file mode 100644 index 000000000..e44805f1c --- /dev/null +++ b/java/examples/GettingStartedBook/Robots/Robot8_Arrays/data/robot1.svg @@ -0,0 +1,1033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/media/AndaleMono-24.vlw b/java/examples/GettingStartedBook/media/AndaleMono-24.vlw new file mode 100644 index 0000000000000000000000000000000000000000..a71ac78ac465bb3427f5cc4d63a9cf79b99c27a9 GIT binary patch literal 66629 zcmeIb39x(Hp4YYS>nIyEXn=^uVc&icjAFEjL+sY59U6%Pk>Q{aRMOCG954+Ik-=C9 z5}YuKW1KZkC~B;7Dy@n*qBvC?8MK@g=W<4o+J3&jVeftZea^Y}zIWey|NpzJ`u|VX z+H3l)-@Jysc2RuvhZRNfJMjN^<^RY0{~`SU?fCz#{Qsd5|H1s`bE3tU`Csz?2k<}h zdc+mR{8w2$&pe_QesBH``LF(zr}n?Ze}x~xf2DsX{=ZxAN4}Bw`;aGCzNJ&|wPvknPdLf` zrjgDz^_y+}0a5OydVe5!!pjfhf5MVD`?kmvJeilU{Aiwu4&8d$-z@Ty4l0*z{z1gm z-%ELaaMXLLzdz)SdVgr-{f_)5oY~(z+I*=$@upzu*30pId*r=T?>op-KZ#Gln{@cY ziT}>8Op1?D|bu{>XUVt(Um|qsV)Wet$H1KP>7dUb4;a)b;p-u{}Uqbr7`^Y7wRQm)^F7N6UlpRd_UohdOwjo>AEhQ+22o!dfmJn z!%rqp{k=4Xrx)sFn?L1^dVf;Xdx@9+F8`T_4S{^GmX7V_r%Me%JX;YCBOV>Q72(h8wtzLAg*$f`5#=@^>5{WO{EI*UD`glqHeiqMPtM@%G)Jr(OH|k}Z>M!&DbmEeMghla$WkRPnLQ7_@_!t%2t?#sK8`-{nw90_l#C!L<*7ZK4|bG+Y%`2D8H{7X7{s@u)`#hpBjv77fx-pKn) z-^lx=>{(i+9d4F9ePcqo8_t(FX_cwI% zh(4?LH+J$QL)|w2rcU0wIQyGBd6J24y-O!gyx-0HTRM5~(*1Aks}HGv(zPc`C1Z zY9rSg$ch^UTeo@2;*|1i%4WA>+b_V=rZt4@wVzd81Qgt+ue!lK`7^B*Pt8Z7@o~x|-QGY6z^?o&R!I`vG zJj1_0+;~Q;kn>U`YA8z z_pe1>;zi|>2mkdq@_y|bdH)7^8bh|Jc((a(M!lqw`b%8@TW{q3+i&FkJLIX4Y*X=U z^AUM3!Se5tCq12b5iE(9fA5XFfB%iV|A4$Mt_4fB`5(TK_aBib7!ywMVdCu95f`l! zPU*{R^VbvC7_y%F&U(M$jlAFZM&5r+p4!PaHHK{SKZ(4AMdcEf|CG33%e*e1{b!Mv zZ7MI@{LkOW`!C+e`!C)7TAK9PuQ1@Vrag?)d)SH}ZbV8+rd9d1@zdroNNUek*awPSRH85>BlfNaixHGro^hU-F*( zsd$8sL@V)ij!)x>Hb0U*?bcIXgpXuDmCkzNr>rMiJL=^9Zk;^wURN)v@2n@-U#q8n zUaP0R1!uydc($oA3ul=p9A%z-8jT@+n;+WxHXjLp>MwEDg;VY8f6_>81dTq@SiAV_ z;zeWY)>Ay|{qDqH8{dy6Pw=PQDjqWS(YF(St z?B5ynG%o$`;%rI!wR%5>Ji(cCP(11IT~ROdy8ZpQH|nk4sP_}d6TXvv8heC~ej*X! zI>(^?B7F3dh)AvymX3^l^pkn6_OeaYkMPkG5sfL^?2hlJ@cdo8B;9}N8})wL8}&Bi zX?zK1m$pBh=dbaS)+4+1y14!s9-XAx0e_SePr_e5USQ@IEqeJ_#M#%a0e zR+S}u={NGHn2_&xJ9jtF1=QAAWP$F8vk{k|-_`C7d# zc`BRZ>%#dxJXc>SV~S^+-}^#d@Y0X?wdASIgj4Ydzgd2(Xr6hBNBAwmkNWSzl6mU) z<-D@rEBbZ4fBjFX+~Qi#i{hp~=XzQc+nR26wP>NxANGo>u5ZN*MjTkI7*2XcNvU4H zcdK{QxLs*z=Re!}eydlcj(ggi)%#sNDyH>vv@45pCo-xc>X6!&pv+y}N^29g^|>f6 z_0|$ZHbw7I&pcJv<6>CXR9-!;H$cBW)b-PnQFcPH-E9GQyQ}Nd?nxCdz*9V^tH7Wq z8j+A$C{h&5`bxBSI^XL0a(>kH`Eq!t&GEFZHBCuF*SUw9eQX1;DkrLE(UddUDL>@FU$`oqEyk1f`{wU zpE5v#6)1|M#T~F21F9cR%88yotnX>P13A#TfH1oP6nb<|bnVgYs0QZavSi#Kqz5=2 zX2tMov0J5*WwlPi;ftJtPJ{W(k!>WNtGuAw3(uhL3XD?`5)fvB=|uL?@Hc_ez`~CH z)WS59M==ElmjG(`r~$zF$RT+o1U=flJb^8hjc{dvJs8FVpsWDq5)bZbiU3%IW&Jn- z1S8ha;JWoin0ZJviZyVGuU%3Y#0scSF$j3xXmfWA->rtx(vYOa!A>;}hVRXmb7wz2 zH^Qi83*tMGGb%#+swf=<@<9N9O=4A=+`d>i3RCw)D)>+^6K?8M(khnnZS|eNg}?-O zgHkt*qh8cJ@6kpN_65VVeq4w=phDaXW{p4k0ggBgM1l(=jvyCVP7oWN0WP3n&wEv3 z&wu*u(>9T@nupeaH6ATx>AYJ;YUK9lYFKG}kd4wha z7!n&2)fHxCaaVX*Lbc4H<@`q7m;uX9)jj23XrY$<8Bh-=x9S!wE2zer^ zD@?7!=@Yy*EjEzmf@-SS)2Z|@B%8a#F**vp7N$oV zswZ}iFHb;6kLWLSZ4(H%CC0bwRm^_5UT+or(1dw!3|AnHBYutUQVQJ$I<39fw3me= zJfITb;(HH@)-&XZAtM0&N(|k*NWe=AJ&C`Ce!?>-fk6R$Vhq9mL%drLELIFAZ70h_ z{n=T~NN=1Y#3D%wNZ8gQ1?YFy2HWClLM7{DVV_OF1S@|8wWF_lViVQ~N=S8C04$A% zuxYw{7=!SLE`uq`NoWl#I$BMa0gKp_u(s!lixrfr;E=xQ4N4*k>KI-&73qD8hf{s|Z1r4i4nW!zR;?@k^g;7f8WQI61Tt2S&_#V3m=(+2)ao>?9b{ueM)*bJ(4TK;v)m<2fD}(Q3t=^TmgOxu>>BeVS>@3B8&;uW-Em`#0Q?FvpOf49Nl9$G1^Fg!1I$@TkR}c0qyzG) z@Y&m8Gx}J_o%ECZSLxD^4idwWL@lbirga{RlDoa&=f$g##Fe-&B2fbK~O&V$_E(wHH*vFK06<3PxGwOSarm#+4O zT$utGo8bV9YoV(Yv&uon(Zy9Sg0hJy{B@yIYZI1XG#HA32HR6(#**hk6DC8Q0PasF zBOFG79l~?z#ELQYH!!rXUSr3H65;icM@w{@IBJ&fRy(qg3F01f`^{5n6$z-hfz0k~9 zY$d6m@VhgzFqjaHQhc{kJ+vbjWlm#3^Q5B-ijR6af>PLoj z1-;qlfBUO8G_I;zSPT#Q42R(v{`GKg;6r;Pd;@WOi1$oG2s%rjhXBK7<~qT7^@UM^ zE6X!nZPhjpgeyX`P*bo%)P(+YVY(1ru&|IM+)iTeaWNNvgVR(3tv7N{;eZ(Kyb-aP zrp%2^Yb6f;1Rx?p+rb>fLR~eWz`>Cz1`g_rJz+dT`^?t3vf5-i&013%!P!QKk~__x zum|)4cZ(Bx7d3iH$RBmpH-#a`U{&u{409;?JM~$hg1k5y^2F-fx$dpd>@t(L>#goz z81j}TZ_2qcjx+SA@7Ed$>?8Wqs%EvS&p*VXcd8eMdO+VI1q`>XHx8(9F@j%52+VvY zs4uNMh&rV>@;F$Vo5UDuQw}!n-u8aKU!EEacAXnj1YP7pnbs7llLoo81;~V^A!r8X z8pC;E*yhh$uZ(6R@QOd=am%TG3<)Fmf2rgghJ;fZ z0H)R-w1>};Qs-BS9mSpD$tt6y`?O_LtMKv&)}sJbxJ!Z>bBY3GJ*eLw%t7XgxUF&k z>^|c#YZC_>OSQ9k+Fog?RNMn?5&;e+S=iu2rxb|F!Fxtj`Z3&9r%BpSN)TYCM4L%;Hrlw3UJUKn znt*o`4U=d%Z850S@Qc_fL|qL+Ay*Dsn1EFB^81UsN~}n^rBkyLu{I+BYK76Xa<3O! zrrYkQzZu|3P7TS(2~H*3j#f?1B%nrG0FvZdTs~fxB+POBIpdjU96_69oS`+(i8mx< zT-grAuhBk>pD-ij995zTz$Kir)p`WSxEU(lPiJiKa|9`iPIT#IWLc9~uSPfH2?6fU z1|AkQQ+57SExg>t(?~PLPP=a7y_Y@WxfewX9h!diS0P&c#e6=WY3UXjfWHWXsfpJ3euatU zI=E;}NHn5F5t$qpE#;U4B+){DB9|*Q1TQM55v@}g$qLaj{TOn^MwBg(+Z2C}hb(-6 z>y&{{jN(yKwqCAQOITdd2#Q_^n7wSw%YNoA1Vab1jl01t6wY$;)JPiTJj}_u*UWY` z9{ITzz6KG=cE4f*avD~>n4wB*ct|d5_S4L~yaP-N-`67s5%$G;iRwWeu8;)dm51CT z1-X&z9E~T&FsXeptVlz6%NUzU&_mwDI`p5^{Wg^_m=MlQlY$I$3Y37^-Lu=)7pz!# zd5*3yBY`_-SP~D~@`(=#&4PSk$(n{WOcGsV)1W}~gunrWNNAi|wQLlAT?QZ7yqqN& z;}mL3Ii#Kt=jjpQJ&A@&?ih=MhUQ@_mF&=lX_2|XM42aQb7vuUAgpPsEUW7+%}s|` zLjInnT9#lsg6kj+MV%=N5A}5t3H+^kg;7_|45qS`VoMaO{gX}V8=Os}n8Ehh5>5*0 zXnN_y5CpbMO>?%*?UM?&8sJQmbX;|!rvD-;Cpw~XCoKvmts=T*2|J=Y@Fn+w7WT;F z4W_Xu%6Po-D2O{{6njBIQ!GM4M9tj$Q*lnckA+c*#l>eJ;ML~v)pEMZ84N6|!iFY^ zqyEdufed(=S~&q7C{z)d`sbp`(#UcNgpMF!s)S{0hsYew><$~Kn>BtNfX&G9V#;|| zr)h14)PWOUbC#D6Rt)2Gj$G5(V<fvZUi<-l0LO#v z1mQW%F=BfGNjZM*5tS4ZHO4qubV>m!6P{iU2k@h*U4)sco;KU9$`e&t1)`rtw4DtN z-mIops^xO|z7wx{jd=LsE%Br&l6X#PCthf1hzEzT+u{yvY&iQ|kD7SBaHF|{=3VHC zg@+M8t+MHH^Vp5Jxex)$C1BRo3=8xN zt>&B%p$DmH`Hp7gc^D@|uI9g%<7#Y*p>gFQVJQL1!0DkjTy2BdRT)ZDq4B8R!$i9o z1#r!wpU=zjl>!NN`IJ#3pO>wLE=70En)NK!J*JQj-TtU-ReNYcDQ{l9>T=||l_lYc zaZs3iYq2l8o4RV{MpG3PwD=^a$SFtXv=e=rB0#cXCfJw|TMY4&kI}Ibe=1E>$eRE_ zOsB$G9k{$IiEgp&u+X@a-r!i+61}puw$$!)sx<$iY_3ZMlUZrUfNByLS|b4@;qPp> z@mPVcuW}(+hHa4JcF>VOX{5{C6^5CpqhOz83YnJwVD&BdyMj*bApt+@g@DmV8bO-Q z$k7`u=-3_V;;uOw5AA#zXQgP4Lrh?SF;4J2Z1|uO8kY4#PQgL;-jYjbCCzW#d+*Zj^(TH8QqfBT3mv2G6$`^1{ z0_2CQ;cLJ+AuIJ@Ohk9C4~=Okor+C{*dei^g1VV1tCOahdz{VM5x_BF3ugq?yi~ri zE=X2a7$-0%_g`JnE?fr`E({i7qaYZDLS;L4VxZ6ouf|ZrZXvA6Xs|ML@K-hs+zM#& z$6B{aFfI@?+L2Aj&W$uJqsbnm9=5#>T8a>-fIRh;sLoeZS}w$B1u_CBwKBvOqBfL* zp}|5f(=pU=U|xN$sfyNV@UmBo@Xq z96)}At(hQk94H3Ou)-CNl(Q+IKkvU18Se$AqsP9sdy3&Q6#!#Mzs?WXX<$$`&;l|f zEegj5EpSSpg<%-akPT-BT9BzkiyiW_+E7AVt#D~*0)u`+=ego~YfocYcc*94*kSx_;n%uvE<@(ZJLKb+I zDDepK&A~GJlJ;`E(adypO~&0`*X519kv5!Zq8lE?aHPG52&2K_as^tN5uGZB4@XfL z9?V>6lx{Il)4kO(c&tl8aEe8sKoTJz#j7Jh`Fgxt-lPUURcrDxC)!8XdGrYM%faiF zQrEECJuN_I;25As*WkN;oJWOhhJ}gD+qvou<~y07WQg{J12oHr$cP&N8tbU!*l1P{ zP{6Dy(URslGt0(B&#|v_Cs5V4XUQ{>#~B-^$f|xyg5q|3UlBs*uzALf4lboKk2eks z(7MT#24?HSw;`)lipK#Lg>>kF`%U!y)Lf3;uz0XwPotbL7spyL>j8@%yfP}mkYtvNo1(8Xm~1f0kI z89JFD#UelFayM1t8pTit3QfK-V-Z_xD-j0ejE$puHJce)C>uO!VnCY;H0DJ3 zYN82vLs1$o4KV$Yn{ht?VBgfLLpK1+haQ%*o>ekE6yyo$e=@Pf+Dr^0K!@OfsOjt; zAHdAj$QrRpJ(IxudhSl0DP)a`Ah9*JxX+9T-fcZXpWW80#T>cNtF%B*MKu*)fN|lI;Tj`vVgnGrKx}oJ>;-qm;C?$_FvLf)^v!naA(}Er+P_U1JS1C_47GF92oQOi10d#n% z6vQz%OD|dt(8aQ;qPYyHuje{E>Hl#2angVdPZ+y^UH2NPoZzcjIts7xNpZDJe|O?8 z&H}_m#=(6({z+b=b{!*76#Wl}y4R>S(`(H3frB!x>=kb(U~u<6=W5Ck+c(2?hircX z*(Mh1VlK0;xkTyj>RN{_?TM&+z%EALF{EM@FUCc|@=&^U5l zELC4Vy!I6z9P1O(mOrAyWBf{@p8#CKaSw-h9q;xPcg#E{2jq zLGNE-G_5l&VEKe@beLu&YhEb^BAe>E{+-)y1c$C|O2MmJ&JVn4=6K%RPUyNVO~^67 zup(k`($-9kigS^EOM8c&Q|(@ za<*<|8d4R|mRtQ|`t(Cs-#C@;coV8`_GYx@u#g9c16yN-j2qZ{0Gre$gO~vV=Rv^+ zi4jjH(kXWsSZ+I`!A&`+S)uBd3#9U0Rz<~M#!1_nVxWLzDFrYc<_R*_BOQUWIS#{8XiggCD1A3bJcBxc=j=I2qanX=l32<`B!6d- zj+b4akwyzC45P4y)fS5y9RXQPXkuW$+0OU>_5MJxZEzYqQgeFgVrpkMbV%YW`**Jo zv-McJJPHg=ukqLtjY}yMFl+*CLT&nxv}xM>1+OkSoJzK~7{2o^1D4RBRSW?r7SR#T zF$T!`o!@L<{r2G+ey3CxviZF@am)E?<}m9WV4x(N1p3+>y9eyTSYSTAWF#)In*!9S zpJoGl%O`&gh0Nk8`cXw3jI z0lnf$g^dh4R(mzx53m_m@F=3<6OQ z0hb0-0_jj6>L=G|>c^@H`k`Y~(PFZgPlL+#RzWbGB;bKS8TOa}!(XLilJ>2l{kerJ zZi$Yymwrlv)O(U6y53lIn9zdhik_~JxNr9wr9xZB5-z)z(^(UhO7d4l`XiGfA$+(3 zLLhVdEpWG#>8+HG_eyAIz%d87(%-xw*5{Q`*o4J#oAAgK$|l(B-i(O?tIRI=?molSbQiRxR1vo3*|cQ#W$)rKNk1Oy;yoef2hV6RLVmFPn*jw>l4 znSViB(~}1M=zMaPKb+2^*2rKUScc@y|N6`eFtf71;vf?3EtbpGJ8vBAcj5-FT-oiN zWuI}wvkgUUX)C;;m{GdbJXrtf$Sn5o{gpRu9_~VR$r+h>CCLT?1qcrcV1zsRq5^o) z5!af5iQEd4X0Bn@>uk!+{1;eyt+rAHjOE`PN^T;6R`G^CPnNl63~Uhlf`uL@Y;OpPU048ZSG4u$ zGn|8bK^^H>azMali?GFFY7-ERxX?K_!hLEf8oaHhYwF062L|{O`GQl|^5P~o{)eF7-Hy3iPV8 z<#J({#R9lEDlG4X-nR*z1eAyMVIxYoFQn5+gmWrIZeEDfDHIkPKxjF>!sxnwLVpPN z+TYsS$tF62NM~rN1Ak*~G1yt>`)PGtsr&;58kCjW6Rn{fg)8Zg8yIDba+%@BnaCpSK+qAL8`*i(1IbcJB@|I{iNr`J3#1Aa7Z1Xf zpW-D!S7xe2NXl5EGue|WY%It-#Y)KaY3{yIn{Tt!^%+Yohl63+u+$hOB`-5sir<6Y z77Uh>Q+Ec$U@3CZrTAUWQY1}~f~BVHY6@AwQmU)HaA&E-2#r_O4=Cd-B~)sa?z6HK zItHFFkeizf#=7eWsU^V7gY7;~ z=Dn|Xso2?%k^L0~o1l%rCNTKr^|H4uo3V_}NYvK=%@zGxtqnX|Qh??@aYd))+5pk; zEn*^LYXdxubBXA`Mjhuu1Fbaoc@bC0^Dk(b-o~}58nzXCB1ahRvJHhods2mgDoYK7 z3@U2wYei$f;G0=D%3 z>bl=bsxlN3d3E5_{pEmJ3IgT+qMeTBl;VX>p>HAe|Ly^zB7 zz)3}qGqlvt5LZAGhEM5Rds=@>9SyWFGC+`e{w$u8Qn z@;i4zc++02wplW6Tg)V3=4-S$95w+}XXRRTF>DEuHHFwegPO@8xp0hcqr zc7K5aUv$K_CrN}Yn+7`C_$$#fE9Fl(jm(`trX_eV)`eHxaT&bN6P@^!jq&isM(l7k zN46*7SfWr-GF*k}sNvl^9Nk9kY!Kba@#fmdN^~~jNeh#WUi`wzz8&Ri5K?JchJOmXxF5 zZ{AyBp}95uC2of%cM-76@Nkplh%JrjJ^{Qkt()iuS_?2d1((t!I;jV`d_JGPk(TTf zqA7f?x%{|D;>DPg7)iVLgN{7O^b_Kcw3l0ThMiH8w7~I0c@}_e!L)t%eSI4&Sz2$x z$$I&HeNZ6p&H~P1%XIj!0TOwPFVIT@Uo&L(N6;D3X45R>%q=x4dt;Tv>2g+{_0Csi@r8XhVn3m<~nL3*w0#2@@ z!MBc;CTTvyK%fZ{ZAtHh{dLeY)cd=*@USjaXYBm_um^AZWVSDe+Bj*xh}t0f&}yv& z>!h{Rht7#`Bn!7uxJnK4A@X|CT4P|Sgo>E6K1$fuEg|$nssu|?_L1&flh-?l9^R)r zGg5PDxyASuon;n$6}k(1V%qB5cpl?+-G_FYAE`whEmBH2(QkSPG7 z2+yZ@Y`>&kRLPr5po(%?g)T9+fJZ^_S)=?>{g-FOlH51dWfeZ!)|0U1u2`|N*>K}d zqO3yIQb(I}O{i9rFWe;`8hn@I@Tgsd^IX#iml+b=_CMD35ehT;W}Le)olm*t^qu=P z9I4;j{5Dz1Nm&{WG&^{#V(*b-AvVo2%Xi+QzD{xKPog<#?r;6#h$fbjWtBdE%;#y> zW>D(w%1r-ypD?q!xJSf|o6|2Es>++sOjl>wWW{l$c0G)kP9@lch&W<}_z_ILET)NY z7z)Y}qV7fS)GxITqZ*2v=n~gPcjcJwHM4GPDPIjx;L4mi`>?hUH zLWh(&qKx7pGS}qYd`gBnq91Ml+w|D(I}!?b$Rt|}4)&2E^FLKiA}O^bUsXX%5n%bk zcQU4>;>9SB%vh>biZa4E6PHT#($-RARKOMU6r2xb>f26V<%NBHun@bdpE4>uXgPyw z>^*t(bGWxeO?4*d$7Trwx`+D#p>qwT*+l^lVy>ogp-L} zE6n2rD!9_)-uQUA24sCD7dU=OCScn(nc!>14>_@Trpc$R9*@;^Y4P|x8LR8xEQ1$% zpSep2o8er~E0j^{26UX?udNLB8uTM^Am5ZOF|@I-8Nx%~e7Bu2*x6!%1Xz&35X`oq zxqW9#xFC-8!8D*?;c+QtBxFp^T?$oi$dFHte>O*xHYFOBtOWmki8T^jI1t5{Dbg32 z%CTd5n*4a8=*el*89EnHCQ!PC!V@e~Yl*#I=$d?H{Q6XZt{Sp?X6KeL7tidhdK+>_ zmwq`je{N3LGVN|=8rX9iy~@BeZh0Bt+@8L_msSYgJ{P$;t7?TjCQRsmQG)MMX&);2Lk2i$}A;1&)5K3y&WI+XCWMhWjZ&LZo+E7(uttoU?XS?UF|-oo6V zEf3$j0hwoQ%c;P4ok67L-~jB`vukWL6z3X{+w3)Vb{fggea3c|(Qi<4 z%ppc;=*(?N&I9`)U{-FlkcbgJoaa{Ub4amPXVa$*f<&ec*Zi7>B+G)7jMzruAj_Z7}8<@~@rUp?^=1NUt z?~Ko2+I2J6u~tzSap$6!coX3>|HNzXQEzv-u0RnTOBm48Hbvp%TP6cTQ^tUB=Ej?N zW9IX{Z6;sJcW~C1i#+8@V`YDWBgN?M318f_UBbacK#eC$y}NrGf6d`Be`AT>#8mq} z8FX3d6f#F*#AUqQ!{K~`r2*#IT|6wW`84FKjU<|ycI;XMO&z8AkKE#fzDCw9An^Bl zq1UTebMP>bad`i3Rsnl4bpSlw2p8BQr5(G}!z7z;xe~`O&~OxZj}0HteIuq*Iee}4 zz1O#~6tnB4Stu+4yBRn{G@;YzkV>CHD#4%|eAuvWAKb9V9W&LnQ(D<(+*=J(Ztqkh zH`QHEhJ0EkOqIV+9S5vFAZjn`fj>LA!+uZkEI}RinjSta15Nik zZSc!_1l}CgbiuHI6BnpYo3Utng+Olv_CH3=tyWvsHJWg|G$}f5He`UN(X&-Y&H4?o z`TE@Py}Me+#x=j%E0DxNT`Ul2HXB9(;+T>oKQFw^0lj~B1p(yjdXB3HBqOc^I|r_ z)MV9)ExP&cb2~lYK+*MjIvl8_&rNyYYBNPn z8?FVQaZM0qF#u6#De^>Q-Dlh`|H?rld$UT=p{oGs+y@b^1k@TiW_{Es7g`vK%yqD9 zOb&jzJmZuxC!AS@;qrOgVAyI2M~JStv4x)ueV_hk@{7qJH_p&?7zETc@@3X#pXlND z*07Zx!gTOb8-)2(>pay}A0`Bg^X>LtvkKxeZCC{fk#HERR7gU@FwZ`^oYz&`=*48s zz_q~H>_v`u+Xh9lbSCE1k>;9OU9^EjG~&GH-rQHoBR;QKAz%t|x7STFAk}4o6-J4` zaa2~ipQ<8m7}p*f!qcp&OO>SSCgsplnCdNoNi>k_XjLi=>m@sK!mudzBist{iDY)h3;}&?|gyJT7g3x7V1FpqUI$%U9yrhw@V0He+CqjxbO8n0SN&K zsZZU%Z!>+@8en)rjwfL3U6Y_|eZtXmutNIEV`v(_!})UJSuu*V#mLdw8gBrxqk-E%a5=f}2#*T&Qa}Hzbj^41mh>g-$wvlRhQi)AXf+O`4GlRy@?UVO=JJYCK=0 zHF>?DA*$SGas~x2;ncU?o~}9lAsza>{`2;w_?!Nq?X&(Ng~p!ngW-h#wzV759Ixa@ za2Gz)XH{+k43u+aJ%o~mohUHvCPjWinw~HxIYB77x{)t#nJ$|iZ#S;ob3TagJX6!y zLQYOHlv7-fK{7w``VBn#CCNj##h!e|OEw#@27|eQ&XaUN1ojdwu zLoIV_7Ee9cCq=H-t{w3B#CAKqb;@413Oi2gW;h^rs3rXg=E|>wKDz*`afN{B5$=dS z;~lP0e@7b+X9$R8L9!uUyUpPTHI5*wxKM5vx|;t0f+tY5=H}wLrd;#f?B_gdzH^oaVJi&pa8@7a&@cV1TmcK!`JC8AQd0jAP2PM@qN%n3=j>{0O*Ddi z`^DofjOEihG=SOJU^wZVWGn3MHc&9Srvey1trYAzsz|}CAXiC>SzU0+MT@-8@zi00 zbB!jo@r07M@t7854C8BTKbtG~S&1*9cJ9E)+CnNkgSOkpQ|^<^D3GkHF#A-&ZA*Uy>q&!{vxI@O?_g2rxJ`&hEx(DlS^3C%)f81?qth)vq? zq%(Y94dpxisvU)ZZ*#q-->qp_v#F*1gIth-4DCf=%l#JU6&Ba{+Q|qdfO2rfDMw#j z7^x(hN*I4kRgbaXXy0oK6mHAX{(CSpFNBMGEAbCLJoJg1GV zm*#K3Vl&3jTON+HVnPFVUv$_}PNDhg4%d>0f2%u8ZO+%{iFtz>r4q(3K&;c>-k~I? zNld}PSDR344nM6;7{Qg}1&eEJgfZxK98bVk1EO{{kK(a?qS3GR=BJ8x+-dm2@s7Ri z7_U5nsiQd2nG2C~2@s-ed7_ymY5wYklvVQK6#G3K=LL5keQ3NR*mdT5+AR4asZWcr zh-3~Jt$)i@MG?pyuZvn#f7lk(ZMPXl^Zfjhp4cL2BXyD;1y@bVoA;zxJ1J@X_T4(zJlCMf|;*p>S{S(0?)uRbWp zB8)FnjxC8$yL$Er4~-8r*AWlU;C;XaP_ax#W7N_gXO`Ibv_s+s(0sRi@?klAJ&xiv z$Lb)$%C7IRyyrC7bV&d=@?rCa0>i2pHA|~}v;cJbe8F~61dT28qa*5#eHa60dO||f z_g|?G>lB5y6AH}ei9$E1Eek;q;y`WS($L88eV~R#Qtlr>;iFb$tf*$pfXd(7s8``{ z2;CLkdoW2FXzd6vO^=d2shl0DAe-U;&F; zL2e03*jjR$Mm~22N-8F&DE)z3AtG?1C+_!0pM(|5I+kOopK4l`O~X9)(xw%Y-5VE) z4e<)F>YMe9uU!t2l^TOH3%2-cuPQZn1W8&h`eO`eT;*jU6?EG4R#-ZFUx~p&(xnIm zP!o_b)jC0CAjXKhzioQxujA z0LadRQWa6DR)RVWghR|MfQX41m07EzhyIk0*E?cTquPwkl^{4kPl^-Q{eHEQZ%!A}tPFn9 z&>5%_BFYnqUvjdaXzl_)y==rao_*~|4Pmzk0Z_rWi^AwyCjz9^wG7J4mSs_J#)*Cp zB#`9OlyqPAMm`Z;+L#vh-iy-lRiVLb^|XEF!*nNNV6nj{%{Iy%CEPF$7PY~2QI5tw z4-+UWvxc{w*vfg3Zow!u>fLOE0L)`-~j2hyj>AO{&-l zk|euxNJC8YaEC<&V#^^5rTlwXYW5R3q=8&){}ph^vi-Q7bLnsa5rc3ehb=;FbnH8sq@Lz?=NYEKdZE^R}{cCkmxyqY+BrN|-=j+cG^fzsBUnWObri zcxUm!S>n^xa%TM+izHiLw9<)k=*NIk?Ow}UL^7}=GH4{=$Xd>&= zVLQ+llPOzD%dw#Nd=kZ=@)Mcnugr_1K6EIbSYK4J1tNHGXpQo*J&mX2))GggpZ(q3 z#H9K(8$(gYV4C2jU*pV4`)nSshR^JZg7@!h(7b)thHK};uNu$XUc(Vn*=DJWJ|0|5 zzl0fa!-t>DLohZXxu_P2KXyM=^8i~MXWZ;j$ZCJ25K0AGiHfv>WeQ(}8HKWl; zrmS`HxQW!WghY<8+HN4kUYk~H`RN%R#o;PewHKz$*3nwjp&I=8Df@ZW>9a&*8f@+{ z>-CqeWK-Li!q)06Ay$K>$L-z`fiCxLs)#~4Bg>=sa(irjs!3Ui*3D_Apzo|QnudZ1 zjc1KuLy~O7=SPi^qNBw&42rS3?~I?%UszUuCavJEu>ww$>T+q32SpxwY@92lEmks) zl8+`Han4=11+WBl4By6umk06S+|6$P^dWF=f7+Z}Er!#uDhyR>y_wtH9;*hCy~lOH ztK|{o{x)uAu|BNq`MXQq&XU+UZIif(niBcOC!lT%&LSPW6@UVt^9tH#Afdy*(J^RD zomqC%20|BuPzWulqtVURmC*$(`DXaaF#6;e9UYJEHO`L*-O1q?6>|!a)&+p*UCYlY zfzEAOqnkRHLZr5Q2WF*ZcqMYp^DJ=U#N$q0uta7w^E*ZY3quwZ&iN|Qo+(E16)0{O zSfA>{xS6=k55wvph1zfxho!ao_J!rD>22L_zE{Vpw7&mpp<)5jJv5T1nwy8yZanRK zi=(-2$w;%)2h2$AZIia#w%2J_Q{)qwN?6YfFt182xj9%KwOz4jIQjxyvB)?-^B(tN zoAZV0iq~*7H~CtjYML--%~4?|-De0ELa_jiQAL9`vl{u8jb)GqNuOmzyz#Nnt}oVx zjoT#)O(C;(^;&JMC*+JuwKqm>p@PK0PCspTQX5Usxy>d-@$I#_lUo(UfG61cs_NTSH7)~jSM#>U+H9JScpj3iiARem zlyl<(N(rZt(Na>Ha7+P6*lFN98Hpyyv^BxWxVf~RsNB~awN3O|?|OY{Jc2+AKb1|X z?3=w`ICgomGwP0uxA3-4>b7VrV3!OZ6uXqW-LR;3TN6l~zpoGzAD8&GWkzvzBj?4T z`-#FtL-3B6=ZnQV9JL(q9on@a5p8wnQW%?i*uoWvOHC%Hv6ap9Bkg%&klzoLk#Y!= zrEb&pP|CD4lM58)^_I&GD8P0NTgzvSk~(U!>6)8V#1*32V8TM!(BGt>i*e_jOWV#) zvqIjfqt&$%ymgTD7uil-O^Uu#;gV`LZdH(V!c^EKAZ$nQQM*Z1uDj8TEfLI(PR&Z4 zj_uOhrk%c|Z2j=5mPEubm=TozzNq95GuBCICrn1Oa(olI4p%=r&gWNq0-P}6u}qN} z=N_M8C*7Os>2$(Cr`mtfUI1Mj)Gn4!sGdx5utqb^S6sOgc`)bMY7Nwy0Uk<<9v?l9 z6P)k1bGp?^C~ZE;uJTnO{_f0Y*wxqdt_K}NKrY!=)6+3z=uhmhb-m$b-TplGLaqSA zTIuC+gGD&0y`9KDGvXOYt60C>pmP??!LFQMf#kZDqSAmYls^C`R3aV-5w3A?&=K>a#9(X0xgXN!nQ_i`}pdg9%0cYscGofHW~Q#e(A2A@tS~dwT_``#Qq7xA5K4cj)YHChJmaPfeprUkHOg3=Rge7-` z^X?hCHldHxcO}VIX8B}PhQXou-CpaNX>VpK?@I?i*SrUBlpn#_B_?%&fWo5_rh6k! z`7FhuOPJ&!(%gVR0>o?BiWKt==2{;apYg`$h!66Rf0c7Spw@%t>p4~LVwExV&jPf^ zJ?ACWIl7}+fqgZ~z9}v@9L^Ue=zOlr+UL(VEZX^YRJ)&~ zPhKQspLXyCN1(4LBz|nfHh8@s8eu+IEvqA++Fh-XIE}b5ke_1kR(7ynadGl_yjq8x z8&btV1S2VjT?9j%dHK|!15Pe!kB-;8Z!mt>huUez%X(`?A zgR|>(C_56r_9%9-dCv?X`o1lyOdXsf%7ZmgtGbzUms@P&lI`xiPO|vWk z)MX{EW~tMc6uNr#7VZd}U#&bj%W}y00fp^t%N*mJ z!MIWQj@6Z|p+0oPWPm97LZY)Z}GC-Um0jR{gAlhF1K%W@${f8mb7q%G^ z;t1nxpw_k&Uxt^}5RPYBFO3tbotu#q-pe6P4>(2Pqu4R%1 z>=}~m=3k9*WU@mnPGNJ!fCWe*u&0)&_yM?vyNsDVOZjk<@w|=^Um+NR)V}5o`gyz^ zPA?$NTrV@G3}2@LeUgJv%n=V4266_?-S_%7!YOzi2-dXa%mF_7ko=+k5y_3AmK_e_ zk_@R^g}ae>00eMV$^n-zwwxmPJ8y;f;YTo;f$=o5#53^HVV8m072Z8Sl}V?xj%+Z~ zh)hPi7I;w_{e)Z7EHLAtaJ@+8=g--Y;?W&zD(yH#8DbtIy-_c z6cuV}Xh)$@Oh-E_WFXt0Qrz8!3Pd!)BsBBPQgsuR%9RXPIX)mozBv-k8z_kZvpWz> zutr~||xsk+LuS}UXm_E&cB9Oyb%55gm`cIwLVO*oP088|ms?>oN zZB;X7)@!tu-vekGClX3)vR=Wk;zyy??8X962uICibc+k*97*v&S9kcRfO4RY4eLR@ zyX_Y*v{(lm09U!uyg+f3Cq;(*&;y(q8&yuX=~}NqdhjpTC@wyE*mG1DUpTR-d0fuO zpTfJxZg}|mmfbh*5URU@A)@`q0exyBYziPmX*6GUh}ED2@a<^q+5E-wr0KPV`(_F` zSWCIh2ku?Vc`RL$huho3cW`>MRo;3`n=7kouEx^VVdN5kTz!s;rq=W}wI_-?mW$!? z$!C?0$>Gu<@kHkcp-%OgVX+)ORNy7__u&#aAoOM3awccMz(W(LD-P3VY$jH1-*E^T zuazV44o{W%5HbdV$}NAFlisM9x^J|1C4 z%YM60byLe0u9rq(-|M@h%xHUR+e)3T?)>DI?*RrffYzub@XyrZMZpzjRS)bsImCSauQY#hH#Mt;U#ULT+{_WJ^<=)<9rs9>ORp# zlE%mzvo>nEvTUe9npvkkk3Yi>U-_f1sggu?6*wHzs0&In%ADJ=BP)G)(f9h=bI&|M zP`lQZp@ui8;fJ;A_O&K_>3skBD ztey}C(X5|;!WB48ODryCYNJ!+XEC1+-I_Mj7D0f7KXh+ZfTJNpW)K*GErOT<8CxE(NW!5FwhXo$h9=53p>b*# zvB@-;*klmNU_exn3aW%jHkec*I*f~)Q;`h=CH}t^_Sr|>U*Gt>ci(-ztE6-G+G*{T z_dco9`QQ)kbUMGie&3G!+q_k;EOVfrOpr=5@Vqs?!pUzSmiG|`W` zzl(lZ_JPhxj4{^lchrxvAEDp3>qq)d{TL5;w$rJl@6!KuS@!vRstjDZ`enP{R_COt zejn;bd6xY)Iw$>J`hBQhT}B_I-&?=mLBAiWU$)D#A0^oD6hF%NeVcxy-$y@ak~I54 zI)|2|nSS)~L-eB!N6JaRuYR<7son1lW>yzh>(m-_r3l@0Yv zdLoO-hd)H;Kl~kKf2iQUvwlf4a7{dyI)}H33&*7OkJb5gyQK9WrZVR6k}Ul=!GENF zFX_sU7aY1UkEB`3{3^;`n)^>s*}G`=y|1+U!=o(c&e%DJKjM|LpQy5Tjkk_=FY)$| zjIzFtIlmn5kBUBPnkB9O=x7JMvt9D&kBPFE=J3ZxS@MthWuKcUdkN1!PG#?!-%om> zUC!Yrs|;ILOY-v5UTOEoM?2`1G}Ec2KSBS{;-#{m z9%V0$_cLB8+eX<-bNHDmgD&V};*$3IPZW%~*ZfPm{7Hh-j=I?{Y5lXJP0|y;lC=KW zI;W4{O}`&@xmQI7X#L|Lu3$)i70Wy~qt)$`j&Smf={m<4pt{#>0?H|KyXCSC4yPCnvR|SyWbmave`&OP3721{vJdsE6!j~oqP~KU~8%0_j9837wDH|w5!Yh!m5lp)@6UuD`kK2D`kI)%9ty3LvG*? z>8K9sw(@At9E~NRfa6q zef~97*)^>nUn%=*Un%?RsxtUrkM}EIDf{cIGIXhK_cy#!_BU2#I&HQ4o2oMOr0(-? zuF9@y_P11J*t@#jQ&omNtjqq^s_dHYe_K_C{?zUM_NwffM}J3EcFm)|^Odr{t181j z)#Lr$RoQi)e~-%01$2Tk@WB_7{$BkkOB?dL>OAe)AzqEbjCNV}59k~kclFCY)Asy>QI@#SE^+yXbPoQtuS&c0s|2U7{LwDcKdck@_L4pO zM+9eXX?MXl$NSYf$7iCK^vf~l{*US${1X?BiOWBx^TdN=jmtl-Jnbw-(ea}yMmZ`E zj@c*evd@1)=ZQo1ow)pyDnlpXCuPt*dHYZ49KIwynQPAPpVs-;^h;Y_H0=tTN8`qg-H&X}ZsQNMSU z{Y$Tu{mUx*P`{iz=h^4KqI2>umHn%NkE=4yv)!-NIWz=+el+$}rSIYkFSIYh!m3^pR_Q`pU zch))iltIo@2LD~1f23d11zeIY|K2NQ|Nbjw|AETrC;R+R=h^3f_)6J-q%v?!JmG)h z`5SZ&ud`2leD?Vpb+ zvj0P6^pkxuUe5jh)H(SqtLgH836A__8S~F}zg6edeW~pK7W`fE`Tx99_5-h!{l6*$ z&zEHI{}X(oU*b~J>>@b&mu1!bK4322p&#?&$9bd=kj39aztl}+JaqE|>|x!GxkmZ` z9#c2lA^+J9AN*bVB`)8o^PuMk_+7@!GWy6eWawS(u+#5q_d`_%o@qlk&pz=dA5~@0 zDDi~G%qi*eBbwOe1N4XSvaH6FScox_NAwXo{Q-2RZq5(7Brfo^ZpV4HgO~4`-;Yrl zb4$JDJap`X@76i}q`udEevjbLKJl#iuoN7;vt2!hA1gR>$aeMIe|)q{dsowJ^-8;+ zpfYevx^SL!`QB)kW%YPJ@s)P#SK9p~l_5(hpUge^{*!eMt+R~rvh1hm96qHiah`bo zRGsI%kqg>K`rt+<%qjb<=l9bDzouu`8-DQ9UupLg*}HV*XR7R7vh=f51}$Eq z_0JX@JhQBp-JRec>6bF`HJzvI{v4enKN-6r%Q?TFt8-|PdPKcQAN)L>O!P}y(=Pe& z^L1Xg<2=#_-=`B|n{3Biv)x|j@1n~uP}#fa@(Wc~(}nSp@4rarHC>oPmi=O#f2d#b zo%6)ym*|{+63@ENUn)5LB(3W{f7vVTe)%iy?p4Mday-rx&tIYQdJddt*{{?&^vpRR z^D&2S`?Wg9W~YCLM?XkErEmLn`g>Q|Z&29})-T)9XSVx|ao*Jtxu6W&ru1#UNq?-{ z_)!L37(?mXezX4SGH}eY@7Fo~XFOkz_gkV~mQ{23_FttkXp!>Cd8BXuH9A2DQs+5F z`Vbm}f9eDC41M?zI#Pz8px+~WVF;{4lb7xLUAO3Lty{nA*u(r>3%r)CVBig+{ z>kpaFyUNf7`pkCp$xrFS5B2vo{c?VcpYsF$uCk9*Mhr>6%n$hnXQdCnOMjfFoH5o1 z`YC<*qxA=0l4hfdX5TG1^v*tMpM8GMD`nrSGVmroNLs@er4N6#{unQDpelVDjQ-HE)OYHI{(XcGeuw^jL_P3fkBd1}^7#?`%eheo zPLV$PQ97Yr@{hR&|2|sloOU?}j)~_^=hS@(&z~)daxF}2d0ciJf*?h4Wb@~#YJNw^%ivO-!-F7;M%Vpl_ z950ter*nU~Ogo+3HfKU0U{9CJjg_8+h)|ncE)Sc_MKYs#?$t`j zb&MmLoR;;QIiL+}^G)yyP-o**u!M1+zcdP=&h zJBlocxQ{xKh@At{=?I&hGE=8}0e8CFTL@E zmlN{pDfn_Mq#53Mn=)rKoMhUeM#ADjLRAz%`CABX;^XCeW1h5*x}d6?9@RBL)r5zVcVx%wV%m_Zv3?jFl19JGC&K7KXJx7bK`lu>z$VfV z4OM$lxJU^_v-NsmJ!1gcNpr+NwUgB5V$^#Iwp+30wiXpgDWhh*Pf}#3-a5Mx9@sZg zPYh1uDqK%3>RD}wEn+5}Trk%FghdMq1!oZ6I@Ay*=HjP_Ehr*8)`2;ah1iJNVx}Q5 z5Ex@S7V1Id#)OYlFWOPNr1?hF%hcP+5I#0}gUbS0Iv}^1WI-d@paB*UFPr`dV^Ope zt#XNzNHksd&Otii-SC0BHjL^vP$o={K`SIQj6`iL;4ab95gEIKX)dK%lGY>haWtxg zkal;cvvu!U!S!;1+3(xGJHHBPO790B>|Rh94|ft5quYV9@Oh7mKlIa3>7+^>3!Uehcw> zE;-+vx}fUPq><0g6=v;YL3Eo%r=yC&^K~i4+yx<+f_Dj_Fv=t~ z3JFH`!mtRf6jk~UNfgpAoYE{Ra2oc89+Cl-m4I=f8Pv$xA}WDTg@yU#H29i(ni{Hv z$ePUMI5WXxf`T{V-&NPk$5b5rR~Xekq;-OJAagwcGD|`@QfrZo7tlmqqW6JL(_@Q+ zi6w#=I$L}1Qu)A6`J`zS%@-9wod?1_(M&m-sr(?HYPs?0Y?R4RGK49DB1l!tmi|OCj7AL7^FmRput>Z- zcfqzWf@XcX2~*~g#T*%sS(xp%Vzzk*APYBGGh?3B8T-2DV9}33`VKi6Q4BJ(6`6#H zfeqr(yzsPP=w4&>7IRVGhJkB^f|&R*O^XzwA$>Y6LLtJ4uWP|WHb**@NTVCUa4awK zCSQHIht2e2JcLe?KC`AF_+tavUmDASmutOj%(1_LOxL1esU&KB1HmFmYzupG`5j9S z>4K%m!dMWD?CJ6}L0uwy0}f5rdjBeCdrDoAxA$&-6HrKdawk3O|R%u6DhLTDO%&5#-!C0 z32#g?v!25NQWw2!((%=-h8x{HYOC#W zY;?;F1-*F!p(>7HD$T?&ifKK%bCfN@*&C5V=@?WG#L{6Tp1T;M*Pl!6as_5UTc>4x zLGU4!`@t4g5Q=;vxjI< z|9m)2IkwV5-nE?;!*M2hycvxft#vP{o|{zgDWI1jHFxAI)w5fq>7pb9)c7FPE-H>< zD}4-1He9OV z4_pP4qXz1uz-9+bPwt^)IOM(rAX50iF1;z0jTPzLY_(pyC=aosO`1eyZ=z0Z@|lBw zp?13C~U!14@RIhtp=-D3lx6WI*(JYj0<|Qt6FcA zZ^^K%#O?8PJm`{crs6TPp-F%mDmiB6(f8xA@y{d=Q8AJ*d1ebqqdjA41_YKtHL#Mg zrcOW*VL_0^2tqQ@0~_lI;qfxO{&~AY7>_YmwAoT&BOcIF@*T>EQT%x;>qg^S+<>~! z>T66vT+@_(R#}@fUMyLN}Z>bVzc0A!M!BKk_I?; zp~T4UAcr}Y@!G1HLYP!aTuzU7NL@_ZPRXVi7yDQQsxz8vW2<6hU!8Wv zg9pDDF`3eQKIXrt-7jC#734m}iPq^oXLA>Uyv*!>ipfU+#)boo4aNP-C=gL?p|Giv?u7JTzX!huk-|*$}F1cN-1$&_a?fTT@V;7R>}{amoo&T}c8T z#sLTuUcK=yKF|O2o}Z8Y9K%_?;bxW(>m;0_CP9Tkd$3q13HpJ$lW>usfNs4`b@3P<3%y6jyyY&wOtL6i5@TgO6)j_c0zrHZCQR$(l{H&hW%p;_g@d zM8dQ*HPuaHIvKZEMI^m!^wND=RP!puno_N}MaDH>XJd&1*qBH%(z`r2J*w7qlijw8 zm6}@5&wAT^)ebEvx@z{SC{ABRl^S7`tA>jRWy=7g?ft{!K8*n2LE7;{p%&A-9PUi8 zLJ}F~o(f&ejT;*^+|h$ldL~)jCi;`MfQqV>o{0}d(m{=~5oyHkDPyfp=fl(et}~|b z!CbD{BKRjH)^c(3SD3lI9I)tqx^VGrX_4oIX5!MpU~__!ovEP6<*)^wULqsW7jA;h z2;z<=9FFfX?$SqZR$Nwz(nL)f@pqW5*uovp z9@7yM)t&d-J)AFMYz|WZ5xVgM-Sw01u6x{OOYfCs(Y0Qi%v2$q)nuSXxdJ7EvL-Hd zU=X4`C%1H0?M3{1x=l*Zp4LkcXb^WhIbfkxhc{|1krA1zRff2Ta!p(95ipUTg?ZzY zL@zTAs6fu2)<$63C;81_K0ZA?VT!Xo)GjGDCL|eka=oPWYBE)tNIFBgs{pkGtF$hL z0Ao)3JQ`uMM%_BMsC#OVxT!KTo>&;4vk1!i?QuC@x)l{qNPJCMleE6B@UURk9iU<7 z8mYRR*0g0tC7op$0I+a&@`%0woV(_qmIeq50+IIy=+l{!q^S)MaxDOIaa(n28x?+C z>h|Vlb8F%#!K)E7hgJhlP!_=5ZnwSH(acPP=|XZQRRR!***!=73Sb*Bs~P|Uus_+v zR+P^GySfIFXJKoMvQ_>vpvFjB_(Sg8MH~S%No;BXaD5Qc)6=?Q?ez9Z`&N%zrc1JA zOH?%Wc_OW_MwFK(*j`pjB1G{c^&n9RR^1qGUvUshQw$$31M&6KEV5eTy=!>v?pe~ zC^H*kYlUOh(!G-OVDfZ1KRi4lYUV2K)*mvK+(d7zQ~=jDaL`R$+Mk@;0H&W((PGaV z{R~G?ON#k^0MbvBEQ^`|Ky_bTEL{W~ebbDd$wbhK7-Clgporfylhj0}r*xWtvCg+O z07bd00cicH1%QR05}+9!>Lz`S($YS*G}d(uOw_mnOq4%XlcNVkBBci9Fb}|}+vBcR zC0RxQnb=pY0Ul(gejamYtF;+9_4QeHakl-8%*i$*ntlmDJM*_>Ya#q%v!}r@Qn!u9 z{-vz;aV(v0-Y-_K&-Y|kJngDy8_7!_J#W&$BAAlzwYV^EbKx?8>`k(4a^e1=_r;R^ z^$F@;2TxDq_5>F%WY2^emW+e1_x$xK6&LD(#07Nf6>EqJ8R)n*p zlKHBYKNF?ruX5~;E>iWuI7SASIt()0W&(x_d2jjPpv|1|Hg;#@!sboBN_HF6bv~{T z;ohzMy1#0ER{p-{^Kt!G_$*+3)F&9xO{&ecu_+YKbgna}?%jh$4=1^zo$*=XS$0w| zM;R)YM4!mCi|3 z${w7p_8QT_5bryStqG+)Su`auJl^lk?)belDU`!b&n~%fLMR}q9H+8?3iVMm`^T` z97HHtb}a$f!>kRZ09m*h8XO}ETD7af&axd!!^;^DlE&6+jqUnDiYT=-Ra@)DiU$zW zwhnxKksynceEYS4*gx=DHXw_a)onu@znINtOH<3QYijZ}2w8~GyUZA?d>K?`OFbKH z^;FAL=b75-g+;0~>Mi>*)M#SqUOTqD+-5)mAEc`7SbAsvBbmj%QLj(6kaO6Uw}Scx zg^9C8DG_a%^m*J8+s<|oIv{70Mm+5~>u_CcK)>={jHTTZaav-s$DaY=y6gxef+!kf zrj3Z58a-jdy^hX~ni`MN2E+m->7aFCf41ABFtLIdx^d&1*Xi7zPeP!o6C(Mgg_I~4 z40$TDY(NK2`z>KJE-Rq1h8}-(j6V`WeGw?7)=n~$#4ac;$J}s4XE#l78gvh!N;`yv*MaTq3HebA<60Fk%WMavt>335JE z;~AFU=zLqQ?CNL+PKKZTp@qj<3!kf@Nm0x@2yCpZ6|pm>LQ4~0P{rrEXzkj{Sl?#p z8ooEv*H%a4Rx=Is(Qkh$FjL0o8p)=1iizr4h37hHX0>$XwcvNJz|_X^YOAGPW@zc< z(ww~vkteiH!me>m)dWN{u~0~11k+SP&8~FQB9NAH#z-`cREU}C+1NUDs7-k4o~ny2 zf6MGZ6UrmuFO*sr7rM*s_GZ?5cF8UFxx7VQ28a#0!#{NgX7d#1Qk*Cari5H>sRV=xdC!rVnuYS|nSmmTd&Eq`>vyl1Ip zs$)$XkgafNT7kyujZrI*shFAqDw-x5YE%fGg!U_TPAb2<{9!vaVXCgtO*L8_WvhIw zJ}!sFa5&jCFM(0DOkz#Z5W)JYU3nGLgYfF!LiH`0%J%4H-GW;XC0C8`4h*16E!n~* ztUArzWo(U;N_5%jx?VNCblCVz=6Fvqy6IH62q|BqP8eTwk|qkcnh|`xUgr^#p}z!1 zmF;0bQ3i+hbh~pU5&4;aB)@V48l>_>PH$S>y&Brt?3Beurnf2o3%4yL&&i^{y&-KF z(#~$0yN9k_9P@jFedA~#zft)%xM8A$)w5J@Fnw7zv%|EQ%2x*IOOrPf8zu>JU2Qbk z(lbmo!Sc`?sd-UsiCBR(kZIeq&1B)auc*ky7K7iQ8l}dhv7YMQU_+I}q!{1xTFuTa zU??mF&e%O0yVz+DD`I;pq6Df!VVN6Zj7>|f z0v2yb7a3isgSZcmF2YKVbsGD8bP)?h=#|K8I>bXtB3s!^WC3lK7@C%iLb@>Xio+?6 ziy+VVBBND0@Vhy*81aR(kDz}fO~KZ>)q&moAO^~=wnz>ChO}t8BLJ&h;g^nS%p$7Q zL3tZaD~c*RLM57vUd*mP(`j(^n4}pjx`@S=Sgg&gWQ5fM&>O2^OQJyC9&WCkki{h< z1fT_li}u)kFwF;_8Lc(XmYb8u653*GMSsgnX5>~|Q$GQ|9jO;aqFAfSDT zN-c@n7M%$1R7?0y2Y0r{+mR)~1>I3-lS(lJX?kSn&;zh{+arRwCR-D?A27`rjY&y0 zN43Pzu?~$m(Y0M_sq`Kcj+la4yTazSM9#M0uT;UK@f}lX5)5uDyPM0}+NicTPHJvD z77U}0)Kxl!Xs$c@D>l-skx-MUxl}PUT91};4Azu#te3O4kjh2gri{Rtc~)ygN?ZiB zLN)mCBs?P@PaVAY)}~#1W|qarCi592u?=N6st6EKo9MV13`e%=)_ju=`&+xM>}fUB{%fP) z=6P!6mLmu!$mEUTMh44Sv|Gi%W*^e1P(wuDMNJNp)SAICJPj?yQlX+Q%3`JKI7?z5 zmlUaNl3F2-rFw6OOHzv&*3h34aj961IR4`b@ycm*rt9^%V>jPxhXDm6m3QaNyIUne zTr*M%i&%d1o{T4xv3O`#W|?w1S#<9#-KQ{&Zg;iVAPk~I@n+;>iO`BAFpNsI_{t;k zj^Ikd$Eq=czl~v1-?E5U*|c4pV-!^q(of%J7soo88UpG&q*-!pBTyD|U<9O9JrvQv z3-@iDMmkL91z%g2_J>-G`t}5D0g{dBskD`f2(_T1R#$JAeIfNG^Vu9M&07;l5FXo1 z5IZ9a(V>}MxdW%&;wE&jKc3E~iT{Ml@g#dra#)#Q-W)onMW`(vtG!0XYD34^{Pwklku(d1UC(J&I0E{L*=m zAFJ3oYvG{fT?{8G@%mhYi#^btxoN$VhC(HOx3!<6zGpOvM1E9@_f_Q4h zQAJu$R%2!;`qLlJo)W0%7$|g?6WDsuJ;oJ#Z5` zi4Z)-Tp+x2HD`PD*~*~MQK1KKaG+v0UVhMWhO6Z!nQ3z$=~~D*5%g~ssOk9*nM3(A zNr=!e$;2&Th+HOPx)OD|QxTG=tTKTpOdYhz;1ohIvO1{|!!6gTc;L_doeqYu{xeZ3ufy&M;- zKrJN&Zb?%Ih&a`9Q7}!Xtx2B((3{QXM6}ri8>qBQK*4hFHB2%NyI2#=eNhXm2JlRH zP~s7^z2T0RE~lTch{uGs@Rm+tewiTvmI{UZ0Az;SHE7bR@vIM|y^JCr%<)LME}-_@ zb~52rsCCQ*V)$A`G_~2^@6=vm3Xz+)_7Pyi2Htc_=?aQ@cjL`^MK@KF)0vhz7HN10 zP<(!Xe#`>DuyU_aGTE z@h|pA1By-i(INZ$O5`j0*nDL1EUNO^ zN@k~1w{3$76bObs+`|?r5;nI<3wIbhzqGD9(56TuPvKg)hS(rkZuV4ySdIm7g_8IH zKua7T2?K!4n{DF6#FW8NRg~BSZK4zTB@8?*l+3mp)blou^2ap7M9aHDKcvogNL^^7 z0g|=o_4-<-j>k*^`_rVO5GbsQe|QOZE&|vBX?zb4Bwm5<8U;}_mlD&pqBHw zRwL%>OmJL2YhJ;H*;H@uc=9q1^7bMT!#Q3^uJcFfo8}v|-ite3?2J9A9&$5Q-a;mI zLqfz_-bf9;De~zG#qk9Kob(o3oi~HW$5`(n=q@(!+(j5l1#?$dFHms8NI%Y)y3_fw zNUD1jwZw{H)D+=`Jrhg5OlQRkHB@kgPxWai;j6+T=CFvqrc1>F(Vlb+LSSI z4cdHjp4VQ>;)>1?e~hV>z0`X}o-7_(#OhOEEuix&9`QP%{%ACoK1yt^Y==i)Db3Vy z{Z4s)Z;*w=I~ICA7S(;3_GpPhFlt5AR~`h!|4FgEH*ksOc)T`^6>lm5@J|epjaTb___~#oEm+) z5?a&=?u-GgY;Bm_!SY}FJ^65u@l^O`Zw5Xi?}6!z;&?Z=jf8m&Iaod6d_A0 zv0WXBKbCRr*QQj56^Hu5o)YW{!YW!24vK=}gM&bbog^*a1Q5*@WHq70S&F<9L>kY$ zG>hUuG6oqd@b5;fL=1xDzr`RTmXhfCatzYx&*t-4W!#^A#h}_FlF%txe0sX|9aI7s zGel-F%?3)~k?ja=h{Nyg+C}lO*yR3Lf8L*ZuvnbGv|7H7z_JwxbGT*0rh!P-+Z%M$ zX+yxxX5JnPt!m*jG&8(mem+B~74FlGyiJ)v*EWm}Hy)b%ZdJ912@O*9CaexO zhn0`f*eKQZC!(ucN3D^)Oc+|+Tb4hu2T~}-_NTnJ1E%U}M8U=Z&PX8sViBoK^CX5^`*D(z%n$z68m@Z zFE+Jm|IWz3nmG6GsPM7-cS&S(*sa-Wl-82TYP57IYZOb6fI`9q6n7}@+dg6)P5DkE zQ!M*;AY!X|WZGf}{MY5(`*+Aeyy@5X?>yYd{X6im{`2p>02CCJiP}I~UB?ztr#GEV z5jFESXqJKk6Z^c3?-vC!u0r71xwzc)d*j=?5bl&3BTr_mtQoh(Ln|xX_=e<)aM%WO zFB#y+;cPY?M~#6Tw6IHleu3U)y9u zUcPwZMW2>%JEYUrahsZ?0dd{Y7ldpbRP)xp&v1?oIIx6hCTiBTp}Kjh!9X8*wuJdQ z;}9QjmW!>BWu(}eAp`Q8A_ouhj7kGu5x@5Eko-i;GmeqO^x~NW`s7)yd>PWW1mYu0 z07wH1UHx4Dnoy6efqLunlMnQ%u=)&@Yi?jPlD+C`pe(B(eas9Nv#YLe!-N$rJNN?n ziZ1N#WglJim#gKBb9C2bL=t$u%+R!Cy4cuqVrlqN3ciea$Q1bZbvlPmZb$6-8M~}( z6Lwvky9e6lmGZeeUNur%DUF&U+DZ>5Ic9L@tK~dtu&L-LK{}lWU{EgYs0%IJW%SZF zfX~k3!a$RSu=IgYB@|wCx0qh^_1K;=Q(TZX4#H1k8byR|> ziUnk${dNI?gpxkmosFp^o8j-1D^f<-H<1!oN-31|4)tb!#ilj3C@wFQodo(ew@%nt z5>ze7I8-x;u(PB0eb%n+>3rtloyH%SJ>1A*vM7pV?2dI(1saNGl^J1N-X;lXs1L2{ zU^)0Af@*$@ES~sflfDO)qJZ}-EXEcf!!waa979SVq|mpI8LGKR$rlG7Az)WsiqmVA z>TE%Eb`>N)a0Qy%?ss5hAo0^~CpMwcv{W5gF&(xE3kzp9Si5AX+u$~a-H0bFV&Y8N zq)qb*2Y^En4pT{N61}tMEeiAWAhUwuN-4__g7`w;-5Q~(oDE{D2?Ffw~9#vV5iHaXYFHzMJbo5R3kVhm@ zBT5wh~QM0NQ_% z7C_UMxOsYR0YK@w1>nt@#lpR00T7h*Jkj@a3xGg0!eG_ZZ!DIh72})WM&2w*>t2e^ zSXCr?o_M)4Z5oTUzZ_5v=o`s|tkDBO4Y#ukZdB?j%FPCL?D-W2iz&1jdwpBiz^BYe zB-j9XBRCbx=KHBI*griqw~^5xFuu*N0t$7lXQoa2PYK$i=#*;?r2!a1m6u zE0&enh6o6VpMAQ3wY^K5cAJ%{w%d zNd+%BjrnjIoxXgE#fiF%5Oo_Hh*<2Hx4kRFou>v(V~13PsgeOb=hTOdT{W#t`iYAv zyKpcD28UOXyh1(fEX|Tnl9v3cfN&QkrVzAC{Okh}w|YU$NJi}02gTK>^?~vCk(W^J z^+v=MkMe~8VNXM>?bJCq!9|zQN6k{S#{z#wnpMqGW5uKNGKhQ#vANKA0W-``pRg5o z-7o696rn$375iJ_>mW%o5xx=nN4Hlj{G{xjsRysy7mH1H{1wB7Icgph+3KWx5l!L! zZ0TC49o{`A&;6PhQY4$_&pO_zj3EAZ&8$$FahxW?~k z?w#){!$3iIG^y-izl4aLUfB$gjp!2roB}PhFlnZ-)@WF8jOoS}As+tlO3}LMaH6WA zF}wwH)v3_v4jY7rNtc+?^A_Lq0?SGwB8!_6XBb9$wNVQ*|FA*<>4R;j zNg;#3!Cal%J3;MZZpx5^w9T7yJo(sz&BMU@8_GAKM2dX;gAD3ll@Qn*4|+kPIuC_1 zFOy^Poq2U<`j&Zdzg13u2vnAn$LeL?I3ucL-smY0U-0Xz!Q~*mI;a&}_=ujRTbTw> z9Y>ynxtZqcgZb{CuC9NcygTlwGj0axpvP zxP&D8`g1v+-yD*=5~)<8lm%%)>&AKEfDUDGpd`Y(VJj$7>l!3wGn>;?(oCO$q+oR| zBe5f1d$@oUTdp7p5K&SXMn?H$BffydCjvp!^aL>{wbNU3Lwg3=c`M&bJ8$&OLkZ-- zmlhzK$v$OpSkG>-MxJ;B`_%fJ5eG`jeU8Yd<#ZmEnU`AvBE5;lThWzkizO6)~h!O&1N-V(^FEfP{B1}BE?hiVboVCYR0Cpx*@ zijaP%zHE>ZwU$ ztP#3_IJ5iq>UT-+smE!*F-U3TK}~YV)c8fxjIdv=q%r(MVI~B2qi@Qwx_H5mfzq{c z`&=;pHjrW5`7H6ZaJ-xCb_hZ%Egv41D*IG%xoCQ)88I~vP*mdiJxFR9mnIx$vL_mphnF99HC7>{OtED>}6l5cT zQg>p(QUFiK%cF;c$3|q>={r4I%qKjuCcM(N5RqUj$P+YssA8+z%V}?ZQSJv-8JKT5 zUY;ZoA_!u-U*4Os7wK=%2hlaPRHw|sx0K~h(MO&UP-o%^We2$6x7{O{*wBHFxl3f9 zL~;%GF#i7b_6|y)OVH7%TuZlm8_ik$Z&Ow}{nfo5J7f|YN|YqAn#O^by%H%aJhIJE zP!m#pu~Db}8|z4?$kv4^*xO(4`tXI%#z9(H3OilfMbEw6v`%$tfxmQYb+)~L(WD@* zRy~)UZo%>Bj{1-RZ%7Pg4no=1?acj=sWUT?)FY*4$j~5JxTy{n>W_62_pq2hhPIk@ zPY1u*khuv7e5E6y`N3k>6o%B9Xv0DLCSlHM9AZ7`_w72b;4FqTdRHUJB%$W%nXn6E zL8RnJP=se7FDnG{&H@;PRbhHIeGTrnaqjfo`17x3hVrO(r0ef`mX4VRNrZ@@Ja348 zQIOcv%bq)Q=WZ?eBdKct-Yk=DfrhYc%OqBdeLKNx%j8;M zn%-C@I6P-BM*`7UCO0f=cR9r}2`XifmaA@Kndkw9Hq|ed2`I_9UMv$(*>jiNVwnUz zVo~rI64S6u2E`o7Mpl-|OdN`ApHWWB5q}UN6R!C>zR$KG#;7C zK!dAvwcB1w2i?6ttA6zl38xRo(<5Ye)1fv@QufVWaD`%P!c*HSICrJ0W=o`XjAhNF zlYQxmDXK_4z`ot}c#c$N1*2jK!{O`xQ`iB$#ZcXrG`zbbYO9ij=1NV(oGS(VY!IQG zvEIlvO8h~4vYkGmzv%Z!)1CCK+H?tPMc2@KRucL=o>C*D<8 zH}%IGJ9Kxy1s4NpXq{kY6(xDm&K+}aW&+Y(S>dfx$rkydAADK)p@Iw9u3;Ff#-2B7nc0*lRAbD?FV=FEk zt3J`7}SYG(+A+!W!P`1G-HQ%TB-E?0t zzJ+GzI?k0hR1|sesQcN+H)nV`jIo$9oHhlWntJ=g2KGd_Di6nF*ZFt`H6ngyVKf?* zO-D&1Av%$V4oaw^<~G(rV~`j}u9;DH2C&;=gsU*KAYDMwj5RLq%;?}jxTr&jkAs#h zE8Y?zZNCuCSP%|n(Lc918VU3m$pF{5;PQnn4QOaPD}-gJl(9J$6zr|ppqM0~C2~4i z@Lq_ob#U(@0uyzp-Hr~`{=jYY@4J^H%ohxo0iG20t9rIRm!m|Nih*CkawKu(-rMEsH&bh zsD>5Z(pYdMW#M(&1Hl2MMxbbq?kTm~3&*z)jE9&bd_@^BVN+2pkH&$l5xX4*GgBaQ z+f#!|(J&aF`vc=KfDY^}my1II1~qI|oxrf(NwzXPO3~G*P2*IH(t-9H-K-YKJ5LDZ z+$J|w-h@^}O`~oW{!!Oza5X6yc$<>qf{(GR0DWK0Eb3~)S5WOaC>P6G?D9NC(zuYq znnwd>jcnok5+?6gXs5EZ$6VNkjM&{i4T&5|1fbNq{DlMDj`dgcQAS_Uz}CZzq_O#B z^Cl9#%H`ziQJS}-`A}~{>)TgQ1Gi_SgVssVZ*8HS9?ypxLX}nCSyA?iaYC5uao=ybE8W$llZ zkE|jVzmYJSD9+>17*OIr<%rxHv)sKuKgs2HAI^Ebw(0u$*_(X6$>%HbDS=r%JZ!Gz zMuA7HzMB$V&g4TDlH4lYU}5K#$WpdrX|=in%4cmQ&sRg;Gti~#kW<9I#9vwFTXiok znkwDO)>jJ2)g47z}+>X2A zHrvS1s=7o>EmzK>h17E8(tAto_|su8#-G@e&lZ2OAfa{QVS6taoM-W;7ScUc%-C2} z*2;cii>B&>?d1;mtNZhEvBS7cN@x&EAB|JWeKKgRWIS;C@h@VZC4E;=&G04V^ z&S-c(>#rVd57bf(rIx1(IuT^4JIo}R6*T2sI8;#iINOJ4LC18!%v(_Wl})h)l>+-l zj-dHXX4^DzlOSlOIbP6Ly5JItC#wS=28c9sx=(NUSmk3pmY}WRX1?xZO}Da!n>FNSe%jP#!1p^_CI}l+X@mMjk!pkDTuT9UY&F-b%PnGBMQdsa zsVj(N^9u63PK)9;7<6@c^RXSD41pbnAlbqqtC*Hw4JN_7n%Gp3yv)URv|5|v@ad25 z3|)4FHQk2??uqx!kK8{epIaaP(1x=4K}dBrL=NmBfr1yDFGkd$y}1OdST3(9Gf?jX z-q^^E>GmybUTWQ>(P|Z9-L@6(O8-80Hq4YPRkw}C{-ta@yLZwfRafHo^~|P8 z>FIVjWWGuE*2^Z#ZR%A@b%y87euSCUqQGJFp09<1!n;Ni;NsX{0w#|8)C=tM`oY>!Y3cL$@z$*~S*&^IT0!`99D z*yww5Sx;#;>5aeNDE^Mly0f}mHZ#lLOBN9=G#AgX`=z2SGD}64G3|vdUHEduO!gFk z$;88+C7rr=5BGZ0kUrvf|FE->g+$~2mC2=?8NIJerYlb?Pk5&%^1EnNCVxIQaz_vU zJQwbDF6*1Ymo-dc5n(15(8vr)spN|Ukyl*A^gc_o%D2}1d1Dr&`i#uF5vxwNz;mN0 zMtC6WyD_d@XxWUlk}8fl_mxwh8#&Evs%+Qhmzd?YQ=ajSSwWj(DLxak=Dx)|UyA&) zX59KhBr~^71H~+?%shM-FNk3EoZiEkJ(B*@`MzEp37u*q=8Zoox}T3fowaTsv-^?m z?Al$dLT(1yM?y=g4GVS|$3Q2xoHpAxd^9ULym@#i%aTM)M?F?ouI(!@nZn>SlR7^O z_Y$J&{7Bw+ZafmVd@T4&d0b;`@@4m%6ZhqV(Q56*dSvUC-U}W3*N8fA%VeO}fe6)Kyo}PA1vvNuFF|^;;LFzhDK#DH=$%H8xZ^xXNO=nh|xh1hNz*7PsdX~iy zJ$A?XOJbN!vNy#PDW-VO2)^J_SI7Ymbyj;S>S*8Ir4)qMOjoob*WM!oB2RTyM`N`i zj~c7G?~C0V@G1A&;Gy>6;GCM!e>>2h2|O?wjM%ix%{Bx_6WHhwe4&cOo7uUr;5e;1 zl#Ayj%y6qe+C|EcXckU4->kr}Lp^lR`W`dD$JXjr0JAkCiXx5Zy3iY-FprmxM-?H^ z-lNonni~eA()Gb)>~Q-gV_$6>6HLlpCs^^CKvjE&6AHn)Hk|E1hYRqO8&Zcr@XxEHQWDh5+!;_6Ti9=)y=3(6V?85_bDzAD7#mjM1bh4 zC5w>ldYuCZmc_C&Gcl(F7)W;w#IROs zHxW1heB)+y0DEm0lyP^LlO#S@lRjVlH%T9^PNfQfpjFm8jyT9YAZr@OvU)UV`FSY0WYr zU@xl<83$QHp?1hshgOm@AjmX7VMPy$O31~kL!<0e0K``vg!;@Hh}x^wCip2xcxz3` zX3eSt((~~OGs1>9Mv5CBY~uhTZf)VE6AOr#fPJ|~M~1eW7_{nGD<4y%ie%N+vDPof z%v`81bsv3?!3LO86v^e=3jxKdgWrM z8pHy|Y|n9d)q=HhTIHx0QDRTm+_I&%vh1a*vD$&E^~=}E*I%yqmd(eS&E`*N9y=8? z=!G1|VjT4y+5=*Ic)`qxqzYY-Qu&u_@v|;l2KC!x%G-j>3&R|~SFPnEbrfN`QWnAsqwld4PiTB zuP+c%Oida#Q%T6qcu#FP3;;F}8NoFLlj8Oo>ChI8-iAOdPT<7*0{{&<&JJ;OG}D~{#*b$@qplpT8fV&wr#31 z!^+2dfnrt*Rhw!SX?&?+FX1ds`PNiSWOS>y#2xDQ6d6e%LB7?<$PR$y47FJ5X3)0} zN$u#$?ng8~#;vDj(4b>DN39|(Sc3<_VX^3*hL}a$Ju`P{LNp7|2u^$O6`-*Ixe9cU zNm)km4q}j^01o26>;yZgFHm_Gx`TY82X7l7dxBq8k*)xhDb!)ZQB#V^okM+^C z>}--R7_u)i4-;Ya$hDubj+f(od1YotD>f4ryeMK*%o-M;Fr7iJ^6<8l_XZ>0TVna~ z&iF=u$`4A$@~k=}x(~Y*VcOgTNB(Y{IcO-V#Q*kjt@*RXx4TQ>sV;vrg-L9XYH7T z0sA+b_ITalbnY+1R{0zM{1e5H_%rfv?5`(F4p=Zy?v!w+r_R$c5(KaX5{pu5-`G8) zYwJJ?gsB<}Yyz=~FAI!r?8Uj%>5s*~RGc^deNO&OR{qMfu0O0{-jk0W-k8V3G?Na} zxt(aQ;uU6`gjV^-&(=gfrmy*(i(dJl2Npy_AnV?e)DBtIVH0Iu*+i2kOqxQmT{wNUu!E?%(X==d_Q#@oYB6+jOV187d~0 z*$0Be)LUByhAK)kuM*oJ__s%o|8#cCiU8U0H}AV8_0TutFco4=i8r+nE-O{P9g6V@ zjvNnV2&-%jhoN@OmV}Ind3oEY4jwr1WxQ6B#Eca3MY2yA=&{#XL~wU}M5J0966X=% z=4gy;M#h%Ff}Rb+9}~9VjLF$$7@(|aOi013OcgVwH|%#EIsAU7r_Xd5+7?=>{PM6S z!mYl7GAB0mq%JL1)aQg`(yU!97JAFoI+Sp{TCa*e2o(jJ<0K&O#I*|y%Vs4W1t#Z|m>xo_m zS6!@xKu{vLB&-I)wr=`!Qbm`2gvBSnU*FuRZ&39KtC^B9aa7n4%LWO*%GTAVwBU2Y zemJPkg7iMP`Y7wA&h?X{%pxCMpnB`6(avN(n>TG$O!b!Wv+E_TEdkqtY~K~iysGtu z`q{*ao*_NWHZ`p@^3>EmN`o>F!BG1G1gOMR{h5phzgh#rh_v0#fLV|xp%%e?2sSe$ zgL~`&+*K~xW_h&5+R>i`6-9LgTz_@)r$SDlyE;6@%b@~g4%adTpt32d0e+@=*$Sm> z^AChmkcP;Op{6f(Z*~vTISa+n>rBqDd8niGJxM=WZPx4hJ2ndR#o%Hk)H8HyNwE-a zseu?*?Wp;Eauy0D{-RZDKAp{`S}a_<~0+5`oHMyz$n^W0vtf=&e*;ma?mt z4|v!)5zoX|yt10?>K{dDK%A$qm$zj4mlrvLY0amyYX&g5c4p^_eQ zu%+fcTigwAE*BQz#QLTQa~}LH_Gf*-#uGR1SUT#xRW;eHOa1NR#WQB zehvvo=QAG*8=ud|KEdD4zp!JU6_$=M)g8+VNfTF}#`>y*g+-&5lWYmsSC&>HS8o~b z=bqXH5yVH|r`IdxeVv$+L42u5O#*knv;e}_Kr^#ZBZ5x5XNvFnTIyF}oh|hyfX8~p zQ`aJ04KnkqT3kT!H1~y_GIp=1oR}F3eP>sS3?laO*)RxW{iR)#3yz1_o^_Sl~1 z?T-cb{?vorE81M)jXqoaH6L)x5+W(+t1e`yfr!fO>!aXibZ?JEq}0M^*xZ=wD|{^? zZH;91*`^E~Z3%O@xiNd~F;=W<)L~)TB#f`UfkUlG+%s6dmE#~$4(8jsE+N*khS0r* z<5>f&4wgMHu=<}Wf}p=sL6>6Jl52w!*5)Y*41aj(f2pLYnO_E)PpZuBEN5a?=F_kyUE(M z4$~|vDbst7a5yaQN;;c z{krfJ;)`dkOA7uZ{M7m4{}u$zYKSc>Dt@V~ceBks+E&eXWa0~b{@F|Yf0{4!@ohd& z&!UcZjAr2e&F%_A;`iFLc(|8>YK`zt?X7GCUSi)$_D#(egiL?EZc~k`CFSx;pNmLD zJfTi0^MxN(bm|x0EmS-C=Ws13Ezv1^FRkd*;yZd`AHt$R4ZWjUiB2gQ5Ms_UI#oRT zXe7v+?qIWKp#MEuE>cO6W7VCpsQM)Sq>lH)(DKbCI$dE8aQ7AoJ3gucEAR?KyXjF& zAf%8PrnjYfwehDI>Q)RLH$zbFm%*z0``iY$6hwN~YSCHVK)2`VtM=7J*dDZl_;Z-#DrUDK z*d2rl_wwnaxk*L!)kV9rOKp_wtBdYUl#8z}LP32Fu6%VdDLQE1Q)c%}XF#bsI4KW2 ztif2>nm;lP^*Tdx)UuL`cQ8+Vz41?^{Ji|L)nlbUGA}iM+!~aJ1K9fE;m(vZor;(G zcNR+Z>_m%6Q@O>B2glvb&6Ryd6yEp;t(&i&etP|@_c5Vpy_ZQIv#i_0GTcHi!HX?bi!j@OFbQcVhzVov9R~y?fYk>8&p9Y#| z8||!O{w*yor!(JUjb)=?>P~kXC_YGY43@i=gJmJ2APOsB`faLjw!Lg0QD**mtrLp^ zWfc4dI%Z%9%jC!8wa<$yYm+Vf;F7v3^>PtTR@XA_aPFvyrjE zcYirp$Q41V1~F5d7rbm(!|mMK>Fo|jO$)2!*ENL9V;S$%j@HShacB<<)nYYY%1kv|_D4Y0V3w)?%cE)*#IIFy797}74UfSR>EK&D@yZ zz@XXOB)tfP$?Du9sZ?rvlvMR>j1X9xBrt}X~9pE?nWjqkI-t3oa3IE8@C%0dx^JR)2wd@yy zSuR~?&xmv}SP4Y6TKlwCAg8d)8qHDaP}H9mbv0cmP=xv$tSDT zNvB=Y{PVTgd4zT)alOTQ*={?#-R+9|VPIsvCD&sBwMq;C#Cpk4wPy+BDoV1CW0|i^ z(DdoyQ5Nj=G~V3Z-`}nZg7&fl28)&UAUu#k&=12zM7q1D1cGftqET2VKo{v zFJ9l^#@c$K9;7tXp_aw)WlI5wIq}>N0T2(hw8X|^*?X7j=>cAhg@Dri=H_1J4@kAS zrvifnhpc9agSzwm)8X)VJ8vn;4c|GeA!}OI#50+nGEgL&aS4zGw7C=k6Tn2MHQlZr z@OW;)v&T4&wvSJb5Bv2bqPd}MTlg%Do*p7Oz}SGmh#~te&t{?5_@m3ovF$Am5=n$t zxBWHA=F?&r+-VD$NZX=;M{zB^@2N`LDVd#W)iFqm4t5D+*C3-awpLr~R-Z&2rANTH z$#y-F((TjJyx;4ORu4uEw@!3NGAoB=E6D{n9&-hHEIm%v+wErA+-bMn-9p60?QR`| zLZp!yvVxhYbVi9A#UCq2s#xtTYUvehRhUtw{^R3A&7-O)Pv7hql=vjJ?pw`{9nWU< zwC2lY>{0@@vF93#do&#vc$f0z@A?Tf2_V88d&^l3gI~L4!FAC;OJ6>|*)gY!8RKFt z42JwRanF0UV}p3xpgxI|W*Oh5#W>MPaRF?T%n_MbrGu#9*$5OMb87X5ieR*AI||wJ z^SM1|8aHX87q*g4$Hz^W$(E6RG)HQrqjOJ~PXn!1%Qd2`B)kmvZvfm*Eu`AzE< zJ{jm(ea~aHUK1$H*6R{`sbjswgX%?|kijQBf8%n?)9RJa^_YTSwx_S~?9{J6qF`RP zujUaYj!(w}Znpwi-7gr_YerPuvfOOe3y2>`@Su1m19g1`A20)jIv%_#Alta~3szWd zfjHzQag0c_q?FIG6{gJ@T_CK?b7wPYaM;7hw=LI2*qzg$2Vhdr2-O<2q9 z&A4RuHrKtaY9a*nE!n-#(1alrejmaAdT1N8&_dI$h;>3d1hSPP<6aKELi^}M;T+hz zM2$Av_KSkYX`D_^7XSHlTlVR^2_npFgz^_MYEW6J)vc`>V;>x7XxRj~pI1<~u14S* zYFpSADz>0ziV@rv)QE^xZ$qIc9=r|R2r5!tL8-IvhL~ZcjhR4i`})gdss{A&Md+ck zSXxxi9gY^(S`Qj+sy4;inD=;&1HS1w6qELB7AAtvW(>RR>3&8nqtSsaqH1Wf7HXh9 zb0r>10maDO(pt$Ec?NX={~-`H_0O9RG7QLNWe*E~cFRAvzbtSp$C zn|EB1ZSA8`Mq>H8*`u2VdXb43^jnIOKE)Gp4-W zLSCRy;{>Y>YKkhICmx~<}|8Si$qeRz6$ zT$i1U=Dj%))Gg^ClC3r-mU+5y$yY5?A-nwCXLzZ+sfXhU#+R|hvKt@KN^hsY6K^v1 z!HdgyYH30bPlU;>#K$$->13Ac{-H_MPinW1NI&h(O`AiRv(VWyi8jgVlbYtGP~BZ(^f|>B3)fgIsA~e65Qg!n?zG<)$MppOh^0 z9rt2ZV~4dS==yTb%?_VR`G2!yZPA0+60MTnN519^{eJ>W2D?cuOQyV8vf*lJRz?ri zgn>e-CCx~=$6#(3=J z^^#@l&Th8bwLcSE-k?EvMf$S8b!9G7SYQ7zE1dzWC~Cef1zPzvld2ln%Cj=+s6p#% zs(PX^??ioBczX(oT2{Xg+3LD)fNvB%E*bCbZg*YSP^ZDi0>U)P(dvD2RoFM9n_Xe? zn5>+7BwJVH(!_(nDrUUC$i6xqj%{0+{pk2aV4{?3n$*gqr$;dwJ>+dNSHfb~^4Gh{ zUyI{gzD=)BLXV4HeLIb}^Hbl`*;v=)oeR+4)8Wf!D<=N*X_@m(nC>)<0yo<>-Ft|M@?;+w7MKG>MJd;ul>Bbe*yDz<6eGOtfA+Vb>j_(G1&mo%3+TA5su)DoGCJ3Le%B!)tC;h-HB2+0 zo!y^~r)E*}a60k|o$3xK<$NJm_T0rThm@sDfs{v68c6JZvi#2lVeGUy#J0|omrb1r zd!yBvopl$j>}M>96DJ`(Td=XYl@Qx*w>u{iGVm8YNX`c_b+u(cGAkoIApKF z6X4zkW07xnUzCkv8-~9^lLnHCQ6ObwwXgbi;l+a+5dY?YAZt4#Mc@pl^HZ0)841cO z!E;TGh&_cvk=w;S($&aDTurP@Z%>t!+%0%l5U*v%c=+q=?C=`x|2K>DEo+hV%GD(X ze7;4F&bOFn!4+Cg@xEc=s3~)G#NpM} zNY}y^)U9opUv+E0hO4)@y}R4zMGzae1h02_mChWYWR;Yg!#HC}uYZ=&?|ZkMkw+R4 z=@`~#NyAN>os}~}4RV%tF;-Ndx1EiyKPsHuKNs|2-^Fe(tR4;#87?=t)<%ge^xiXt zifAaCU1&}1(;yi1Cmd;dhJabz@kwA@3cs$$#z7UyGRC3VOtAR@Gh8bCn1a0+teTrq zgdnHctv6zhEc7aY4A(r>3euPFjS#lTy&1{k0;us6V%n8mBNv0l^-(i3r|lMcW{732 zEw8_{K=uXz10FJ}P@ki%uE{^`vXV_xQi=H+td^Ca61Q#$_!QQZq}Z9u(v|z=Lhcqu zR-|OsJ-L*MLfrYZXXfkD7sl{B)D6O|H|AEw<#c@eq_m$FK&M}>)|a_Sr<&x*I4Iu$ z>=;_~Z=xlPl%(z!v_dAW z79nqg_S}71K-_$!yF;s5iC5Kqfaq_IyQ5qs+pim*Q6yO;mYQ`@h6kDlx5LJW;mVXC*gD+A1l6hkqJZC=6U!M z)76LgaPW@a*$TuuVt;hh&EF`e%pq0LU{nyJj&bke#!RB7mUFG{)6fj4+>~(!eVFkz zYg;=)_VP(M#KnAss8rH|x&`VNxb#W5Qdd1#ze2+orPgnbX3&Cz#x@Kcn)nVh7E|@a z+{}0h@hU_(L?tzHZRV43ow0J4+qElIeiH6lr>J8+PMl@;d53v^KU&}TvM)zZ^wM)< zVB*plUvC)2Qaz>CE1JpNmPVXFp4R$Zw83v7yiMvdt9lKuqK!6>YERPCE@%13$nkWz zx2FVDBGOjL!kQ~s!~UnGo*F@Bly=cJ49n7hqAdO8EUj;8LJc#)oL<40&P(;KV6YgO zsrySxR4_0!%UodEnN>1b0mePL77T=kHW+Xve>~a8a7g3FsrNKr5QP+Z1O^Rc=1Ob_ z3>x@Wsyl>)`C}IDsS3<*zBh(8FvQz!TLZHQ$n>&;8A&nDH4Iv%8%usTk~gh-fuzNp z#Ys4lB|FtpPu*uSUT-pIy_E%Ds8%D0CgT_)Pkqp;`r65eTt!q_Rc2~5GS@l0(LU4t z%?P72C@+M*++l8dHc@)L?8!p|7_2|ble-(3#mhVv5IiDpxHkEnjZfbCPaCCsbSL!R z7#wp78R1(a$|bTTeZBM0ryif!sm@CxWtWIv@|HqSMM@=)5U#}AcDwx^39Mo&oS>yv zpE#N@^kw44^dfZuUS9l-45ikylQ;VmcIVAL6(91ted;g$2FJzH7hptdGFy$JVyjoI z9@EW69DPXPv(-qgCg?$HNwzzmuSGc;zuBjna360EKi)nCVY@@63F~bm->`BSJM8Z) z)*pmYM`STr-D?P{q-*hRv7@sX!VVVX^=gRS&fThGuD{)n8R@5b79L2nt}J@EcFFJ0 zGKfVr!l7~O9t8+=YR2qZoFiDZ7nQHqsA)U%kh!Hegy794i%kq3)m;flsAkcdRp5_R zPkWBzXAo5U(5p78j4QWuU4Rb04b4$moTL55+szJ-f+iEA`x6vzE&bcxKa_m^E|*`>6)BvzGNpa9mm_pgWh~{ zyNZx%;&Ws;r(kQY(A3S}X@7Iex6z<`ZU6d9%qEgi&&L(L=60-{{Iz?5SQysBvJqkH z8eAR&ZVWaDHT;J|cplNi^VdB@cS`4YtkE&?IyjRngb_=+0>&v!*Eow$U zl+K6v8s&YE$HDr?z6@?W;<1|R7@{{`Y;Lx@`W<=Q=@(=-B0g^HM%e+i!NH~_7$!SS z08S;uD^YcfZ4M1*1T%!b>aVd9 z?7w+xc6)kX2P-kWwh|A%X_MH9^Ww*F+gOPbd-f&^LHF%XmdivZJN;;mxV5=6v(3Gl zY^o_ESt)t%v}32R*wxrcV(+g>v+e#azHu$!=yde;-rdpf;}mW?!PT+zkzjgf{x}3I zRlV@V=h$$a7R?2kX5c)VX{h7jVLP=BBSxUjR5i-xxbi9=13xT=!^!3eDZ(k#RMFTC z<9)i-?9FmlCdoHMYyGk~scPX5Og=VLwoj4>g)&<=k%D9-*vVI5HH_#Q_v&2&dtqct zjWGvJr(%Ti6(WXe%K*xJHzWA1Wpy6P3_H_6)QpfQ1GAoPcNE$#lJm-Pd|9?LOV4{w z&(NFl9CGf)^ycw`H+>sG)fFqBkR=6L7Kh7S=o;x#{doh$dnZV`QyrzL4b%j3ZvM0H zPFGJ_Y^pi;dG~S{wt;yf+Ve5i^d;o|B_@~i-FA0>;#LDD7ru}6f~J^r0S9FXUosI3 zZ9|d;BVyDLxer=4H%?oosTm}FQtEmO4>u}a*gFu79M;4))MFYz;A}sNbig`)Vxrz+=v}ZD;E_8#LUhuM>If~r3e4S2{uus-S`Lk%JA zu1}uv7YBj0?O*y(%_Q8~Rg?508?~D28?+*s)9g!19qpAqMN`{Md^Ib2mIk?%BC#fA` z`gb+TOhZ(5h>Bk%2pz|IdK&OLSB%KxHlA4PwiaY6k%4#tGRo~XSmlB?A#mGKq*nr5x^>W!UV^UcAuDE6f`;}VqArGj){ zz%K=~RuRL_9LzI(9r5Y1QeXqI$ZZAlA?n_3SbFO+Y#(Zf6*Mh&b6CvOLUzK9W&t%f zBo>eqFSIy7UHXc71gI}anvJQ>>GjU=Y+3r78(I4|OP}2S^p;+vB^CGaqNN|Nw>PWW z(qCOc(8s3KM{QeSpHgKmwI-Mh{VlLAibOm__1nnmAl|dot{}E|)7pjU@UU#XN!B#y zjJxJjZe+{jIiALAYvE!~iZsZ|jeW~Q8u}zP8lMJ)1#Y1jt9g5pra<8Kkris;94_~1 ztH0u|@xK1buBmg(RzPF7EXFarlSJ`@2PKE?#yv3+t=SrNV9AlCb5Ez}P<-u`Y%llyfeVCnS~d=318nqo$2xsJSTrVr+UqM7cB+4)Ayl8}b#jeeNIr}g z!fLi?n21nz6~>;k2Ac?WCvg*HY685nv#BCPuI?h%l!n{{S++#Fr}G_gXxr14LEfxZ zk|OO-N=x%R;&VvR9lM`ZEvqf6Z*r^EGkH0mi$TRIZm@$58IUho-e#d96SBptHliwZ z=}V*=QI)N`qpQXw_ExKYXB6*1eX~(6hhG{Sr7PfIq=!>eK{{i}`Mqr#H+P zE>d8u@y$4e*scO83kjV2{W1Z?D%&w9)bU3_lFW)(B9oxD>WO0TS#>C^Xk1~=-cht;+jyOd=5?p5beweIhEfvs~G(CF?~I! zU&3*Z5?!wGV!T*7g=h9(il59~092RBCY=SlUP%Q)HV4d9pR8c&NqI-L&MM(oH=Har zttdu1z+@yA>h8aQTU7oc+%%9}bhodf8yO82^>PJ%5pG&%F0{>ebpK|!-|+jIj~6=} z_qN%ZROC{<`O2VWTT8ArOk)^4x~_h+1Erdd(orpryV7wkfMlo1DonZaw1oijv$#+~ zuxmRgGNa}M59DxX9SSy9GnubSdiuTqze1Mw#EYJKAq~}*J7J7>oMmz4$-ZON4V_tyyPVS<~nKnmZ8wb;KrUtR4+R7oBm}-zLythU+J{&?obaX%Y@7qVc z@qfRWANi5Ef4GlYKH5#CJF=f(w!W1oCM*_SOXkn^FpruK71A#k@KLdR`zU&m7+Qa% zkK&Rw9TeW!mewHXXApH5e6qJ;06sEV4GQ93u!={@CPI=6%u=E_9KcrhTlDo`RN^b( z+ile*B}RX{tvQ~2hJ%{m6xEbXaQncRD_r?G0Y?3f*;Waao&`lurWsY0ZE0RNtaNeo znHNnfxGugOS!A)_tc#ZaBOO^0$M}TZhL`NR_ybl-Sq`O=#Vx=hecD(y80%R%ugd93 z)DnW3cvhwd7;^W@5#qftGEpS`c{Zw94BDdPSdR1dd5u|P7d_&;89FpL=EJ0fnw|8X z*DTDwi=rD0p1a;Y4lokzielCT$(dSfsk0Iyj|k>K`V4qSF;-dn6mxN8t53 zUk;fQoF^BVz&bb<0y=W&0_4~dYe!uz!HYysl3{Ovnk9q$ru$*fwZWQ6l%EI z?R3&p({|jy{Nf+<=}{?A{cyz81G^m%z`U>Lynk1 z0+uqDZ7@D;c3|Idw~IdK&DldXe-~-z5?11aWMy8cjdZVzX;)ev0sEm8O4selGCpz$VV$~O3unIAg*~Md|s|LWZ49V~b9#HKuEyq^rcsI`T`2dFrgN75b8>kZGBP3$q-nfb@T}+tm~kL~3Q@b-CVFo|b6vO0S8p zygdpm5fs1xg;{a%DhHq*VVNhE>1d!8wN%Icccc1RSM56>YPOphbm%$7llf%fb}}7( z(0772w8?TWlNbMuKnbT$d{*f=qP(z^fMi)t8xxR@BZo+MPH{;KvdJP)lm5_@5pMkS zs7gFZh@vqE$ZuA#BOFg4mNFP%f5DqFd?!($`0{>)gcmO#d{;>6j;oc>^(6^+x|3cTVLRneC4IXsw7sP>>gxX2r>Z~)U7KLZNfC)zV`!-1Xov<7@TI0FeN ztjQzX?c^T4%J#JdWsqRQ&%J`Jy<%eZv3>Aqk?HNR{}^04#*$TwH=)Y}t?Ok6p znf91`cpc?Y=89tvQ9dU+@Qn|(Kz5M8j>3QrkH|gLhvu^F0-ZCLzzbg)#Eg^Xyhs6$ zLSE>Lf6yDmYjk5O?!ceBM(jb2bt(hc#U)TJgg+zJw`7_{|UZMO4^+COwKJY8v`1yQ*T*TQsX8mSa zNgLpsWNG1gh(pm13wW*De2?SNrZxzSFFSHV`s4l4*BFoYukq|*pU>Sd9?zbSKtJ$k zdK^!(9}N(eU0wI>?dR;X|2x{JBvklu${YNNm+@j@W+wl0g`%K2ODk8WuUmvsAmK)%tz{;2P=I^mQT83-) zXy%sY?Hx8lWeiNo9#n&*Epazi6Q98vZ?;5PZlpBZ_Sv0-OZ34r_d{{La-dDDn0CX9 zRRukqlrF`&0&1WxA_@4$l(Q6SGx`KPWXJeCJ2 zmSP|i<2Ik{)1N;N!8e#{6)l*v!nKR$! zs9;K9cOx0Ol~16N%g$KML)gq9wuv8u)y7}2J;mdHBGP`!Y+JnS>^99&PGa^3yj>hz0C2&)(}91^D`|{7z^C&sVBaILUP@CapV*a3UN2~mHoLrfCgXI z8tTp8*-Xx96^K)wg|(w8`N+UI*F%cIUD*s@ecDEmIt^rI>DXAxIkkNwPIbx@Le)5S z(afHOgJTok(ie0p-O*kqnv6(&&cnV;t{y;*QUOcC`WD7f;wCyY%~V~e+b}g^4i@4s z7?>qY$<}k#VqTy(&pebfIUj%)LK5tc&nk;^+qI9|-ZccU8P(d0#3)1wl0-q-VqmlBf{DBhkb%K; z9r5EdB7W*`7>BydW}_>8j8QF!N3aI4LX|*UhL7_;m&5q$ZVM8J{rJcq))I(y+R zKW)m%_z`?@tLnkQK*Fsaz9`HiUbxn18 zyVpQf!(;YU^9H?i2;&v-6OL!o2QIa~+ONrR_iI{&x0*l?;-U2h?BtO~GkU(k%sD%m zWl16Gjbs4AtB>WCd@naE05l`wsO3RbZHTK*5)LN6S8(TACC674>g%F{*mj`c((G60 zdT>}H%{LHJGQypheP7V?8|ky8D1i90$fCHrryr;;5-7Q1ry_CjPRi)MEJ>gLlLmg^ zJ3=2<(!!IZ#P!>mTlG+!S z&WzmJQ@VR=LzOafVQV)#YJ`O!7+y9KSk{w`*gC5z=TU5*{tGK>usvO(0QvwWxFYUE z8^9d#Tz5L~ptTnn-Z9O~P$8F&ocU5l+@@WXN%16J``q-K*-`F1!dwME3sNLZnX{D} zE{IK#;>o@t$vINQzYlH{dBF@%3!GP7WC~Bc`|JX*kYGAimwv6^T3#`^iiDDszinOIk5yIc z!ZHJLh`nTtHdf-0s?oShxU!ZE$XolGKItsNJc3}lj9_W1$*7-#kT<21iuct4rYp=* z#;d{A^rHeDP3_Z_o%KZo6@GQ=Z7A;!x;cwnR1M`cv|tuMAtXCt9~WlQedgL2`op&y zz+c8DUESkWb-zGFZ=xpI(^mzwL{`(|qtL+&da@E2N@f{!)#tB99p-%*(XT=cm3v1u z4E2|zrsyh$7$<=`sN@9MpWp%YXhT~wy$Vz_;-gTvh&suZ%%L)&t0tm8;#?+33MLEG z9)z740Kh=e2>vJ(c#>y@+JA$(aTXV-)(;RN?;q8ul_>Dh?i#fvb%E;KEpzKHs6Dyu zqXrh%?xO~-{r!!yr#_~iX-f;AQgpyf1k6xrH9dS#A|Qu8 zM&}svH>d)50K*1@rfIgygoRYurz0oDSPOyt4@ufQqp6Y;{`?*bD87aZVTd2#Oa(*3B(T^`kYirum;Va_v{W8 zhk(uNkgyky6HUrM-wb(-QY^%{^2CPdFs(>cg&o%w3AnD})c5tj#}6oE#ZPEYy8hfw z1`JL~w2WOWE?I?CT*6^k87&Xz%dXOmX)`w`mg)>3FO+tZ9Npp$Pmv0iiJ%&%SIeN@ z>E*8Y(q7ne2OXlTA8%njUN-j}6a2-zy&YcPi^7a*3&e40jW0C?K2+UsbJy3S_c z#gXyF0_M~~1#Y~TXCOg|(>%*X>OcuWnBnd8$|O;YuJHdrUsIJ6->t$zC}%_2i8Cdu zxeBjQXEXEwO{AYw(L8q(W{TTqS+D)q-ZO&Ly{UDJPtgUt7@i4RJ%c-_}P+JM@V) zLXEWU;+7^Y&WD@J-)5_@>^0=k=p0Nk|4t&U%Tv)yiwb2dH5s`@*tJ&;0TtMy43I6l zG(cRi42CUV@ZjaS7tJJ0<&+$YT^{XqhSn0FjV&*vYv{gh4KV;Nq58!KnL!tR*zxUM z5uPz1993fsC4hpUeX&E0~Xcj25i*OTM`dq7F4s!e zRiFSwT@|o!Qvpl?`shfabGXz7DPQm%Z1uEM;r-y>=c{f^i4WbFyq_*Jj8gO zMoP~inUlZC#G7mTc;FQnpJ|_>WuxMy8E9m!IHpZMtI>3^MqNQhsBRt=eF#EZu6swH zE>qGIWcs|5p0cM2^;$vdj#;OcsUVfM{69cyuJ&a5$3LC^`j@}|?a%)>{o^Bi|HD54 D5eNwF literal 0 HcmV?d00001 diff --git a/java/examples/GettingStartedBook/media/clouds.gif b/java/examples/GettingStartedBook/media/clouds.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad52b85a1cc1f336f360b4d82742723411ea6380 GIT binary patch literal 138979 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 O`1qCtq+BdO68;BrT0@Nh literal 0 HcmV?d00001 diff --git a/java/examples/GettingStartedBook/media/network.svg b/java/examples/GettingStartedBook/media/network.svg new file mode 100644 index 000000000..5ecd8d159 --- /dev/null +++ b/java/examples/GettingStartedBook/media/network.svg @@ -0,0 +1,4056 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/media/robot1.svg b/java/examples/GettingStartedBook/media/robot1.svg new file mode 100644 index 000000000..e44805f1c --- /dev/null +++ b/java/examples/GettingStartedBook/media/robot1.svg @@ -0,0 +1,1033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/GettingStartedBook/media/robot2.svg b/java/examples/GettingStartedBook/media/robot2.svg new file mode 100644 index 000000000..e44805f1c --- /dev/null +++ b/java/examples/GettingStartedBook/media/robot2.svg @@ -0,0 +1,1033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/examples/Library/DXF Export/SimpleExport/SimpleExport.pde b/java/examples/Library/DXF Export/SimpleExport/SimpleExport.pde new file mode 100644 index 000000000..43c6c0dc3 --- /dev/null +++ b/java/examples/Library/DXF Export/SimpleExport/SimpleExport.pde @@ -0,0 +1,48 @@ +/** + * Simple DXF Export + * by Simon Greenwold. + * + * Press the 'R' key to export a DXF file. + */ + + +import processing.dxf.*; +boolean record = false; + +void setup() { + size(400, 400, P3D); + noStroke(); + sphereDetail(12); +} + +void draw() { + if (record == true) { + beginRaw(DXF, "output.dxf"); // Start recording to the file + } + lights(); + background(0); + translate(width / 3, height / 3, -200); + rotateZ(map(mouseY, 0, height, 0, PI)); + rotateY(map(mouseX, 0, width, 0, HALF_PI)); + for (int y = -2; y < 2; y++) { + for (int x = -2; x < 2; x++) { + for (int z = -2; z < 2; z++) { + pushMatrix(); + translate(120*x, 120*y, -120*z); + sphere(30); + popMatrix(); + } + } + } + if (record == true) { + endRaw(); + record = false; // Stop recording to the file + } +} + +void keyPressed() { + if (key == 'R' || key == 'r') { // Press R to save the file + record = true; + } +} + diff --git a/java/examples/Library/Minim (Sound)/AddListener/AddListener.pde b/java/examples/Library/Minim (Sound)/AddListener/AddListener.pde new file mode 100755 index 000000000..77ad5a53e --- /dev/null +++ b/java/examples/Library/Minim (Sound)/AddListener/AddListener.pde @@ -0,0 +1,42 @@ +/** + * Add Listener + * by Damien Di Fede. + * + * This sketch demonstrates how to use the addListener method of a Recordable class. + * The class used here is AudioPlayer, but you can also add listeners to AudioInput, + * AudioOutput, and AudioSample objects. The class defined in waveform.pde implements + * the AudioListener interface and can therefore be added as a listener to groove. + */ + +import ddf.minim.*; + +Minim minim; +AudioPlayer groove; +WaveformRenderer waveform; + +void setup() +{ + size(512, 200, P2D); + + minim = new Minim(this); + groove = minim.loadFile("groove.mp3", 512); + groove.loop(); + waveform = new WaveformRenderer(); + groove.addListener(waveform); +} + +void draw() +{ + background(0); + // see waveform.pde for an explanation of how this works + waveform.draw(); +} + +void stop() +{ + // always close Minim audio classes when you are done with them + groove.close(); + // always stop Minim before exiting. + minim.stop(); + super.stop(); +} diff --git a/java/examples/Library/Minim (Sound)/AddListener/Waveform.pde b/java/examples/Library/Minim (Sound)/AddListener/Waveform.pde new file mode 100755 index 000000000..c48b7471b --- /dev/null +++ b/java/examples/Library/Minim (Sound)/AddListener/Waveform.pde @@ -0,0 +1,76 @@ +// This class is a very simple implementation of AudioListener. By implementing this interface, +// you can add instances of this class to any class in Minim that implements Recordable and receive +// buffers of samples in a callback fashion. In other words, every time that a Recordable object has +// a new buffer of samples, it will send a copy to all of its AudioListeners. You can add an instance of +// an AudioListener to a Recordable by using the addListener method of the Recordable. If you want to +// remove a listener that you previously added, you call the removeListener method of Recordable, passing +// the listener you want to remove. +// +// Although possible, it is not advised that you add the same listener to more than one Recordable. +// Your listener will be called any time any of the Recordables you've added it have new samples. This +// means that the stream of samples the listener sees will likely be interleaved buffers of samples from +// all of the Recordables it is listening to, which is probably not what you want. +// +// You'll notice that the three methods of this class are synchronized. This is because the samples methods +// will be called from a different thread than the one instances of this class will be created in. That thread +// might try to send samples to an instance of this class while the instance is in the middle of drawing the +// waveform, which would result in a waveform made up of samples from two different buffers. Synchronizing +// all the methods means that while the main thread of execution is inside draw, the thread that calls +// samples will block until draw is complete. Likewise, a call to draw will block if the sample thread is inside +// one of the samples methods. Hope that's not too confusing! + +class WaveformRenderer implements AudioListener +{ + private float[] left; + private float[] right; + + WaveformRenderer() + { + left = null; + right = null; + } + + synchronized void samples(float[] samp) + { + left = samp; + } + + synchronized void samples(float[] sampL, float[] sampR) + { + left = sampL; + right = sampR; + } + + synchronized void draw() + { + // we've got a stereo signal if right or left are not null + if ( left != null && right != null ) + { + noFill(); + stroke(255); + beginShape(); + for ( int i = 0; i < left.length; i++ ) + { + vertex(i, height/4 + left[i]*50); + } + endShape(); + beginShape(); + for ( int i = 0; i < right.length; i++ ) + { + vertex(i, 3*(height/4) + right[i]*50); + } + endShape(); + } + else if ( left != null ) + { + noFill(); + stroke(255); + beginShape(); + for ( int i = 0; i < left.length; i++ ) + { + vertex(i, height/2 + left[i]*50); + } + endShape(); + } + } +} diff --git a/java/examples/Library/Minim (Sound)/AddListener/data/groove.mp3 b/java/examples/Library/Minim (Sound)/AddListener/data/groove.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..0a91e6c71349521868d2adde8d08dba0e1022e68 GIT binary patch literal 433788 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%0A)5tYkY(KbZPT9cbbogZu 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⁢KR73*|f{(Tcl8z!on@F#hHwl9tsD<$RG`hfu&ilp!84pCy=HmQ_|hU{-D| zW4eKs5UuMrbVmJlI7Sol9=moe4Hdp|=%lQ9%`6(cLu)3%ZAtempPIGivwI_1kHigX z*E_svN42>r(jAxxoDN>IhKujkYqtox(n-bEs3D4#zP6rny0ASIHd@r>Q8d6ggK8_H zRFtD?q9`O`zX}KifjG@s#Dxq5>RSO3s941zG5dMt(qnCE^DZ!u%YHvEJLzk`UQnyR z^XqZhStu)1ts-hovmZ!$YO{n(RB1TnB1DQTDO*O$h-5Ol8*^`tmXmVctt`4mfI|XM z(k!X*NBV57G*L4|2><~?X?5f~yxQkh^nVRmVdxtA?F;G));YEo{h8E~x6EQOiPB+R?VT9o?<$J!xo4S;JF#ttCkvt(wHB zq2%gs8AT1M5{m~y+11MgrkN%Sx&ihD2l|G~H;BNo#q$TbN`m!_dOxBN1HYq-s^L>r+K%rCgrcX&%-+ zvkNbw;+C13mu8C|Nh1zp%TW`|iU_e#g@$GcAbZlfyam&oXfR}hrdnO){%_~5umAh7 zL@fXXQ)tkAJ>USOZ5ltUFaQ%#l|h*FfC`l|DR&-_0c&sPANW?yQPB6QPbIC4?$Bai zSMOfNnv}FDf89IhDRZ644i2*{DA%>MuYagp#A@yYSS`7u>hDk^YZ0MB&8wYSEv@aE zZY{5^X3?{&^Tudx41{Rfav~8jBQeQ{{WJwh6K5IEwZ-WK)6Kv#^-Wzw>X?dzm{+@0 z%Ub2w%c|@bx%GPb2+%nBQli# z`@lpDfCbiK(e6Fq0-X$MUB{#VR7s;by@Y@QcQfd>o{$Bdoo-NMqbU1*J**t!P&IP4 zPb7Sg^At_Rjjl(`Gf57{>2FuAQ20;PFQB%>k`CV~)a*!FtxHIC%h+0;@Sv&`agfDa zipROsOu?=xsGH7Qo+~o~1bB=XibASXGNBWgZktS`XYfR zSgsR;44{}%5PYKR4x?3u7AJhIUYZ=m>Fh_!x8n2wFMX#YEgAHrpJMjq*hMT(p?in2%ve5nIcnxVhH}>(1tgt z(G&}5rHf)vx2*c!zmp782pifx6f^nm1?|)IDYB8}ORc9XW4Af9M0qJ&DYT2$LZt)M zMI-#H7g@0@XWLaj~t2V)y!#dkIq&)hzJPs92Iv%=3ryB-x5pVG|2%P;!zf2E>SxM9VCS2}I;Y zu_8OG5QCr=Wtk}K>U%*%Qn=}-WjTISLM*7tRbVmshdi!a{bN6~^QGKP-b+S@uLCt? zyM=K`G}J$C~VNr|R{tIE8FFk}oTjg>SO5!8_R%QniQUo}VELh&5P z;_{-vD49_ZiDZ(YO1m*RbX~W@me*uMUa>@ao|TB=VD{$BMY5UgyNvZ+$6lIW=h}I2 z$%SQgso;5XR~wIe27@Z82Ke-%g`3_99J6pRubUWj9A9!=)NtjjEgqJx;rQnt+pLk; z%tz_kf|jJf?3j|vC3hp{NgGTehs=*n4u05&Nc3321xXw@TH@fzK#-fY#F-$$`7!9O zCm87Bu*f*Y0s`Zwr{V~E#!+H8s}+Sz0gj-ix8m_>^hxU|D8(en1vcO)Hh6|R*Z zw(>OL#>A3Z);LjZl=zvEa#opOW!p}g7os#;-@p_0DB&u_|jJ{vAx#&lhDwW#jQ0<>5!V z0IcS^|NEdsF8~A$I`2gj%>3%gOn8 zrhlKL=9gts%EHdn4tO_tn^%v&cFPK)Wk#K4B#=p^Fi>%FMGFfq`El}|fS1lF^UQvl zK!g%Y>yxTB*QAlv#vXo5#x@*l;C?mQpTVVPhgRb>oQj}YFy$jDmmW047yD*B5!};qW{dKudi`7v;WAf~O{4^Y;4=zcT#-RD?eIRCaOk7QDJ#78R8FI+!4SlYq znl@5JB0_1XHMFpyf?7Q!j3c*)DU3G4Su*7fJVTsd}7$<%^| z4vK@)N#vuU%Qu62iD+&GgaKi=sUn3bCp@jFQ6d=1NNT6?)l#JEj?tnU0eBbNXk+ofkYIGxDY-%DV<)& zq~*&MnWJ$%XyV#h?|!oC^?FVq`a#eA_eL55C3Kpn0gx6u;DVTd?0^t*(b)nW_3`a{tXPl#{vIyAPkmoR7@e zN@y6WNtV&;o$6RpvlW{g)|1)SGmlnYHx^;BW_OONX(r7zi^)v5@yJCuCwfAHlC0}g z>GxoyN+`O}|NF2+0e}QTWzA{kLg0lgdL1yxc~haCGgQU^3Rtq{_MVUdD3S^!s0-C1 zO^zfO40BG}VS^cLxZ=%_$q^;Cg-0_s&njU9pq#pq7xE5Rj{~jjbf0(7usC}(nrf_| z>_)1E>4q;E4Ije5m*^WGBby@UA#UeJXS=GbITO1qKCrSN^7htTEbGf$w)UOHi^zr} zpoC^B5S%Df9|oYUtkZDtF~$lB`ht=~?1?0aE(I{R5qc(~n3h787SM{0rv$7X!XX2@ z_%AX{wkl6uEti<_ifC43N6|WxDzNN<)-MBCpop2>zUroblX`cx9$FjN)th_!u;gHi z5Tn)ljuozv6m;-d`LsSn5m1;|)sl@&k&0svh_*Cw^ffJ&ge%^xq0CKHR^t^#=J=)5 z)RGBFIDRP|6^HuD4N+95Q{$-4$I*h+{~PO?M0DHsq%LNmtd7-;`P6h;zj3(B>-5;W zd2iu;rtf}s_;YuVzMYoec8s@J(>UuhEN5NF=BpQ%=4_=2zmAbDyfK)n_;Rr2?)$ds zt$*zm?&afd)Kv+=+t5C}<^H#tLeE|DP7a5bQ0mg zCs_oNi76*TrM*4fu0#5FEmrWZ+^t&jF%A3DT~tdQ0^9J)R*1uA*P_aF^K@Q z44_HWrWj_EC7km_+vb}|tMd)z;Wo&h7P~tYQuLGCe6yxpGTW`FQd_orE7d0lDdpiE z&Xi!}+lDV0RkaHwVGTF7#kF@Yc{W9=JH-iLPN5JBxe{Cxi?~Pu={1kmN6ZS?X^y4LV?>%W zyu(!6z92D7t%%}(IWn(Z?Q=+)>X~EBs?zp{2J%9U3NBFP0;T@s@NWhkl(%bo!p|Pm z)MybUeXKlsWY%L!7L%-u|T^Hh0bEV%>Jd#U>bPRpbAs`9imEwPU*{pw2+ z`Ca+!u5%xkN-xE!Wq)K#|M!zM7n^md5h6TGr~<)ZCIaGj02+IY~)3J#w0sue%Y*e)lSN#T0Jb z{Yw`t-j`u&hkB-`n5$bo?xb#?FQ>OTNrjp&PUD_hvrUE;b&SP(_AcjMlMVNF<97d= z&X+oTs(j6Qnez_kcmMC&srIwOxPRgK_Mg9Fea2U9B>(_GfHor*3l7WWyq?(I&}Umj zK7r+uMP^osUHN1_)c^b7L=XT6k9FPdVdWC+t(*$X;i4MJyHq`l01FSdD@UJz0U@&5 zrj#{!kDttlau`#@6qb}=#Z#AtWry+BmFF?iyq;q^U$@NZkwG5yTf0JewSmj+y@Cs= zVA)?hWn2~p^+K$+$hbMOr-vES69hGB{L0Bh>U82`!r~+dY6M(+>d~aUnT0OmxvjIe zrB;~ST9b>DjuWIU0SXzAtwo;A2En45CgQtIwzD(Fa(=Y&K`O2Sjg9joioNtUCiG%} zI+q4fZ5rwpWzY`fz?%=^BtjI;$`%(had3rMg~mI$aby4g|NsC0|NsC0{T!y?+dvWk z000nRLgP`lE8Uo4l|vLI#bHo5asweiPi)O*hzp*ppG$2Z2CqvGR=Vva68wzQ#dSBG zMY#3K=e6{;|G7fqa4#Ylcku6R)vHywKT$TnFS)xhxs2@J)_-S_7K=dXI8K_I@}~Rz zy}ok{Gvb%P5{81^;`U>5oOdL@Zf27TpR7Cou5Q|k#hZ15UCdekM>bN+>7B_#cYdb& z`pan;rX1Gwt6j@@Bv=_`>~xyDDvqT}naKj9V4~v$0sU4s@y1RUU8p7+02#^vAaqY< zjcx0z`TsG;9df___Qh-6sVk(lyLjhG{YV<&0Sw$wgt0|FtSqjHUbMxo;=@dt zE=N*yL2;k7HRHE3?L}QTx)@#4Z|mbPyD5`Oo~dPAKRHa~YB5z%L(!?%)*j_9Qn-x8 z4=>ZyscH$eW~S^=*`>pI9%t>-AFyS{cWob@I+RF%-{>t2+~IhCnx%4%-bt$LQ8o?@Ptmon{)cZG`gcaAsd zE`Au}YgVuBJH1c-Dm~2)GHTOg1 z#BgCiA}CN)&s@y}LHgD>MyaCGnkh}1ENe+G^LAzVScrF2FU0n@S{}Xl(@os5o)`Zt zWnIJQsr$SxLNu4#L`)- zPH5xYzD%t|*A+LRzmHm^3IF@BL`#mvUuxA02{q!H?Ha*hCWO_UsZcCD(#mi&YKev# zNm?qWKgN|8pEC;sws?K^VKzqGpX6W?)RBO~u_;45f#Ym~2X7n6LpE=f`_&GpsPkem zMFgNUw4kENRj3*eTGbq->lghb)}T&)9_Hnx2fS>Q39DRGZi8mB#JM!WoyZr%hpU-h^~VhOR$NnG4LxP zOBPZq#nH^sWC&6$`Y6eYh_%=^k(%`q*cPOjYFD8xjTax_eMXO}i$8F?Z zSmRj^sglk$7lhJ11gvQaBt?!%kQ0bPN|m-^T({K~2H*XYyzKyG0$I{rkOI-KMue%s z1QzfNbF^AQ<|ot!R(Mo5SSnCE^36IUp*5)UZp|Ns{aHYk{iTJSj>5DSF;a8qcvm|d zREVp}#__^y>6xjH&DEe+eM*-9`>;eRh{b?YA!G-*Dqmgr)HEB|q{E8dCL4aj<5wox3_GC5g*= z^=CdES%{;Yxir6|E=~`+@>8QMTjXc+hNJNJ*4>$HukV!!w>R`$8}t|o!7Kw59AZO< z1OS5-NL<29OR>?90H`A9EumJt=>#KDXVb3BoVQ-9@Is%NlftTmLTM7A1fvKcgX$!a zt&s`nSIMy?u1eas=|o)@Q)4%3ENGST&Su)2Hma^$DSK9Nx|h4l&7I=cYd^_SZzj6X zQ&mXE=3=r?O|(X+sq5Rs@Dg|OwntS_n5O2=Jd$d(JX%pgfjFv^-0RuarQr#eQrVVX zMoPY=<8jJ=VV!zgP7s~nNsifDpyBRV?8AopImcHwv_U4)!qpIE5it}BwASuvrL|-| zBN|~ZXR)tl#bj5=Qx4PhuWj#IYf3XGlUgpG`bw+xAbq;Jmdz){nGun z^~c&nElE(yNa~U-r>Rhgd1sSsCsF4dTFs6;r4NP86-XXWoHW(kPz!OAft6Y)c28B5 zU)Ky!YhonNoQ#%SFl7_|ua!uSRoWZ>ODC%AQ&H1Jq3hq=`N*yv$DgXC_2x}Q{S2H{ zUgww0p<(|uqV;Gg3bb6L$2+!NB`mnhcmB%OuD4Tvy|uSrSa!$%*6UBJ-gRqsBR82{ z(2b_5iczg!N~ZzlFTdh&a#&R-u$Q>6pUb8i4@;(my=n*rUwzY!h}tmNfe|5D6)c!6 zTp)CCLop0SV*ZL3x~cOrPpH&(KmYr%L=%LBQD@h=C^t%ftor&fD1lI+n^tBZ*Xk3q zD|GWBJ$n#9vLYZ@Pl-IViCII6$`W&EC1^vP$%{l51@mi8SLHT^^}L6mjo+Pq<>n zfB^pH`_}OUhVlZjz{t3q?Kp?Tqp`%rau|H#!a?;=Jq}Ysjx5J$&24JxE=s7evTQ|+ zjtRxAVn31%M=#Yk32#qI;6S>F`I>IkwTq^|X%*IX@7Jnv6P|c(NnXzU-*x$4XvTHg zs>aUc)ljJ_G*J^QRAA*Ciia!t@q7=Mw|CZYG(!gDgfem9{*cxnz{CcgmR63b%MPle z?)`h<@>9$2456iL*zpd6Vh>@0GxksAGfcu6MUEoZ?^|O9gX$rfjl6Z#rZuHx+vbiv zR&7!HMu|?=21pS|l2JID`jt-AM^mJg@Yt<2uK3dqJf+@=M=b)t$oi~Y$*~?Ht@jQJ zWCWwT@2uy^{%NNYY32l6%7~_e_BKi6H!HX`n_mIJlM47Wt=tS2cFf z$f+aQ4Q%y!t=kjMl2dxU6U%#~_ceHPVJ{P{XIa7(OxHK=i4qmQ$>kYQv8 zH0_h@t5YVR)g){WE=5E_j+XKY7(n!=G}!8iMAa_+uDyL!2D)6}Bxq@p)?A+w_Qox$ zah<1Rn$z!i-+NNS1$!3T>uWjkb!0L|m4etzjBDc$92CPl*2)2zG*MX7xhrepQl&%a zsq%`2xVLd#q%$8259%r&p`?%_OTdNy`=CTHh=g=yQ<>&Qnu6@wsu|`FP+gx)=a_t= zNwI01_97)S2U(6~rf8tD^AhyUN;-L&mhaWzyKz*4#tarwjv$35j44z_$6VRNv9JuZ zPyh#=y6dM*cvY&BrTsdTZg$i{(WXRk<1@MpT(b*iBG$ApBCQotX|tP~>VdUnwb}h_ zwQWQl73!K@oBz7}*}wTI|0SuRpVqgz6Fu{NRvJe#XzC*}DLd1&m3C4_`j(#l4yi_W zU)%qmW#!jLqUGf4sV51UhK`R#yLU9TO1Gh+3jMXcuw95)lbZ$&Q`b`5usNvowYb=3 z%=d*pv5dK4AB1kT+;w_?`V}0U$5*ussL-zUMW-4ea61k+u!*ciw`TDzsjs^3>R-K< zZ(CWsU;F_!??;iXoJF2SafK&HH402A9jj7Dc9e&ZrOS;Rj`leZ}fKj6tucE4z{VxyirC? zO3KDmE;41Jh+*#oY&umnN`a9mr*&M=`IvEoL)$*&lL(`fmqZ_=17>9HmL{gO>IYhk z3v)w`+Ni1MaKXaIy+goya;fS(MHuo$Lhm14W8`B!9RnVshy04Fjl~m~S^)sNbl0+h z*bIrCsWwQ+pV!t&7-Hst(9I)GSPjYISO5F4L=XssMrhHy3_|#b3))j*h<#EKqeSc_ z7NRDy=^ccb+*yim<%mbC3+CLu^v}%09StbW$VxUxG&}>AcbXuGgT>fI;!L+8CeNrg zIVROOmG_H})h4YFAF^#KLHL8#Uu{WtfvzBD4=g!*`2YiILQ? zGkqQraPrmF*%tk~uJW8pJwnvj$Y{MuVQOeaQpqu=L*+6k1(O<|evCj(HM5|>42CQs z67OLTJNUdHwxqRZoO~VIGxIF#E4kXjmsYAqbj@tOng1%Y-F}HtIs(YSAmCCJq^Teq zh(9z?Y$&1zEp+EZ{)8n;tjPo7nBp!X_&aOhSo@BpoMIbtlVnNID74UvJ-l8qZ{;~3 z)moQ#aZ$YagWjxcx=4^{sYYSe`YaS)%!zjrw?jr-w##}51zb6SfI8`ryPDz?9W^d4 ztF(sl#wR6jmo%`Jl{1a9<~R_^_r84@(-{0tPD@~;uFpjav=GEONiL7Dir(2qzB+!M zt4`XFljA>s?SH%SA0OjSBlmx{ur*e*qx&exKM}aN*L+s{WDJz)@@r6ugDqB5$qOLT zgXm=Q$HJqw)4H7>1xu~HKal8Nz(Jcy6CsI%asYZEC8MgBp*Ath%g2#LhV}^B9c@`h zuGyiSfoxe5-n8N7?j(KZkIzyH^(|UgcqM56`=CT2ii9v?(VGl0`i0E;XFSM%Q0b#d zN3jdyB{S)$^CEO^wt=1bm-2HW@1dH1*Z)|8`Q&YGVuqtDc-LdDd>bC z9Wxg1`?>pbW-qdPh~p0T*DYSWxD_Y3ySux)dvJ=o zySuwv@ZeC2JH=g!JH-nWxIFK;V|?dNlAkAMpS{Fa++hDZ6@3eljGPRH zLWZ!Cuog||mzHR%4Av?fpwkn!#iw2AtCn6I@J_jEE~8&lUR-MotI}_aK%I|CR{E_> zUuB&&?dN+jF|#r~!J9nY7nGEqvXm1}B{tEgb_1zgAHGFq28=t-|LcC*S+p6BwJ)QYsvySupEqR+1LS8vNEh ztk0YGcTErb#*jPHbux?YN*%SXK{XAn0!k>RvG6{&D*L9%KkU!7rC8qo*Io2`?!`$X z!+BghQBtkxf`sT77tY`2ZUISV=@1a4UmV+=!SD#MpBZ|Z-j8s1&I#(r>RGiE%cSuob^Y4MwAFAHCq@; ziIm$!JmUQvr1=fmM)ifl%o@vzzQ}(cL*!@Aa#ZS6yZQHp03=THIDWCQT9yQ!&?!)T5tXO2z&ySW#vhSz{k-X@br=HwJ1(gBPmPc{m+i@OA!BmkY6aCxHmc?bzr(-gV+*;qpd07Z$qe&HJH5wG+ zu`pmXDyDxZee;Nvh<@@H2L&iOh4wq$eB@M02L;keD!vqXJq47;xqc){j$ievKFbYq zdhqMFDu?|M-|OSeKiP%z_Qrg<<2_Q=ldrD>L7#M%CkMR;5bL{8xxbXDGVxbgEJ@8z zxK14Fpxgg?dE{rbE(|%-Zx#tzrjUL?#m%5PQ3R%rQ$fL%1nVb{yHbv>=2>`lJj)|-3J+s3}$%k&NHeyr>KrA-tfB_y@O zyT6cDc31`JpDIxZD?UvqvuGkX1VYpPlxW86rVOGEtezhGqG%Co5fN?v`obZJco-q? zI#)x3Td3pKtfqu$do?zB?H#GX(l**&HrV~1+F6u0lmGQBJ_Xh!0Nx@L0uC=}|XZ{Sqf$=Pad86IzTPikbH zcW(45`~PcT%C1N^7+_tCX41M@_BJfv(zEru@_6%qQ+TKode=Q?c%3<}3uFrDo_#-m z2;A3$ORxHTOelofym?oD-<5t~SlE;>$9f$x?P)aOQ-+7yQ6ytnMH{RxX1Uy06bM)i z5ly4EPyr1%TruXiWV(|$;^Zj`6!ORqkQaYQre(7zqlc@`62kmCBuE9!(H&jt+wyZq`u+s~8&vP;7MsL2 zADy;R>A=RJw0A&Yp|dCl{r8%1kV5s|D>zw=$5=%)b8e&&1P9?4>Pf=Y18VKW4t7MPi3 z!NlX(8=h3+o1ZIvoNTmcS#pmrZ#~a^S?gZ@{fA4dK*@FFHD?PQGiW`{rKzqWKZCS; zTzc+I;;QssMNucoir1Tea*9y3k1Pb)lZN=EATr^nazcGP0z*%_6Q~ z5LAuBS@Urj1U9%uO@S2~v69<1JFJAZmTIx?K*QRXM|Jc=3yf99%2X$|(JFU{K3>V#s>%TP!SND#n&ikQf%CV$k_s*Gz{8Z6BvXd_AR@?s8_W)TJx@F>xlLgGpq&xvtp zvtoDBWBX6H#4m&|k{}rYT14Z|BqT#iqBe zV<6HN6mLE~tZ8ABU|G@QJ3A0{*J~mw62xV5Amhg!@k%BJETxHV-NoltC4yWuV)iO4r#**{Xn;Z;@WJJgWoN;7_#yrfINFGKq z>QF*B8I~|zk~X(|s}d_Du?B;ZGS zvI=uv5-YBWUw3W&X7{#6>cCeiB@QXdL~|Uo>O!QER;^F7pM&vDM(-RbH28gt?{o3= z_(6~%R+2>ugBRdRcq zIE6dM5cBImUe4o3ncKa-4U1#`k{#E7*D)gvlhYoncO;tIj>gFo+ZkpRteq`;d4~8q*b*Z|N2grg9?Dsj77go$r=?IffVWEm4q^8VdD4{F-fORo# zKgVM+WNeCRo-+FkA$7h$V#U^Hgg}74leW6Dj3i+@FK7qz=*>ABvW@+ORF#0FL=a6v zP@vA#=JHX+K(fM_mH?z#3<1P7%XDx=QZKMOu9>6+igG>p5?nzw1}nY%^l$w1-+fbW zo5-p3-A}8PE|>pVXV!nt`Mge91RsmPS@R%j_j zH;+q8{jpLXW71X0$MZSunjpydd+X0iSgY;tG5A^NKBc>QY(*D7_C_CQN$2i3p$2v9 z%k4#&EH$m)SI2&a^Ps|NE~=tsLqv*72#|c$Gy%`!$&C#Ts;R9u$VH?5*F{pphrybx zbcS-iL?d^TP@cG}7RT#WW^TaM1~L0&|} zh6H>%fdZRDm zMKtYR`Ys|R_lNH9Vh6bu)y2BH^SQ%!(HG6ejk~^Ph0CHFotdGwHa`r1hwSlj zzqQ5h>lNKkh0F*}cZr-0i5r_^vaVe8hVNVwJ~^|#J^M!DVf(t%Xt=~ zY*}uLC*E9sb+a!bPqH&g`fcM<#}Z+5o}6JbF!sX9-q6jX`zCw|QzaKgLP1rx3w5y6 z;5yg5((1YD6n&n5c4*&PfB(HJP-8uEsKE}HrncDQ&F^`h9MJRF==6)rAu&=M*lBua z;u@zq>5j&qCFMJaD~N64TT7{{>2i=!`LBJfZfkSrBNl|&>fdBdC=LSscdQ~rg;7~9 z%pFObCELe<1ZiSbIa3uY%jVDUSZz)t$Q(?@E*TMS7PBn_y~L{xt|qd7E$Q%Iip7h{ zU+f0UY;CC#b}C%I>DGCepT(lB>BmSJRnyV5vRtNQg4=Ni4WY(5o->YYRL^MDW6NqQ zS~sGP3K)H^(!+COx$ynh6-b=DLSg|7mI|HBoJax^qU#JvpIy!Jr)^eOA1@EHI}_Su z(@8+SvT~YPezR9xQX%wok%9f->^@4rM0c{7Y@K9t?M1E}hPirF+Mtg}3&IjL`hq#E zwgD(yE}E;}bgi~IDW~Z$mu+zo5{Y!#@^U2A&?U5_#WGbgB4(>9S>3@hbdDh=OLhRw z?|_J7u6Dhg%WFZZ-U*!^u=TPaGZ<174pAE8@VMDm8&txcBOklSaV|-{S_>&}StnWw z1d`JX6p+!FT*=CiE*8U?oae_8WG@MyT--UR@TNW(k*CmkX!3$8bVt1u_ShnNsjOY9 zAKm!`NVpb9u-1oEa}4wpwLl-a87?v$ZE`Q4lCLA-ZyArMP7gkvfi$0&8iVW`^ z!{21&iY7!-4iCMZ{bIvPH2SQOX;<+zj2*iXI{e>ovg;Y4!_q95D(8M+BE`4|Yvgkp z9~RFui-{$O%$bdhcW;`jZq659?uyuq(i~G0Wx36MwZEHIUx6Kk9hNubEB`Rau^XVD znP%(QW~i~Isx)f34+`g3 zEydYZIyZO9%#}j%${E$;0mj`g69SxSY~k&0B;N1r+zaJ+(-RuKT$cv@p}SSc=9HeC zeBEa>2W{wi6@D+qHYjAl%IkIt$762*`*{ZUUj6L z>TxPknj93CIfFY0_itReq^o`yiXg#lu3XF@$PrNtWlpYnx^ zcHM!)N?o%-BiQ(yBkkf$;%bO$JeflFa)p)bl!;vkiBpg<+z^kBg_}Z<@({UL70-h0 z#J!@BYIV(yq;cIJ-AbN-PhOvo3_oIk-=9N0g;rfwmjwAmy~nSpH(h03rFU90COdE7 zF==@SVb_J|EBnuJVG6kAz|Wj_2sdoXwi{Oz2<%|JDAHq54aFse6FbJoy}f~vD_TmQ zOm!)GarzG!N7+S-$+fJP;9n)PLHs=tu~pKiK7XzmQ954#JMF08!$^R0 zsz(wh@$m%Qrc_R7lBLoLc39&qIp+; za(X&EyN123A}gKtJCGi$riQR7*&Ui)`;|g{nViSt6nb2iw_jV9bve$DJm_67I=eMM z_V?S*achdxwOT$-jN!k<&>b(q*JcC}_{Nhaw7w(#Hsq}Md6zn1SB(yt?(jrVdaO3$ z7Dx?A9HV*K+{I}oA2vbnTXN%6MA#Q8w^EKJ`STs82-Rz1c2BnE2BZ?L#`f!f%CBd( zW5jABNo-pFe)JcJ(= z@6$IM49_k3VfO>oL`9*co(>K4yFQe)w0`)7koS_194!@!{-UQs$x2bvy|$ZjX{(;J z>YjdP-?J>)BQVzo3pxF3n-Zc`=gro$CvTy7=^H(_Z*yqf;qG~4_DlN}N1JY6vjY48 zla1(2Fp}O_=QGSo=9~{P<(i)79Df2$z|V>3tq#=q!58ZAvfy7l7(=Pu|Lr|U@L?Rl zdDRP+st5)GTfqo?b@W6@&9ET40uEq7V?WG}YE^~EA}TLds%)artY9KkGiu!K^V4~+ zpX{qR=PA*ae2-txP)57+%_@gzJwMqj zVJGTwi9Mn>0pr%d76K-<`@Gu(4LhRNE&j@VsqBeq0GzEhHlx+{{4erdvbjbfOUZMcChh8A=G!9i_i9iz_+d5PTar`HWT=6> zqE?@FXo^hE&I^W;dH(htz91|e$5y^tN%fhm&`WI1e|?kfP-Pn-@^^U=1Am>$kRwqS z1y{W3c8^JbFV>c=o3tmFORlARO%@Kv?Svw+wiQjuFF~vi{xSmG`qtZ7dXWEcqA?#` z5z8QnZ!y=~p%2jVpINHUWi@ceC&032ZTUK>)5_Ff(9t+^8&TlinSJ$Q+U|sAa-50&9Ab&F<=lRnF8ejucsGby*q< z!-|1^J91U&h<}^XwG)P|6a}ocMsz|d;wjo4tM-`_Zt4C>oCDnLZPL3;lzZwATaNDe z7!rxs1-ulJdlZL*6|9+y^coLi;kwI($h2nz{f+}kbV^rJqyxQ_gG`+NP(Z?BHf(aR zxS3$dlhT12M5!qqWpX4UbQ7RVAYnM!pcb6Rm?I{jNvq2s;C6#rMMZ+WQK}ZQc6pfi zOA2U_3(i3=-n$-TG)UNi<`JeYU>*N~VuUrmm<}dHu!S$Yn`SvV>DCha3#7@FTI%oQ`> zn?8pWl6P?3XO)8R$#i~r+4$x*u#cPyoYbCQVPTP?VT6(V3yJ0xg{&}YMfwdCB#J&g zRvt{2B6k#r4h`)Z9)4Ka*e5}y2?pFtyG+s-s@~WRcw<%CoUA^zjiUYbCfdr}?~=x) zXKVno9Il$$tWc~KY!>itcef<#=B>D#e|+#ZtS}}{T?Mu*aMyB`g~*b&puzN<_iHn$ zO_#r4Z+$dE!BLmTmuSE&RZ``dr-qLt5OY!}w|@q!>LS|>_WU{K;|W5hHW!l#!ykqx z_WCK(i2PfmEHMxXhR}vI2%t@dt{@X;OG=B;F#rjGQ_`-2w3In8N2@@o6^j`+Wk~qq zYRPi%xXJzX2S(UeH;uj(%OnLs;U2-~G~p!bTM}E^fStjIdJntC>8<6+L*{L)?=cMy z{51YW+Kl@lBO8$85xgMK&Xn|h>VsP5nkanTx{G@ zM=Dz$NV`eH6*YVa{AvifC>V( z!dzR+@)To3VG?)h5I|ZpNS8p%b!x)<#{^yJFFb+PHPHhM;E6#j~i6kxTmpyy=#M;Myz7Yml_& z{#WjfKYan5??MfQiFfbseE~m4y>1)UE`DQ*Kk7ihkji)jPFp017=9-U5{ZeKMS+$qh%9o zS-PZU>}^xy5%H{-qATD4yfU2xa8A&b=e;}1Yj-iTYee&TL7t5qDk%d0_ zn}Hf0tXnTerBOU}ZCPrEOuONrPDJ7MQmyH3loneqVGRdYmALWid7Dj5CUILzO`tR( zJ?__xCJYhTi7jD=8vW$WulyR~vhUXBH=IwopD*kGuJbHvsG#blKqg{JQV19bG1_db z8L!jQq6FsWlbW+h9-sn*cf|;Y=UO0TjWja)kaZk*O7u2Fq>YqU@g2uY7wHQp#iFC8 zQBP-Hz1wT5-01_>GR~R#$jO!w;9d2jlcC9c{Srr=YmeTBbJefjCQ84s+c6>#o;-cQ zMs4lwkkqw6hIVm;SKd+Esrfm2)crP~8gRoWV;cZ%t$4BDH@$T#fp1jEm!*@r@c0HW zQ~fGY>}&wqjF#ET;S&^AxcXky{%Ed@dQ5*<;QdZw{yg1qaBkVGw=ho=TPlj&ue{-s zT%kYzBHA%Tm|>04Vg>j8cV)}#$F%GJ{{#N}F#LEs{J)DeCnlre2tL-Ze;KNwYCdmmGG6P=Y-n?J+=ESyY`ZH*YU9nd zdw4GA=%b!Owgk;a{?I$FVK4wQEyGdy^{MVSaW~WAxIYUy3)zH+b&KUh(_M&eN885Z zMhMmNd=u%$;Q?Q6dXf7an`nQjjWsfbpNUA=)7F8g1v)E{Bz%dz=FT_rXB|PTBICb8 z%h&Yr)vyohayAXHdO6yxlS-4Gh*OjK{yM>%>Fg5rq;&{{RSbL=Nut6hP8oxzTvjd4 zSj6O@a(Dcb(+$V|WP%I#ko+Yf8MbKWRJ!*y8V9%e9LaD$p(5+810 zognY8LnO_1Xxt6)2HnDIWRRHSs;v|gD%JhI{PKNDx`AxYzjg?7B7>VD)yo4lVJ%=^&ty6V0Z|Q50#$iku?m*hp;HaF6w-? z0!4XznF((7?494fy<#Y|S&D^ZSk#GxmzbvFcgnA6b$SG!L7x2*BwvR$%{4>6%DRAN z`F?&*1F$rUHIM;|6CQ1Lu%YCg$TCKxR3mi$J29zsA#IC4v^R;shHd7twr%%wU3g$H zZ~i+-!%zb=!9AJH60gI_{TqT@R zRVTZF)55h)$L4;K=RTu9TKap14uapnO*HPu-}la8w}J? zBA?h%4n8JL*A-3=fjn%$;JTvE1Q>idePEip3B$k~Z9>u2Pc+#i$5a-Y@zSznQID&{ zC^3wM`-z{r?6pjMjM3$sqo2XJ_oeBG7wH`2nWSF9NNj`lh`=O^h=Ux`w`5X2iO%!$ zjJ1Ci&9Zx^^Z1jj-{x8$xsdXzs|9n{>H-r6NG_fz0@$9eosJuB-@4F?Vp7U=Gc9_@ zjO;1%dlcefkd+J(GwDkIF0SrXjjF?@i!;6Mc*xB_3eq)}Pf~Rh7mWAdqFw44pdSM|_nF>r=b7g+;bQC?(59GffIqqD&=#Y|_ zL}ehhWl9gC44dqF+RUk*N_;PtCp+9i&q)yl(@zU~(3Z9j&^zxTmy=M?N?@XvajDTC z5xk5}e7)JBb3*JG>=vT!o5IFNZOf>gS>UH^%~2m6y)#}^#YEtf*pL-x2kKUFpmT)L zWs?0`fN{|ru*hVyB?syRyIWq|?3=VGTp6LFN@i$HJ!Yk)nRx>r%tV+D~J;s~S$l-wtaw?MB-bm^P@uK3S(c3HMgDPoX%O zmoWa+V&3rMxtx!9>!!E5BF~4$P zB-__CnMTN{&1EVnu*}NYvC~n8QhB#$+-(s>!cC?yK6TdF^-SfozrY|N*f+L93RJAh zVU)@#G{b&s8n7I4F(h1QZpRnhrOL;EbBrja4qeCHpAJa}-!aT6N@P9es{5+{4Vd1e z|5Ky-hN%#&_I-Sij(}4ST~m<5`-J$=enL24zvn14X-D*LBL(l;Pp|s-u&gE(?NQW}`cs`VCd{$ksEw=Y+*Zu7 zvO-3=cw+cO;_h!&r2&PnEc&Mm!l?3AZ7wgS3@qCzgjE@gDvAZyS3PzXIjYNHX=`yt z{2wI$n2n4*RXwM??b_a*?TRlc`)uO$_+!@S&okUAOz96_{z_C07aj}!&KHRaR#VdB z(|bI9j?VC*;{-%TZk+@?@SMM17Li&e;l!eIPceF;II&pcXLQ)xNadEz&j#%HrfP!} zMU-2D-Ko2YT!T(kqAS%q&a)I@f zoiu-%&&p)HKsC5f;Q}xrCfssb9)bTou*rG(S$Jvq2jkIp<&)=+I$t6n-(|MKSPN1q}6q*CkDMd^!`%^7t8myHli-nFf*JzT%8w3nm5(bY9sRb#3 zkS{t%&T}{x6V|e^3dNcaUjo1eAODQf?psT5Nsv91GHs1ToKGWDog>SwY@2$Jc)9K0 ziBjRUd|0NQhx!o14(e9h;@Y0CHfM75x39dt72Z7T`YUfxyAkfK|4mDEo8OKu#nu+f zs!-EG^c`vA@}ND;^moNC^8h&(qb;>{iL@-4rFjgCLR`9OSbw6m(H}GET>BPTM9FD+ zB9un|m^~maC$sqfN??0wVq_p+9L1|Ow$jF|PKYc?euWYiYL^4j&dbv>ksLEZyOh!V zykXuB0w2PS-<&JI9+ITWDp^8xpIA65qaIydc?TkAgEsV!X%o4Pb{4c54dn~{`{c8M zGe=q8KV>wOEDVVes}%2i?M5`U)6zm4uz=!a|i`R?OpiRY|*PC?Qfz z_WvvvXsBIic4r-U_0gF240AR)TTe}?%eyWxEwFMW=?s1YL$I0`jz7izVFL?FGYM`O>2ghI`3Vs={8HHH&7ooTc-O1dO6#l z&bUy11qoFggc7HiMXxg@CIEREdP{5^9KknbGUrCw4a%p4DdC4^3*Kh`n|KC=Ap%!y zqB#FXAirD+Mlh?!C#zPLqnx3$eX2yrdh4D$qSG1l%F9Wna#-7l>{Pi{niiHQ6t)&* zX+)CiWH!Es;*2}VP*>wD#>i%OR$v_(vBHG;D66%@!2(f=UEBHD`G9dd#bmyf@U6A`ap{Eb8U>1b&Gcn%Sn5=L zY}w66;k$KHYN4y0Mq!?Zbl+WS0d`tx^?3 z-$2n&Q_7O;Nlc&pT+s4KOpEReu^owyK^dw>*{+x_r$by=E}hfFe~)0L>Ik7fnMN37 zrFsPq-Lc=5jWoJ#8MV5?vzR!BD-tSTkbdPGEVwWuJIaegz;|(Y>f$snh8!{_LeRW_ zUHgT&%&kyNj-d#HE=HY_FT{xf=Ax!u#k(%I^Ydm6%%`>c<}FcCVPg3yCs5$fT|lP9 zWGus))p(eKO^_vi7#bIIs0<>vS^WDsL=PE z38WM6%oB|2EKH{5R)|O4sA=s)G?Pr|8}*|-L`g{trdfs+b2ZWcW=naK&)Ipy&LRx8 z2YlG=MEq5WW=7@YJ}j}e7m}Ou1?v3B-rRTPYZAUBq?x!tC<>d-|7HWcm7tepdBJQ< zgyjF13_!Vn&k=|vb99&8)^53HtvHg!ON90jphU<~B%BSW>aAQnIYCJ#D0s}dtUq_q z_i!qtX5DJ=WCwV>j?qe|%R<&?faOK)7nHOjj^&(b*R0z9hH_z%ll(wjK4?LB_N59L znWk9$O<~5H0xu|7;fp`XluDDUV?AroExgRm&5slc!GHVd(-}P;1XCJ$M_UAx5dbyOI>RYVf3E2Pk9tMaoND~d! zQ&zoL2Lc~KDt$D=LPhDkF*>rQ>diZHcQu5=tThQ$@9-iwxpu?#@^Qw6=d2CpZ57*N z$z{bSeUh2gH*fN>WC#eXSeFeS4j+g{Hdp`tC`BdJnkGp>0|qytI3LZHW>xtQ`p;DO(}EtgW3~K-}G;6x;vTM#YI`1 zZ(Dnv5(#~cT8PlYDFDZH|tXdPUMSc+|>tT)qWk`u3i`3zj( z>+n!YMuX|(%#6PK>BMGBdlWlK^Gkw=o_sC3Mmwn3j~^OwZ%f`Ik2KryKiJ|kjR)6q zq4VOKPpJKiC&21ZQ?*pNbqs<$p2LQ#APHuHJIAViV;^iL%{kkR-r*r*H0+U9M#4RJ zmf&A!6$77!N2Uv-^JfTP+i_^j<}7QTK2z9Pu^pJG$64l7p@4M_q2Z*`I^gCVMiiO{ zLs=Z36=Y4$8%Ywu8P=>Rm$K$$*;J;XCJ7oUg}~3`i%JgqE3(!pUKXCuA^trNV~9bdxH%hEKEniWKxJJJQAs>q{7tU`l@1s$xa)_t>>J+hSX0%#+tfgNc z%v(7_1Zpa^Bw5)+YB_vZe&!O>;~LJp8WMTpAx|wYXDKnhA1SH0dESXxq3ElMk z+@{Yr7gjSD%IFpTa9?CI{KXi^37`TQF;dB+4T0cg*f8YhMWH9rqrB(+|01Fy3&p@I zjQDL1q0yX3s)bG{hPUwGE2y1BHR9d3lHx;@b9w6;NE!$&<);}35FMl9y~ux+2PE^N zXKS!M@-a;zxb)g)gT~?p+d~cP*jeqX4igS@WMTDLy-1v)<@8Mbv))D@>SyVdkPPnq|%GV=!d zw74^fW{p1*^xmCb`<#4RcCPxse}-V7y-1Hf-b6mxO-^Lr?ZJw<)&B5@=3!>1r;Nyc z9DvMtm?l!KNF$vngVp#`=qg_!2Sb6a#@&uVB64%AWWJNbcmS=Dc=T!P!^Fa9r8>J~ z&hE_B%{MI6Z8w4SFY_Qm!*TWHzxeT7Yx`_8`_GthvF&i06WKujZI$&lvd-l zy!Zf4)-c@9vH1%q3rQt!R2%veI;g##Mx`sM7$@gT@43&B%8q^UYsgl8!PK~rp*Qe# z(#u?#c9Q?m=I+JkSr06lPPA>Rw^Y@AqehDsXBt|wS#@H0d!`pyZJpLBlsMeGk-n3` zb+Z!QTUJ!5GlwiReQr=*IKW)szVG?xc(Dnpxg7()B9@OYj#CDQpQ<8le$tHFxh%t< z>aM-#xiIhpc^$pQvcV7*@Eg{$C+;UM+v8$-!c8Kk<#JvGJVS6p1t@=Z1Y~!o`H}(o0{MKu zR(!O{lGMk?u64Gl(=nR_7PXx{Idt@b^OV~Vc|~tH9+&OH>lCXkyY<=iQ;xLf=%rtx zp`b!I>fFol&1`Y@rRynVp#XZe*f*eo>0LDs-P#`QU*_sf4nt(l98z)BGUS$8T~7()ZqU(e_C-POfH(Zrn^uzigE*=;JL={1}$X3 zdQ3L29c)-m^73}#P3?Tfj7^>OWY4*Gy=U#75~rlX(+y6Nw$-Y9QmXTL349(~rSunD zyg%zpWd1X1MEPv~oTj*3a}TuIX%c;Z)*a)&d4$x_d|KEqF)UL%B{L zW+-C?Um1D=1Y>^b45|Ndi7tt5ka$0AvXK`n~qHx%!(g;+c2_ zFK!}FJLZbh(08NQM6qZRMN43_KQU=LBfIw}OcGm{FS}nU4Q76$jjKvImgJ!E){mx> zjh!y~T?9`jCSZ!!)MC~-ua1{&o)Er;P9=sc5Y+Q<+9Yf%XMb1b!ZDlu!^wk=`*H~U z@J;_sST~$ZSP3zu3|lZnWg~(eD`k42n2=T4)Yod)EIHn`=B3t)PRXQ*izi+SU!O@c zC*5hjb;{MzjKuXvwUKc$$wYcl`VbC!Lz`vaQ%tC-QL5bB8d(^B-)wBa`e5h?7|!I! zsrsTCK-Dy5U0XAEj-``WyZWZMJv}lS*0JY*yc^<#a9yV*Xj-n4Oof!u!?0hu_ zRva}Q_Oqy)T$673PAmPLwq#6g8J8T!O^wZDj+m#JGu}+13JC_eGtTvmOq8wlH8AL; zEpp-k%{J0^*Y$YrrKOvDu>Is@5G zhMpe6Q@cs>RfejoiYEfyPfE~ihPly1r6i3CUI|w6nIM{(hGAdFsSF#uedJ6N&5Shg zmg_h^x4xRr6d0Q(9mqzPy;je(uAs~A zm2DFm8FG-bBpNw97S4JCTZZ^8>PBR&If2RiAR{*TpJVOU{+S1&?Zdd zj9L-1P1~^6xS`BeG}T->eqtbAIMdRUD;J!_iCG#lO*$G^&IkfT{A85H!1&ZbC6A9e zEo%xGw4>t>!TH=0V!#3#?1i<(J2vQClyR-(xnEGbaSbO7CDpV>qgl?{ybva;5#5KuGH(l! zv8oONP`W46F5;Y}S>7?hXKI>A{k7Pec;U@Z#BXpjALxvABkginGfSAjryS-jk-_H0 z6eNvUIIJn0-)7H?WBDYnm{tKn|bJ(WbFYQj(08dM7bi{dH20ItJ4wF;AP7W^z&tZ|w(u^k)8yyzg zmG~)#)T{-yvo9ul&1>!K;5b1FYmp1?ai>ofS6#s-N)T$wuZ81|g-2y?qG_5{SD7be zb2PnNZJJe)lK?he9=(LT(5ju z<0$~SXAEl;P0SpH6%L&M#8e{H+IWJQE{I;Op($HCq2m_+fvEX~7B{lGm|Z|vke*r1 zZ#$w6j{%J)x<*MFDqkXSWyPUiXGz;mW4UB`C0jf9bVihV;^CcBs+vhlkDSU+JDacc zcU_NV`6<6g0hV#14R#_Pue(#D4BjrEQK>g&Bs;kU! zIUElQ8jX9IzjA21G076U8C07qMalWAj$B*CjbhnTdPE&ce8uW$yi1>nAnkS*6|Ao9 z1Z(<&yANu!ES>RUt#M~UoJ4%OD+X=(ACoQ!ZNl=tHGS60d6(d9aN*xRs`EoOS=MoE zS8&~(Yh13g>F9B(id;jeq5>r?E^Iv#h&+}_t<2}@-^4tGO}Ep!goRgEIbGpbmLXk2+5kzi&r86t7+xm zo`zC_7<5Ffb{u!)b?JPC@y*?8Wj8^4ya%(r;tC3*bM&qHtSy}9R4Z={;WF$unuw4-_gv=@R(%WKj{Vrg0y-4ifLNf5?XAO2LW z6WT!a^lWtZuJ!a`vGN{hi{G5~4H{&#AzMU-?BaLFe3_{Gf%OxW#XKQiqa9XiA-f`3 zL^!^~((@->@t}}@cXh8xln^+>kjpUY4E0EVHk%gDem)>>_-(4tnunkQ&;x<2D8NM! z6um`Qx#f65pETV{+;YX*I$tFORDizctFO>N%V6f7dpf|-fJtd@9XGzUw~-niS#sL` z%QU(*dX2qc(uu2!ZA4CSGEUkm#|bfUe|t-=t2*umMz8-m=RBx+eMg)z^D3g6LFdvI zIH(AK1D&GFWBLy(RQ%d;sTEi3-cOgUaF1v*y}fZ;12iLYpZ`Cq&N8U2FYNX}@#608 z?(Xiz-95OwySux4DDKkYPSM~L2`6Clx>rDT!kAq$$ixML1h_M~V>fS~v6>=T6*uRvdN*=OWLi)FF# zzlj0HLXvISdr{YEiqv%%+sUoXviBdGocAXi+Tg~Y)znPNEVxY@P2&KlBtn~JJUbP+ zqKTQ!+nzMk?NMl=YhM?EEL9TMs;Y@JSZJ{mNYOJVolq+j&IQLg{|Q)pArZ+oi`^%@ z3W-QPKw;QHwSI3o2cg+BvKGL0bV)yeX^dt5%mB1$9ZiymT?ufgqw7AdS#~6)%ZdjF z%+E=DKE3j!>&Jn(A&5vEP#rkq_LQrPfZb5Pd?qJ8$DM@r_AA}x(#*&mUonhYGjOeR zxK+f@h5`Jdp>~=j1w&L;R?GVpi(Ns1s9h42m(KII_tLl_bz|LMqFJ0Rw&@2|K_Xvy zlQ?BWv@GtrRRL0bejx z6#cG4mogYPP3wJ_dyZ8@!^BXpp*%%Hf_subR(H!ydu!gbzp8kpqnBA$ZcUQ??>ui8 z-b@}r9nq#cFz`LWW`@1pYfbOaMvljhzu4q-{7BL!pT0NRI!cA|XRqGk*A_bhaSl1O ziog5-mQ@F$$RlBv%Q)XL4-R_dV%eJ?clXk>UY&D{zUpWZEy)zI{N8MzB@YSL(UWO8 zP{`CQ(f#;<5SMUf#irl*=f4cu?R%!5Y|&^!V~Gs&?yFIQnsIF548RwH>pXge@Y>w* zuAfQ5w{)5yIq&>&q<$!wD=Wp0$GVor6Z>ssea$k0=BPgk;$zVqhR9 zN+o82u(j}=UzWyKx@Rw+y>E_@7MjRRdj=FCQ#Mp-T$9(V7dz+TkVu7t`qS7e5&-DHTLp~s;$<4Xoe;9yfpS@^p6gvTS$7U0*| zzMCE_X)ItW{_ym4ZXY`{gecf~G)lTQeT^)zp7Hl$;Db0Li}l!o$6r)uBtV_ZoVf@q zBCm7SW-VHRp|ICJ1x`mg`8S;EYs8N}H={wt(!&M6@sc=x%uGlT<>+#vTE>)UtUA}s z4dY_hi>fwJ38*BM140T_C&EJfuG*D69l@-I)xbInJqk`5jgEZv5#1>eJ$u+?&6%XH zins6%NHiBoXRCL7X8X1Ov6|!IOhbN;e(|p-ZOurwx2S3*tB4|_(^}{WxxvL-ju0%r z5|R^qH*kQ3%CvX+Mha9QU84#LII&{!=$r4i$-B(j80DS15tA@WcPjly&gyxccYpPY znON&U%bQ=mD#)Q~aKui0`D$6Quw;Le<8;yC@d-pe(+BiA=wBO&R@30UknAs9w$Bf-rm3c%Y0gj9}&j6v^gTp_ZgUP z=5>uE@XEZlaLh;V{o_35TQfP+sMGK-4OEc`0xJnue!2Bb7r%iK(s@=zVUL2S1etI} zP%t%mhIm*g!^R0BW}AGLKL1)fd8h^b&pSc=jhWN9uF3h%te&hl^m2JGa}-VKoQW{y zu~R*b+*0+Gc)tXqDH#cwsql3wO7iA$T&vZw(c`Fd=JZzOk5#3X2xx6{d0+g*|8eME(X2Nniirb72*uPRi`L z?5}YsO?9AXPP=O|4PCf&9G9{P`HENNQWC$AE`(Kb3z+z>pZULyp*!>4>aaC1&`+OM}>~>)92#CEL$G4_31A5}P&C z33IP6dytNS1`yQrUb{1J>{*0ATxsLL{@}SSUG(uw$_`0G1}hQoPr&gfYzt|G+hCFZ zoVzZPnZR8*N*a?tUB=@Pf+4ikcCP6MOue4;`4?Kev~`P`hqI{{WPaFrFeHQQqzoF^ zufbehL(gRRQjvYJBA=}FAZ_Oa!BEdL>?b|)D5pOlTX=n=D!Q0CT`lT-14wa|R^i*S zd#E%0`nB5rd1fIoD=rNB&=F;YQcQbY<+}X=;miRYnKI|AMKiR=%~{7{hQC13 zT5Q%qPdWH7JgBDT^1V_yyKhR<70nE6q;;AUoZ?uyuW)PXVM@?m(`}plb#>dd^}V#0 zD=zq?m~-n)Bx)Dgsf~I%*?r^NSG(>xoW2ikxBeP>aoXA^fjw8C;NZ(mpNIBjqjsl4 zP91Y21;8kIyKbA`a?#HZl}F>sExV+m;LZ2fyA`0Ishejn%fJKeseNPa%cF(oYN-TL z$K>uWEXW@S7>sRv`5AM1`8ieURwH4SY+(cw&wSOfE^Z10f^+ckxEiPed<9naAI|11 zPMszycB7&5FH;5pY29=Vs^^yF1le;G%TX-TiZgbaA&mV zKmP4RGC%asSN?9?6@Dw8xYefJ$+GtrX=R#WeI&gj)^;;iO${w-fWd z^C{VffXvlaE}UCkXK`UH#fsDAbPai_VbgIOlPIN5Gb(HN8f7zwG9x4TpLmW10k;>m zHeemgwu>|!{%PJI*{<%@D+rXlZf)e{jF4LoMB||s+v1~3`k6%$E+p~;UJS!W7&~E} zox(CbGz1By4>slpG9DwY9Q+jyr4>Fi*-->ph-wJ|CK*;kTmd@+J=6xaCh{MM#L#2~ z*aSYj7E?=!tYj*4^HvEmeNMe{CL~=nLsw7%$co zcsLN!A$WUY>|{*vgtmg1-ubGQ>B@->bCo(6xv2O}gL~I0Lvq4R9hOr1!X`TPpbv(x zDemy(5X`ufAc}|uH1lqx|0ioQ;Ma6XoeO+R(|6sp%Iv}>a+QRlhDE~W(uA#qg^2T| z#y}Eh1lLnCCgCNrjwHZx(#o_&kwA4aJ~@W|NaG;OTH^H!3vajJcq1JOFCSLRP|@mi z@}f;7Y6d5YqHI>P^lthABZd1MtQ@^to{WiI_dhiBG?q+yi?kbEEr9BK-M5cHVUN}W z?*y;8i(aF>gup1}16@xH3T39K!l}PY>KkLDTb$+ZDn@VhkH=?4hSSu*ir181xin0` z9_PZ{;D_hCo@4NUb8xoESnoDqIdSxq(yjAKQaQX9v%H(>^LO4$@IpYCM&a?~YLC5q zn4&^aLwv_fuv`mO7;rxN^BH$iFK4v|qg40Da%G-IjIT`-9gz2UUdal*i zKVC1|wz~4^O7n{Qrrqr&!=s6EWPuuAaus8f=;oPE74g5Zf%K+gK#+=bxqfNqPACpaxnJ0Xduv-Wm36|FoSM!NundQ4++}@!^ zX3na0mWAs0XNQw!r((1|_w{9r!z!H8G>9$Gbg_E~_NvXNmiRdV(!rT>71QVIK(Tw76w z1Viy8OU<1nmg;fmbeBO1Rk!d>&gecxdxNREPN(TwP^pfcKFj3j5O+6L%38y})yw6Q zwms(2fr0UBSOxpDw`-wsRnCP>T2hhWKTU7JCmLRRE&lqB^}I8$&5AcWq->eWmTu`- zO|vbax|`Pp+}hTC5<61cu{k~Kke;26sPtnVmdCqq*jd*vYDq zyUL#~b!?63-V4Uc#`p%ZW?72q{A}tM13P zZ|Tt>lIs4O*S&7?ySx-iFnBz97wrp#Nesg8DeWeO(og(&!|4(jDD=nMb;z&mrOS^1 zTA^vSb*ZZ{lTfSEis+S}7$XB;b)d*{Jxr-ZkzRkKLPQz$v1{sVS2+K_RfrlId)iBr z^^-$WkE}5H$)QnKtJGqm8kVqbwa1U5QeC1v(sKr%D4b<-dnBtN0K(; zzcMQzo4Dk4x5>^hOZcK*%^XzIzGviE;Mb7?_1(v*Yv#16g^kq|iVEZ9brkmS&a$i| z?C>QCi9YnahdMr>=bd*1+?T^&d(WMB=lVtb=8rI$exHyjF2e89)WxATJ+63~{z%Gp<`tMYmZxp0mVJ0h4f4GHLD4v<~2h&>9qSXxBkMIDYu$o?y9!h*7FS z1DSuK6^U7%?6r_%!j?245zsIp2B==@Y1$c3GxPJCRZ1n#&S}s4p5BonbIY`QP6E`} zD+E&+jcY2sgC;${&8js^`P;Wd;uQ42T<~FXi+J%p+VVG6bmUT3Pyqpr)r$iDR%I!I zxydnJC>~jH%*B=*;Z>c5V8z^69fm8L0pG@mw0y2*xNX}pMm98fb*yZ)uZ5DNsDnDlm?2MXJ=5Jg?Obat*l?Gx?VCO8bJ7OwUSvZpPWuSb5!kOM3^Kb!u%_ z+THuwH~fURAW4zQ`~)lHhFd#=wro4hCjlMP$h0N#Sc=9~dcpXjmg_L`Ht604LsQ3` zOrdB>4R*+78xsev3ZR#HE4ThmC!sVo9EmCk`Y3W0NWLQz5+2e8Z|&3n^h4@P2n@RO zk|dH`Qz3I)mg!`WhGVPTOfw}EXGa}%6dqqjzOqMHGodXglGXGl`W`)oME@takd6z$ zow#DXxxkf1dKkstSE+gkj_Axv>O0T@yKas2AC`Kp^ww_z8%FDS1O0mSZjS^;LCXE-X=)+VJJSLSs;v zre-9yYN!2@55~L5ExeRT>*=>u<(N``7>|JjKoI$wBL15lLP(k97Nre!obOrKXamTJ z2|$@~^FfPS4|7^k%misJp7A^`7bE#1sVp02S5(_#j5((xGIF@^A`0d;YawWi-)i0g@l&g4=^N)3)Tr#( z(*SsTM@HPKEt$iAmFb^AyW2P@!ZP>pOFtzb5lgT?Q@(Ugnvw73b-l>demAR+F4Gb7 zJ69z98a74*x@OhQxK?z!zdq*1R>Ph<0_N(DiL3lY^>=gAoZNda$BsR3{m}5t&6x_wrTGbE7YN!OH0}&3tfXxnUXlP_0 z5l#vVm|W{xhS_7%C}~blMuVUH`$WtRtg6aggP9lBPiaLN5fy-M6*mueZ*IxaK_g3A zS^{ty0{p!@J9uH8gvW0n*_~eXd?lsh^yv*^t9c$mf+vC`Gd9>9vlYk2obyD5fx0t7 zS+dJUB$f-Cd%DqtsKBh43ayxZhLpK4w4~pID^}k01hA-S2>;vMF+zmD z+O7fUxS#WZ8xm$QM5qtNdR1iG6iChVIrjuUy|J$B)-tC$h#8!5U0JOJG=6Q4S+a=A z0QBshTI#t$qaAUt4Z~_9vmuEPq?|N(sFkD%n9-`pUkS9sE;X~h-s5B&VPzHO$Mty_ zaTO!cnmqD@-@r1I7^=V5O84%IGSm&ZsY$UZJ22#$nufn;r!$afP?zZ=lZ9}d3#6^1 zMO_aPsuDv7pwA|_T#yscP(&^|j5>(nr&Ftwn60~25!ogJF~7h(>QmWKbBkO5I?bf9 zv|2m%D$5h-t>w76*56irLV!5$SEY^aPn};qQYR$)|633C&9?EQsB%v`o3lG zHES~TDBJtpE4aIXMT@;k@u^;AHECPNv}@Cd;%`u%J%cHr&ro8?{fw>Y&G)P4-N%y! z1B-}2(29t*D7|gD-*akP(;eHuMtQMAQ;=uk$V$#^C2rdFZM)h%P_^VV>Wks<% z-f_y?MvB(gbt<$I(SMSgJoc7ZS{Cdps`u36?OAfGsmmYjUdCxsODF5MeI6!xUVh2U z0;;k-8Y6j}4ljL9uwL-nx!t|A(43FT9?#%aOe@Se{6k>wMR&VzVXP^Ak~)R$Up61k zg^QbW{Qy(bW`+YlG*)n71SzoG8vNc|$6ZJrXep3P7?^|4Z5(r}q6o)2kZJkfvWf}; zO=+oh`k$!Hve?DW6MQ(jL;>DZ5aeuFoX1(4E8%cwP5kEP*BL{924lB(+7U;}YRR^`$EyZ_puLq6FMHwk^X}8JG zHr#F{)lbo_7U?LI5Nb=59fW`!s`pd@@k^l0uhe%)o*M=Q+P0$el7{ z#5H9S2m(N1-UOrNZ8_8vbX+QarRZvRJKgu+=4$Mp;<45+%!H2T$!s3k7{B$ZnQQGCjNU5@o?Eh(EwA0?w!*sXw?efVv|$zG^j1eHHd*o9Wky&Bf-CLoA1mZtk`D zRK?WTBn)7Z9Sn(Oi%G_}rWCi}%~pJ!I=t504ZR;HU$uKq1EvUDqF&}sz*@%rx+*Lb zny#9HVb@MZEOi-h$&_eI4nhm+H390#)Vy_%)DftH;T0>n2{avSHCJyzgDQjCAk2tH z?coF4#-8r*?LsTN#269XZCeK$VEb#`R`Vefr(us2SdYt0ReVvzJ!-b^*GoQFrA3*6 z3=31nAZT?~a_{tHqc>JBOFy>#T;6bTL*}ybLI8g~G%z>V_F8nt=`gU_W&x|lv9Q-W znm5SpP@BQ(`=DOZg`HpOYMJi4?Dz{ zH?yVF7+$`}1_2;DY_BTwCrP>Ti#YB&g0@I5fV(T-=+sPzniUq8Rl+*i@iDJOTv zQ$G@QTc8BeA)~VQqx~&F;X&1pcFMx4L8z9AWDCANwe5W}E{;Y2RfP&CLWbmoq;+CS zn>#tpVZTimj~ih%`p!j?As6kgmeUIaWKwn+{X-Ti5WS)PWWPBpQ!W0b;6B5eA_}`| zkXl1}ewvlNuRT`Cq1tUTGCURRvILnbU_@uR~UGzB7NuaU2uJ|>)$q~;;w zDW*diYmAo&(^U9TQYhkMmmk%YY|pl8?n^h;@IhNlZwzV;tAkp&tSoNLZAYYEm7aEN z^$OqW(A2>8Je_74hR-9FOzHX6A$g-|AK!GHe!)?@V$^z8Vor9m4T`do2%&Fobjedx zu6}0F2HcQg*AFU$!roU_Q&T!ApPa6C2k{XK`jqMlE6ofI-r8o$?s!f%9b9iY{X^4?rKNpsbnL(W(ongN^Esl`2_yy-_Ei05k_ zP`5;XP&tH`3h45eM52}WOTwls{;l?HKvTXIgkw6+! zer&z45Xu=BiC1b+#vR+=Z~j#vh!1@4r{UOC%5wae3!9eA#0kF_X<-ES2C_2(?bYm{;!Wbb;Dg zPrBuT-7ZUC{JTlrgd4OgLJ$;c?s-ML6EF09&g5 zP|FQ;!D$wgbv%}tyYGF9I7TiT1nZL9wd0BIAK_IT@D*r(@*H-xwqy3dCr{$OcC$*B}bZp^@&B_+hcjZiqwr z?#4`b)k*Zevx1~=uQ$tnDPlYMo%-GIa_VWxj<61 z+hOIX9@~TrnFgYt+F`Eh} zT)vuBeh))~hVPXPhZ_fcLR!|P1<6rv)fxOUhlv+!Ww$~sE?Xe)w~t|bBVyQ0}LPW{w+uSkt$amQe$mgfHo#&_j7y9XqCYU z%c;`C-t*ByVEk6Sxi;JF`{>~tx0R>ie8JO(6wZF-YXtZHWSt!E{%Y?S;IT4z^#-=& z(s5jTY;Lt}*rm@3Dj_TUO7$Dbspq04rIJAY!BQ8 zu?AtjeCxKi0a|H*CSG&AM&3VK25Ufe9{SwE#l!{)MuScuP~1~8o>u#8W8;dYjC*^F zvv*5@DH{X@g4^Z?$gc<{zf-qiHLadIzN@WMxw?cq=t9KTjPl8f>#~y7z(&Q8;ATpo zn+a*Mdd@GqlZ%wE#hwj7KY~J%jyLYLJ}#+c;)xZmR`7)=43n^Uu}1Mo&|iVUVTWhdB;z zaifaCl-bzx@OdfQ?^tNuq}~Zl>2i>T{l!)%xTd8?t1^H)%7EN?d!;;0Q_1(==8h!< z`pV|liZB^s4l@DoC&is4^}tH6p(-4n{or2DjrV16Dk#3_O=mK2n#8BNqccb@&+ z>Zc9|yd-N|PRf=Z-yITivYJY!^`80_&8v|0 z#MJ*@w%YZ{qG(oR@G}tS!}tukKV0@9_a5_F?+-O(R!o4V66LORzfaxHbVuShsN*xAEzw5D;NpMC!9u(^^f3cj8|P(W#d3zvxSZH++5B z=bJQCg48!DuGoZa+7HCxNMy8fj~^+Jo6k5qS>)G3OR)2a@^MN3B>C`LsNP{=Z~Ra7{L}1!AQTNE zv4Kt*xtOyXAAHB>?o=0!4*5#JR~KLO2XaUhiYnW(BM6_egYcKSHv6B5Y3q*lz!^M_ zD{F;tdWVYwDb`?u|pTz0%(Kft?;82|`VjC5vr zVEYg=e7pmp>;tNkNW1h^{Xiv$2yIM&m1gRvURqPmk)xaj|oUgN4~>+k0v)MXSdzY`?!u?AII+3ZYpCZSVQGX{o!7#8mx-%Y-x zTxiqIMNB2^sde|_0l=K(%as}&a*NEB{C)e;P3iaI;~y{Thx#8U$X$~hKO>OZ(cjQD z2?0su(z(A5ph}HT|1_PA8Ste29Y%}*yk)WzVGWU7tZC99Mc>hp@$EBgG=IbR65!>q z!EznrTxBIeR6cReHIS? z(MiGjH9kBLw@8hR-}9#l##D~6H0`$7qbRgLfGqSE=bWj=QS#A zDTY4OM?sEC7D1LqI=-K2wtw-er5CDR;fp{w)f9BAd|5ex(F|`@-@qYW@TCbg%w~EuJyG>BJ>rQ+| z-|G>_mdjqTLs5jA5N(h5hf6ffWbRJMV5Cn9bKK6&&a*2!4yAwi5#F8E`I_d=vha?=0slp9Y;f?l0YTw`_a)GLailuD$U%T1mC+JIgbtwXk%ugQ6Ck#pg zFD|C~O~Q78C?%dPPXDE^tEtCdSx9O+I(D1&zXD77lcM3a@&$qWcb;S3PhpxU9LH&O zBz!@IIBvViaGK_oBVl{qT~yM}5Bgj~?(R7Q(;f99L?~l@5(|hfG}SobqlRIucXQ=& zI<3@@F!CGSyf2ou=xJDz?u?L+*puXh7-GAHG-qW+fU_IIhUZ^}KY3$!M=O1nOadzI zp6Z-wUqp?P6as~4LsJ>Cjv$#EYe)o}NFvxqtP@Wn(Y>|Qp>2=o*VedY6In*ac~ZyI z*7{kv|5}-AYtLrQHO^Uk2L$O8s5K8i^`B+(+Xeb?(EwFa)Z5ue!$uHed-%wl>eKN| zXy}B;Ocm%LyDF#s3NWG|veBb{W&~EveCDnYW@{&I2A8W6>*e%42-iCZ5%t#CQ+GgT zvsEkli!&5%opL_>j8?kb1^9r{wkp!PKlTF>K!18E$w4EE`#y}x?7{!!er`EG&Jv%A}C!n)1fS%BYoE&9_J= zrnCB>*K?j$d&riiBYgo4i|UlrBG-?s+STrHxmUJK>V|Q9ro;E8co|pv18Ueg1*57y zXM1gilTy&^pY)Wpo)*_c1IEglRC&1(%L^Q(Na)vQl6Lhql~oDry_N{hPmk?ku8Akg9*MiGGLazEbh1yg zJyD5?3KW;eO&=Rkrk3&9VstcX5F4pOYqY{>z{$x~_LxVv&}U8eQCqN|q1b2WdK3EoS;NkqprEq7B;U zZ~Pl@YE-^&6-yQw$s;Y)_!B~kmW{jKaV1gGF15L$^*d5Jq+?sI1#$9<&yMbNJnEu? zw>hH^PI<9=Ig7iSUZMbUnqDTypxjAY!t~rc_?DWC^QQ3HuB6pw#QfEFrMnmAGh>EawY2~ag9=JE;AJ><+(4JfCDl@EP_q{d>xlS@JHPV zmEwJ{n1#EBwSm&vpm_T5iPSuc=_}R560YSX@BW038-hM9u5yicMh%espdP@})~2hV zBoAC%E^uaLuy7NQ9!)#cdX@XT-sdY#_{CMy4C4v`W%$U|>@N>doPh3uk#bIKxPokX z)Iuea!=AhN{(^YP1N84^C7Ev2<+6D0Z{$wW&7gBg}#9MBQ0mTPJ>$}jOsb>^b5 zC~C~bnl=@)fOXCbt_&29zAez)Y*21X<(=*ysus=BB>f}fc!a}LZi$v=q>A;uMJ~}> zI9Eut%vjve>av*MzhgOdrD*xFbfJBDX|p(;rmdu)#Ivg+3Q(HLWbnigRuw4ie!avm zP*t9oSPNJ3FA=ZBs~h+y0oLuFE1!zyQ(NB$G&%>{ziajK6Q0I8oA2!nC>LtL^xnNT z4`@8q^z^seE7{q7zvUw;i=1F-r`G#^5ENXybUD8YquLn&tR-3{j7T(X6c_60R*jXb z*P;kBr*FU!i9^pt+?dqT)<)oHBG1N_TdMQ^W2 z_hk3OtKl`4r5p6^(e0=jbzRmYzIPd0k7YPvyMA06s+?C?XQpc_qJ<<$=(lN?P}w9R z)A84(+Fznq+!c6~G-WgU$DF zf160j>Y#5?N|FIX4-LU$$+WkUdFJLsN8&5eRp5Ub0~rh+UyQw)j8SqE=W)%!VAcn0 zFT!DD^~ZzK@KM9^BU0>XKFA}=;B zg=xO2W~QrE=YFk&<*>Vd#B-!N*d?AonX)CQL2p(%k3UkbYJa-a72P@CSp+(hZNcI;c_yzr!65=w#Gbi{CZ?9}Xw33nn>NirC! zU4K?5@(M*ULJ``?Lm0{?uZhETuD*?+0)0aG?oQb>>ahiB>PoI=EbhURRw6%oLq~ru zaPN8BtOIzq?3L)ZjR)Y!OJ9G`IgveC>%%_40Tj&Cb=g0AE1j}CzzwOxzgdT>IW3o#6A8#KVe1wVRq96jNZ6cDN zof%D_8t{{KEi}DP#|Z#L=XjzYLA)w=CYrZlJ;gHZ)s)w&I$ruhS56cc06Q;L{<1ZRzp;CKezY)`2m(S+=eptwLnkbQ zOcKr_>ELj&m}*T`VTPX%)OwA8@>D}>)*#7Vetl65-{bL240L0=yLOT`f`wK6E-)_X z2y__cupM~NaC;mZrPbi2$*Q?ima=V;nq_R(?1}6dROirLsj3^C*5nBTGyz1eQ=tUm%wd14=({@SxCY5 zEZaMOgMD3E;hf_N?R(31h>PbGM2PQYKY;mgOm4|p^svM>%Wp7JLZ$Ay^#Mo;!=?b z^v&o3(HzU=m8d4mxVZqtQTP>Iax#hY` zRoR`+iGP|PAmaun6=mHI=w>1UN)uHSJYbe%5KMkc^l~)&dkb3z^LAwYXGt{vnHyjS{j} zkhdGN#5=uHb%nLfZ&LGvigt(QW|8xm+t+)okB0gzlb&x?^m9CnvrMLgMcs3vWK>$M zv)Ug1T!{6?nLj$4t4_1ddm0??%zb2081+nVQrN~^#n&CNq||NHDZxy5XD2a6k3b-7FeVO_6|2D0a-FHk=yW*$bh(>;O(Fip;@(9joU2xoR3EZn?^J+xAa) zjW58W-@X9{i#eK;{S#&{Q=R7WMT*MM&s_m61xUZix;CeUPEFj+pgR!X9{UaCy>Qg) z*YC}`mO&lh6^K1SU~h4VAM8G|dY#bHlbYih;5TMA<-i=wD1+~f%Ik*N9mna*P2NDCH+c|w_J6A#9sCG`?IQmvM@_6F zfrZdSG`jES$z8<)1raA8;U;&K^rwwx!_4_1O8$x0TZ~VP0rIdOS9@||b4=Cx!zMG} z$w$`3?2j6wK>Hb@ASsQ?)Q9k(`?NQ}n1e^s)3Rd`29^UK&OL<;i%rOu`~lAlD@z>s>u0vW_mRwSqt5d{Co3anra_;_KTNyH-XP5FLpt@?SPMd@E)oI~jyYR1>U`K0nS_p0eT&)Bi zAa}Y#XpyzX4{v-q4UG+(Mq`VVnkwO%&rqQBJ`uTfDVxR4o>A-2U)CVuw>*S-{N#IT@I&pDkzw>%Wj3bJ1 z0$#*10rFDqSCZC^Gt=xOSe`+AW;9uMctMqL0^cOg> zi|+wnNoB{%f&D#5+~%K2eupv>-*fI_v4N{<)5`Ic{dNCho#QRdSZ0OYOS#|#@xRqg z;bWVF@yn-SF2Sp>Wq{vLPJfOStdCE!s>^MtmWx5LZa>Hv1Rak;JmSuwvA^8d%92Yq zb745VU7-c~(jT1@QH`iFX@qjI&~?Z?7Aj0IRiKT6DfrUZ)56LiogSzLJLxW;%U3QL z3jJ?5M)|8YhnI4^SDgnBa*x{o!MR|9ri}%c_frCmGGSYzmpb(c>?{su@c@9_e~KM{ zmN)%&Qhh}Q6&MrlymTRXi4IRt#94&(qI6?(YuGTx$tmSv8~m0>w{jCCw4L&-@Zo6f z6<|d0Fe84a;KEK-Bm88t6d*h}IQ}{2PcR_l{tuPKs_$HK`$yC}$qt9quq7WzXEn5>SOoO?>s;4(NK322V4)w2-23wq)z$&=cMB;hh-URq>G{t&tXizGOTjHe* z8NqM~{gY=ns>1e6Sgwe(U|oto{J0TZUwBfnNGrC&WA_4yAyuOaXOZB#4tU3*T+0+% z>(`1p$g^W*G=<-8z>?FsAQE8`{wpDRGBv&k$24ksMxvmqw3cM3M#DBu z*0@Jm0u{!?0J+HLo_cIylBn;xvrLXT? z8Du$WC<^|&Q|;3()lhWcNpLEE!1Jk@I9($eQi?fD*3FxWBIjbgI~J%>zuk|tXpC3% z4%78eq|BsBrleA()V4&RVf5BAH%15 z<8R5&O{{}%0<@p!H#_uK85mM#&Js57j!PfG4}}wlK}?FM*bkr&g8TdTk7CEzWpme* z11;&*)_30b;DM)qqE(?h8qpA0T;kfaR5f|zkmLVzlmBGLI)nQ@;)E8(uzy(ckC_X5 zsBC^4E|k-3|Ni-fXE971KIOwOD8AMpR%Y~2#AXY6c=WKCFAxx+kRuYXP$I~jZxg%vM1?80>^>{P=VB;$$t{%m*TnsQ<&AS3l+B_ z#V?~)X&VTqR8bXP?KG}2JkmtHtj*~k1g)eo;{fYMP||jmL2-2}uSwQkoSvq+31O$W zlgYFv7?(VD!#AeFIS&lOv{UQe9Au}*)LKZjO|%l1s^poZ2Nq+Gqb-?As$GvVE-|)} zzg6x{=-07weJ7VhWs#si7u8EK2LnZe9hEnpi#A$R(y3g7{Tu;^{h)o7N$2LGtB(fy zju)4`r`hSM9heC0aARbJ z+`J!m7C|d*fJTKy$~W?=20mHPUa<)~MLZ;8`PcieTMh0@xStU;c|TsO`q`m)9Jfn` z5uBv4;D;i)tfXH&^cdw!!_*g%wYce>%14wX*6Z>(tMb5Ol^LnL1f*^hb||r5Vwc<; zTIFNc#1MSpA26y-D(6=5NwLu>k8ci!pHP*Q?PC5$z|H6ZRtR2qI_k}jo6DUoW?vA; zmLBb<^i96f@GTQwxTBJeEPX57nCsdRD>MEqwJk+M9wM!^zc6vTfSegp%wlWQm@}O# zDt?}23e^3$qtr9bbPfJ`s-~LLhR}?p?&ZGqx^%3mM(6EDpQ>CvlceOchkHeInGjtAYR6it^#vy)lIu1 z3wmh+tQ0mQ7KuQfxL$`e#%yXa&dAkpynOQ3eP{(LTR8@ihR1sh9$I=1r_P z)pT+^8`vdcsmQ3blBc99-?9fQ5UnijAX@VIEqqm&Lcs1WGtN}RFsrfX&PnF$3|az0In&`H8EOq6K^ zsl)-{9c1G|Ep$cPGO^*GenT%*sYsO!jj~jEY%JFYP9K%9Fu4Okk^Iv$H9|oq`$8Yj z0Qqtg&Y5pl^C-2xiBe=o;*e&c`0;^x4r&@=yAD@{ne}P(8`F6+c?th?Ca#%ZTgE3V zfbJYy^ZumMCA>xgH9}E)0SdTaf=Mqov#7C{q!|Ep8WZxIYT(r%OybXb924esoQi(R zv@#}u0-Y)hm25WrPg=fVd3}&dBzP7tj7%Q4n;&Jq`e58mi+b6inVbJ!tX}bJN0kCy zL*}N1)K!L93@WN7Dw+L;klYzbIMyQ8c)nQ_F^#x?oPm_0EK{atOY+QV;P=F2dw{_q zD198u60Juml!aMyIptg9u@U}i)3gpFQn8c$&3^^fSEL6f%jGXfTrEXRbtR?~0~)TS zN=)qNh*hn%p;6Qeq-I!avnbp}{r^szLOsw)uKq$bpaFES|ogq|vfepH{hE?kN- zO+!Q&*-2e9hNGK#4u{h<0w9I$ z5>7dcJi%82>XZ+$^Vw}L@%R*3Y^92x`vFU?Iofrz!*~&{Z z?N*GjX7acZ)ss%maqK+V{FIi<5>>BSD@Y)Lyx4UZgQ z>h=g%CJ6gK0L?%$zeOA=WSVl5R!mHq6(&oq&US@#;^?KStkZILo%r_hx9008xv0mh zM9njkPU9SH55%)pi>Fa5wFX#Kf*c}3MJ8D3Go6LrLxjxSS)5b0X5`T~DKU>`PpZVk zuqaKQa@v(T*!?TkVNI_m>C&C~3T6RH(Z1__vP^KKnAvFoNp)iaF;|qa6joY7U;`bk zLZTkHzjbYvw@!eD14e-vm4##hiY5Y~oFO1#MzAu|MqwnPWEB7VphO}71WISvX@gDr zh-^x7JtKNgt%+ZxjN57nFzj@c8l`a$-B35NtTPHk8uVn0O&*DLE!<+x-5u(sNa_(r zSEX)}(FQy*jMDDnd6Y%qxeHG!a;B>)p&$?@Rbw-ZE>#<9GFrlc8bm4uBmp2_jA7yn z*X4lOCE@yRA0^>fLR3cqH36ndsYEgoq~8<;rXj^{YpFJ*g=sK|)2#%Ikj94BG;FY^ zSy|F40%0PVbhgWeBBS8d1v;pOf{~-J50c$iY`x!I(P;=Gu?o@z#6`0jyd$=zC7p2K zhoL1UAtFQyp&pIlMB(r_>X-k}2qN9~@AkHEIU!g~f^96)#4%WfLd{6aBw)c55EFGJ zvPR5yNpzU9n>nK$B4PL|HS=RC)OzNOc&in?nOhL#$NwDg&MRNkB#rWV$-2z^qO6`K%G7LYnE2~=~QB+@3o zeV<07g^dY<&aIL&Rk~7COFSh%okvUg%${7MHzZZa?$#x(&p9mrYt*~bTjdsY#>~+a zo}O#FwN=A0YHqMHF|fM9Bywgd4(P=N%45DL1Oy9>OYX9F$WZH33SQi_bj7}HHaiIw?Uc4|XUIndG|Xo+-OixI}RMe+YN9Jpdv*5sYKTG0Kc zHhvYQ-1>hxkGcEDy7+bdmix6!c#h8-o8BL78g6=9Ta3>q7fup_W~>U0BMeSXK;@e^ z;i1vwCxn0i0VvUS{V&mD0$dOXeiQ6T$E?XIRIp#IXHjH4i4zt=lL}sEv+K(zi|@qS zX6E+XvnsKz`%kLQb7tPPNals@vO^ghcGusSa#=MRJB!?o!uZf3}ep6|LU z=DFh4=UZs6)u!&3b4M*vBDO(CD2cpP4!o;5icAX5w9o(m0*O2CyLJ-B8etI67`Mn= z4^~3#L@5f`@@$MEK9W{8%FlaEqeUf?P9`B8`W_^T>de&IPYENEac03Cjl*BR_gUj1 znH{Mvb!fo$@`i5)z}q(^1v+FC<>YCg?<+Gco3(bvf$ z&`Q#ZE-qy)BylZ;YRu@3DWp_r$276_E5rnQp`c2NkbKQj%7g z&|)1Fav5Q(6iR3YF#%yhadJM4n0@I8L`}Ig)iwLzU=m7F0*RLzyEK_`_ns2$wc+R< z+P96R)0)#cQ1jbM*5A6@0Y=T_vg%r!Y1vuLCm%aJ%(a?BO*JG6{HjMe+md(a{`AFC zsoBPdIKFwBZ)YsjeC4&_PG*^v04xi;@A>iya25fMhCwbZ#|rwK^%f-3acJQpbUh{_ zh8oCxW;+W(VcjVS4rbbGpy2XEW*<$=P`hJI^8VZ^$w<_B_S;BV{VP5V%4hj*L_ny7xR(U2r5Y? z>26u`FoEBAA9NTs!``J384;*N8K(U7x z7XqZ3gW;NnTd}Wd#8jJ$4N+&>1oDKnA97M;Vtf|>V7s=z!8VDoMW*&F|NF2+28e_D zQ_?#ILi&*`dPiX>eNf$(M(3ps>P4~W&4ijg)T}V-@LY6QD(EoBU2Gh@845{NxjU#D z8^sY=Fa-OP-!sGm7jPkx@HUL|-bfV}8!<&n(z3fla_CdkJD%d<(lJ5l%TZA$RU?iY zPP-4*`NqFk-l`l`i9s^-RTfgj$lpP!4p^2OMhN1)o0q<|@9zK+YFlpW#q=jgo0e-{ zMQ6}LM{ONdm0Q^hlPz;52j$Hvimr{gt1%lFApvF47#Uk%h*VmsUF%≥=igdP_+d zd5F$@r433Mxn|qqiB_&{x-FL$A`NK_qUw11GsF^yw1~_y5sj~wh)Z{D?pyijKc>pj$JgBy~7{6^j<##W+d0;)F^f z-1MQUJ>}|SC~Z_R1=lBSBhfi)TjL{nE=_@_o%*1w3DeRghEpPU9o<=Ch}RJ8@U0NH zaO}=9JcWQRM<-mOAr_=y3%xuLRk4;64lamoGFzL7y&}4V#4beysjy2sXv1_qkY%Jy ztCuW~LyNAyW~C`?*mV#sl$24+9PYA;%FB1A!%4m#5rcjXAAB19T~js?mVRRMe*zJw zn(AbuH?~^i54dL2kVLcp-FGde8(Y0M-ELvoPLaeA$zU_*Gn`KhdTfrQ@MtEb0sxle zljNU>cPm2Hs{__i>G<@r?7sXak6?KfDywsoawqFJ+C#8o$(E+m%OS?T>c0Q`utXUM z#8GF_y9qP;hD@4gVdfoB0gFm!u*0eQvT4lmnzj4vqf0|pkEQ5dDMwXbVK>h80*h;_ zFszlBedf!}Kc5qu1u{9CDVr5Fob{LxmbZqCi)v|hH>V2wQ59DClFi!nkD{J&VHPwc zELyzJu+U~cWyMwJD@Xtkl$J~JRYij)Xr(I4((tk=h|>aHM)Ad+`i+7{bb=<#Oz(!d zn)*eKYUqh>7^ZJ8IL9Vxi5rxeMzf^0T+7-R=uFeC^y$;ATBxF%bH#5gL-eYW{(1>o zGLDvXL-x=Azdg_v%6F-Ct69kQrM6?e{cVo>&!2B+LGMJTQuu>z_BNh>~zDBH*|a+@Z!fjMNmtA}8*35pb|JYbsDCF#aRw&Rs_f{h~#71KK_%SC}5 zv_Pgb+>xEjv{N-h={o@z1Ql0=3}Q#of-5tEDGK8Q9;OwF=axmFc}@mZC`945)VCWH z_2s;M?YQkm`J>)Hi2E1zJG9A>zW=khw`hGc4{GePvvcQM1Hi+T003n>Ww&wYP!Fdy zBp;(tO&AOFkd0O@n^XE3LufS35z#P6HI7OtI&y%wG$1`lCmJ)`tn2d!O7<+9KK24tjLc1t8lFBM}dgD1VHe+>n1-DS^i21yoZJm-k);4&0ip>vxSDCy>l-Gj_b(U3jkoNehz19Rt zYXcY59}WkSjr8`TdO{m~)r&f!Nc;cRyZ*oX|MCCLfB);|eSf%;@{IrhjF!!gSuJg$ ziWR1c?=T7!75f1mmBt{%$(-@nhk=12;o1?MgASD!Nfig=4-002U)1PNcIF`}T+&D% zjIGW|>FFhw8V418<*R=E5DvUH8C+8 zqk(7L$!9gkeJGsB)tL-p4cGo34ZHLDq_K^4@YAmS$$q0!JZ18TzkdBmWIs=CH