toxiclibs 0.2-java → 0.5.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +16 -0
  3. data/CHANGELOG.md +4 -0
  4. data/LICENSE +675 -0
  5. data/README.md +12 -5
  6. data/Rakefile +25 -82
  7. data/examples/attract_repel/attract_repel.rb +30 -0
  8. data/examples/attract_repel/attractor.rb +23 -0
  9. data/examples/attract_repel/particle.rb +27 -0
  10. data/examples/data/ti_yong.png +0 -0
  11. data/examples/force_directed/cluster.rb +76 -0
  12. data/examples/force_directed/force_directed_graph.rb +92 -0
  13. data/examples/force_directed/node.rb +26 -0
  14. data/examples/gray_scott_image.rb +75 -0
  15. data/examples/gray_scott_tone_map.rb +77 -0
  16. data/examples/implicit.rb +139 -0
  17. data/examples/inflate_mesh.rb +89 -0
  18. data/examples/model_align.rb +44 -0
  19. data/examples/povmesh/ftest.rb +46 -0
  20. data/examples/povmesh/tentacle.rb +73 -0
  21. data/examples/simple_cluster/cluster.rb +47 -0
  22. data/examples/simple_cluster/node.rb +27 -0
  23. data/examples/simple_cluster/simple_cluster.rb +60 -0
  24. data/examples/soft_body/blanket.rb +45 -0
  25. data/examples/soft_body/connection.rb +16 -0
  26. data/examples/soft_body/particle.rb +22 -0
  27. data/examples/soft_body/soft_body_square_adapted.rb +55 -0
  28. data/lib/toxiclibs.jar +0 -0
  29. data/lib/toxiclibs.rb +91 -32
  30. data/lib/toxiclibs/version.rb +1 -1
  31. data/pom.xml +122 -0
  32. data/src/com/toxi/net/ClientListener.java +41 -0
  33. data/src/com/toxi/net/ServerListener.java +70 -0
  34. data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
  35. data/src/com/toxi/net/ServerState.java +18 -0
  36. data/src/com/toxi/net/UDPConnection.java +66 -0
  37. data/src/com/toxi/net/UDPSyncClient.java +81 -0
  38. data/src/com/toxi/net/UDPSyncServer.java +450 -0
  39. data/src/com/toxi/nio/UDPClient.java +121 -0
  40. data/src/com/toxi/nio/UDPClientState.java +32 -0
  41. data/src/com/toxi/nio/UDPServer.java +129 -0
  42. data/src/toxi/color/AccessCriteria.java +114 -0
  43. data/src/toxi/color/AlphaAccessor.java +67 -0
  44. data/src/toxi/color/CMYKAccessor.java +122 -0
  45. data/src/toxi/color/CMYKDistanceProxy.java +40 -0
  46. data/src/toxi/color/ColorGradient.java +260 -0
  47. data/src/toxi/color/ColorList.java +699 -0
  48. data/src/toxi/color/ColorRange.java +671 -0
  49. data/src/toxi/color/ColorTheme.java +163 -0
  50. data/src/toxi/color/DistanceProxy.java +44 -0
  51. data/src/toxi/color/HSVAccessor.java +113 -0
  52. data/src/toxi/color/HSVDistanceProxy.java +40 -0
  53. data/src/toxi/color/HistEntry.java +85 -0
  54. data/src/toxi/color/Histogram.java +185 -0
  55. data/src/toxi/color/Hue.java +249 -0
  56. data/src/toxi/color/LuminanceAccessor.java +78 -0
  57. data/src/toxi/color/NamedColor.java +935 -0
  58. data/src/toxi/color/ProximityComparator.java +70 -0
  59. data/src/toxi/color/RGBAccessor.java +113 -0
  60. data/src/toxi/color/RGBDistanceProxy.java +41 -0
  61. data/src/toxi/color/ReadonlyTColor.java +296 -0
  62. data/src/toxi/color/TColor.java +1677 -0
  63. data/src/toxi/color/TColorAdapter.java +68 -0
  64. data/src/toxi/color/ToneMap.java +218 -0
  65. data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
  66. data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
  67. data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
  68. data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
  69. data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
  70. data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
  71. data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
  72. data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
  73. data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
  74. data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
  75. data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
  76. data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
  77. data/src/toxi/data/csv/CSVAdapter.java +74 -0
  78. data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
  79. data/src/toxi/data/csv/CSVListener.java +61 -0
  80. data/src/toxi/data/csv/CSVParser.java +202 -0
  81. data/src/toxi/data/feeds/AtomAuthor.java +49 -0
  82. data/src/toxi/data/feeds/AtomContent.java +50 -0
  83. data/src/toxi/data/feeds/AtomEntry.java +111 -0
  84. data/src/toxi/data/feeds/AtomFeed.java +129 -0
  85. data/src/toxi/data/feeds/AtomLink.java +62 -0
  86. data/src/toxi/data/feeds/RSSChannel.java +88 -0
  87. data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
  88. data/src/toxi/data/feeds/RSSFeed.java +99 -0
  89. data/src/toxi/data/feeds/RSSItem.java +104 -0
  90. data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
  91. data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
  92. data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
  93. data/src/toxi/geom/AABB.java +658 -0
  94. data/src/toxi/geom/Axis3D.java +116 -0
  95. data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
  96. data/src/toxi/geom/BernsteinPolynomial.java +94 -0
  97. data/src/toxi/geom/BezierCurve2D.java +159 -0
  98. data/src/toxi/geom/BezierCurve3D.java +148 -0
  99. data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
  100. data/src/toxi/geom/BoxIntersector.java +52 -0
  101. data/src/toxi/geom/Circle.java +230 -0
  102. data/src/toxi/geom/CircleIntersector.java +85 -0
  103. data/src/toxi/geom/Cone.java +150 -0
  104. data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
  105. data/src/toxi/geom/CoordinateExtractor.java +16 -0
  106. data/src/toxi/geom/Ellipse.java +250 -0
  107. data/src/toxi/geom/GMatrix.java +2599 -0
  108. data/src/toxi/geom/GVector.java +833 -0
  109. data/src/toxi/geom/GlobalGridTesselator.java +54 -0
  110. data/src/toxi/geom/GridTesselator.java +108 -0
  111. data/src/toxi/geom/Intersector2D.java +49 -0
  112. data/src/toxi/geom/Intersector3D.java +51 -0
  113. data/src/toxi/geom/IsectData2D.java +103 -0
  114. data/src/toxi/geom/IsectData3D.java +103 -0
  115. data/src/toxi/geom/Line2D.java +534 -0
  116. data/src/toxi/geom/Line3D.java +471 -0
  117. data/src/toxi/geom/LineStrip2D.java +430 -0
  118. data/src/toxi/geom/LineStrip3D.java +230 -0
  119. data/src/toxi/geom/LocalGridTesselator.java +57 -0
  120. data/src/toxi/geom/Matrix3d.java +3048 -0
  121. data/src/toxi/geom/Matrix4f.java +3446 -0
  122. data/src/toxi/geom/Matrix4x4.java +1076 -0
  123. data/src/toxi/geom/MatrixSizeException.java +58 -0
  124. data/src/toxi/geom/OctreeVisitor.java +44 -0
  125. data/src/toxi/geom/Origin3D.java +148 -0
  126. data/src/toxi/geom/Plane.java +293 -0
  127. data/src/toxi/geom/PlaneIntersector.java +57 -0
  128. data/src/toxi/geom/PointCloud3D.java +253 -0
  129. data/src/toxi/geom/PointOctree.java +502 -0
  130. data/src/toxi/geom/PointQuadtree.java +375 -0
  131. data/src/toxi/geom/Polygon2D.java +1038 -0
  132. data/src/toxi/geom/PolygonClipper2D.java +45 -0
  133. data/src/toxi/geom/PolygonTesselator.java +20 -0
  134. data/src/toxi/geom/QuadtreeVisitor.java +44 -0
  135. data/src/toxi/geom/Quaternion.java +641 -0
  136. data/src/toxi/geom/Ray2D.java +146 -0
  137. data/src/toxi/geom/Ray3D.java +150 -0
  138. data/src/toxi/geom/Ray3DIntersector.java +75 -0
  139. data/src/toxi/geom/ReadonlyVec2D.java +575 -0
  140. data/src/toxi/geom/ReadonlyVec3D.java +628 -0
  141. data/src/toxi/geom/ReadonlyVec4D.java +431 -0
  142. data/src/toxi/geom/Rect.java +720 -0
  143. data/src/toxi/geom/Reflector3D.java +58 -0
  144. data/src/toxi/geom/Shape2D.java +94 -0
  145. data/src/toxi/geom/Shape3D.java +42 -0
  146. data/src/toxi/geom/SingularMatrixException.java +57 -0
  147. data/src/toxi/geom/SpatialBins.java +182 -0
  148. data/src/toxi/geom/SpatialIndex.java +61 -0
  149. data/src/toxi/geom/Sphere.java +224 -0
  150. data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
  151. data/src/toxi/geom/Spline2D.java +349 -0
  152. data/src/toxi/geom/Spline3D.java +351 -0
  153. data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
  154. data/src/toxi/geom/Triangle2D.java +422 -0
  155. data/src/toxi/geom/Triangle3D.java +456 -0
  156. data/src/toxi/geom/TriangleIntersector.java +105 -0
  157. data/src/toxi/geom/Vec2D.java +1328 -0
  158. data/src/toxi/geom/Vec3D.java +1832 -0
  159. data/src/toxi/geom/Vec4D.java +985 -0
  160. data/src/toxi/geom/VecMathUtil.java +100 -0
  161. data/src/toxi/geom/XAxisCylinder.java +64 -0
  162. data/src/toxi/geom/YAxisCylinder.java +65 -0
  163. data/src/toxi/geom/ZAxisCylinder.java +64 -0
  164. data/src/toxi/geom/mesh/BezierPatch.java +200 -0
  165. data/src/toxi/geom/mesh/BoxSelector.java +62 -0
  166. data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
  167. data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
  168. data/src/toxi/geom/mesh/Face.java +176 -0
  169. data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
  170. data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
  171. data/src/toxi/geom/mesh/Mesh3D.java +224 -0
  172. data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
  173. data/src/toxi/geom/mesh/OBJWriter.java +194 -0
  174. data/src/toxi/geom/mesh/PLYWriter.java +167 -0
  175. data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
  176. data/src/toxi/geom/mesh/STLColorModel.java +54 -0
  177. data/src/toxi/geom/mesh/STLReader.java +185 -0
  178. data/src/toxi/geom/mesh/STLWriter.java +323 -0
  179. data/src/toxi/geom/mesh/SphereFunction.java +156 -0
  180. data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
  181. data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
  182. data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
  183. data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
  184. data/src/toxi/geom/mesh/Terrain.java +451 -0
  185. data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
  186. data/src/toxi/geom/mesh/Vertex.java +78 -0
  187. data/src/toxi/geom/mesh/VertexSelector.java +193 -0
  188. data/src/toxi/geom/mesh/WEFace.java +100 -0
  189. data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
  190. data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
  191. data/src/toxi/geom/mesh/WEVertex.java +134 -0
  192. data/src/toxi/geom/mesh/WingedEdge.java +115 -0
  193. data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
  194. data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
  195. data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
  196. data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
  197. data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
  198. data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
  199. data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
  200. data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
  201. data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
  202. data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
  203. data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
  204. data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
  205. data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
  206. data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
  207. data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
  208. data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
  209. data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
  210. data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
  211. data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
  212. data/src/toxi/geom/nurbs/ControlNet.java +148 -0
  213. data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
  214. data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
  215. data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
  216. data/src/toxi/geom/nurbs/KnotVector.java +333 -0
  217. data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
  218. data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
  219. data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
  220. data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
  221. data/src/toxi/image/util/Filter8bit.java +331 -0
  222. data/src/toxi/image/util/TiledFrameExporter.java +162 -0
  223. data/src/toxi/math/BezierInterpolation.java +102 -0
  224. data/src/toxi/math/CircularInterpolation.java +88 -0
  225. data/src/toxi/math/CosineInterpolation.java +51 -0
  226. data/src/toxi/math/DecimatedInterpolation.java +77 -0
  227. data/src/toxi/math/ExponentialInterpolation.java +68 -0
  228. data/src/toxi/math/InterpolateStrategy.java +60 -0
  229. data/src/toxi/math/Interpolation2D.java +93 -0
  230. data/src/toxi/math/LinearInterpolation.java +46 -0
  231. data/src/toxi/math/MathUtils.java +990 -0
  232. data/src/toxi/math/NonLinearScaleMap.java +101 -0
  233. data/src/toxi/math/ScaleMap.java +183 -0
  234. data/src/toxi/math/SigmoidInterpolation.java +78 -0
  235. data/src/toxi/math/SinCosLUT.java +141 -0
  236. data/src/toxi/math/ThresholdInterpolation.java +58 -0
  237. data/src/toxi/math/ZoomLensInterpolation.java +126 -0
  238. data/src/toxi/math/conversion/UnitTranslator.java +161 -0
  239. data/src/toxi/math/noise/PerlinNoise.java +281 -0
  240. data/src/toxi/math/noise/SimplexNoise.java +542 -0
  241. data/src/toxi/math/waves/AMFMSineWave.java +143 -0
  242. data/src/toxi/math/waves/AbstractWave.java +248 -0
  243. data/src/toxi/math/waves/ConstantWave.java +48 -0
  244. data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
  245. data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
  246. data/src/toxi/math/waves/FMSineWave.java +142 -0
  247. data/src/toxi/math/waves/FMSquareWave.java +143 -0
  248. data/src/toxi/math/waves/FMTriangleWave.java +126 -0
  249. data/src/toxi/math/waves/SineWave.java +81 -0
  250. data/src/toxi/math/waves/Wave2D.java +68 -0
  251. data/src/toxi/math/waves/WaveState.java +69 -0
  252. data/src/toxi/music/scale/AbstractScale.java +117 -0
  253. data/src/toxi/music/scale/GenericScale.java +66 -0
  254. data/src/toxi/music/scale/MajorScale.java +41 -0
  255. data/src/toxi/newmesh/AttributedEdge.java +106 -0
  256. data/src/toxi/newmesh/AttributedFace.java +63 -0
  257. data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
  258. data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
  259. data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
  260. data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
  261. data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
  262. data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
  263. data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
  264. data/src/toxi/newmesh/SpatialIndex.java +78 -0
  265. data/src/toxi/physics2d/ParticlePath2D.java +100 -0
  266. data/src/toxi/physics2d/ParticleString2D.java +184 -0
  267. data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
  268. data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
  269. data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
  270. data/src/toxi/physics2d/VerletParticle2D.java +457 -0
  271. data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
  272. data/src/toxi/physics2d/VerletSpring2D.java +181 -0
  273. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
  274. data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
  275. data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
  276. data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
  277. data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
  278. data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
  279. data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
  280. data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
  281. data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
  282. data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
  283. data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
  284. data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
  285. data/src/toxi/physics3d/ParticlePath3D.java +100 -0
  286. data/src/toxi/physics3d/ParticleString3D.java +184 -0
  287. data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
  288. data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
  289. data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
  290. data/src/toxi/physics3d/VerletParticle3D.java +385 -0
  291. data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
  292. data/src/toxi/physics3d/VerletSpring3D.java +180 -0
  293. data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
  294. data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
  295. data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
  296. data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
  297. data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
  298. data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
  299. data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
  300. data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
  301. data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
  302. data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
  303. data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
  304. data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
  305. data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
  306. data/src/toxi/processing/ArrowModifier.java +116 -0
  307. data/src/toxi/processing/DashedLineModifier.java +48 -0
  308. data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
  309. data/src/toxi/processing/Line2DRenderModifier.java +18 -0
  310. data/src/toxi/processing/MeshToVBO.java +94 -0
  311. data/src/toxi/processing/NormalMapper.java +18 -0
  312. data/src/toxi/processing/POVInterface.java +121 -0
  313. data/src/toxi/processing/POVMesh.java +219 -0
  314. data/src/toxi/processing/POVWriter.java +460 -0
  315. data/src/toxi/processing/RCOpaque.java +77 -0
  316. data/src/toxi/processing/RCTransp.java +78 -0
  317. data/src/toxi/processing/TextureBuilder.java +232 -0
  318. data/src/toxi/processing/Textures.java +110 -0
  319. data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
  320. data/src/toxi/processing/Tracing.java +25 -0
  321. data/src/toxi/processing/XYZNormalMapper.java +30 -0
  322. data/src/toxi/sim/automata/CAMatrix.java +297 -0
  323. data/src/toxi/sim/automata/CARule.java +76 -0
  324. data/src/toxi/sim/automata/CARule2D.java +354 -0
  325. data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
  326. data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
  327. data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
  328. data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
  329. data/src/toxi/sim/dla/DLA.java +497 -0
  330. data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
  331. data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
  332. data/src/toxi/sim/dla/DLAEventListener.java +57 -0
  333. data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
  334. data/src/toxi/sim/dla/DLAParticle.java +102 -0
  335. data/src/toxi/sim/dla/DLASegment.java +88 -0
  336. data/src/toxi/sim/dla/PipelineOrder.java +50 -0
  337. data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
  338. data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
  339. data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
  340. data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
  341. data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
  342. data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
  343. data/src/toxi/sim/grayscott/GrayScott.java +469 -0
  344. data/src/toxi/util/DateUtils.java +141 -0
  345. data/src/toxi/util/FileSequenceDescriptor.java +181 -0
  346. data/src/toxi/util/FileUtils.java +467 -0
  347. data/src/toxi/util/datatypes/ArraySet.java +128 -0
  348. data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
  349. data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
  350. data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
  351. data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
  352. data/src/toxi/util/datatypes/DoubleRange.java +251 -0
  353. data/src/toxi/util/datatypes/FloatRange.java +251 -0
  354. data/src/toxi/util/datatypes/GenericSet.java +215 -0
  355. data/src/toxi/util/datatypes/IntegerRange.java +247 -0
  356. data/src/toxi/util/datatypes/IntegerSet.java +149 -0
  357. data/src/toxi/util/datatypes/ItemIndex.java +72 -0
  358. data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
  359. data/src/toxi/util/datatypes/TypedProperties.java +291 -0
  360. data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
  361. data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
  362. data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
  363. data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
  364. data/src/toxi/util/events/EventDispatcher.java +86 -0
  365. data/src/toxi/volume/AdditiveBrush.java +19 -0
  366. data/src/toxi/volume/ArrayIsoSurface.java +297 -0
  367. data/src/toxi/volume/BoxBrush.java +100 -0
  368. data/src/toxi/volume/BrushMode.java +16 -0
  369. data/src/toxi/volume/HashIsoSurface.java +354 -0
  370. data/src/toxi/volume/IsoSurface.java +59 -0
  371. data/src/toxi/volume/MarchingCubesIndex.java +312 -0
  372. data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
  373. data/src/toxi/volume/MeshVoxelizer.java +216 -0
  374. data/src/toxi/volume/MultiplyBrush.java +20 -0
  375. data/src/toxi/volume/PeakBrush.java +21 -0
  376. data/src/toxi/volume/ReplaceBrush.java +19 -0
  377. data/src/toxi/volume/RoundBrush.java +113 -0
  378. data/src/toxi/volume/VolumetricBrush.java +160 -0
  379. data/src/toxi/volume/VolumetricHashMap.java +179 -0
  380. data/src/toxi/volume/VolumetricSpace.java +195 -0
  381. data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
  382. data/toxiclibs.gemspec +34 -0
  383. metadata +424 -27
