toxiclibs 0.4.0 → 0.8.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 +4 -4
- data/.gitignore +16 -0
- data/.mvn/extensions.xml +8 -0
- data/.mvn/wrapper/maven-wrapper.properties +1 -0
- data/.travis.yml +23 -0
- data/CHANGELOG.md +7 -0
- data/COPYING.md +14 -0
- data/Gemfile +10 -0
- data/LICENSE +675 -0
- data/README.md +9 -7
- data/Rakefile +25 -81
- data/examples/README.md +5 -0
- 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/ReplicaBold.ttf +0 -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 +74 -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 +43 -0
- data/examples/physics_type.rb +77 -0
- data/examples/povmesh/data/mask.jpg +0 -0
- data/examples/povmesh/ftest.rb +59 -0
- data/examples/povmesh/mesh_align.rb +47 -0
- data/examples/povmesh/tentacle.rb +71 -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/examples/spherical_harmonics_mesh.rb +50 -0
- data/examples/test_rect.rb +32 -0
- data/lib/toxiclibs.jar +0 -0
- data/lib/toxiclibs.rb +72 -22
- data/lib/toxiclibs/version.rb +1 -1
- data/pom.rb +63 -0
- data/pom.xml +124 -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/audio/AudioBuffer.java +229 -0
- data/src/toxi/audio/AudioSource.java +288 -0
- data/src/toxi/audio/DecompressInputStream.java +159 -0
- data/src/toxi/audio/IIRFilter.java +197 -0
- data/src/toxi/audio/JOALUtil.java +388 -0
- data/src/toxi/audio/MultiTimbralManager.java +162 -0
- data/src/toxi/audio/SoundListener.java +154 -0
- data/src/toxi/audio/SynthUtil.java +109 -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 +127 -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 +28 -0
- metadata +442 -31
@@ -0,0 +1,116 @@
|
|
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.geom;
|
29
|
+
|
30
|
+
/**
|
31
|
+
* An immutable origin + axis in 3D-Space.
|
32
|
+
*/
|
33
|
+
public class Axis3D {
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Creates a new x-Axis3D object from the world origin.
|
37
|
+
* @return
|
38
|
+
*/
|
39
|
+
public static final Axis3D xAxis() {
|
40
|
+
return new Axis3D(Vec3D.X_AXIS);
|
41
|
+
}
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Creates a new y-Axis3D object from the world origin.
|
45
|
+
* @return
|
46
|
+
*/
|
47
|
+
public static final Axis3D yAxis() {
|
48
|
+
return new Axis3D(Vec3D.Y_AXIS);
|
49
|
+
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* Creates a new z-Axis3D object from the world origin.
|
53
|
+
* @return
|
54
|
+
*/
|
55
|
+
public static final Axis3D zAxis() {
|
56
|
+
return new Axis3D(Vec3D.Z_AXIS);
|
57
|
+
}
|
58
|
+
|
59
|
+
/**
|
60
|
+
*
|
61
|
+
*/
|
62
|
+
public final ReadonlyVec3D origin;
|
63
|
+
|
64
|
+
/**
|
65
|
+
*
|
66
|
+
*/
|
67
|
+
public final ReadonlyVec3D dir;
|
68
|
+
|
69
|
+
/**
|
70
|
+
* Creates a new z-Axis3D object from the world origin.
|
71
|
+
*/
|
72
|
+
public Axis3D() {
|
73
|
+
this(Vec3D.Z_AXIS);
|
74
|
+
}
|
75
|
+
|
76
|
+
/**
|
77
|
+
*
|
78
|
+
* @param x
|
79
|
+
* @param y
|
80
|
+
* @param z
|
81
|
+
*/
|
82
|
+
public Axis3D(float x, float y, float z) {
|
83
|
+
this(new Vec3D(x, y, z));
|
84
|
+
}
|
85
|
+
|
86
|
+
/**
|
87
|
+
*
|
88
|
+
* @param ray
|
89
|
+
*/
|
90
|
+
public Axis3D(Ray3D ray) {
|
91
|
+
this(ray, ray.getDirection());
|
92
|
+
}
|
93
|
+
|
94
|
+
/**
|
95
|
+
* Creates a new Axis3D from the world origin in the given direction.
|
96
|
+
*
|
97
|
+
* @param dir
|
98
|
+
* direction vector
|
99
|
+
*/
|
100
|
+
public Axis3D(ReadonlyVec3D dir) {
|
101
|
+
this(new Vec3D(), dir);
|
102
|
+
}
|
103
|
+
|
104
|
+
/**
|
105
|
+
* Creates a new Axis3D from the given origin and direction.
|
106
|
+
*
|
107
|
+
* @param o
|
108
|
+
* origin
|
109
|
+
* @param dir
|
110
|
+
* direction
|
111
|
+
*/
|
112
|
+
public Axis3D(ReadonlyVec3D o, ReadonlyVec3D dir) {
|
113
|
+
this.origin = o;
|
114
|
+
this.dir = dir.getNormalized();
|
115
|
+
}
|
116
|
+
}
|
@@ -0,0 +1,163 @@
|
|
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.geom;
|
29
|
+
|
30
|
+
import toxi.geom.mesh.Mesh3D;
|
31
|
+
|
32
|
+
/**
|
33
|
+
*
|
34
|
+
* @author tux
|
35
|
+
*/
|
36
|
+
public abstract class AxisAlignedCylinder implements Shape3D {
|
37
|
+
|
38
|
+
/**
|
39
|
+
*
|
40
|
+
*/
|
41
|
+
protected Vec3D pos;
|
42
|
+
|
43
|
+
/**
|
44
|
+
*
|
45
|
+
*/
|
46
|
+
protected float radius;
|
47
|
+
|
48
|
+
/**
|
49
|
+
*
|
50
|
+
*/
|
51
|
+
protected float radiusSquared;
|
52
|
+
|
53
|
+
/**
|
54
|
+
*
|
55
|
+
*/
|
56
|
+
protected float length;
|
57
|
+
|
58
|
+
/**
|
59
|
+
*
|
60
|
+
* @param pos
|
61
|
+
* @param radius
|
62
|
+
* @param length
|
63
|
+
*/
|
64
|
+
protected AxisAlignedCylinder(ReadonlyVec3D pos, float radius, float length) {
|
65
|
+
this.pos = pos.copy();
|
66
|
+
setRadius(radius);
|
67
|
+
setLength(length);
|
68
|
+
}
|
69
|
+
|
70
|
+
/**
|
71
|
+
* Checks if the given point is inside the cylinder.
|
72
|
+
*
|
73
|
+
* @param p
|
74
|
+
* @return true, if inside
|
75
|
+
*/
|
76
|
+
public abstract boolean containsPoint(ReadonlyVec3D p);
|
77
|
+
|
78
|
+
/**
|
79
|
+
* @return the length
|
80
|
+
*/
|
81
|
+
public float getLength() {
|
82
|
+
return length;
|
83
|
+
}
|
84
|
+
|
85
|
+
/**
|
86
|
+
* @return the cylinder's orientation axis
|
87
|
+
*/
|
88
|
+
public abstract Vec3D.Axis getMajorAxis();
|
89
|
+
|
90
|
+
/**
|
91
|
+
* Returns the cylinder's position (centroid).
|
92
|
+
*
|
93
|
+
* @return the pos
|
94
|
+
*/
|
95
|
+
public Vec3D getPosition() {
|
96
|
+
return pos.copy();
|
97
|
+
}
|
98
|
+
|
99
|
+
/**
|
100
|
+
* @return the cylinder radius
|
101
|
+
*/
|
102
|
+
public float getRadius() {
|
103
|
+
return radius;
|
104
|
+
}
|
105
|
+
|
106
|
+
/**
|
107
|
+
* @param length
|
108
|
+
* the length to set
|
109
|
+
*/
|
110
|
+
public final void setLength(float length) {
|
111
|
+
this.length = length;
|
112
|
+
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
* @param pos
|
116
|
+
* the pos to set
|
117
|
+
*/
|
118
|
+
public void setPosition(Vec3D pos) {
|
119
|
+
this.pos.set(pos);
|
120
|
+
}
|
121
|
+
|
122
|
+
/**
|
123
|
+
* @param radius
|
124
|
+
*/
|
125
|
+
public final void setRadius(float radius) {
|
126
|
+
this.radius = radius;
|
127
|
+
this.radiusSquared = radius * radius;
|
128
|
+
}
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Builds a TriangleMesh representation of the cylinder at a default
|
132
|
+
* resolution 30 degrees.
|
133
|
+
*
|
134
|
+
* @return mesh instance
|
135
|
+
*/
|
136
|
+
public Mesh3D toMesh() {
|
137
|
+
return toMesh(12, 0);
|
138
|
+
}
|
139
|
+
|
140
|
+
/**
|
141
|
+
* Builds a TriangleMesh representation of the cylinder using the given
|
142
|
+
* number of steps and start angle offset.
|
143
|
+
*
|
144
|
+
* @param steps
|
145
|
+
* @param thetaOffset
|
146
|
+
* @return mesh
|
147
|
+
*/
|
148
|
+
public Mesh3D toMesh(int steps, float thetaOffset) {
|
149
|
+
return toMesh(null, steps, thetaOffset);
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
*
|
154
|
+
* @param mesh
|
155
|
+
* @param steps
|
156
|
+
* @param thetaOffset
|
157
|
+
* @return
|
158
|
+
*/
|
159
|
+
public Mesh3D toMesh(Mesh3D mesh, int steps, float thetaOffset) {
|
160
|
+
return new Cone(pos, getMajorAxis().getVector(), radius, radius, length)
|
161
|
+
.toMesh(mesh, steps, thetaOffset, true, true);
|
162
|
+
}
|
163
|
+
}
|
@@ -0,0 +1,94 @@
|
|
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.geom;
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Helper class for the spline3d classes in this package. Used to compute
|
32
|
+
* subdivision points of the curve.
|
33
|
+
*/
|
34
|
+
public class BernsteinPolynomial {
|
35
|
+
|
36
|
+
public float[] b0,
|
37
|
+
|
38
|
+
/**
|
39
|
+
*
|
40
|
+
*/
|
41
|
+
|
42
|
+
/**
|
43
|
+
*
|
44
|
+
*/
|
45
|
+
b1,
|
46
|
+
|
47
|
+
/**
|
48
|
+
*
|
49
|
+
*/
|
50
|
+
|
51
|
+
/**
|
52
|
+
*
|
53
|
+
*/
|
54
|
+
b2,
|
55
|
+
|
56
|
+
/**
|
57
|
+
*
|
58
|
+
*/
|
59
|
+
|
60
|
+
/**
|
61
|
+
*
|
62
|
+
*/
|
63
|
+
b3;
|
64
|
+
|
65
|
+
/**
|
66
|
+
*
|
67
|
+
*/
|
68
|
+
public int resolution;
|
69
|
+
|
70
|
+
/**
|
71
|
+
* @param res
|
72
|
+
* number of subdivision steps between each control point of the
|
73
|
+
* spline3d
|
74
|
+
*/
|
75
|
+
public BernsteinPolynomial(int res) {
|
76
|
+
resolution = res;
|
77
|
+
b0 = new float[res];
|
78
|
+
b1 = new float[res];
|
79
|
+
b2 = new float[res];
|
80
|
+
b3 = new float[res];
|
81
|
+
float t = 0;
|
82
|
+
float dt = 1.0f / (resolution - 1);
|
83
|
+
for (int i = 0; i < resolution; i++) {
|
84
|
+
float t1 = 1 - t;
|
85
|
+
float t12 = t1 * t1;
|
86
|
+
float t2 = t * t;
|
87
|
+
b0[i] = t1 * t12;
|
88
|
+
b1[i] = 3 * t * t12;
|
89
|
+
b2[i] = 3 * t2 * t1;
|
90
|
+
b3[i] = t * t2;
|
91
|
+
t += dt;
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
@@ -0,0 +1,159 @@
|
|
1
|
+
package toxi.geom;
|
2
|
+
|
3
|
+
import java.util.ArrayList;
|
4
|
+
import java.util.List;
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Standard multi-segment bezier curve implementation with optional automatic
|
8
|
+
* handle alignment between segments. Can be used to create closed curves which
|
9
|
+
* can then be converted into {@link Polygon2D} instances. Also provides curve
|
10
|
+
* tangent calculation feature. Usage of this class is very similar to
|
11
|
+
* {@link Spline2D}.
|
12
|
+
*/
|
13
|
+
public class BezierCurve2D {
|
14
|
+
|
15
|
+
/**
|
16
|
+
*
|
17
|
+
* @param a
|
18
|
+
* @param b
|
19
|
+
* @param c
|
20
|
+
* @param d
|
21
|
+
* @param t
|
22
|
+
* @return
|
23
|
+
*/
|
24
|
+
public static Vec2D computePointInSegment(Vec2D a, Vec2D b, Vec2D c,
|
25
|
+
Vec2D d, float t) {
|
26
|
+
float it = 1.0f - t;
|
27
|
+
float it2 = it * it;
|
28
|
+
float t2 = t * t;
|
29
|
+
return a.scale(it2 * it).addSelf(b.scale(3 * t * it2))
|
30
|
+
.addSelf(c.scale(3 * t2 * it)).addSelf(d.scale(t2 * t));
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
*
|
35
|
+
* @param a
|
36
|
+
* @param b
|
37
|
+
* @param c
|
38
|
+
* @param d
|
39
|
+
* @param t
|
40
|
+
* @return
|
41
|
+
*/
|
42
|
+
public static Vec2D computeTangentInSegment(Vec2D a, Vec2D b, Vec2D c,
|
43
|
+
Vec2D d, float t) {
|
44
|
+
float t2 = t * t;
|
45
|
+
float x = (3 * t2 * (-a.x + 3 * b.x - 3 * c.x + d.x) + 6 * t
|
46
|
+
* (a.x - 2 * b.x + c.x) + 3 * (-a.x + b.x));
|
47
|
+
float y = (3 * t2 * (-a.y + 3 * b.y - 3 * c.y + d.y) + 6 * t
|
48
|
+
* (a.y - 2 * b.y + c.y) + 3 * (-a.y + b.y));
|
49
|
+
return new Vec2D(x, y).normalize();
|
50
|
+
}
|
51
|
+
|
52
|
+
private final List<Vec2D> points;
|
53
|
+
|
54
|
+
/**
|
55
|
+
*
|
56
|
+
*/
|
57
|
+
public BezierCurve2D() {
|
58
|
+
points = new ArrayList<Vec2D>();
|
59
|
+
}
|
60
|
+
|
61
|
+
/**
|
62
|
+
*
|
63
|
+
* @param points
|
64
|
+
*/
|
65
|
+
public BezierCurve2D(List<Vec2D> points) {
|
66
|
+
this.points = points;
|
67
|
+
}
|
68
|
+
|
69
|
+
/**
|
70
|
+
*
|
71
|
+
* @param p
|
72
|
+
* @return
|
73
|
+
*/
|
74
|
+
public BezierCurve2D add(Vec2D p) {
|
75
|
+
points.add(p);
|
76
|
+
return this;
|
77
|
+
}
|
78
|
+
|
79
|
+
/**
|
80
|
+
*
|
81
|
+
*/
|
82
|
+
public void alignAllHandles() {
|
83
|
+
for (int i = 0, num = points.size() - 1; i < num; i += 3) {
|
84
|
+
alignHandlesForPoint(i);
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
/**
|
89
|
+
*
|
90
|
+
* @param id
|
91
|
+
*/
|
92
|
+
public void alignHandlesForPoint(int id) {
|
93
|
+
if (id < points.size() - 1) {
|
94
|
+
Vec2D c;
|
95
|
+
if (id == 0 && isClosed()) {
|
96
|
+
c = points.get(points.size() - 2);
|
97
|
+
} else {
|
98
|
+
c = points.get(id - 1);
|
99
|
+
}
|
100
|
+
Vec2D d = points.get(id);
|
101
|
+
Vec2D e = points.get(id + 1);
|
102
|
+
Vec2D cd = d.sub(c);
|
103
|
+
Vec2D de = e.sub(d);
|
104
|
+
Vec2D cd2 = cd.interpolateTo(de, 0.5f);
|
105
|
+
c.set(d.sub(cd2));
|
106
|
+
e.set(d.add(de.interpolateToSelf(cd, 0.5f)));
|
107
|
+
} else {
|
108
|
+
throw new IllegalArgumentException("invalid point index");
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
/**
|
113
|
+
* @return true, if the curve is closed. I.e. the first and last control
|
114
|
+
* point coincide.
|
115
|
+
*/
|
116
|
+
public boolean isClosed() {
|
117
|
+
return points.get(0).equals(points.get(points.size() - 1));
|
118
|
+
}
|
119
|
+
|
120
|
+
/**
|
121
|
+
* Computes a list of intermediate curve points for all segments. For each
|
122
|
+
* curve segment the given number of points will be produced.
|
123
|
+
*
|
124
|
+
* @param res
|
125
|
+
* number of points per segment
|
126
|
+
* @return list of Vec2Ds
|
127
|
+
*/
|
128
|
+
public LineStrip2D toLineStrip2D(int res) {
|
129
|
+
LineStrip2D strip = new LineStrip2D();
|
130
|
+
int i = 0;
|
131
|
+
int maxRes = res;
|
132
|
+
for (int num = points.size(); i < num - 3; i += 3) {
|
133
|
+
Vec2D a = points.get(i);
|
134
|
+
Vec2D b = points.get(i + 1);
|
135
|
+
Vec2D c = points.get(i + 2);
|
136
|
+
Vec2D d = points.get(i + 3);
|
137
|
+
if (i + 3 > num - 3) {
|
138
|
+
maxRes++;
|
139
|
+
}
|
140
|
+
for (int t = 0; t < maxRes; t++) {
|
141
|
+
strip.add(computePointInSegment(a, b, c, d, (float) t / res));
|
142
|
+
}
|
143
|
+
}
|
144
|
+
return strip;
|
145
|
+
}
|
146
|
+
|
147
|
+
/**
|
148
|
+
*
|
149
|
+
* @param res
|
150
|
+
* @return
|
151
|
+
*/
|
152
|
+
public Polygon2D toPolygon2D(int res) {
|
153
|
+
Polygon2D poly = new Polygon2D(toLineStrip2D(res).getVertices());
|
154
|
+
if (isClosed()) {
|
155
|
+
poly.vertices.remove(poly.vertices.get(poly.vertices.size() - 1));
|
156
|
+
}
|
157
|
+
return poly;
|
158
|
+
}
|
159
|
+
}
|