toxiclibs 0.9.2 → 2.1.0
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 +5 -5
- data/.mvn/extensions.xml +1 -1
- data/.travis.yml +3 -4
- data/CHANGELOG.md +10 -1
- data/README.md +3 -3
- data/Rakefile +1 -2
- data/examples/attract_repel/attractor.rb +1 -1
- data/examples/attract_repel/particle.rb +1 -1
- data/examples/boolean_shapes.rb +9 -5
- data/examples/force_directed/node.rb +1 -1
- data/examples/inflate_mesh.rb +1 -1
- data/examples/model_align.rb +1 -1
- data/examples/physics_type.rb +1 -1
- data/examples/povmesh/ftest.rb +3 -3
- data/examples/toxiclibs_color_theme.rb +91 -0
- data/lib/toxiclibs/version.rb +2 -1
- data/lib/toxiclibs.jar +0 -0
- data/lib/toxiclibs.rb +54 -37
- data/pom.rb +20 -28
- data/pom.xml +39 -65
- data/src/main/java/module-info.java +22 -0
- data/src/{toxi → main/java/toxi}/color/AccessCriteria.java +0 -0
- data/src/{toxi → main/java/toxi}/color/AlphaAccessor.java +0 -0
- data/src/{toxi → main/java/toxi}/color/CMYKAccessor.java +0 -0
- data/src/{toxi → main/java/toxi}/color/CMYKDistanceProxy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/ColorGradient.java +0 -0
- data/src/{toxi → main/java/toxi}/color/ColorList.java +2 -4
- data/src/{toxi → main/java/toxi}/color/ColorRange.java +0 -0
- data/src/{toxi → main/java/toxi}/color/ColorTheme.java +0 -0
- data/src/{toxi → main/java/toxi}/color/DistanceProxy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/HSVAccessor.java +0 -0
- data/src/{toxi → main/java/toxi}/color/HSVDistanceProxy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/HistEntry.java +0 -0
- data/src/{toxi → main/java/toxi}/color/Histogram.java +0 -0
- data/src/{toxi → main/java/toxi}/color/Hue.java +0 -0
- data/src/{toxi → main/java/toxi}/color/LuminanceAccessor.java +0 -0
- data/src/{toxi → main/java/toxi}/color/NamedColor.java +0 -0
- data/src/{toxi → main/java/toxi}/color/ProximityComparator.java +0 -0
- data/src/{toxi → main/java/toxi}/color/RGBAccessor.java +0 -0
- data/src/{toxi → main/java/toxi}/color/RGBDistanceProxy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/ReadonlyTColor.java +0 -0
- data/src/{toxi → main/java/toxi}/color/TColor.java +0 -0
- data/src/{toxi → main/java/toxi}/color/TColorAdapter.java +4 -4
- data/src/{toxi → main/java/toxi}/color/ToneMap.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/AnalogousStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/ColorTheoryRegistry.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/ColorTheoryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/ComplementaryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/CompoundTheoryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/LeftSplitComplementaryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/MonochromeTheoryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/RightSplitComplementaryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/SingleComplementStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/SplitComplementaryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/TetradTheoryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/color/theory/TriadTheoryStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/data/csv/CSVAdapter.java +0 -0
- data/src/{toxi → main/java/toxi}/data/csv/CSVFieldMapper.java +0 -0
- data/src/{toxi → main/java/toxi}/data/csv/CSVListener.java +0 -0
- data/src/{toxi → main/java/toxi}/data/csv/CSVParser.java +0 -0
- data/src/{toxi → main/java/toxi}/data/feeds/AtomAuthor.java +2 -2
- data/src/{toxi → main/java/toxi}/data/feeds/AtomContent.java +3 -4
- data/src/{toxi → main/java/toxi}/data/feeds/AtomEntry.java +9 -13
- data/src/main/java/toxi/data/feeds/AtomFeed.java +91 -0
- data/src/{toxi → main/java/toxi}/data/feeds/AtomLink.java +3 -2
- data/src/{toxi → main/java/toxi}/data/feeds/RSSChannel.java +10 -11
- data/src/{toxi → main/java/toxi}/data/feeds/RSSEnclosure.java +3 -3
- data/src/{toxi → main/java/toxi}/data/feeds/RSSItem.java +11 -13
- data/src/{toxi → main/java/toxi}/data/feeds/util/EntityStripper.java +0 -0
- data/src/{toxi → main/java/toxi}/data/feeds/util/Iso8601DateAdapter.java +6 -7
- data/src/{toxi → main/java/toxi}/data/feeds/util/Rfc822DateAdapter.java +5 -6
- data/src/{toxi → main/java/toxi}/geom/AABB.java +8 -9
- data/src/{toxi → main/java/toxi}/geom/Axis3D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/AxisAlignedCylinder.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/BernsteinPolynomial.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/BezierCurve2D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/BezierCurve3D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/BooleanShapeBuilder.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/BoxIntersector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Circle.java +2 -2
- data/src/{toxi → main/java/toxi}/geom/CircleIntersector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Cone.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/ConvexPolygonClipper.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/CoordinateExtractor.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Ellipse.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/GMatrix.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/GVector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/GlobalGridTesselator.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/GridTesselator.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Intersector2D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Intersector3D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/IsectData2D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/IsectData3D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Line2D.java +1 -2
- data/src/{toxi → main/java/toxi}/geom/Line3D.java +1 -2
- data/src/{toxi → main/java/toxi}/geom/LineStrip2D.java +2 -2
- data/src/{toxi → main/java/toxi}/geom/LineStrip3D.java +2 -2
- data/src/{toxi → main/java/toxi}/geom/LocalGridTesselator.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Matrix3d.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Matrix4f.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Matrix4x4.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/MatrixSizeException.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/OctreeVisitor.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Origin3D.java +12 -6
- data/src/{toxi → main/java/toxi}/geom/Plane.java +3 -5
- data/src/{toxi → main/java/toxi}/geom/PlaneIntersector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/PointCloud3D.java +15 -12
- data/src/{toxi → main/java/toxi}/geom/PointOctree.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/PointQuadtree.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Polygon2D.java +34 -45
- data/src/{toxi → main/java/toxi}/geom/PolygonClipper2D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/PolygonTesselator.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/QuadtreeVisitor.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Quaternion.java +3 -5
- data/src/{toxi → main/java/toxi}/geom/Ray2D.java +4 -5
- data/src/{toxi → main/java/toxi}/geom/Ray3D.java +3 -5
- data/src/{toxi → main/java/toxi}/geom/Ray3DIntersector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/ReadonlyVec2D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/ReadonlyVec3D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/ReadonlyVec4D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Rect.java +3 -5
- data/src/{toxi → main/java/toxi}/geom/Reflector3D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Shape2D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Shape3D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/SingularMatrixException.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/SpatialBins.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/SpatialIndex.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Sphere.java +3 -5
- data/src/{toxi → main/java/toxi}/geom/SphereIntersectorReflector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Spline2D.java +12 -16
- data/src/{toxi → main/java/toxi}/geom/Spline3D.java +12 -16
- data/src/{toxi → main/java/toxi}/geom/SutherlandHodgemanClipper.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Triangle2D.java +4 -7
- data/src/{toxi → main/java/toxi}/geom/Triangle3D.java +5 -8
- data/src/{toxi → main/java/toxi}/geom/TriangleIntersector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/Vec2D.java +3 -3
- data/src/{toxi → main/java/toxi}/geom/Vec3D.java +4 -4
- data/src/{toxi → main/java/toxi}/geom/Vec4D.java +5 -5
- data/src/{toxi → main/java/toxi}/geom/VecMathUtil.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/XAxisCylinder.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/YAxisCylinder.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/ZAxisCylinder.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/BezierPatch.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/BoxSelector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/DefaultSTLColorModel.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/DefaultSelector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/Face.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/LaplacianSmooth.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/MaterialiseSTLColorModel.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/Mesh3D.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/MeshIntersector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/OBJWriter.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/PLYWriter.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/PlaneSelector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/STLColorModel.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/STLReader.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/STLWriter.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/SphereFunction.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/SphericalHarmonics.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/SuperEllipsoid.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/SurfaceFunction.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/SurfaceMeshBuilder.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/Terrain.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/TriangleMesh.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/Vertex.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/VertexSelector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/WEFace.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/WEMeshFilterStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/WETriangleMesh.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/WEVertex.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/WingedEdge.java +2 -2
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/CentroidSubdiv.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DisplacementSubdivision.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DualDisplacementSubdivision.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DualSubdivision.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/EdgeLengthComparator.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/FaceCountComparator.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointSubdiv.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointSubdivision.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/NewSubdivStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/NormalDisplacementSubdivision.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/SubdivisionStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/TriSubdivision.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayTriangle.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayTriangulation.java +5 -7
- data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayVertex.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/mesh2d/Voronoi.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/BasicNurbsCurve.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/BasicNurbsSurface.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/ControlNet.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/CurveCreator.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/CurveUtils.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/InterpolationException.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/KnotVector.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsCreator.java +2 -2
- data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsCurve.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsMeshCreator.java +0 -0
- data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsSurface.java +0 -0
- data/src/{toxi → main/java/toxi}/image/util/Filter8bit.java +0 -0
- data/src/{toxi → main/java/toxi}/image/util/TiledFrameExporter.java +0 -0
- data/src/{toxi → main/java/toxi}/math/BezierInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/CircularInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/CosineInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/DecimatedInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/ExponentialInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/InterpolateStrategy.java +0 -0
- data/src/{toxi → main/java/toxi}/math/Interpolation2D.java +0 -0
- data/src/{toxi → main/java/toxi}/math/LinearInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/MathUtils.java +0 -0
- data/src/{toxi → main/java/toxi}/math/NonLinearScaleMap.java +0 -0
- data/src/{toxi → main/java/toxi}/math/ScaleMap.java +0 -0
- data/src/{toxi → main/java/toxi}/math/SigmoidInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/SinCosLUT.java +0 -0
- data/src/{toxi → main/java/toxi}/math/ThresholdInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/ZoomLensInterpolation.java +0 -0
- data/src/{toxi → main/java/toxi}/math/conversion/UnitTranslator.java +0 -0
- data/src/{toxi → main/java/toxi}/math/noise/PerlinNoise.java +0 -0
- data/src/{toxi → main/java/toxi}/math/noise/SimplexNoise.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/AMFMSineWave.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/AbstractWave.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/ConstantWave.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/FMHarmonicSquareWave.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/FMSawtoothWave.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/FMSineWave.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/FMSquareWave.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/FMTriangleWave.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/SineWave.java +2 -2
- data/src/{toxi → main/java/toxi}/math/waves/Wave2D.java +0 -0
- data/src/{toxi → main/java/toxi}/math/waves/WaveState.java +0 -0
- data/src/{toxi → main/java/toxi}/music/scale/AbstractScale.java +0 -0
- data/src/{toxi → main/java/toxi}/music/scale/GenericScale.java +0 -0
- data/src/{toxi → main/java/toxi}/music/scale/MajorScale.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/AttributedEdge.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/AttributedFace.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/IndexedTriangleMesh.java +70 -69
- data/src/{toxi → main/java/toxi}/newmesh/MeshAttributeCompiler.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/MeshFaceNormalCompiler.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/MeshUVCompiler.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/MeshVertexColorCompiler.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/MeshVertexCompiler.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/MeshVertexNormalCompiler.java +0 -0
- data/src/{toxi → main/java/toxi}/newmesh/SpatialIndex.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/ParticlePath2D.java +4 -3
- data/src/{toxi → main/java/toxi}/physics2d/ParticleString2D.java +2 -2
- data/src/{toxi → main/java/toxi}/physics2d/PullBackSpring2D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/VerletConstrainedSpring2D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/VerletMinDistanceSpring2D.java +0 -0
- data/src/main/java/toxi/physics2d/VerletParticle2D.java +449 -0
- data/src/main/java/toxi/physics2d/VerletPhysics2D.java +440 -0
- data/src/{toxi → main/java/toxi}/physics2d/VerletSpring2D.java +0 -0
- data/src/main/java/toxi/physics2d/behaviors/AttractionBehavior2D.java +211 -0
- data/src/{toxi → main/java/toxi}/physics2d/behaviors/ConstantForceBehavior2D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/behaviors/GravityBehavior2D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/behaviors/ParticleBehavior2D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/constraints/AngularConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/constraints/AxisConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/constraints/CircularConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/constraints/MaxConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/constraints/MinConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/constraints/ParticleConstraint2D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/constraints/PolygonConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics2d/constraints/RectConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/ParticlePath3D.java +4 -3
- data/src/{toxi → main/java/toxi}/physics3d/ParticleString3D.java +2 -2
- data/src/{toxi → main/java/toxi}/physics3d/PullBackSpring3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/VerletConstrainedSpring3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/VerletMinDistanceSpring3D.java +0 -0
- data/src/main/java/toxi/physics3d/VerletParticle3D.java +377 -0
- data/src/{toxi → main/java/toxi}/physics3d/VerletPhysics3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/VerletSpring3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/behaviors/AttractionBehavior3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/behaviors/ConstantForceBehavior3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/behaviors/GravityBehavior3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/behaviors/ParticleBehavior3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/constraints/AxisConstraint.java +1 -0
- data/src/{toxi → main/java/toxi}/physics3d/constraints/BoxConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/constraints/CylinderConstraint.java +1 -0
- data/src/{toxi → main/java/toxi}/physics3d/constraints/MaxConstraint.java +1 -0
- data/src/{toxi → main/java/toxi}/physics3d/constraints/MinConstraint.java +1 -0
- data/src/{toxi → main/java/toxi}/physics3d/constraints/ParticleConstraint3D.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/constraints/PlaneConstraint.java +0 -0
- data/src/{toxi → main/java/toxi}/physics3d/constraints/SoftBoxConstraint.java +38 -38
- data/src/{toxi → main/java/toxi}/physics3d/constraints/SphereConstraint.java +1 -0
- data/src/{toxi → main/java/toxi}/processing/ArrowModifier.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/DashedLineModifier.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/DeltaOrientationMapper.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/Line2DRenderModifier.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/MeshToVBO.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/NormalMapper.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/POVInterface.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/POVMesh.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/POVWriter.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/RCOpaque.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/RCTransp.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/TextureBuilder.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/Textures.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/ToxiclibsSupport.java +3 -3
- data/src/{toxi → main/java/toxi}/processing/Tracing.java +0 -0
- data/src/{toxi → main/java/toxi}/processing/XYZNormalMapper.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/automata/CAMatrix.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/automata/CARule.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/automata/CARule2D.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/automata/CAWolfram1D.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/automata/EvolvableMatrix.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/automata/MatrixEvolver.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/BottomUpOrder.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/DLA.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/DLAConfiguration.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/DLAEventAdapter.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/DLAEventListener.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/DLAGuideLines.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/DLAParticle.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/DLASegment.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/PipelineOrder.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/dla/RadialDistanceOrder.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/erosion/ErosionFunction.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/erosion/TalusAngleErosion.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/erosion/ThermalErosion.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/fluids/FluidSolver2D.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/fluids/FluidSolver3D.java +0 -0
- data/src/{toxi → main/java/toxi}/sim/grayscott/GrayScott.java +0 -0
- data/src/{toxi → main/java/toxi}/util/DateUtils.java +0 -0
- data/src/{toxi → main/java/toxi}/util/FileSequenceDescriptor.java +0 -0
- data/src/main/java/toxi/util/FileUtils.java +443 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/ArraySet.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/ArrayUtil.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/BiasedDoubleRange.java +3 -3
- data/src/{toxi → main/java/toxi}/util/datatypes/BiasedFloatRange.java +2 -3
- data/src/{toxi → main/java/toxi}/util/datatypes/BiasedIntegerRange.java +3 -3
- data/src/{toxi → main/java/toxi}/util/datatypes/DoubleRange.java +3 -3
- data/src/{toxi → main/java/toxi}/util/datatypes/FloatRange.java +3 -3
- data/src/{toxi → main/java/toxi}/util/datatypes/GenericSet.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/IntegerRange.java +3 -3
- data/src/{toxi → main/java/toxi}/util/datatypes/IntegerSet.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/ItemIndex.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/SingletonRegistry.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/TypedProperties.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/UndirectedGraph.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/UniqueItemIndex.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/WeightedRandomEntry.java +0 -0
- data/src/{toxi → main/java/toxi}/util/datatypes/WeightedRandomSet.java +0 -0
- data/src/{toxi → main/java/toxi}/util/events/EventDispatcher.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/AdditiveBrush.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/ArrayIsoSurface.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/BoxBrush.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/BrushMode.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/HashIsoSurface.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/IsoSurface.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/MarchingCubesIndex.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/MeshLatticeBuilder.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/MeshVoxelizer.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/MultiplyBrush.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/PeakBrush.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/ReplaceBrush.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/RoundBrush.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/VolumetricBrush.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/VolumetricHashMap.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/VolumetricSpace.java +0 -0
- data/src/{toxi → main/java/toxi}/volume/VolumetricSpaceArray.java +0 -0
- data/src/test/java/module-info.java +10 -0
- data/src/{BooleanShapes.java → test/java/toxi/BooleanShapes.java} +2 -2
- data/toxiclibs.gemspec +7 -8
- metadata +357 -368
- data/.mvn/wrapper/maven-wrapper.properties +0 -1
- data/lib/args4j-2.0.31.jar +0 -0
- data/src/com/toxi/net/ClientListener.java +0 -41
- data/src/com/toxi/net/ServerListener.java +0 -70
- data/src/com/toxi/net/ServerListenerAdapter.java +0 -47
- data/src/com/toxi/net/ServerState.java +0 -18
- data/src/com/toxi/net/UDPConnection.java +0 -66
- data/src/com/toxi/net/UDPSyncClient.java +0 -81
- data/src/com/toxi/net/UDPSyncServer.java +0 -450
- data/src/com/toxi/nio/UDPClient.java +0 -121
- data/src/com/toxi/nio/UDPClientState.java +0 -32
- data/src/com/toxi/nio/UDPServer.java +0 -129
- data/src/toxi/data/feeds/AtomFeed.java +0 -129
- data/src/toxi/data/feeds/RSSFeed.java +0 -99
- data/src/toxi/physics2d/VerletParticle2D.java +0 -457
- data/src/toxi/physics2d/VerletPhysics2D.java +0 -448
- data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +0 -212
- data/src/toxi/physics3d/VerletParticle3D.java +0 -385
- data/src/toxi/util/FileUtils.java +0 -467
@@ -1,448 +0,0 @@
|
|
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.physics2d;
|
29
|
-
|
30
|
-
import java.util.ArrayList;
|
31
|
-
import java.util.Iterator;
|
32
|
-
import java.util.List;
|
33
|
-
|
34
|
-
import toxi.geom.Rect;
|
35
|
-
import toxi.geom.SpatialIndex;
|
36
|
-
import toxi.geom.Vec2D;
|
37
|
-
import toxi.physics2d.behaviors.GravityBehavior2D;
|
38
|
-
import toxi.physics2d.behaviors.ParticleBehavior2D;
|
39
|
-
import toxi.physics2d.constraints.ParticleConstraint2D;
|
40
|
-
|
41
|
-
/**
|
42
|
-
* 3D particle physics engine using Verlet integration based on:
|
43
|
-
* http://en.wikipedia.org/wiki/Verlet_integration
|
44
|
-
* http://www.teknikus.dk/tj/gdc2001.htm
|
45
|
-
*
|
46
|
-
*/
|
47
|
-
public class VerletPhysics2D {
|
48
|
-
|
49
|
-
/**
|
50
|
-
*
|
51
|
-
* @param c
|
52
|
-
* @param list
|
53
|
-
*/
|
54
|
-
public static void addConstraintToAll(ParticleConstraint2D c,
|
55
|
-
List<VerletParticle2D> list) {
|
56
|
-
for (VerletParticle2D p : list) {
|
57
|
-
p.addConstraint(c);
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
/**
|
62
|
-
*
|
63
|
-
* @param c
|
64
|
-
* @param list
|
65
|
-
*/
|
66
|
-
public static void removeConstraintFromAll(ParticleConstraint2D c,
|
67
|
-
List<VerletParticle2D> list) {
|
68
|
-
for (VerletParticle2D p : list) {
|
69
|
-
p.removeConstraint(c);
|
70
|
-
}
|
71
|
-
}
|
72
|
-
|
73
|
-
/**
|
74
|
-
* List of particles
|
75
|
-
*/
|
76
|
-
public ArrayList<VerletParticle2D> particles;
|
77
|
-
|
78
|
-
/**
|
79
|
-
* List of spring/stick connectors
|
80
|
-
*/
|
81
|
-
public ArrayList<VerletSpring2D> springs;
|
82
|
-
|
83
|
-
/**
|
84
|
-
* Default time step = 1.0
|
85
|
-
*/
|
86
|
-
protected float timeStep;
|
87
|
-
|
88
|
-
/**
|
89
|
-
* Default iterations for verlet solver = 50
|
90
|
-
*/
|
91
|
-
protected int numIterations;
|
92
|
-
|
93
|
-
/**
|
94
|
-
* Optional bounding rect to constrain particles too
|
95
|
-
*/
|
96
|
-
protected Rect worldBounds;
|
97
|
-
|
98
|
-
/**
|
99
|
-
*
|
100
|
-
*/
|
101
|
-
public final List<ParticleBehavior2D> behaviors = new ArrayList<>(
|
102
|
-
1);
|
103
|
-
|
104
|
-
/**
|
105
|
-
*
|
106
|
-
*/
|
107
|
-
public final List<ParticleConstraint2D> constraints = new ArrayList<>(
|
108
|
-
1);
|
109
|
-
|
110
|
-
/**
|
111
|
-
*
|
112
|
-
*/
|
113
|
-
protected float drag;
|
114
|
-
|
115
|
-
/**
|
116
|
-
*
|
117
|
-
*/
|
118
|
-
protected SpatialIndex<Vec2D> index;
|
119
|
-
|
120
|
-
/**
|
121
|
-
* Initializes a Verlet engine instance using the default values.
|
122
|
-
*/
|
123
|
-
public VerletPhysics2D() {
|
124
|
-
this(null, 50, 0, 1);
|
125
|
-
}
|
126
|
-
|
127
|
-
/**
|
128
|
-
* Initializes an Verlet engine instance with the passed in configuration.
|
129
|
-
*
|
130
|
-
* @param gravity
|
131
|
-
* 3D gravity vector
|
132
|
-
* @param numIterations
|
133
|
-
* iterations per time step for verlet solver
|
134
|
-
* @param drag
|
135
|
-
* drag value 0...1
|
136
|
-
* @param timeStep
|
137
|
-
* time step for calculating forces
|
138
|
-
*/
|
139
|
-
public VerletPhysics2D(Vec2D gravity, int numIterations, float drag,
|
140
|
-
float timeStep) {
|
141
|
-
particles = new ArrayList<>();
|
142
|
-
springs = new ArrayList<>();
|
143
|
-
this.numIterations = numIterations;
|
144
|
-
this.timeStep = timeStep;
|
145
|
-
setDrag(drag);
|
146
|
-
if (gravity != null) {
|
147
|
-
addBehavior(new GravityBehavior2D(gravity));
|
148
|
-
}
|
149
|
-
}
|
150
|
-
|
151
|
-
/**
|
152
|
-
*
|
153
|
-
* @param behavior
|
154
|
-
*/
|
155
|
-
public final void addBehavior(ParticleBehavior2D behavior) {
|
156
|
-
behavior.configure(timeStep);
|
157
|
-
behaviors.add(behavior);
|
158
|
-
}
|
159
|
-
|
160
|
-
/**
|
161
|
-
*
|
162
|
-
* @param constraint
|
163
|
-
*/
|
164
|
-
public void addConstraint(ParticleConstraint2D constraint) {
|
165
|
-
constraints.add(constraint);
|
166
|
-
}
|
167
|
-
|
168
|
-
/**
|
169
|
-
* Adds a particle to the list
|
170
|
-
*
|
171
|
-
* @param p
|
172
|
-
* @return itself
|
173
|
-
*/
|
174
|
-
public VerletPhysics2D addParticle(VerletParticle2D p) {
|
175
|
-
particles.add(p);
|
176
|
-
return this;
|
177
|
-
}
|
178
|
-
|
179
|
-
/**
|
180
|
-
* Adds a spring connector
|
181
|
-
*
|
182
|
-
* @param s
|
183
|
-
* @return itself
|
184
|
-
*/
|
185
|
-
public VerletPhysics2D addSpring(VerletSpring2D s) {
|
186
|
-
if (getSpring(s.a, s.b) == null) {
|
187
|
-
springs.add(s);
|
188
|
-
}
|
189
|
-
return this;
|
190
|
-
}
|
191
|
-
|
192
|
-
/**
|
193
|
-
* Applies all global constraints and constrains all particle positions to
|
194
|
-
* the world bounding rect set.
|
195
|
-
*/
|
196
|
-
protected void applyConstaints() {
|
197
|
-
boolean hasGlobalConstraints = constraints.size() > 0;
|
198
|
-
for (VerletParticle2D p : particles) {
|
199
|
-
if (hasGlobalConstraints) {
|
200
|
-
for (ParticleConstraint2D c : constraints) {
|
201
|
-
c.apply(p);
|
202
|
-
}
|
203
|
-
}
|
204
|
-
if (p.bounds != null) {
|
205
|
-
p.constrain(p.bounds);
|
206
|
-
}
|
207
|
-
if (worldBounds != null) {
|
208
|
-
p.constrain(worldBounds);
|
209
|
-
}
|
210
|
-
}
|
211
|
-
}
|
212
|
-
|
213
|
-
/**
|
214
|
-
*
|
215
|
-
* @return
|
216
|
-
*/
|
217
|
-
public VerletPhysics2D clear() {
|
218
|
-
behaviors.clear();
|
219
|
-
constraints.clear();
|
220
|
-
particles.clear();
|
221
|
-
springs.clear();
|
222
|
-
return this;
|
223
|
-
}
|
224
|
-
|
225
|
-
/**
|
226
|
-
*
|
227
|
-
* @return
|
228
|
-
*/
|
229
|
-
public Rect getCurrentBounds() {
|
230
|
-
Vec2D min = new Vec2D(Float.MAX_VALUE, Float.MAX_VALUE);
|
231
|
-
Vec2D max = new Vec2D(Float.MIN_VALUE, Float.MIN_VALUE);
|
232
|
-
for (VerletParticle2D p : particles) {
|
233
|
-
min.minSelf(p);
|
234
|
-
max.maxSelf(p);
|
235
|
-
}
|
236
|
-
return new Rect(min, max);
|
237
|
-
}
|
238
|
-
|
239
|
-
/**
|
240
|
-
*
|
241
|
-
* @return
|
242
|
-
*/
|
243
|
-
public float getDrag() {
|
244
|
-
return 1f - drag;
|
245
|
-
}
|
246
|
-
|
247
|
-
/**
|
248
|
-
* @return the index
|
249
|
-
*/
|
250
|
-
public SpatialIndex<Vec2D> getIndex() {
|
251
|
-
return index;
|
252
|
-
}
|
253
|
-
|
254
|
-
/**
|
255
|
-
* @return the numIterations
|
256
|
-
*/
|
257
|
-
public int getNumIterations() {
|
258
|
-
return numIterations;
|
259
|
-
}
|
260
|
-
|
261
|
-
/**
|
262
|
-
* Attempts to find the spring element between the 2 particles supplied
|
263
|
-
*
|
264
|
-
* @param a
|
265
|
-
* particle 1
|
266
|
-
* @param b
|
267
|
-
* particle 2
|
268
|
-
* @return spring instance, or null if not found
|
269
|
-
*/
|
270
|
-
public VerletSpring2D getSpring(Vec2D a, Vec2D b) {
|
271
|
-
for (VerletSpring2D s : springs) {
|
272
|
-
if ((s.a == a && s.b == b) || (s.a == b && s.b == a)) {
|
273
|
-
return s;
|
274
|
-
}
|
275
|
-
}
|
276
|
-
return null;
|
277
|
-
}
|
278
|
-
|
279
|
-
/**
|
280
|
-
* @return the timeStep
|
281
|
-
*/
|
282
|
-
public float getTimeStep() {
|
283
|
-
return timeStep;
|
284
|
-
}
|
285
|
-
|
286
|
-
/**
|
287
|
-
* @return the worldBounds
|
288
|
-
*/
|
289
|
-
public Rect getWorldBounds() {
|
290
|
-
return worldBounds;
|
291
|
-
}
|
292
|
-
|
293
|
-
/**
|
294
|
-
*
|
295
|
-
* @param c
|
296
|
-
* @return
|
297
|
-
*/
|
298
|
-
public boolean removeBehavior(ParticleBehavior2D c) {
|
299
|
-
return behaviors.remove(c);
|
300
|
-
}
|
301
|
-
|
302
|
-
/**
|
303
|
-
*
|
304
|
-
* @param c
|
305
|
-
* @return
|
306
|
-
*/
|
307
|
-
public boolean removeConstraint(ParticleConstraint2D c) {
|
308
|
-
return constraints.remove(c);
|
309
|
-
}
|
310
|
-
|
311
|
-
/**
|
312
|
-
* Removes a particle from the simulation.
|
313
|
-
*
|
314
|
-
* @param p
|
315
|
-
* particle to remove
|
316
|
-
* @return true, if removed successfully
|
317
|
-
*/
|
318
|
-
public boolean removeParticle(VerletParticle2D p) {
|
319
|
-
return particles.remove(p);
|
320
|
-
}
|
321
|
-
|
322
|
-
/**
|
323
|
-
* Removes a spring connector from the simulation instance.
|
324
|
-
*
|
325
|
-
* @param s
|
326
|
-
* spring to remove
|
327
|
-
* @return true, if the spring has been removed
|
328
|
-
*/
|
329
|
-
public boolean removeSpring(VerletSpring2D s) {
|
330
|
-
return springs.remove(s);
|
331
|
-
}
|
332
|
-
|
333
|
-
/**
|
334
|
-
* Removes a spring connector and its both end point particles from the
|
335
|
-
* simulation
|
336
|
-
*
|
337
|
-
* @param s
|
338
|
-
* spring to remove
|
339
|
-
* @return true, only if spring AND particles have been removed successfully
|
340
|
-
*/
|
341
|
-
public boolean removeSpringElements(VerletSpring2D s) {
|
342
|
-
if (removeSpring(s)) {
|
343
|
-
return (removeParticle(s.a) && removeParticle(s.b));
|
344
|
-
}
|
345
|
-
return false;
|
346
|
-
}
|
347
|
-
|
348
|
-
/**
|
349
|
-
*
|
350
|
-
* @param drag
|
351
|
-
*/
|
352
|
-
public final void setDrag(float drag) {
|
353
|
-
this.drag = 1f - drag;
|
354
|
-
}
|
355
|
-
|
356
|
-
/**
|
357
|
-
* @param index
|
358
|
-
* the index to set
|
359
|
-
*/
|
360
|
-
public void setIndex(SpatialIndex<Vec2D> index) {
|
361
|
-
this.index = index;
|
362
|
-
}
|
363
|
-
|
364
|
-
/**
|
365
|
-
* @param numIterations
|
366
|
-
* the numIterations to set
|
367
|
-
*/
|
368
|
-
public void setNumIterations(int numIterations) {
|
369
|
-
this.numIterations = numIterations;
|
370
|
-
}
|
371
|
-
|
372
|
-
/**
|
373
|
-
* @param timeStep
|
374
|
-
* the timeStep to set
|
375
|
-
*/
|
376
|
-
public void setTimeStep(float timeStep) {
|
377
|
-
this.timeStep = timeStep;
|
378
|
-
for (ParticleBehavior2D b : behaviors) {
|
379
|
-
b.configure(timeStep);
|
380
|
-
}
|
381
|
-
}
|
382
|
-
|
383
|
-
/**
|
384
|
-
* Sets bounding box
|
385
|
-
*
|
386
|
-
* @param world
|
387
|
-
* @return itself
|
388
|
-
*/
|
389
|
-
public VerletPhysics2D setWorldBounds(Rect world) {
|
390
|
-
worldBounds = world;
|
391
|
-
return this;
|
392
|
-
}
|
393
|
-
|
394
|
-
/**
|
395
|
-
* Progresses the physics simulation by 1 time step and updates all forces
|
396
|
-
* and particle positions accordingly
|
397
|
-
*
|
398
|
-
* @return itself
|
399
|
-
*/
|
400
|
-
public VerletPhysics2D update() {
|
401
|
-
updateParticles();
|
402
|
-
updateSprings();
|
403
|
-
applyConstaints();
|
404
|
-
updateIndex();
|
405
|
-
return this;
|
406
|
-
}
|
407
|
-
|
408
|
-
private void updateIndex() {
|
409
|
-
if (index != null) {
|
410
|
-
index.clear();
|
411
|
-
for (VerletParticle2D p : particles) {
|
412
|
-
index.index(p);
|
413
|
-
}
|
414
|
-
}
|
415
|
-
}
|
416
|
-
|
417
|
-
/**
|
418
|
-
* Updates all particle positions
|
419
|
-
*/
|
420
|
-
protected void updateParticles() {
|
421
|
-
for (ParticleBehavior2D b : behaviors) {
|
422
|
-
if (index != null && b.supportsSpatialIndex()) {
|
423
|
-
b.applyWithIndex(index);
|
424
|
-
} else {
|
425
|
-
for (VerletParticle2D p : particles) {
|
426
|
-
b.apply(p);
|
427
|
-
}
|
428
|
-
}
|
429
|
-
}
|
430
|
-
for (VerletParticle2D p : particles) {
|
431
|
-
p.scaleVelocity(drag);
|
432
|
-
p.update();
|
433
|
-
}
|
434
|
-
}
|
435
|
-
|
436
|
-
/**
|
437
|
-
* Updates all spring connections based on new particle positions
|
438
|
-
*/
|
439
|
-
protected void updateSprings() {
|
440
|
-
if (springs.size() > 0) {
|
441
|
-
for (int i = numIterations; i > 0; i--) {
|
442
|
-
for (VerletSpring2D s : springs) {
|
443
|
-
s.update(i == 1);
|
444
|
-
}
|
445
|
-
}
|
446
|
-
}
|
447
|
-
}
|
448
|
-
}
|
@@ -1,212 +0,0 @@
|
|
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.physics2d.behaviors;
|
29
|
-
|
30
|
-
import java.util.List;
|
31
|
-
|
32
|
-
import toxi.geom.SpatialIndex;
|
33
|
-
import toxi.geom.Vec2D;
|
34
|
-
import toxi.physics2d.VerletParticle2D;
|
35
|
-
|
36
|
-
/**
|
37
|
-
*
|
38
|
-
* @author tux
|
39
|
-
*/
|
40
|
-
public class AttractionBehavior2D implements ParticleBehavior2D {
|
41
|
-
|
42
|
-
/**
|
43
|
-
*
|
44
|
-
*/
|
45
|
-
protected Vec2D attractor;
|
46
|
-
|
47
|
-
/**
|
48
|
-
*
|
49
|
-
*/
|
50
|
-
protected float attrStrength;
|
51
|
-
|
52
|
-
protected float radius,
|
53
|
-
|
54
|
-
/**
|
55
|
-
*
|
56
|
-
*/
|
57
|
-
|
58
|
-
/**
|
59
|
-
*
|
60
|
-
*/
|
61
|
-
radiusSquared;
|
62
|
-
|
63
|
-
/**
|
64
|
-
*
|
65
|
-
*/
|
66
|
-
protected float strength;
|
67
|
-
|
68
|
-
/**
|
69
|
-
*
|
70
|
-
*/
|
71
|
-
protected float jitter;
|
72
|
-
|
73
|
-
/**
|
74
|
-
*
|
75
|
-
*/
|
76
|
-
protected float timeStep;
|
77
|
-
|
78
|
-
/**
|
79
|
-
*
|
80
|
-
* @param attractor
|
81
|
-
* @param radius
|
82
|
-
* @param strength
|
83
|
-
*/
|
84
|
-
public AttractionBehavior2D(Vec2D attractor, float radius, float strength) {
|
85
|
-
this(attractor, radius, strength, 0);
|
86
|
-
}
|
87
|
-
|
88
|
-
/**
|
89
|
-
*
|
90
|
-
* @param attractor
|
91
|
-
* @param radius
|
92
|
-
* @param strength
|
93
|
-
* @param jitter
|
94
|
-
*/
|
95
|
-
public AttractionBehavior2D(Vec2D attractor, float radius, float strength,
|
96
|
-
float jitter) {
|
97
|
-
this.attractor = attractor;
|
98
|
-
this.strength = strength;
|
99
|
-
this.jitter = jitter;
|
100
|
-
setRadius(radius);
|
101
|
-
}
|
102
|
-
|
103
|
-
@Override
|
104
|
-
public void apply(VerletParticle2D p) {
|
105
|
-
Vec2D delta = attractor.sub(p);
|
106
|
-
float dist = delta.magSquared();
|
107
|
-
if (dist < radiusSquared) {
|
108
|
-
Vec2D f = delta.normalizeTo((1.0f - dist / radiusSquared))
|
109
|
-
.jitter(jitter).scaleSelf(attrStrength);
|
110
|
-
p.addForce(f);
|
111
|
-
}
|
112
|
-
}
|
113
|
-
|
114
|
-
/**
|
115
|
-
*
|
116
|
-
* @param spaceHash
|
117
|
-
*/
|
118
|
-
@Override
|
119
|
-
public void applyWithIndex(SpatialIndex<Vec2D> spaceHash) {
|
120
|
-
List<Vec2D> selection = spaceHash.itemsWithinRadius(attractor, radius,
|
121
|
-
null);
|
122
|
-
final Vec2D temp = new Vec2D();
|
123
|
-
if (selection != null) {
|
124
|
-
for (Vec2D p : selection) {
|
125
|
-
temp.set(p);
|
126
|
-
apply((VerletParticle2D) p);
|
127
|
-
spaceHash.reindex(temp, p);
|
128
|
-
}
|
129
|
-
}
|
130
|
-
}
|
131
|
-
|
132
|
-
/**
|
133
|
-
*
|
134
|
-
* @param timeStep
|
135
|
-
*/
|
136
|
-
public void configure(float timeStep) {
|
137
|
-
this.timeStep = timeStep;
|
138
|
-
setStrength(strength);
|
139
|
-
}
|
140
|
-
|
141
|
-
/**
|
142
|
-
* @return the attractor
|
143
|
-
*/
|
144
|
-
public Vec2D getAttractor() {
|
145
|
-
return attractor;
|
146
|
-
}
|
147
|
-
|
148
|
-
/**
|
149
|
-
* @return the jitter
|
150
|
-
*/
|
151
|
-
public float getJitter() {
|
152
|
-
return jitter;
|
153
|
-
}
|
154
|
-
|
155
|
-
/**
|
156
|
-
* @return the radius
|
157
|
-
*/
|
158
|
-
public float getRadius() {
|
159
|
-
return radius;
|
160
|
-
}
|
161
|
-
|
162
|
-
/**
|
163
|
-
* @return the strength
|
164
|
-
*/
|
165
|
-
public float getStrength() {
|
166
|
-
return strength;
|
167
|
-
}
|
168
|
-
|
169
|
-
/**
|
170
|
-
* @param attractor
|
171
|
-
* the attractor to set
|
172
|
-
*/
|
173
|
-
public void setAttractor(Vec2D attractor) {
|
174
|
-
this.attractor = attractor;
|
175
|
-
}
|
176
|
-
|
177
|
-
/**
|
178
|
-
* @param jitter
|
179
|
-
* the jitter to set
|
180
|
-
*/
|
181
|
-
public void setJitter(float jitter) {
|
182
|
-
this.jitter = jitter;
|
183
|
-
}
|
184
|
-
|
185
|
-
/**
|
186
|
-
*
|
187
|
-
* @param r
|
188
|
-
*/
|
189
|
-
public final void setRadius(float r) {
|
190
|
-
this.radius = r;
|
191
|
-
this.radiusSquared = r * r;
|
192
|
-
}
|
193
|
-
|
194
|
-
/**
|
195
|
-
* @param strength
|
196
|
-
* the strength to set
|
197
|
-
*/
|
198
|
-
public void setStrength(float strength) {
|
199
|
-
this.strength = strength;
|
200
|
-
this.attrStrength = strength * timeStep;
|
201
|
-
}
|
202
|
-
|
203
|
-
/**
|
204
|
-
*
|
205
|
-
* @return
|
206
|
-
*/
|
207
|
-
@Override
|
208
|
-
public boolean supportsSpatialIndex() {
|
209
|
-
return true;
|
210
|
-
}
|
211
|
-
|
212
|
-
}
|