toxiclibs 0.2-java → 0.5.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +16 -0
- data/CHANGELOG.md +4 -0
- data/LICENSE +675 -0
- data/README.md +12 -5
- data/Rakefile +25 -82
- data/examples/attract_repel/attract_repel.rb +30 -0
- data/examples/attract_repel/attractor.rb +23 -0
- data/examples/attract_repel/particle.rb +27 -0
- data/examples/data/ti_yong.png +0 -0
- data/examples/force_directed/cluster.rb +76 -0
- data/examples/force_directed/force_directed_graph.rb +92 -0
- data/examples/force_directed/node.rb +26 -0
- data/examples/gray_scott_image.rb +75 -0
- data/examples/gray_scott_tone_map.rb +77 -0
- data/examples/implicit.rb +139 -0
- data/examples/inflate_mesh.rb +89 -0
- data/examples/model_align.rb +44 -0
- data/examples/povmesh/ftest.rb +46 -0
- data/examples/povmesh/tentacle.rb +73 -0
- data/examples/simple_cluster/cluster.rb +47 -0
- data/examples/simple_cluster/node.rb +27 -0
- data/examples/simple_cluster/simple_cluster.rb +60 -0
- data/examples/soft_body/blanket.rb +45 -0
- data/examples/soft_body/connection.rb +16 -0
- data/examples/soft_body/particle.rb +22 -0
- data/examples/soft_body/soft_body_square_adapted.rb +55 -0
- data/lib/toxiclibs.jar +0 -0
- data/lib/toxiclibs.rb +91 -32
- data/lib/toxiclibs/version.rb +1 -1
- data/pom.xml +122 -0
- data/src/com/toxi/net/ClientListener.java +41 -0
- data/src/com/toxi/net/ServerListener.java +70 -0
- data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
- data/src/com/toxi/net/ServerState.java +18 -0
- data/src/com/toxi/net/UDPConnection.java +66 -0
- data/src/com/toxi/net/UDPSyncClient.java +81 -0
- data/src/com/toxi/net/UDPSyncServer.java +450 -0
- data/src/com/toxi/nio/UDPClient.java +121 -0
- data/src/com/toxi/nio/UDPClientState.java +32 -0
- data/src/com/toxi/nio/UDPServer.java +129 -0
- data/src/toxi/color/AccessCriteria.java +114 -0
- data/src/toxi/color/AlphaAccessor.java +67 -0
- data/src/toxi/color/CMYKAccessor.java +122 -0
- data/src/toxi/color/CMYKDistanceProxy.java +40 -0
- data/src/toxi/color/ColorGradient.java +260 -0
- data/src/toxi/color/ColorList.java +699 -0
- data/src/toxi/color/ColorRange.java +671 -0
- data/src/toxi/color/ColorTheme.java +163 -0
- data/src/toxi/color/DistanceProxy.java +44 -0
- data/src/toxi/color/HSVAccessor.java +113 -0
- data/src/toxi/color/HSVDistanceProxy.java +40 -0
- data/src/toxi/color/HistEntry.java +85 -0
- data/src/toxi/color/Histogram.java +185 -0
- data/src/toxi/color/Hue.java +249 -0
- data/src/toxi/color/LuminanceAccessor.java +78 -0
- data/src/toxi/color/NamedColor.java +935 -0
- data/src/toxi/color/ProximityComparator.java +70 -0
- data/src/toxi/color/RGBAccessor.java +113 -0
- data/src/toxi/color/RGBDistanceProxy.java +41 -0
- data/src/toxi/color/ReadonlyTColor.java +296 -0
- data/src/toxi/color/TColor.java +1677 -0
- data/src/toxi/color/TColorAdapter.java +68 -0
- data/src/toxi/color/ToneMap.java +218 -0
- data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
- data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
- data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
- data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
- data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
- data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
- data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
- data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
- data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
- data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
- data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
- data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
- data/src/toxi/data/csv/CSVAdapter.java +74 -0
- data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
- data/src/toxi/data/csv/CSVListener.java +61 -0
- data/src/toxi/data/csv/CSVParser.java +202 -0
- data/src/toxi/data/feeds/AtomAuthor.java +49 -0
- data/src/toxi/data/feeds/AtomContent.java +50 -0
- data/src/toxi/data/feeds/AtomEntry.java +111 -0
- data/src/toxi/data/feeds/AtomFeed.java +129 -0
- data/src/toxi/data/feeds/AtomLink.java +62 -0
- data/src/toxi/data/feeds/RSSChannel.java +88 -0
- data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
- data/src/toxi/data/feeds/RSSFeed.java +99 -0
- data/src/toxi/data/feeds/RSSItem.java +104 -0
- data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
- data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
- data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
- data/src/toxi/geom/AABB.java +658 -0
- data/src/toxi/geom/Axis3D.java +116 -0
- data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
- data/src/toxi/geom/BernsteinPolynomial.java +94 -0
- data/src/toxi/geom/BezierCurve2D.java +159 -0
- data/src/toxi/geom/BezierCurve3D.java +148 -0
- data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
- data/src/toxi/geom/BoxIntersector.java +52 -0
- data/src/toxi/geom/Circle.java +230 -0
- data/src/toxi/geom/CircleIntersector.java +85 -0
- data/src/toxi/geom/Cone.java +150 -0
- data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
- data/src/toxi/geom/CoordinateExtractor.java +16 -0
- data/src/toxi/geom/Ellipse.java +250 -0
- data/src/toxi/geom/GMatrix.java +2599 -0
- data/src/toxi/geom/GVector.java +833 -0
- data/src/toxi/geom/GlobalGridTesselator.java +54 -0
- data/src/toxi/geom/GridTesselator.java +108 -0
- data/src/toxi/geom/Intersector2D.java +49 -0
- data/src/toxi/geom/Intersector3D.java +51 -0
- data/src/toxi/geom/IsectData2D.java +103 -0
- data/src/toxi/geom/IsectData3D.java +103 -0
- data/src/toxi/geom/Line2D.java +534 -0
- data/src/toxi/geom/Line3D.java +471 -0
- data/src/toxi/geom/LineStrip2D.java +430 -0
- data/src/toxi/geom/LineStrip3D.java +230 -0
- data/src/toxi/geom/LocalGridTesselator.java +57 -0
- data/src/toxi/geom/Matrix3d.java +3048 -0
- data/src/toxi/geom/Matrix4f.java +3446 -0
- data/src/toxi/geom/Matrix4x4.java +1076 -0
- data/src/toxi/geom/MatrixSizeException.java +58 -0
- data/src/toxi/geom/OctreeVisitor.java +44 -0
- data/src/toxi/geom/Origin3D.java +148 -0
- data/src/toxi/geom/Plane.java +293 -0
- data/src/toxi/geom/PlaneIntersector.java +57 -0
- data/src/toxi/geom/PointCloud3D.java +253 -0
- data/src/toxi/geom/PointOctree.java +502 -0
- data/src/toxi/geom/PointQuadtree.java +375 -0
- data/src/toxi/geom/Polygon2D.java +1038 -0
- data/src/toxi/geom/PolygonClipper2D.java +45 -0
- data/src/toxi/geom/PolygonTesselator.java +20 -0
- data/src/toxi/geom/QuadtreeVisitor.java +44 -0
- data/src/toxi/geom/Quaternion.java +641 -0
- data/src/toxi/geom/Ray2D.java +146 -0
- data/src/toxi/geom/Ray3D.java +150 -0
- data/src/toxi/geom/Ray3DIntersector.java +75 -0
- data/src/toxi/geom/ReadonlyVec2D.java +575 -0
- data/src/toxi/geom/ReadonlyVec3D.java +628 -0
- data/src/toxi/geom/ReadonlyVec4D.java +431 -0
- data/src/toxi/geom/Rect.java +720 -0
- data/src/toxi/geom/Reflector3D.java +58 -0
- data/src/toxi/geom/Shape2D.java +94 -0
- data/src/toxi/geom/Shape3D.java +42 -0
- data/src/toxi/geom/SingularMatrixException.java +57 -0
- data/src/toxi/geom/SpatialBins.java +182 -0
- data/src/toxi/geom/SpatialIndex.java +61 -0
- data/src/toxi/geom/Sphere.java +224 -0
- data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
- data/src/toxi/geom/Spline2D.java +349 -0
- data/src/toxi/geom/Spline3D.java +351 -0
- data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
- data/src/toxi/geom/Triangle2D.java +422 -0
- data/src/toxi/geom/Triangle3D.java +456 -0
- data/src/toxi/geom/TriangleIntersector.java +105 -0
- data/src/toxi/geom/Vec2D.java +1328 -0
- data/src/toxi/geom/Vec3D.java +1832 -0
- data/src/toxi/geom/Vec4D.java +985 -0
- data/src/toxi/geom/VecMathUtil.java +100 -0
- data/src/toxi/geom/XAxisCylinder.java +64 -0
- data/src/toxi/geom/YAxisCylinder.java +65 -0
- data/src/toxi/geom/ZAxisCylinder.java +64 -0
- data/src/toxi/geom/mesh/BezierPatch.java +200 -0
- data/src/toxi/geom/mesh/BoxSelector.java +62 -0
- data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
- data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
- data/src/toxi/geom/mesh/Face.java +176 -0
- data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
- data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
- data/src/toxi/geom/mesh/Mesh3D.java +224 -0
- data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
- data/src/toxi/geom/mesh/OBJWriter.java +194 -0
- data/src/toxi/geom/mesh/PLYWriter.java +167 -0
- data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
- data/src/toxi/geom/mesh/STLColorModel.java +54 -0
- data/src/toxi/geom/mesh/STLReader.java +185 -0
- data/src/toxi/geom/mesh/STLWriter.java +323 -0
- data/src/toxi/geom/mesh/SphereFunction.java +156 -0
- data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
- data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
- data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
- data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
- data/src/toxi/geom/mesh/Terrain.java +451 -0
- data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
- data/src/toxi/geom/mesh/Vertex.java +78 -0
- data/src/toxi/geom/mesh/VertexSelector.java +193 -0
- data/src/toxi/geom/mesh/WEFace.java +100 -0
- data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
- data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
- data/src/toxi/geom/mesh/WEVertex.java +134 -0
- data/src/toxi/geom/mesh/WingedEdge.java +115 -0
- data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
- data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
- data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
- data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
- data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
- data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
- data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
- data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
- data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
- data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
- data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
- data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
- data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
- data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
- data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
- data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
- data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
- data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
- data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
- data/src/toxi/geom/nurbs/ControlNet.java +148 -0
- data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
- data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
- data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
- data/src/toxi/geom/nurbs/KnotVector.java +333 -0
- data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
- data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
- data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
- data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
- data/src/toxi/image/util/Filter8bit.java +331 -0
- data/src/toxi/image/util/TiledFrameExporter.java +162 -0
- data/src/toxi/math/BezierInterpolation.java +102 -0
- data/src/toxi/math/CircularInterpolation.java +88 -0
- data/src/toxi/math/CosineInterpolation.java +51 -0
- data/src/toxi/math/DecimatedInterpolation.java +77 -0
- data/src/toxi/math/ExponentialInterpolation.java +68 -0
- data/src/toxi/math/InterpolateStrategy.java +60 -0
- data/src/toxi/math/Interpolation2D.java +93 -0
- data/src/toxi/math/LinearInterpolation.java +46 -0
- data/src/toxi/math/MathUtils.java +990 -0
- data/src/toxi/math/NonLinearScaleMap.java +101 -0
- data/src/toxi/math/ScaleMap.java +183 -0
- data/src/toxi/math/SigmoidInterpolation.java +78 -0
- data/src/toxi/math/SinCosLUT.java +141 -0
- data/src/toxi/math/ThresholdInterpolation.java +58 -0
- data/src/toxi/math/ZoomLensInterpolation.java +126 -0
- data/src/toxi/math/conversion/UnitTranslator.java +161 -0
- data/src/toxi/math/noise/PerlinNoise.java +281 -0
- data/src/toxi/math/noise/SimplexNoise.java +542 -0
- data/src/toxi/math/waves/AMFMSineWave.java +143 -0
- data/src/toxi/math/waves/AbstractWave.java +248 -0
- data/src/toxi/math/waves/ConstantWave.java +48 -0
- data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
- data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
- data/src/toxi/math/waves/FMSineWave.java +142 -0
- data/src/toxi/math/waves/FMSquareWave.java +143 -0
- data/src/toxi/math/waves/FMTriangleWave.java +126 -0
- data/src/toxi/math/waves/SineWave.java +81 -0
- data/src/toxi/math/waves/Wave2D.java +68 -0
- data/src/toxi/math/waves/WaveState.java +69 -0
- data/src/toxi/music/scale/AbstractScale.java +117 -0
- data/src/toxi/music/scale/GenericScale.java +66 -0
- data/src/toxi/music/scale/MajorScale.java +41 -0
- data/src/toxi/newmesh/AttributedEdge.java +106 -0
- data/src/toxi/newmesh/AttributedFace.java +63 -0
- data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
- data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
- data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
- data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
- data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
- data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
- data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
- data/src/toxi/newmesh/SpatialIndex.java +78 -0
- data/src/toxi/physics2d/ParticlePath2D.java +100 -0
- data/src/toxi/physics2d/ParticleString2D.java +184 -0
- data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
- data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
- data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
- data/src/toxi/physics2d/VerletParticle2D.java +457 -0
- data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
- data/src/toxi/physics2d/VerletSpring2D.java +181 -0
- data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
- data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
- data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
- data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
- data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
- data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
- data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
- data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
- data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
- data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
- data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
- data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
- data/src/toxi/physics3d/ParticlePath3D.java +100 -0
- data/src/toxi/physics3d/ParticleString3D.java +184 -0
- data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
- data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
- data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
- data/src/toxi/physics3d/VerletParticle3D.java +385 -0
- data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
- data/src/toxi/physics3d/VerletSpring3D.java +180 -0
- data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
- data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
- data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
- data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
- data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
- data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
- data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
- data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
- data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
- data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
- data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
- data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
- data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
- data/src/toxi/processing/ArrowModifier.java +116 -0
- data/src/toxi/processing/DashedLineModifier.java +48 -0
- data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
- data/src/toxi/processing/Line2DRenderModifier.java +18 -0
- data/src/toxi/processing/MeshToVBO.java +94 -0
- data/src/toxi/processing/NormalMapper.java +18 -0
- data/src/toxi/processing/POVInterface.java +121 -0
- data/src/toxi/processing/POVMesh.java +219 -0
- data/src/toxi/processing/POVWriter.java +460 -0
- data/src/toxi/processing/RCOpaque.java +77 -0
- data/src/toxi/processing/RCTransp.java +78 -0
- data/src/toxi/processing/TextureBuilder.java +232 -0
- data/src/toxi/processing/Textures.java +110 -0
- data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
- data/src/toxi/processing/Tracing.java +25 -0
- data/src/toxi/processing/XYZNormalMapper.java +30 -0
- data/src/toxi/sim/automata/CAMatrix.java +297 -0
- data/src/toxi/sim/automata/CARule.java +76 -0
- data/src/toxi/sim/automata/CARule2D.java +354 -0
- data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
- data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
- data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
- data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
- data/src/toxi/sim/dla/DLA.java +497 -0
- data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
- data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
- data/src/toxi/sim/dla/DLAEventListener.java +57 -0
- data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
- data/src/toxi/sim/dla/DLAParticle.java +102 -0
- data/src/toxi/sim/dla/DLASegment.java +88 -0
- data/src/toxi/sim/dla/PipelineOrder.java +50 -0
- data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
- data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
- data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
- data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
- data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
- data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
- data/src/toxi/sim/grayscott/GrayScott.java +469 -0
- data/src/toxi/util/DateUtils.java +141 -0
- data/src/toxi/util/FileSequenceDescriptor.java +181 -0
- data/src/toxi/util/FileUtils.java +467 -0
- data/src/toxi/util/datatypes/ArraySet.java +128 -0
- data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
- data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
- data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
- data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
- data/src/toxi/util/datatypes/DoubleRange.java +251 -0
- data/src/toxi/util/datatypes/FloatRange.java +251 -0
- data/src/toxi/util/datatypes/GenericSet.java +215 -0
- data/src/toxi/util/datatypes/IntegerRange.java +247 -0
- data/src/toxi/util/datatypes/IntegerSet.java +149 -0
- data/src/toxi/util/datatypes/ItemIndex.java +72 -0
- data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
- data/src/toxi/util/datatypes/TypedProperties.java +291 -0
- data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
- data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
- data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
- data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
- data/src/toxi/util/events/EventDispatcher.java +86 -0
- data/src/toxi/volume/AdditiveBrush.java +19 -0
- data/src/toxi/volume/ArrayIsoSurface.java +297 -0
- data/src/toxi/volume/BoxBrush.java +100 -0
- data/src/toxi/volume/BrushMode.java +16 -0
- data/src/toxi/volume/HashIsoSurface.java +354 -0
- data/src/toxi/volume/IsoSurface.java +59 -0
- data/src/toxi/volume/MarchingCubesIndex.java +312 -0
- data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
- data/src/toxi/volume/MeshVoxelizer.java +216 -0
- data/src/toxi/volume/MultiplyBrush.java +20 -0
- data/src/toxi/volume/PeakBrush.java +21 -0
- data/src/toxi/volume/ReplaceBrush.java +19 -0
- data/src/toxi/volume/RoundBrush.java +113 -0
- data/src/toxi/volume/VolumetricBrush.java +160 -0
- data/src/toxi/volume/VolumetricHashMap.java +179 -0
- data/src/toxi/volume/VolumetricSpace.java +195 -0
- data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
- data/toxiclibs.gemspec +34 -0
- metadata +424 -27
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* __ .__ .__ ._____.
|
|
3
|
+
* _/ |_ _______ __|__| ____ | | |__\_ |__ ______
|
|
4
|
+
* \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
|
|
5
|
+
* | | ( <_> > <| \ \___| |_| || \_\ \\___ \
|
|
6
|
+
* |__| \____/__/\_ \__|\___ >____/__||___ /____ >
|
|
7
|
+
* \/ \/ \/ \/
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2006-2011 Karsten Schmidt
|
|
10
|
+
*
|
|
11
|
+
* This library is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 2.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* http://creativecommons.org/licenses/LGPL/2.1/
|
|
17
|
+
*
|
|
18
|
+
* This library is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
24
|
+
* License along with this library; if not, write to the Free Software
|
|
25
|
+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
package toxi.math;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Exponential curve interpolation with adjustable exponent. Use exp in the
|
|
32
|
+
* following ranges to achieve these effects:
|
|
33
|
+
* <ul>
|
|
34
|
+
* <li>0.0 < x < 1.0 : ease in (steep changes towards b)</li>
|
|
35
|
+
* <li>1.0 : same as {@link LinearInterpolation}</li>
|
|
36
|
+
* <li>> 1.0 : ease-out (steep changes from a)</li>
|
|
37
|
+
* </ul>
|
|
38
|
+
*/
|
|
39
|
+
public class ExponentialInterpolation implements InterpolateStrategy {
|
|
40
|
+
|
|
41
|
+
private float exponent;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Default constructor uses square parabola (exp=2)
|
|
45
|
+
*/
|
|
46
|
+
public ExponentialInterpolation() {
|
|
47
|
+
this(2);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param exp
|
|
52
|
+
* curve exponent
|
|
53
|
+
*/
|
|
54
|
+
public ExponentialInterpolation(float exp) {
|
|
55
|
+
this.exponent = exp;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@Override
|
|
59
|
+
public double interpolate(double a, double b, double f) {
|
|
60
|
+
return a + (b - a) * Math.pow(f, exponent);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@Override
|
|
64
|
+
public float interpolate(float a, float b, float f) {
|
|
65
|
+
return a + (b - a) * (float) Math.pow(f, exponent);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* __ .__ .__ ._____.
|
|
3
|
+
* _/ |_ _______ __|__| ____ | | |__\_ |__ ______
|
|
4
|
+
* \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
|
|
5
|
+
* | | ( <_> > <| \ \___| |_| || \_\ \\___ \
|
|
6
|
+
* |__| \____/__/\_ \__|\___ >____/__||___ /____ >
|
|
7
|
+
* \/ \/ \/ \/
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2006-2011 Karsten Schmidt
|
|
10
|
+
*
|
|
11
|
+
* This library is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 2.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* http://creativecommons.org/licenses/LGPL/2.1/
|
|
17
|
+
*
|
|
18
|
+
* This library is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
24
|
+
* License along with this library; if not, write to the Free Software
|
|
25
|
+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
package toxi.math;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Defines a generic function to interpolate 2 float values.
|
|
32
|
+
*/
|
|
33
|
+
public interface InterpolateStrategy {
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Implements an interpolation equation using double precision values.
|
|
37
|
+
*
|
|
38
|
+
* @param a
|
|
39
|
+
* current value
|
|
40
|
+
* @param b
|
|
41
|
+
* target value
|
|
42
|
+
* @param f
|
|
43
|
+
* normalized interpolation factor (0.0 .. 1.0)
|
|
44
|
+
* @return interpolated value
|
|
45
|
+
*/
|
|
46
|
+
public double interpolate(double a, double b, double f);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Implements an interpolation equation using float values.
|
|
50
|
+
*
|
|
51
|
+
* @param a
|
|
52
|
+
* current value
|
|
53
|
+
* @param b
|
|
54
|
+
* target value
|
|
55
|
+
* @param f
|
|
56
|
+
* normalized interpolation factor (0.0 .. 1.0)
|
|
57
|
+
* @return interpolated value
|
|
58
|
+
*/
|
|
59
|
+
public float interpolate(float a, float b, float f);
|
|
60
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* __ .__ .__ ._____.
|
|
3
|
+
* _/ |_ _______ __|__| ____ | | |__\_ |__ ______
|
|
4
|
+
* \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
|
|
5
|
+
* | | ( <_> > <| \ \___| |_| || \_\ \\___ \
|
|
6
|
+
* |__| \____/__/\_ \__|\___ >____/__||___ /____ >
|
|
7
|
+
* \/ \/ \/ \/
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2006-2011 Karsten Schmidt
|
|
10
|
+
*
|
|
11
|
+
* This library is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 2.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* http://creativecommons.org/licenses/LGPL/2.1/
|
|
17
|
+
*
|
|
18
|
+
* This library is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
24
|
+
* License along with this library; if not, write to the Free Software
|
|
25
|
+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
package toxi.math;
|
|
29
|
+
|
|
30
|
+
import toxi.geom.Vec2D;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Implementations of 2D interpolation functions (currently only bilinear).
|
|
34
|
+
*/
|
|
35
|
+
public class Interpolation2D {
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @param x
|
|
39
|
+
* x coord of point to filter
|
|
40
|
+
* @param y
|
|
41
|
+
* y coord of point to filter
|
|
42
|
+
* @param x1
|
|
43
|
+
* x coord of top-left corner
|
|
44
|
+
* @param y1
|
|
45
|
+
* y coord of top-left corner
|
|
46
|
+
* @param x2
|
|
47
|
+
* x coord of bottom-right corner
|
|
48
|
+
* @param y2
|
|
49
|
+
* y coord of bottom-right corner
|
|
50
|
+
* @param tl
|
|
51
|
+
* top-left value
|
|
52
|
+
* @param tr
|
|
53
|
+
* top-right value
|
|
54
|
+
* @param bl
|
|
55
|
+
* bottom-left value
|
|
56
|
+
* @param br
|
|
57
|
+
* bottom-right value
|
|
58
|
+
* @return interpolated value
|
|
59
|
+
*/
|
|
60
|
+
public static float bilinear(double x, double y, double x1, double y1,
|
|
61
|
+
double x2, double y2, float tl, float tr, float bl, float br) {
|
|
62
|
+
double denom = 1.0 / ((x2 - x1) * (y2 - y1));
|
|
63
|
+
double dx1 = (x - x1) * denom;
|
|
64
|
+
double dx2 = (x2 - x) * denom;
|
|
65
|
+
double dy1 = y - y1;
|
|
66
|
+
double dy2 = y2 - y;
|
|
67
|
+
return (float) (tl * dx2 * dy2 + tr * dx1 * dy2 + bl * dx2 * dy1 + br
|
|
68
|
+
* dx1 * dy1);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @param p
|
|
73
|
+
* point to filter
|
|
74
|
+
* @param p1
|
|
75
|
+
* top-left corner
|
|
76
|
+
* @param p2
|
|
77
|
+
* bottom-right corner
|
|
78
|
+
* @param tl
|
|
79
|
+
* top-left value
|
|
80
|
+
* @param tr
|
|
81
|
+
* top-right value
|
|
82
|
+
* @param bl
|
|
83
|
+
* bottom-left value
|
|
84
|
+
* @param br
|
|
85
|
+
* bottom-right value
|
|
86
|
+
* @return interpolated value
|
|
87
|
+
*/
|
|
88
|
+
public static float bilinear(Vec2D p, Vec2D p1, Vec2D p2, float tl,
|
|
89
|
+
float tr, float bl, float br) {
|
|
90
|
+
return bilinear(p.x, p.y, p1.x, p1.y, p2.x, p2.y, tl, tr, bl, br);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* __ .__ .__ ._____.
|
|
3
|
+
* _/ |_ _______ __|__| ____ | | |__\_ |__ ______
|
|
4
|
+
* \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
|
|
5
|
+
* | | ( <_> > <| \ \___| |_| || \_\ \\___ \
|
|
6
|
+
* |__| \____/__/\_ \__|\___ >____/__||___ /____ >
|
|
7
|
+
* \/ \/ \/ \/
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2006-2011 Karsten Schmidt
|
|
10
|
+
*
|
|
11
|
+
* This library is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 2.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* http://creativecommons.org/licenses/LGPL/2.1/
|
|
17
|
+
*
|
|
18
|
+
* This library is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
24
|
+
* License along with this library; if not, write to the Free Software
|
|
25
|
+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
package toxi.math;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Implementation of the linear interpolation function
|
|
32
|
+
*
|
|
33
|
+
* i = a + ( b - a ) * f
|
|
34
|
+
*/
|
|
35
|
+
public class LinearInterpolation implements InterpolateStrategy {
|
|
36
|
+
|
|
37
|
+
@Override
|
|
38
|
+
public double interpolate(double a, double b, double f) {
|
|
39
|
+
return a + (b - a) * f;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Override
|
|
43
|
+
public final float interpolate(float a, float b, float f) {
|
|
44
|
+
return a + (b - a) * f;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,990 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* __ .__ .__ ._____.
|
|
3
|
+
* _/ |_ _______ __|__| ____ | | |__\_ |__ ______
|
|
4
|
+
* \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
|
|
5
|
+
* | | ( <_> > <| \ \___| |_| || \_\ \\___ \
|
|
6
|
+
* |__| \____/__/\_ \__|\___ >____/__||___ /____ >
|
|
7
|
+
* \/ \/ \/ \/
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2006-2011 Karsten Schmidt
|
|
10
|
+
*
|
|
11
|
+
* This library is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 2.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* http://creativecommons.org/licenses/LGPL/2.1/
|
|
17
|
+
*
|
|
18
|
+
* This library is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
24
|
+
* License along with this library; if not, write to the Free Software
|
|
25
|
+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
package toxi.math;
|
|
29
|
+
|
|
30
|
+
import java.util.Random;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Miscellaneous math utilities.
|
|
34
|
+
*/
|
|
35
|
+
public final class MathUtils {
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
public static final float THIRD = 1f / 3;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Square root of 2
|
|
44
|
+
*/
|
|
45
|
+
public static final float SQRT2 = (float) Math.sqrt(2);
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Square root of 3
|
|
49
|
+
*/
|
|
50
|
+
public static final float SQRT3 = (float) Math.sqrt(3);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Log(2)
|
|
54
|
+
*/
|
|
55
|
+
public static final float LOG2 = (float) Math.log(2);
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* PI
|
|
59
|
+
*/
|
|
60
|
+
public static final float PI = 3.14159265358979323846f;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The reciprocal of PI: (1/PI)
|
|
64
|
+
*/
|
|
65
|
+
public static final float INV_PI = 1f / PI;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* PI/2
|
|
69
|
+
*/
|
|
70
|
+
public static final float HALF_PI = PI / 2;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* PI/3
|
|
74
|
+
*/
|
|
75
|
+
public static final float THIRD_PI = PI / 3;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* PI/4
|
|
79
|
+
*/
|
|
80
|
+
public static final float QUARTER_PI = PI / 4;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* PI*2
|
|
84
|
+
*/
|
|
85
|
+
public static final float TWO_PI = PI * 2;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* PI*1.5
|
|
89
|
+
*/
|
|
90
|
+
public static final float THREE_HALVES_PI = TWO_PI - HALF_PI;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* PI*PI
|
|
94
|
+
*/
|
|
95
|
+
public static final float PI_SQUARED = PI * PI;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Epsilon value
|
|
99
|
+
*/
|
|
100
|
+
public static final float EPS = 1.1920928955078125E-7f;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Degrees to radians conversion factor
|
|
104
|
+
*/
|
|
105
|
+
public static final float DEG2RAD = PI / 180;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Radians to degrees conversion factor
|
|
109
|
+
*/
|
|
110
|
+
public static final float RAD2DEG = 180 / PI;
|
|
111
|
+
|
|
112
|
+
private static final float SHIFT23 = 1 << 23;
|
|
113
|
+
|
|
114
|
+
private static final float INV_SHIFT23 = 1.0f / SHIFT23;
|
|
115
|
+
private final static double SIN_A = -4d / (PI * PI);
|
|
116
|
+
|
|
117
|
+
private final static double SIN_B = 4d / PI;
|
|
118
|
+
private final static double SIN_P = 9d / 40;
|
|
119
|
+
/**
|
|
120
|
+
* Default random number generator used by random methods of this class
|
|
121
|
+
* which don't use a passed in {@link Random} instance.
|
|
122
|
+
*/
|
|
123
|
+
public static Random RND = new Random();
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @param x
|
|
127
|
+
* @return absolute value of x
|
|
128
|
+
*/
|
|
129
|
+
public static final double abs(double x) {
|
|
130
|
+
return x < 0 ? -x : x;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @param x
|
|
135
|
+
* @return absolute value of x
|
|
136
|
+
*/
|
|
137
|
+
public static final float abs(float x) {
|
|
138
|
+
return x < 0 ? -x : x;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @param x
|
|
143
|
+
* @return absolute value of x
|
|
144
|
+
*/
|
|
145
|
+
public static final int abs(int x) {
|
|
146
|
+
int y = x >> 31;
|
|
147
|
+
return (x ^ y) - y;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Rounds up the value to the nearest higher power^2 value.
|
|
152
|
+
*
|
|
153
|
+
* @param x
|
|
154
|
+
* @return power^2 value
|
|
155
|
+
*/
|
|
156
|
+
public static final int ceilPowerOf2(int x) {
|
|
157
|
+
int pow2 = 1;
|
|
158
|
+
while (pow2 < x) {
|
|
159
|
+
pow2 <<= 1;
|
|
160
|
+
}
|
|
161
|
+
return pow2;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
*
|
|
166
|
+
* @param a
|
|
167
|
+
* @param min
|
|
168
|
+
* @param max
|
|
169
|
+
* @return
|
|
170
|
+
*/
|
|
171
|
+
public static final double clip(double a, double min, double max) {
|
|
172
|
+
return a < min ? min : (a > max ? max : a);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
*
|
|
177
|
+
* @param a
|
|
178
|
+
* @param min
|
|
179
|
+
* @param max
|
|
180
|
+
* @return
|
|
181
|
+
*/
|
|
182
|
+
public static final float clip(float a, float min, float max) {
|
|
183
|
+
return a < min ? min : (a > max ? max : a);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
*
|
|
188
|
+
* @param a
|
|
189
|
+
* @param min
|
|
190
|
+
* @param max
|
|
191
|
+
* @return
|
|
192
|
+
*/
|
|
193
|
+
public static final int clip(int a, int min, int max) {
|
|
194
|
+
return a < min ? min : (a > max ? max : a);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
*
|
|
199
|
+
* @param a
|
|
200
|
+
* @return
|
|
201
|
+
*/
|
|
202
|
+
public static double clipNormalized(double a) {
|
|
203
|
+
if (a < 0) {
|
|
204
|
+
return 0;
|
|
205
|
+
} else if (a > 1) {
|
|
206
|
+
return 1;
|
|
207
|
+
}
|
|
208
|
+
return a;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Clips the value to the 0.0 .. 1.0 interval.
|
|
213
|
+
*
|
|
214
|
+
* @param a
|
|
215
|
+
* @return clipped value
|
|
216
|
+
* @since 0012
|
|
217
|
+
*/
|
|
218
|
+
public static final float clipNormalized(float a) {
|
|
219
|
+
if (a < 0) {
|
|
220
|
+
return 0;
|
|
221
|
+
} else if (a > 1) {
|
|
222
|
+
return 1;
|
|
223
|
+
}
|
|
224
|
+
return a;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
*
|
|
229
|
+
* @param theta
|
|
230
|
+
* @return
|
|
231
|
+
*/
|
|
232
|
+
public static final double cos(final double theta) {
|
|
233
|
+
return sin(theta + HALF_PI);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Returns fast cosine approximation of a value. Note: code from <a
|
|
238
|
+
* href="http://wiki.java.net/bin/view/Games/JeffGems">wiki posting on
|
|
239
|
+
* java.net by jeffpk</a>
|
|
240
|
+
*
|
|
241
|
+
* @param theta
|
|
242
|
+
* angle in radians.
|
|
243
|
+
* @return cosine of theta.
|
|
244
|
+
*/
|
|
245
|
+
public static final float cos(final float theta) {
|
|
246
|
+
return sin(theta + HALF_PI);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
*
|
|
251
|
+
* @param radians
|
|
252
|
+
* @return
|
|
253
|
+
*/
|
|
254
|
+
public static final double degrees(double radians) {
|
|
255
|
+
return radians * RAD2DEG;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
*
|
|
260
|
+
* @param radians
|
|
261
|
+
* @return
|
|
262
|
+
*/
|
|
263
|
+
public static final float degrees(float radians) {
|
|
264
|
+
return radians * RAD2DEG;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
*
|
|
269
|
+
* @param a
|
|
270
|
+
* @param b
|
|
271
|
+
* @return
|
|
272
|
+
*/
|
|
273
|
+
public static double dualSign(double a, double b) {
|
|
274
|
+
double x = (a >= 0 ? a : -a);
|
|
275
|
+
return (b >= 0 ? x : -x);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Fast cosine approximation.
|
|
280
|
+
*
|
|
281
|
+
* @param x
|
|
282
|
+
* angle in -PI/2 .. +PI/2 interval
|
|
283
|
+
* @return cosine
|
|
284
|
+
*/
|
|
285
|
+
public static final double fastCos(final double x) {
|
|
286
|
+
return fastSin(x + ((x > HALF_PI) ? -THREE_HALVES_PI : HALF_PI));
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* @param x
|
|
291
|
+
* @return
|
|
292
|
+
* @deprecated
|
|
293
|
+
*/
|
|
294
|
+
@Deprecated
|
|
295
|
+
public static final float fastInverseSqrt(float x) {
|
|
296
|
+
float half = 0.5F * x;
|
|
297
|
+
int i = Float.floatToIntBits(x);
|
|
298
|
+
i = 0x5f375a86 - (i >> 1);
|
|
299
|
+
x = Float.intBitsToFloat(i);
|
|
300
|
+
return x * (1.5F - half * x * x);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Computes a fast approximation to <code>Math.pow(a, b)</code>. Adapted
|
|
305
|
+
* from http://www.dctsystems.co.uk/Software/power.html.
|
|
306
|
+
*
|
|
307
|
+
* @param a
|
|
308
|
+
* a positive number
|
|
309
|
+
* @param b
|
|
310
|
+
* a number
|
|
311
|
+
* @return a^b
|
|
312
|
+
*
|
|
313
|
+
*/
|
|
314
|
+
public static final float fastPow(float a, float b) {
|
|
315
|
+
float x = Float.floatToRawIntBits(a);
|
|
316
|
+
x *= INV_SHIFT23;
|
|
317
|
+
x -= 127;
|
|
318
|
+
float y = x - (x >= 0 ? (int) x : (int) x - 1);
|
|
319
|
+
b *= x + (y - y * y) * 0.346607f;
|
|
320
|
+
y = b - (b >= 0 ? (int) b : (int) b - 1);
|
|
321
|
+
y = (y - y * y) * 0.33971f;
|
|
322
|
+
return Float.intBitsToFloat((int) ((b + 127 - y) * SHIFT23));
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Fast sine approximation.
|
|
327
|
+
*
|
|
328
|
+
* @param x
|
|
329
|
+
* angle in -PI/2 .. +PI/2 interval
|
|
330
|
+
* @return sine
|
|
331
|
+
*/
|
|
332
|
+
public static final double fastSin(double x) {
|
|
333
|
+
// float B = 4/pi;
|
|
334
|
+
// float C = -4/(pi*pi);
|
|
335
|
+
// float y = B * x + C * x * abs(x);
|
|
336
|
+
// y = P * (y * abs(y) - y) + y;
|
|
337
|
+
x = SIN_B * x + SIN_A * x * abs(x);
|
|
338
|
+
return SIN_P * (x * abs(x) - x) + x;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
*
|
|
343
|
+
* @return
|
|
344
|
+
*/
|
|
345
|
+
public static final boolean flipCoin() {
|
|
346
|
+
return RND.nextBoolean();
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
*
|
|
351
|
+
* @param rnd
|
|
352
|
+
* @return
|
|
353
|
+
*/
|
|
354
|
+
public static final boolean flipCoin(Random rnd) {
|
|
355
|
+
return rnd.nextBoolean();
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
*
|
|
360
|
+
* @param x
|
|
361
|
+
* @return
|
|
362
|
+
*/
|
|
363
|
+
public static final long floor(double x) {
|
|
364
|
+
long y = (long) x;
|
|
365
|
+
if (x < 0 && x != y) {
|
|
366
|
+
y--;
|
|
367
|
+
}
|
|
368
|
+
return y;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* This method is a *lot* faster than using (int)Math.floor(x).
|
|
373
|
+
*
|
|
374
|
+
* @param x
|
|
375
|
+
* value to be floored
|
|
376
|
+
* @return floored value as integer
|
|
377
|
+
* @since 0012
|
|
378
|
+
*/
|
|
379
|
+
public static final int floor(float x) {
|
|
380
|
+
int y = (int) x;
|
|
381
|
+
if (x < 0 && x != y) {
|
|
382
|
+
y--;
|
|
383
|
+
}
|
|
384
|
+
return y;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Rounds down the value to the nearest lower power^2 value.
|
|
389
|
+
*
|
|
390
|
+
* @param x
|
|
391
|
+
* @return power^2 value
|
|
392
|
+
*/
|
|
393
|
+
public static final int floorPowerOf2(int x) {
|
|
394
|
+
return (int) Math.pow(2, (int) (Math.log(x) / LOG2));
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Computes the Greatest Common Devisor of integers p and q.
|
|
399
|
+
*
|
|
400
|
+
* @param p
|
|
401
|
+
* @param q
|
|
402
|
+
* @return gcd
|
|
403
|
+
*/
|
|
404
|
+
public static final int gcd(int p, int q) {
|
|
405
|
+
if (q == 0) {
|
|
406
|
+
return p;
|
|
407
|
+
}
|
|
408
|
+
return gcd(q, p % q);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Creates a single normalized impulse signal with its peak at t=1/k. The
|
|
413
|
+
* attack and decay period is configurable via the k parameter. Code from:
|
|
414
|
+
* http://www.iquilezles.org/www/articles/functions/functions.htm
|
|
415
|
+
*
|
|
416
|
+
* @param k
|
|
417
|
+
* smoothness
|
|
418
|
+
* @param t
|
|
419
|
+
* time position (should be >= 0)
|
|
420
|
+
* @return impulse value (as double)
|
|
421
|
+
*/
|
|
422
|
+
public static double impulse(double k, double t) {
|
|
423
|
+
double h = k * t;
|
|
424
|
+
return h * Math.exp(1.0 - h);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Creates a single normalized impulse signal with its peak at t=1/k. The
|
|
429
|
+
* attack and decay period is configurable via the k parameter. Code from:
|
|
430
|
+
* http://www.iquilezles.org/www/articles/functions/functions.htm
|
|
431
|
+
*
|
|
432
|
+
* @param k
|
|
433
|
+
* smoothness
|
|
434
|
+
* @param t
|
|
435
|
+
* time position (should be >= 0)
|
|
436
|
+
* @return impulse value (as float)
|
|
437
|
+
*/
|
|
438
|
+
public static float impulse(float k, float t) {
|
|
439
|
+
float h = k * t;
|
|
440
|
+
return (float) (h * Math.exp(1.0f - h));
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
*
|
|
445
|
+
* @param p
|
|
446
|
+
* @param q
|
|
447
|
+
* @return
|
|
448
|
+
*/
|
|
449
|
+
public static final int lcm(int p, int q) {
|
|
450
|
+
return abs(p * q) / gcd(p, q);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
*
|
|
455
|
+
* @param a
|
|
456
|
+
* @param b
|
|
457
|
+
* @param t
|
|
458
|
+
* @return
|
|
459
|
+
*/
|
|
460
|
+
public static double lerp(double a, double b, double t) {
|
|
461
|
+
return a + (b - a) * t;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
*
|
|
466
|
+
* @param a
|
|
467
|
+
* @param b
|
|
468
|
+
* @param t
|
|
469
|
+
* @return
|
|
470
|
+
*/
|
|
471
|
+
public static float lerp(float a, float b, float t) {
|
|
472
|
+
return a + (b - a) * t;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
*
|
|
477
|
+
* @param x
|
|
478
|
+
* @param minIn
|
|
479
|
+
* @param maxIn
|
|
480
|
+
* @param minOut
|
|
481
|
+
* @param maxOut
|
|
482
|
+
* @return
|
|
483
|
+
*/
|
|
484
|
+
public static double mapInterval(double x, double minIn, double maxIn,
|
|
485
|
+
double minOut, double maxOut) {
|
|
486
|
+
return minOut + (maxOut - minOut) * (x - minIn) / (maxIn - minIn);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
*
|
|
491
|
+
* @param x
|
|
492
|
+
* @param minIn
|
|
493
|
+
* @param maxIn
|
|
494
|
+
* @param minOut
|
|
495
|
+
* @param maxOut
|
|
496
|
+
* @return
|
|
497
|
+
*/
|
|
498
|
+
public static float mapInterval(float x, float minIn, float maxIn,
|
|
499
|
+
float minOut, float maxOut) {
|
|
500
|
+
return minOut + (maxOut - minOut) * (x - minIn) / (maxIn - minIn);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
*
|
|
505
|
+
* @param a
|
|
506
|
+
* @param b
|
|
507
|
+
* @return
|
|
508
|
+
*/
|
|
509
|
+
public static final double max(double a, double b) {
|
|
510
|
+
return a > b ? a : b;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
*
|
|
515
|
+
* @param a
|
|
516
|
+
* @param b
|
|
517
|
+
* @param c
|
|
518
|
+
* @return
|
|
519
|
+
*/
|
|
520
|
+
public static final double max(double a, double b, double c) {
|
|
521
|
+
return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
*
|
|
526
|
+
* @param values
|
|
527
|
+
* @return
|
|
528
|
+
*/
|
|
529
|
+
public static final double max(double[] values) {
|
|
530
|
+
return max(values[0], values[1], values[2]);
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
*
|
|
535
|
+
* @param a
|
|
536
|
+
* @param b
|
|
537
|
+
* @return
|
|
538
|
+
*/
|
|
539
|
+
public static final float max(float a, float b) {
|
|
540
|
+
return a > b ? a : b;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* Returns the maximum value of three floats.
|
|
545
|
+
*
|
|
546
|
+
* @param a
|
|
547
|
+
* @param b
|
|
548
|
+
* @param c
|
|
549
|
+
* @return max val
|
|
550
|
+
*/
|
|
551
|
+
public static final float max(float a, float b, float c) {
|
|
552
|
+
return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
*
|
|
557
|
+
* @param values
|
|
558
|
+
* @return
|
|
559
|
+
*/
|
|
560
|
+
public static final float max(float[] values) {
|
|
561
|
+
return max(values[0], values[1], values[2]);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
*
|
|
566
|
+
* @param a
|
|
567
|
+
* @param b
|
|
568
|
+
* @return
|
|
569
|
+
*/
|
|
570
|
+
public static final int max(int a, int b) {
|
|
571
|
+
return a > b ? a : b;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* Returns the maximum value of three ints.
|
|
576
|
+
*
|
|
577
|
+
* @param a
|
|
578
|
+
* @param b
|
|
579
|
+
* @param c
|
|
580
|
+
* @return max val
|
|
581
|
+
*/
|
|
582
|
+
public static final int max(int a, int b, int c) {
|
|
583
|
+
return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
*
|
|
588
|
+
* @param values
|
|
589
|
+
* @return
|
|
590
|
+
*/
|
|
591
|
+
public static final int max(int[] values) {
|
|
592
|
+
return max(values[0], values[1], values[2]);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
/**
|
|
596
|
+
*
|
|
597
|
+
* @param a
|
|
598
|
+
* @param b
|
|
599
|
+
* @return
|
|
600
|
+
*/
|
|
601
|
+
public static final double min(double a, double b) {
|
|
602
|
+
return a < b ? a : b;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
*
|
|
607
|
+
* @param a
|
|
608
|
+
* @param b
|
|
609
|
+
* @param c
|
|
610
|
+
* @return
|
|
611
|
+
*/
|
|
612
|
+
public static final double min(double a, double b, double c) {
|
|
613
|
+
return (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
*
|
|
618
|
+
* @param a
|
|
619
|
+
* @param b
|
|
620
|
+
* @return
|
|
621
|
+
*/
|
|
622
|
+
public static final float min(float a, float b) {
|
|
623
|
+
return a < b ? a : b;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/**
|
|
627
|
+
* Returns the minimum value of three floats.
|
|
628
|
+
*
|
|
629
|
+
* @param a
|
|
630
|
+
* @param b
|
|
631
|
+
* @param c
|
|
632
|
+
* @return min val
|
|
633
|
+
*/
|
|
634
|
+
public static final float min(float a, float b, float c) {
|
|
635
|
+
return (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c);
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
/**
|
|
639
|
+
*
|
|
640
|
+
* @param a
|
|
641
|
+
* @param b
|
|
642
|
+
* @return
|
|
643
|
+
*/
|
|
644
|
+
public static final int min(int a, int b) {
|
|
645
|
+
return a < b ? a : b;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* Returns the minimum value of three ints.
|
|
650
|
+
*
|
|
651
|
+
* @param a
|
|
652
|
+
* @param b
|
|
653
|
+
* @param c
|
|
654
|
+
* @return min val
|
|
655
|
+
*/
|
|
656
|
+
public static final int min(int a, int b, int c) {
|
|
657
|
+
return (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* Returns a random number in the interval -1 .. +1.
|
|
662
|
+
*
|
|
663
|
+
* @return random float
|
|
664
|
+
*/
|
|
665
|
+
public static final float normalizedRandom() {
|
|
666
|
+
return RND.nextFloat() * 2 - 1;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
/**
|
|
670
|
+
* Returns a random number in the interval -1 .. +1 using the {@link Random}
|
|
671
|
+
* instance provided.
|
|
672
|
+
*
|
|
673
|
+
* @param rnd
|
|
674
|
+
* @return random float
|
|
675
|
+
*/
|
|
676
|
+
public static final float normalizedRandom(Random rnd) {
|
|
677
|
+
return rnd.nextFloat() * 2 - 1;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/**
|
|
681
|
+
*
|
|
682
|
+
* @param degrees
|
|
683
|
+
* @return
|
|
684
|
+
*/
|
|
685
|
+
public static double radians(double degrees) {
|
|
686
|
+
return degrees * DEG2RAD;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
*
|
|
691
|
+
* @param degrees
|
|
692
|
+
* @return
|
|
693
|
+
*/
|
|
694
|
+
public static final float radians(float degrees) {
|
|
695
|
+
return degrees * DEG2RAD;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
*
|
|
700
|
+
* @param max
|
|
701
|
+
* @return
|
|
702
|
+
*/
|
|
703
|
+
public static final float random(float max) {
|
|
704
|
+
return RND.nextFloat() * max;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
*
|
|
709
|
+
* @param min
|
|
710
|
+
* @param max
|
|
711
|
+
* @return
|
|
712
|
+
*/
|
|
713
|
+
public static final float random(float min, float max) {
|
|
714
|
+
return RND.nextFloat() * (max - min) + min;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
/**
|
|
718
|
+
*
|
|
719
|
+
* @param max
|
|
720
|
+
* @return
|
|
721
|
+
*/
|
|
722
|
+
public static final int random(int max) {
|
|
723
|
+
return (int) (RND.nextFloat() * max);
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
/**
|
|
727
|
+
*
|
|
728
|
+
* @param min
|
|
729
|
+
* @param max
|
|
730
|
+
* @return
|
|
731
|
+
*/
|
|
732
|
+
public static final int random(int min, int max) {
|
|
733
|
+
return (int) (RND.nextFloat() * (max - min)) + min;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
*
|
|
738
|
+
* @param rnd
|
|
739
|
+
* @param max
|
|
740
|
+
* @return
|
|
741
|
+
*/
|
|
742
|
+
public static final double random(Random rnd, double max) {
|
|
743
|
+
return rnd.nextDouble() * max;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/**
|
|
747
|
+
*
|
|
748
|
+
* @param rnd
|
|
749
|
+
* @param min
|
|
750
|
+
* @param max
|
|
751
|
+
* @return
|
|
752
|
+
*/
|
|
753
|
+
public static final double random(Random rnd, double min, double max) {
|
|
754
|
+
return rnd.nextDouble() * (max - min) + min;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
/**
|
|
758
|
+
*
|
|
759
|
+
* @param rnd
|
|
760
|
+
* @param max
|
|
761
|
+
* @return
|
|
762
|
+
*/
|
|
763
|
+
public static final float random(Random rnd, float max) {
|
|
764
|
+
return rnd.nextFloat() * max;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/**
|
|
768
|
+
*
|
|
769
|
+
* @param rnd
|
|
770
|
+
* @param min
|
|
771
|
+
* @param max
|
|
772
|
+
* @return
|
|
773
|
+
*/
|
|
774
|
+
public static final float random(Random rnd, float min, float max) {
|
|
775
|
+
return rnd.nextFloat() * (max - min) + min;
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
*
|
|
780
|
+
* @param rnd
|
|
781
|
+
* @param max
|
|
782
|
+
* @return
|
|
783
|
+
*/
|
|
784
|
+
public static final int random(Random rnd, int max) {
|
|
785
|
+
return (int) (rnd.nextDouble() * max);
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
/**
|
|
789
|
+
*
|
|
790
|
+
* @param rnd
|
|
791
|
+
* @param min
|
|
792
|
+
* @param max
|
|
793
|
+
* @return
|
|
794
|
+
*/
|
|
795
|
+
public static final int random(Random rnd, int min, int max) {
|
|
796
|
+
return (int) (rnd.nextDouble() * (max - min)) + min;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
/**
|
|
800
|
+
*
|
|
801
|
+
* @param chance
|
|
802
|
+
* @return
|
|
803
|
+
*/
|
|
804
|
+
public static final boolean randomChance(double chance) {
|
|
805
|
+
return RND.nextDouble() < chance;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
*
|
|
810
|
+
* @param chance
|
|
811
|
+
* @return
|
|
812
|
+
*/
|
|
813
|
+
public static final boolean randomChance(float chance) {
|
|
814
|
+
return RND.nextFloat() < chance;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
/**
|
|
818
|
+
*
|
|
819
|
+
* @param rnd
|
|
820
|
+
* @param chance
|
|
821
|
+
* @return
|
|
822
|
+
*/
|
|
823
|
+
public static final boolean randomChance(Random rnd, double chance) {
|
|
824
|
+
return rnd.nextDouble() < chance;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
/**
|
|
828
|
+
*
|
|
829
|
+
* @param rnd
|
|
830
|
+
* @param chance
|
|
831
|
+
* @return
|
|
832
|
+
*/
|
|
833
|
+
public static final boolean randomChance(Random rnd, float chance) {
|
|
834
|
+
return rnd.nextFloat() < chance;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
/**
|
|
838
|
+
*
|
|
839
|
+
* @param theta
|
|
840
|
+
* @return
|
|
841
|
+
*/
|
|
842
|
+
public static final double reduceAngle(double theta) {
|
|
843
|
+
theta %= TWO_PI;
|
|
844
|
+
if (abs(theta) > PI) {
|
|
845
|
+
theta = theta - TWO_PI;
|
|
846
|
+
}
|
|
847
|
+
if (abs(theta) > HALF_PI) {
|
|
848
|
+
theta = PI - theta;
|
|
849
|
+
}
|
|
850
|
+
return theta;
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
/**
|
|
854
|
+
* Reduces the given angle into the -PI/4 ... PI/4 interval for faster
|
|
855
|
+
* computation of sin/cos. This method is used by {@link #sin(float)} &
|
|
856
|
+
* {@link #cos(float)}.
|
|
857
|
+
*
|
|
858
|
+
* @param theta
|
|
859
|
+
* angle in radians
|
|
860
|
+
* @return reduced angle
|
|
861
|
+
* @see #sin(float)
|
|
862
|
+
* @see #cos(float)
|
|
863
|
+
*/
|
|
864
|
+
public static final float reduceAngle(float theta) {
|
|
865
|
+
theta %= TWO_PI;
|
|
866
|
+
if (abs(theta) > PI) {
|
|
867
|
+
theta = theta - TWO_PI;
|
|
868
|
+
}
|
|
869
|
+
if (abs(theta) > HALF_PI) {
|
|
870
|
+
theta = PI - theta;
|
|
871
|
+
}
|
|
872
|
+
return theta;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
/**
|
|
876
|
+
* Rounds a double precision value to the given precision.
|
|
877
|
+
*
|
|
878
|
+
* @param val
|
|
879
|
+
* @param prec
|
|
880
|
+
* @return rounded value
|
|
881
|
+
*/
|
|
882
|
+
public static final double roundTo(double val, double prec) {
|
|
883
|
+
return floor(val / prec + 0.5) * prec;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
/**
|
|
887
|
+
* Rounds a single precision value to the given precision.
|
|
888
|
+
*
|
|
889
|
+
* @param val
|
|
890
|
+
* @param prec
|
|
891
|
+
* @return rounded value
|
|
892
|
+
*/
|
|
893
|
+
public static final float roundTo(float val, float prec) {
|
|
894
|
+
return floor(val / prec + 0.5f) * prec;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
/**
|
|
898
|
+
* Rounds an integer value to the given precision.
|
|
899
|
+
*
|
|
900
|
+
* @param val
|
|
901
|
+
* @param prec
|
|
902
|
+
* @return rounded value
|
|
903
|
+
*/
|
|
904
|
+
public static final int roundTo(int val, int prec) {
|
|
905
|
+
return floor((float) val / prec + 0.5f) * prec;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
/**
|
|
909
|
+
* Sets the default Random number generator for this class. This generator
|
|
910
|
+
* is being reused by all future calls to random() method versions which
|
|
911
|
+
* don't explicitly ask for a {@link Random} instance to be used.
|
|
912
|
+
*
|
|
913
|
+
* @param rnd
|
|
914
|
+
*/
|
|
915
|
+
public static void setDefaultRandomGenerator(Random rnd) {
|
|
916
|
+
RND = rnd;
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
/**
|
|
920
|
+
*
|
|
921
|
+
* @param x
|
|
922
|
+
* @return
|
|
923
|
+
*/
|
|
924
|
+
public static int sign(double x) {
|
|
925
|
+
return x < 0 ? -1 : (x > 0 ? 1 : 0);
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
/**
|
|
929
|
+
*
|
|
930
|
+
* @param x
|
|
931
|
+
* @return
|
|
932
|
+
*/
|
|
933
|
+
public static int sign(float x) {
|
|
934
|
+
return x < 0 ? -1 : (x > 0 ? 1 : 0);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
/**
|
|
938
|
+
*
|
|
939
|
+
* @param x
|
|
940
|
+
* @return
|
|
941
|
+
*/
|
|
942
|
+
public static int sign(int x) {
|
|
943
|
+
return x < 0 ? -1 : (x > 0 ? 1 : 0);
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
/**
|
|
947
|
+
*
|
|
948
|
+
* @param theta
|
|
949
|
+
* @return
|
|
950
|
+
*/
|
|
951
|
+
public static final double sin(double theta) {
|
|
952
|
+
theta = reduceAngle(theta);
|
|
953
|
+
if (abs(theta) <= QUARTER_PI) {
|
|
954
|
+
return (float) fastSin(theta);
|
|
955
|
+
}
|
|
956
|
+
return (float) fastCos(HALF_PI - theta);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
/**
|
|
960
|
+
* Returns a fast sine approximation of a value. Note: code from <a
|
|
961
|
+
* href="http://wiki.java.net/bin/view/Games/JeffGems">wiki posting on
|
|
962
|
+
* java.net by jeffpk</a>
|
|
963
|
+
*
|
|
964
|
+
* @param theta
|
|
965
|
+
* angle in radians.
|
|
966
|
+
* @return sine of theta.
|
|
967
|
+
*/
|
|
968
|
+
public static final float sin(float theta) {
|
|
969
|
+
theta = reduceAngle(theta);
|
|
970
|
+
if (abs(theta) <= QUARTER_PI) {
|
|
971
|
+
return (float) fastSin(theta);
|
|
972
|
+
}
|
|
973
|
+
return (float) fastCos(HALF_PI - theta);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
/**
|
|
977
|
+
* @param x
|
|
978
|
+
* @return
|
|
979
|
+
* @deprecated
|
|
980
|
+
*/
|
|
981
|
+
@Deprecated
|
|
982
|
+
public static final float sqrt(float x) {
|
|
983
|
+
x = fastInverseSqrt(x);
|
|
984
|
+
if (x > 0) {
|
|
985
|
+
return 1.0f / x;
|
|
986
|
+
} else {
|
|
987
|
+
return 0;
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|