toxiclibs 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -1
  3. data/.travis.yml +3 -4
  4. data/CHANGELOG.md +3 -0
  5. data/README.md +2 -2
  6. data/Rakefile +0 -1
  7. data/examples/attract_repel/attractor.rb +1 -1
  8. data/examples/attract_repel/particle.rb +1 -1
  9. data/examples/boolean_shapes.rb +9 -5
  10. data/examples/force_directed/node.rb +1 -1
  11. data/examples/inflate_mesh.rb +1 -1
  12. data/examples/model_align.rb +1 -1
  13. data/examples/physics_type.rb +1 -1
  14. data/examples/povmesh/ftest.rb +3 -3
  15. data/examples/toxiclibs_color_theme.rb +91 -0
  16. data/lib/toxiclibs.rb +52 -37
  17. data/lib/toxiclibs/version.rb +1 -1
  18. data/pom.rb +22 -26
  19. data/pom.xml +42 -64
  20. data/src/{toxi → main/java/toxi}/color/AccessCriteria.java +0 -0
  21. data/src/{toxi → main/java/toxi}/color/AlphaAccessor.java +0 -0
  22. data/src/{toxi → main/java/toxi}/color/CMYKAccessor.java +0 -0
  23. data/src/{toxi → main/java/toxi}/color/CMYKDistanceProxy.java +0 -0
  24. data/src/{toxi → main/java/toxi}/color/ColorGradient.java +0 -0
  25. data/src/{toxi → main/java/toxi}/color/ColorList.java +2 -4
  26. data/src/{toxi → main/java/toxi}/color/ColorRange.java +0 -0
  27. data/src/{toxi → main/java/toxi}/color/ColorTheme.java +0 -0
  28. data/src/{toxi → main/java/toxi}/color/DistanceProxy.java +0 -0
  29. data/src/{toxi → main/java/toxi}/color/HSVAccessor.java +0 -0
  30. data/src/{toxi → main/java/toxi}/color/HSVDistanceProxy.java +0 -0
  31. data/src/{toxi → main/java/toxi}/color/HistEntry.java +0 -0
  32. data/src/{toxi → main/java/toxi}/color/Histogram.java +0 -0
  33. data/src/{toxi → main/java/toxi}/color/Hue.java +0 -0
  34. data/src/{toxi → main/java/toxi}/color/LuminanceAccessor.java +0 -0
  35. data/src/{toxi → main/java/toxi}/color/NamedColor.java +0 -0
  36. data/src/{toxi → main/java/toxi}/color/ProximityComparator.java +0 -0
  37. data/src/{toxi → main/java/toxi}/color/RGBAccessor.java +0 -0
  38. data/src/{toxi → main/java/toxi}/color/RGBDistanceProxy.java +0 -0
  39. data/src/{toxi → main/java/toxi}/color/ReadonlyTColor.java +0 -0
  40. data/src/{toxi → main/java/toxi}/color/TColor.java +0 -0
  41. data/src/{toxi → main/java/toxi}/color/TColorAdapter.java +4 -4
  42. data/src/{toxi → main/java/toxi}/color/ToneMap.java +0 -0
  43. data/src/{toxi → main/java/toxi}/color/theory/AnalogousStrategy.java +0 -0
  44. data/src/{toxi → main/java/toxi}/color/theory/ColorTheoryRegistry.java +0 -0
  45. data/src/{toxi → main/java/toxi}/color/theory/ColorTheoryStrategy.java +0 -0
  46. data/src/{toxi → main/java/toxi}/color/theory/ComplementaryStrategy.java +0 -0
  47. data/src/{toxi → main/java/toxi}/color/theory/CompoundTheoryStrategy.java +0 -0
  48. data/src/{toxi → main/java/toxi}/color/theory/LeftSplitComplementaryStrategy.java +0 -0
  49. data/src/{toxi → main/java/toxi}/color/theory/MonochromeTheoryStrategy.java +0 -0
  50. data/src/{toxi → main/java/toxi}/color/theory/RightSplitComplementaryStrategy.java +0 -0
  51. data/src/{toxi → main/java/toxi}/color/theory/SingleComplementStrategy.java +0 -0
  52. data/src/{toxi → main/java/toxi}/color/theory/SplitComplementaryStrategy.java +0 -0
  53. data/src/{toxi → main/java/toxi}/color/theory/TetradTheoryStrategy.java +0 -0
  54. data/src/{toxi → main/java/toxi}/color/theory/TriadTheoryStrategy.java +0 -0
  55. data/src/{toxi → main/java/toxi}/data/csv/CSVAdapter.java +0 -0
  56. data/src/{toxi → main/java/toxi}/data/csv/CSVFieldMapper.java +0 -0
  57. data/src/{toxi → main/java/toxi}/data/csv/CSVListener.java +0 -0
  58. data/src/{toxi → main/java/toxi}/data/csv/CSVParser.java +0 -0
  59. data/src/{toxi → main/java/toxi}/data/feeds/AtomAuthor.java +2 -2
  60. data/src/{toxi → main/java/toxi}/data/feeds/AtomContent.java +3 -4
  61. data/src/{toxi → main/java/toxi}/data/feeds/AtomEntry.java +9 -13
  62. data/src/main/java/toxi/data/feeds/AtomFeed.java +91 -0
  63. data/src/{toxi → main/java/toxi}/data/feeds/AtomLink.java +3 -2
  64. data/src/{toxi → main/java/toxi}/data/feeds/RSSChannel.java +10 -11
  65. data/src/{toxi → main/java/toxi}/data/feeds/RSSEnclosure.java +3 -3
  66. data/src/{toxi → main/java/toxi}/data/feeds/RSSItem.java +11 -13
  67. data/src/{toxi → main/java/toxi}/data/feeds/util/EntityStripper.java +0 -0
  68. data/src/{toxi → main/java/toxi}/data/feeds/util/Iso8601DateAdapter.java +6 -7
  69. data/src/{toxi → main/java/toxi}/data/feeds/util/Rfc822DateAdapter.java +5 -6
  70. data/src/{toxi → main/java/toxi}/geom/AABB.java +8 -9
  71. data/src/{toxi → main/java/toxi}/geom/Axis3D.java +0 -0
  72. data/src/{toxi → main/java/toxi}/geom/AxisAlignedCylinder.java +0 -0
  73. data/src/{toxi → main/java/toxi}/geom/BernsteinPolynomial.java +0 -0
  74. data/src/{toxi → main/java/toxi}/geom/BezierCurve2D.java +0 -0
  75. data/src/{toxi → main/java/toxi}/geom/BezierCurve3D.java +0 -0
  76. data/src/{toxi → main/java/toxi}/geom/BooleanShapeBuilder.java +0 -0
  77. data/src/{toxi → main/java/toxi}/geom/BoxIntersector.java +0 -0
  78. data/src/{toxi → main/java/toxi}/geom/Circle.java +2 -2
  79. data/src/{toxi → main/java/toxi}/geom/CircleIntersector.java +0 -0
  80. data/src/{toxi → main/java/toxi}/geom/Cone.java +0 -0
  81. data/src/{toxi → main/java/toxi}/geom/ConvexPolygonClipper.java +0 -0
  82. data/src/{toxi → main/java/toxi}/geom/CoordinateExtractor.java +0 -0
  83. data/src/{toxi → main/java/toxi}/geom/Ellipse.java +0 -0
  84. data/src/{toxi → main/java/toxi}/geom/GMatrix.java +0 -0
  85. data/src/{toxi → main/java/toxi}/geom/GVector.java +0 -0
  86. data/src/{toxi → main/java/toxi}/geom/GlobalGridTesselator.java +0 -0
  87. data/src/{toxi → main/java/toxi}/geom/GridTesselator.java +0 -0
  88. data/src/{toxi → main/java/toxi}/geom/Intersector2D.java +0 -0
  89. data/src/{toxi → main/java/toxi}/geom/Intersector3D.java +0 -0
  90. data/src/{toxi → main/java/toxi}/geom/IsectData2D.java +0 -0
  91. data/src/{toxi → main/java/toxi}/geom/IsectData3D.java +0 -0
  92. data/src/{toxi → main/java/toxi}/geom/Line2D.java +1 -2
  93. data/src/{toxi → main/java/toxi}/geom/Line3D.java +1 -2
  94. data/src/{toxi → main/java/toxi}/geom/LineStrip2D.java +2 -2
  95. data/src/{toxi → main/java/toxi}/geom/LineStrip3D.java +2 -2
  96. data/src/{toxi → main/java/toxi}/geom/LocalGridTesselator.java +0 -0
  97. data/src/{toxi → main/java/toxi}/geom/Matrix3d.java +0 -0
  98. data/src/{toxi → main/java/toxi}/geom/Matrix4f.java +0 -0
  99. data/src/{toxi → main/java/toxi}/geom/Matrix4x4.java +0 -0
  100. data/src/{toxi → main/java/toxi}/geom/MatrixSizeException.java +0 -0
  101. data/src/{toxi → main/java/toxi}/geom/OctreeVisitor.java +0 -0
  102. data/src/{toxi → main/java/toxi}/geom/Origin3D.java +12 -6
  103. data/src/{toxi → main/java/toxi}/geom/Plane.java +3 -5
  104. data/src/{toxi → main/java/toxi}/geom/PlaneIntersector.java +0 -0
  105. data/src/{toxi → main/java/toxi}/geom/PointCloud3D.java +15 -12
  106. data/src/{toxi → main/java/toxi}/geom/PointOctree.java +0 -0
  107. data/src/{toxi → main/java/toxi}/geom/PointQuadtree.java +0 -0
  108. data/src/{toxi → main/java/toxi}/geom/Polygon2D.java +34 -45
  109. data/src/{toxi → main/java/toxi}/geom/PolygonClipper2D.java +0 -0
  110. data/src/{toxi → main/java/toxi}/geom/PolygonTesselator.java +0 -0
  111. data/src/{toxi → main/java/toxi}/geom/QuadtreeVisitor.java +0 -0
  112. data/src/{toxi → main/java/toxi}/geom/Quaternion.java +3 -5
  113. data/src/{toxi → main/java/toxi}/geom/Ray2D.java +4 -5
  114. data/src/{toxi → main/java/toxi}/geom/Ray3D.java +3 -5
  115. data/src/{toxi → main/java/toxi}/geom/Ray3DIntersector.java +0 -0
  116. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec2D.java +0 -0
  117. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec3D.java +0 -0
  118. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec4D.java +0 -0
  119. data/src/{toxi → main/java/toxi}/geom/Rect.java +3 -5
  120. data/src/{toxi → main/java/toxi}/geom/Reflector3D.java +0 -0
  121. data/src/{toxi → main/java/toxi}/geom/Shape2D.java +0 -0
  122. data/src/{toxi → main/java/toxi}/geom/Shape3D.java +0 -0
  123. data/src/{toxi → main/java/toxi}/geom/SingularMatrixException.java +0 -0
  124. data/src/{toxi → main/java/toxi}/geom/SpatialBins.java +0 -0
  125. data/src/{toxi → main/java/toxi}/geom/SpatialIndex.java +0 -0
  126. data/src/{toxi → main/java/toxi}/geom/Sphere.java +3 -5
  127. data/src/{toxi → main/java/toxi}/geom/SphereIntersectorReflector.java +0 -0
  128. data/src/{toxi → main/java/toxi}/geom/Spline2D.java +12 -16
  129. data/src/{toxi → main/java/toxi}/geom/Spline3D.java +12 -16
  130. data/src/{toxi → main/java/toxi}/geom/SutherlandHodgemanClipper.java +0 -0
  131. data/src/{toxi → main/java/toxi}/geom/Triangle2D.java +4 -7
  132. data/src/{toxi → main/java/toxi}/geom/Triangle3D.java +5 -8
  133. data/src/{toxi → main/java/toxi}/geom/TriangleIntersector.java +0 -0
  134. data/src/{toxi → main/java/toxi}/geom/Vec2D.java +3 -3
  135. data/src/{toxi → main/java/toxi}/geom/Vec3D.java +4 -4
  136. data/src/{toxi → main/java/toxi}/geom/Vec4D.java +5 -5
  137. data/src/{toxi → main/java/toxi}/geom/VecMathUtil.java +0 -0
  138. data/src/{toxi → main/java/toxi}/geom/XAxisCylinder.java +0 -0
  139. data/src/{toxi → main/java/toxi}/geom/YAxisCylinder.java +0 -0
  140. data/src/{toxi → main/java/toxi}/geom/ZAxisCylinder.java +0 -0
  141. data/src/{toxi → main/java/toxi}/geom/mesh/BezierPatch.java +0 -0
  142. data/src/{toxi → main/java/toxi}/geom/mesh/BoxSelector.java +0 -0
  143. data/src/{toxi → main/java/toxi}/geom/mesh/DefaultSTLColorModel.java +0 -0
  144. data/src/{toxi → main/java/toxi}/geom/mesh/DefaultSelector.java +0 -0
  145. data/src/{toxi → main/java/toxi}/geom/mesh/Face.java +0 -0
  146. data/src/{toxi → main/java/toxi}/geom/mesh/LaplacianSmooth.java +0 -0
  147. data/src/{toxi → main/java/toxi}/geom/mesh/MaterialiseSTLColorModel.java +0 -0
  148. data/src/{toxi → main/java/toxi}/geom/mesh/Mesh3D.java +0 -0
  149. data/src/{toxi → main/java/toxi}/geom/mesh/MeshIntersector.java +0 -0
  150. data/src/{toxi → main/java/toxi}/geom/mesh/OBJWriter.java +0 -0
  151. data/src/{toxi → main/java/toxi}/geom/mesh/PLYWriter.java +0 -0
  152. data/src/{toxi → main/java/toxi}/geom/mesh/PlaneSelector.java +0 -0
  153. data/src/{toxi → main/java/toxi}/geom/mesh/STLColorModel.java +0 -0
  154. data/src/{toxi → main/java/toxi}/geom/mesh/STLReader.java +0 -0
  155. data/src/{toxi → main/java/toxi}/geom/mesh/STLWriter.java +0 -0
  156. data/src/{toxi → main/java/toxi}/geom/mesh/SphereFunction.java +0 -0
  157. data/src/{toxi → main/java/toxi}/geom/mesh/SphericalHarmonics.java +0 -0
  158. data/src/{toxi → main/java/toxi}/geom/mesh/SuperEllipsoid.java +0 -0
  159. data/src/{toxi → main/java/toxi}/geom/mesh/SurfaceFunction.java +0 -0
  160. data/src/{toxi → main/java/toxi}/geom/mesh/SurfaceMeshBuilder.java +0 -0
  161. data/src/{toxi → main/java/toxi}/geom/mesh/Terrain.java +0 -0
  162. data/src/{toxi → main/java/toxi}/geom/mesh/TriangleMesh.java +0 -0
  163. data/src/{toxi → main/java/toxi}/geom/mesh/Vertex.java +0 -0
  164. data/src/{toxi → main/java/toxi}/geom/mesh/VertexSelector.java +0 -0
  165. data/src/{toxi → main/java/toxi}/geom/mesh/WEFace.java +0 -0
  166. data/src/{toxi → main/java/toxi}/geom/mesh/WEMeshFilterStrategy.java +0 -0
  167. data/src/{toxi → main/java/toxi}/geom/mesh/WETriangleMesh.java +0 -0
  168. data/src/{toxi → main/java/toxi}/geom/mesh/WEVertex.java +0 -0
  169. data/src/{toxi → main/java/toxi}/geom/mesh/WingedEdge.java +2 -2
  170. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/CentroidSubdiv.java +0 -0
  171. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DisplacementSubdivision.java +0 -0
  172. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DualDisplacementSubdivision.java +0 -0
  173. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DualSubdivision.java +0 -0
  174. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/EdgeLengthComparator.java +0 -0
  175. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/FaceCountComparator.java +0 -0
  176. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +0 -0
  177. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointSubdiv.java +0 -0
  178. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointSubdivision.java +0 -0
  179. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/NewSubdivStrategy.java +0 -0
  180. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/NormalDisplacementSubdivision.java +0 -0
  181. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/SubdivisionStrategy.java +0 -0
  182. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/TriSubdivision.java +0 -0
  183. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayTriangle.java +0 -0
  184. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayTriangulation.java +5 -7
  185. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayVertex.java +0 -0
  186. data/src/{toxi → main/java/toxi}/geom/mesh2d/Voronoi.java +0 -0
  187. data/src/{toxi → main/java/toxi}/geom/nurbs/BasicNurbsCurve.java +0 -0
  188. data/src/{toxi → main/java/toxi}/geom/nurbs/BasicNurbsSurface.java +0 -0
  189. data/src/{toxi → main/java/toxi}/geom/nurbs/ControlNet.java +0 -0
  190. data/src/{toxi → main/java/toxi}/geom/nurbs/CurveCreator.java +0 -0
  191. data/src/{toxi → main/java/toxi}/geom/nurbs/CurveUtils.java +0 -0
  192. data/src/{toxi → main/java/toxi}/geom/nurbs/InterpolationException.java +0 -0
  193. data/src/{toxi → main/java/toxi}/geom/nurbs/KnotVector.java +0 -0
  194. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsCreator.java +2 -2
  195. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsCurve.java +0 -0
  196. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsMeshCreator.java +0 -0
  197. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsSurface.java +0 -0
  198. data/src/{toxi → main/java/toxi}/image/util/Filter8bit.java +0 -0
  199. data/src/{toxi → main/java/toxi}/image/util/TiledFrameExporter.java +0 -0
  200. data/src/{toxi → main/java/toxi}/math/BezierInterpolation.java +0 -0
  201. data/src/{toxi → main/java/toxi}/math/CircularInterpolation.java +0 -0
  202. data/src/{toxi → main/java/toxi}/math/CosineInterpolation.java +0 -0
  203. data/src/{toxi → main/java/toxi}/math/DecimatedInterpolation.java +0 -0
  204. data/src/{toxi → main/java/toxi}/math/ExponentialInterpolation.java +0 -0
  205. data/src/{toxi → main/java/toxi}/math/InterpolateStrategy.java +0 -0
  206. data/src/{toxi → main/java/toxi}/math/Interpolation2D.java +0 -0
  207. data/src/{toxi → main/java/toxi}/math/LinearInterpolation.java +0 -0
  208. data/src/{toxi → main/java/toxi}/math/MathUtils.java +0 -0
  209. data/src/{toxi → main/java/toxi}/math/NonLinearScaleMap.java +0 -0
  210. data/src/{toxi → main/java/toxi}/math/ScaleMap.java +0 -0
  211. data/src/{toxi → main/java/toxi}/math/SigmoidInterpolation.java +0 -0
  212. data/src/{toxi → main/java/toxi}/math/SinCosLUT.java +0 -0
  213. data/src/{toxi → main/java/toxi}/math/ThresholdInterpolation.java +0 -0
  214. data/src/{toxi → main/java/toxi}/math/ZoomLensInterpolation.java +0 -0
  215. data/src/{toxi → main/java/toxi}/math/conversion/UnitTranslator.java +0 -0
  216. data/src/{toxi → main/java/toxi}/math/noise/PerlinNoise.java +0 -0
  217. data/src/{toxi → main/java/toxi}/math/noise/SimplexNoise.java +0 -0
  218. data/src/{toxi → main/java/toxi}/math/waves/AMFMSineWave.java +0 -0
  219. data/src/{toxi → main/java/toxi}/math/waves/AbstractWave.java +0 -0
  220. data/src/{toxi → main/java/toxi}/math/waves/ConstantWave.java +0 -0
  221. data/src/{toxi → main/java/toxi}/math/waves/FMHarmonicSquareWave.java +0 -0
  222. data/src/{toxi → main/java/toxi}/math/waves/FMSawtoothWave.java +0 -0
  223. data/src/{toxi → main/java/toxi}/math/waves/FMSineWave.java +0 -0
  224. data/src/{toxi → main/java/toxi}/math/waves/FMSquareWave.java +0 -0
  225. data/src/{toxi → main/java/toxi}/math/waves/FMTriangleWave.java +0 -0
  226. data/src/{toxi → main/java/toxi}/math/waves/SineWave.java +2 -2
  227. data/src/{toxi → main/java/toxi}/math/waves/Wave2D.java +0 -0
  228. data/src/{toxi → main/java/toxi}/math/waves/WaveState.java +0 -0
  229. data/src/{toxi → main/java/toxi}/music/scale/AbstractScale.java +0 -0
  230. data/src/{toxi → main/java/toxi}/music/scale/GenericScale.java +0 -0
  231. data/src/{toxi → main/java/toxi}/music/scale/MajorScale.java +0 -0
  232. data/src/{toxi → main/java/toxi}/newmesh/AttributedEdge.java +0 -0
  233. data/src/{toxi → main/java/toxi}/newmesh/AttributedFace.java +0 -0
  234. data/src/{toxi → main/java/toxi}/newmesh/IndexedTriangleMesh.java +70 -69
  235. data/src/{toxi → main/java/toxi}/newmesh/MeshAttributeCompiler.java +0 -0
  236. data/src/{toxi → main/java/toxi}/newmesh/MeshFaceNormalCompiler.java +0 -0
  237. data/src/{toxi → main/java/toxi}/newmesh/MeshUVCompiler.java +0 -0
  238. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexColorCompiler.java +0 -0
  239. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexCompiler.java +0 -0
  240. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexNormalCompiler.java +0 -0
  241. data/src/{toxi → main/java/toxi}/newmesh/SpatialIndex.java +0 -0
  242. data/src/{toxi → main/java/toxi}/physics2d/ParticlePath2D.java +4 -3
  243. data/src/{toxi → main/java/toxi}/physics2d/ParticleString2D.java +2 -2
  244. data/src/{toxi → main/java/toxi}/physics2d/PullBackSpring2D.java +0 -0
  245. data/src/{toxi → main/java/toxi}/physics2d/VerletConstrainedSpring2D.java +0 -0
  246. data/src/{toxi → main/java/toxi}/physics2d/VerletMinDistanceSpring2D.java +0 -0
  247. data/src/main/java/toxi/physics2d/VerletParticle2D.java +449 -0
  248. data/src/main/java/toxi/physics2d/VerletPhysics2D.java +440 -0
  249. data/src/{toxi → main/java/toxi}/physics2d/VerletSpring2D.java +0 -0
  250. data/src/main/java/toxi/physics2d/behaviors/AttractionBehavior2D.java +211 -0
  251. data/src/{toxi → main/java/toxi}/physics2d/behaviors/ConstantForceBehavior2D.java +0 -0
  252. data/src/{toxi → main/java/toxi}/physics2d/behaviors/GravityBehavior2D.java +0 -0
  253. data/src/{toxi → main/java/toxi}/physics2d/behaviors/ParticleBehavior2D.java +0 -0
  254. data/src/{toxi → main/java/toxi}/physics2d/constraints/AngularConstraint.java +0 -0
  255. data/src/{toxi → main/java/toxi}/physics2d/constraints/AxisConstraint.java +0 -0
  256. data/src/{toxi → main/java/toxi}/physics2d/constraints/CircularConstraint.java +0 -0
  257. data/src/{toxi → main/java/toxi}/physics2d/constraints/MaxConstraint.java +0 -0
  258. data/src/{toxi → main/java/toxi}/physics2d/constraints/MinConstraint.java +0 -0
  259. data/src/{toxi → main/java/toxi}/physics2d/constraints/ParticleConstraint2D.java +0 -0
  260. data/src/{toxi → main/java/toxi}/physics2d/constraints/PolygonConstraint.java +0 -0
  261. data/src/{toxi → main/java/toxi}/physics2d/constraints/RectConstraint.java +0 -0
  262. data/src/{toxi → main/java/toxi}/physics3d/ParticlePath3D.java +4 -3
  263. data/src/{toxi → main/java/toxi}/physics3d/ParticleString3D.java +2 -2
  264. data/src/{toxi → main/java/toxi}/physics3d/PullBackSpring3D.java +0 -0
  265. data/src/{toxi → main/java/toxi}/physics3d/VerletConstrainedSpring3D.java +0 -0
  266. data/src/{toxi → main/java/toxi}/physics3d/VerletMinDistanceSpring3D.java +0 -0
  267. data/src/main/java/toxi/physics3d/VerletParticle3D.java +377 -0
  268. data/src/{toxi → main/java/toxi}/physics3d/VerletPhysics3D.java +0 -0
  269. data/src/{toxi → main/java/toxi}/physics3d/VerletSpring3D.java +0 -0
  270. data/src/{toxi → main/java/toxi}/physics3d/behaviors/AttractionBehavior3D.java +0 -0
  271. data/src/{toxi → main/java/toxi}/physics3d/behaviors/ConstantForceBehavior3D.java +0 -0
  272. data/src/{toxi → main/java/toxi}/physics3d/behaviors/GravityBehavior3D.java +0 -0
  273. data/src/{toxi → main/java/toxi}/physics3d/behaviors/ParticleBehavior3D.java +0 -0
  274. data/src/{toxi → main/java/toxi}/physics3d/constraints/AxisConstraint.java +1 -0
  275. data/src/{toxi → main/java/toxi}/physics3d/constraints/BoxConstraint.java +0 -0
  276. data/src/{toxi → main/java/toxi}/physics3d/constraints/CylinderConstraint.java +1 -0
  277. data/src/{toxi → main/java/toxi}/physics3d/constraints/MaxConstraint.java +1 -0
  278. data/src/{toxi → main/java/toxi}/physics3d/constraints/MinConstraint.java +1 -0
  279. data/src/{toxi → main/java/toxi}/physics3d/constraints/ParticleConstraint3D.java +0 -0
  280. data/src/{toxi → main/java/toxi}/physics3d/constraints/PlaneConstraint.java +0 -0
  281. data/src/{toxi → main/java/toxi}/physics3d/constraints/SoftBoxConstraint.java +38 -38
  282. data/src/{toxi → main/java/toxi}/physics3d/constraints/SphereConstraint.java +1 -0
  283. data/src/{toxi → main/java/toxi}/processing/ArrowModifier.java +0 -0
  284. data/src/{toxi → main/java/toxi}/processing/DashedLineModifier.java +0 -0
  285. data/src/{toxi → main/java/toxi}/processing/DeltaOrientationMapper.java +0 -0
  286. data/src/{toxi → main/java/toxi}/processing/Line2DRenderModifier.java +0 -0
  287. data/src/{toxi → main/java/toxi}/processing/MeshToVBO.java +0 -0
  288. data/src/{toxi → main/java/toxi}/processing/NormalMapper.java +0 -0
  289. data/src/{toxi → main/java/toxi}/processing/POVInterface.java +0 -0
  290. data/src/{toxi → main/java/toxi}/processing/POVMesh.java +0 -0
  291. data/src/{toxi → main/java/toxi}/processing/POVWriter.java +0 -0
  292. data/src/{toxi → main/java/toxi}/processing/RCOpaque.java +0 -0
  293. data/src/{toxi → main/java/toxi}/processing/RCTransp.java +0 -0
  294. data/src/{toxi → main/java/toxi}/processing/TextureBuilder.java +0 -0
  295. data/src/{toxi → main/java/toxi}/processing/Textures.java +0 -0
  296. data/src/{toxi → main/java/toxi}/processing/ToxiclibsSupport.java +0 -0
  297. data/src/{toxi → main/java/toxi}/processing/Tracing.java +0 -0
  298. data/src/{toxi → main/java/toxi}/processing/XYZNormalMapper.java +0 -0
  299. data/src/{toxi → main/java/toxi}/sim/automata/CAMatrix.java +0 -0
  300. data/src/{toxi → main/java/toxi}/sim/automata/CARule.java +0 -0
  301. data/src/{toxi → main/java/toxi}/sim/automata/CARule2D.java +0 -0
  302. data/src/{toxi → main/java/toxi}/sim/automata/CAWolfram1D.java +0 -0
  303. data/src/{toxi → main/java/toxi}/sim/automata/EvolvableMatrix.java +0 -0
  304. data/src/{toxi → main/java/toxi}/sim/automata/MatrixEvolver.java +0 -0
  305. data/src/{toxi → main/java/toxi}/sim/dla/BottomUpOrder.java +0 -0
  306. data/src/{toxi → main/java/toxi}/sim/dla/DLA.java +0 -0
  307. data/src/{toxi → main/java/toxi}/sim/dla/DLAConfiguration.java +0 -0
  308. data/src/{toxi → main/java/toxi}/sim/dla/DLAEventAdapter.java +0 -0
  309. data/src/{toxi → main/java/toxi}/sim/dla/DLAEventListener.java +0 -0
  310. data/src/{toxi → main/java/toxi}/sim/dla/DLAGuideLines.java +0 -0
  311. data/src/{toxi → main/java/toxi}/sim/dla/DLAParticle.java +0 -0
  312. data/src/{toxi → main/java/toxi}/sim/dla/DLASegment.java +0 -0
  313. data/src/{toxi → main/java/toxi}/sim/dla/PipelineOrder.java +0 -0
  314. data/src/{toxi → main/java/toxi}/sim/dla/RadialDistanceOrder.java +0 -0
  315. data/src/{toxi → main/java/toxi}/sim/erosion/ErosionFunction.java +0 -0
  316. data/src/{toxi → main/java/toxi}/sim/erosion/TalusAngleErosion.java +0 -0
  317. data/src/{toxi → main/java/toxi}/sim/erosion/ThermalErosion.java +0 -0
  318. data/src/{toxi → main/java/toxi}/sim/fluids/FluidSolver2D.java +0 -0
  319. data/src/{toxi → main/java/toxi}/sim/fluids/FluidSolver3D.java +0 -0
  320. data/src/{toxi → main/java/toxi}/sim/grayscott/GrayScott.java +0 -0
  321. data/src/{toxi → main/java/toxi}/util/DateUtils.java +0 -0
  322. data/src/{toxi → main/java/toxi}/util/FileSequenceDescriptor.java +0 -0
  323. data/src/main/java/toxi/util/FileUtils.java +443 -0
  324. data/src/{toxi → main/java/toxi}/util/datatypes/ArraySet.java +0 -0
  325. data/src/{toxi → main/java/toxi}/util/datatypes/ArrayUtil.java +0 -0
  326. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedDoubleRange.java +3 -3
  327. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedFloatRange.java +2 -3
  328. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedIntegerRange.java +3 -3
  329. data/src/{toxi → main/java/toxi}/util/datatypes/DoubleRange.java +3 -3
  330. data/src/{toxi → main/java/toxi}/util/datatypes/FloatRange.java +3 -3
  331. data/src/{toxi → main/java/toxi}/util/datatypes/GenericSet.java +0 -0
  332. data/src/{toxi → main/java/toxi}/util/datatypes/IntegerRange.java +3 -3
  333. data/src/{toxi → main/java/toxi}/util/datatypes/IntegerSet.java +0 -0
  334. data/src/{toxi → main/java/toxi}/util/datatypes/ItemIndex.java +0 -0
  335. data/src/{toxi → main/java/toxi}/util/datatypes/SingletonRegistry.java +0 -0
  336. data/src/{toxi → main/java/toxi}/util/datatypes/TypedProperties.java +0 -0
  337. data/src/{toxi → main/java/toxi}/util/datatypes/UndirectedGraph.java +0 -0
  338. data/src/{toxi → main/java/toxi}/util/datatypes/UniqueItemIndex.java +0 -0
  339. data/src/{toxi → main/java/toxi}/util/datatypes/WeightedRandomEntry.java +0 -0
  340. data/src/{toxi → main/java/toxi}/util/datatypes/WeightedRandomSet.java +0 -0
  341. data/src/{toxi → main/java/toxi}/util/events/EventDispatcher.java +0 -0
  342. data/src/{toxi → main/java/toxi}/volume/AdditiveBrush.java +0 -0
  343. data/src/{toxi → main/java/toxi}/volume/ArrayIsoSurface.java +0 -0
  344. data/src/{toxi → main/java/toxi}/volume/BoxBrush.java +0 -0
  345. data/src/{toxi → main/java/toxi}/volume/BrushMode.java +0 -0
  346. data/src/{toxi → main/java/toxi}/volume/HashIsoSurface.java +0 -0
  347. data/src/{toxi → main/java/toxi}/volume/IsoSurface.java +0 -0
  348. data/src/{toxi → main/java/toxi}/volume/MarchingCubesIndex.java +0 -0
  349. data/src/{toxi → main/java/toxi}/volume/MeshLatticeBuilder.java +0 -0
  350. data/src/{toxi → main/java/toxi}/volume/MeshVoxelizer.java +0 -0
  351. data/src/{toxi → main/java/toxi}/volume/MultiplyBrush.java +0 -0
  352. data/src/{toxi → main/java/toxi}/volume/PeakBrush.java +0 -0
  353. data/src/{toxi → main/java/toxi}/volume/ReplaceBrush.java +0 -0
  354. data/src/{toxi → main/java/toxi}/volume/RoundBrush.java +0 -0
  355. data/src/{toxi → main/java/toxi}/volume/VolumetricBrush.java +0 -0
  356. data/src/{toxi → main/java/toxi}/volume/VolumetricHashMap.java +0 -0
  357. data/src/{toxi → main/java/toxi}/volume/VolumetricSpace.java +0 -0
  358. data/src/{toxi → main/java/toxi}/volume/VolumetricSpaceArray.java +0 -0
  359. data/src/{BooleanShapes.java → test/java/BooleanShapes.java} +0 -0
  360. data/toxiclibs.gemspec +6 -7
  361. metadata +345 -347
  362. data/src/toxi/data/feeds/AtomFeed.java +0 -129
  363. data/src/toxi/data/feeds/RSSFeed.java +0 -99
  364. data/src/toxi/physics2d/VerletParticle2D.java +0 -457
  365. data/src/toxi/physics2d/VerletPhysics2D.java +0 -448
  366. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +0 -212
  367. data/src/toxi/physics3d/VerletParticle3D.java +0 -385
  368. 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
- }