@@ -0,0 +1,448 @@
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
+ }
@@ -0,0 +1,181 @@
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 toxi.geom.Vec2D;
31
+
32
+ /**
33
+ * <p>
34
+ * A spring class connecting two VerletParticles in space. Based on the
35
+ * configuration of the spring instance and that of the physics engine, the
36
+ * behaviour of the spring can vary between springy and stiff/stick like.
37
+ * </p>
38
+ *
39
+ * <p>
40
+ * The simulation takes particle weights into account and can be configured to
41
+ * lock either particle in space in order to force the other one to move. This
42
+ * is sometimes handy for resolving collisions (currently outside the scope of
43
+ * this library).
44
+ * </p>
45
+ *
46
+ * @see toxi.physics3d.VerletPhysics3D
47
+ */
48
+ public class VerletSpring2D {
49
+
50
+ /**
51
+ *
52
+ */
53
+ protected static final float EPS = 1e-6f;
54
+
55
+ /**
56
+ * Spring end points / particles
57
+ */
58
+ public VerletParticle2D a, b;
59
+
60
+ /**
61
+ * Spring rest length to which it always wants to return too
62
+ */
63
+ protected float restLength, restLengthSquared;
64
+
65
+ /**
66
+ * Spring strength, possible value range depends on engine configuration
67
+ * (time step, drag)
68
+ */
69
+ protected float strength;
70
+
71
+ /**
72
+ * Flag, if either particle is locked in space (only within the scope of
73
+ * this spring)
74
+ */
75
+ protected boolean isALocked, isBLocked;
76
+
77
+ /**
78
+ * @param a
79
+ * 1st particle
80
+ * @param b
81
+ * 2nd particle
82
+ * @param len
83
+ * desired rest length
84
+ * @param str
85
+ * spring strength
86
+ */
87
+ public VerletSpring2D(VerletParticle2D a, VerletParticle2D b, float len,
88
+ float str) {
89
+ this.a = a;
90
+ this.b = b;
91
+ restLength = len;
92
+ strength = str;
93
+ }
94
+
95
+ /**
96
+ *
97
+ * @return
98
+ */
99
+ public float getRestLength() {
100
+ return restLength;
101
+ }
102
+
103
+ /**
104
+ *
105
+ * @return
106
+ */
107
+ public float getStrength() {
108
+ return strength;
109
+ }
110
+
111
+ /**
112
+ * (Un)Locks the 1st end point of the spring. <b>NOTE: this acts purely
113
+ * within the scope of this spring instance and does NOT call
114
+ * {@link VerletParticle2D#lock()}</b>
115
+ *
116
+ * @param s
117
+ * @return itself
118
+ */
119
+ public VerletSpring2D lockA(boolean s) {
120
+ isALocked = s;
121
+ return this;
122
+ }
123
+
124
+ /**
125
+ * (Un)Locks the 2nd end point of the spring
126
+ *
127
+ * @param s
128
+ * @return itself
129
+ */
130
+
131
+ public VerletSpring2D lockB(boolean s) {
132
+ isBLocked = s;
133
+ return this;
134
+ }
135
+
136
+ /**
137
+ *
138
+ * @param len
139
+ * @return
140
+ */
141
+ public VerletSpring2D setRestLength(float len) {
142
+ restLength = len;
143
+ restLengthSquared = len * len;
144
+ return this;
145
+ }
146
+
147
+ /**
148
+ *
149
+ * @param strength
150
+ * @return
151
+ */
152
+ public VerletSpring2D setStrength(float strength) {
153
+ this.strength = strength;
154
+ return this;
155
+ }
156
+
157
+ /**
158
+ * Updates both particle positions (if not locked) based on their current
159
+ * distance, weight and spring configuration *
160
+ * @param applyConstraints
161
+ */
162
+ protected void update(boolean applyConstraints) {
163
+ Vec2D delta = b.sub(a);
164
+ // add minute offset to avoid div-by-zero errors
165
+ float dist = delta.magnitude() + EPS;
166
+ float normDistStrength = (dist - restLength)
167
+ / (dist * (a.invWeight + b.invWeight)) * strength;
168
+ if (!a.isLocked && !isALocked) {
169
+ a.addSelf(delta.scale(normDistStrength * a.invWeight));
170
+ if (applyConstraints) {
171
+ a.applyConstraints();
172
+ }
173
+ }
174
+ if (!b.isLocked && !isBLocked) {
175
+ b.addSelf(delta.scale(-normDistStrength * b.invWeight));
176
+ if (applyConstraints) {
177
+ b.applyConstraints();
178
+ }
179
+ }
180
+ }
181
+ }