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,128 @@
1
+ package toxi.util.datatypes;
2
+
3
+ /*
4
+ * Copyright (c) 2007 by L. Paul Chew.
5
+ *
6
+ * Permission is hereby granted, without written agreement and without
7
+ * license or royalty fees, to use, copy, modify, and distribute this
8
+ * software and its documentation for any purpose, subject to the following
9
+ * conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included
12
+ * in all copies or substantial portions of the Software.
13
+ *
14
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20
+ * DEALINGS IN THE SOFTWARE.
21
+ */
22
+
23
+ import java.util.AbstractSet;
24
+ import java.util.ArrayList;
25
+ import java.util.Collection;
26
+ import java.util.Iterator;
27
+
28
+ /**
29
+ * An ArrayList implementation of Set. An ArraySet is good for small sets; it
30
+ * has less overhead than a HashSet or a TreeSet.
31
+ *
32
+ * @author Paul Chew
33
+ *
34
+ * Created December 2007. For use with Voronoi/Delaunay applet.
35
+ * @param <E>
36
+ *
37
+ */
38
+ public class ArraySet<E> extends AbstractSet<E> {
39
+
40
+ private ArrayList<E> items; // Items of the set
41
+
42
+ /**
43
+ * Create an empty set (default initial capacity is 3).
44
+ */
45
+ public ArraySet() {
46
+ this(3);
47
+ }
48
+
49
+ /**
50
+ * Create a set containing the items of the collection. Any duplicate items
51
+ * are discarded.
52
+ *
53
+ * @param collection
54
+ * the source for the items of the small set
55
+ */
56
+ public ArraySet(Collection<? extends E> collection) {
57
+ items = new ArrayList<>(collection.size());
58
+ collection.stream().filter((item) -> (!items.contains(item))).forEach((item) -> {
59
+ items.add(item);
60
+ });
61
+ }
62
+
63
+ /**
64
+ * Create an empty set with the specified initial capacity.
65
+ *
66
+ * @param initialCapacity
67
+ * the initial capacity
68
+ */
69
+ public ArraySet(int initialCapacity) {
70
+ items = new ArrayList<>(initialCapacity);
71
+ }
72
+
73
+ /**
74
+ *
75
+ * @param item
76
+ * @return
77
+ */
78
+ @Override
79
+ public boolean add(E item) {
80
+ if (items.contains(item)) {
81
+ return false;
82
+ }
83
+ return items.add(item);
84
+ }
85
+
86
+ /**
87
+ * True if any member of the collection is also in the ArraySet.
88
+ *
89
+ * @param collection
90
+ * the Collection to check
91
+ * @return true if any member of collection appears in this ArraySet
92
+ */
93
+ public boolean containsAny(Collection<?> collection) {
94
+ return collection.stream().anyMatch((item) -> (this.contains((E)item)));
95
+ }
96
+
97
+ /**
98
+ * Get the item at the specified index.
99
+ *
100
+ * @param index
101
+ * where the item is located in the ListSet
102
+ * @return the item at the specified index
103
+ * @throws IndexOutOfBoundsException
104
+ * if the index is out of bounds
105
+ */
106
+ public E get(int index) throws IndexOutOfBoundsException {
107
+ return items.get(index);
108
+ }
109
+
110
+ /**
111
+ *
112
+ * @return
113
+ */
114
+ @Override
115
+ public Iterator<E> iterator() {
116
+ return items.iterator();
117
+ }
118
+
119
+ /**
120
+ *
121
+ * @return
122
+ */
123
+ @Override
124
+ public int size() {
125
+ return items.size();
126
+ }
127
+
128
+ }
@@ -0,0 +1,404 @@
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.util.datatypes;
29
+
30
+ import java.util.ArrayList;
31
+ import java.util.Arrays;
32
+ import java.util.Collection;
33
+ import java.util.Random;
34
+
35
+ /**
36
+ * A collection of array utilities.
37
+ */
38
+ public class ArrayUtil {
39
+
40
+ /**
41
+ * Adds all array elements to the given collection of the same type.
42
+ *
43
+ * @param <T>
44
+ * @param array
45
+ * array
46
+ * @param collection
47
+ * existing collection or null (to create a new {@link ArrayList}
48
+ * automatically)
49
+ */
50
+ public static <T> void addArrayToCollection(T[] array,
51
+ Collection<T> collection) {
52
+ if (collection == null) {
53
+ collection = new ArrayList<>();
54
+ }
55
+ collection.addAll(Arrays.asList(array));
56
+ }
57
+
58
+ /**
59
+ * Converts the generic array into an {@link ArrayList} of the same type.
60
+ *
61
+ * @param <T>
62
+ * @param array
63
+ * @return array list version
64
+ */
65
+ public static <T> ArrayList<T> arrayToList(T[] array) {
66
+ ArrayList<T> list = new ArrayList<>(array.length);
67
+ list.addAll(Arrays.asList(array));
68
+ return list;
69
+ }
70
+
71
+ /**
72
+ * Creates a normalized version of the values of the given int[] array.
73
+ * Supports packed integers (e.g. ARGB data) by allowing to specify a
74
+ * bitshift amount & bitmask, e.g. do this to get the normalized
75
+ * representation of the red channel of an ARGB array:
76
+ *
77
+ * <pre>
78
+ *
79
+ * // use 16 bits as shift offset for accessing red channel
80
+ * float[] red = ArrayUtil.getAsNormalizedFloatArray(argbPixels, 16, 255, 255);
81
+ * </pre>
82
+ *
83
+ * @param source
84
+ * source data
85
+ * @param bits
86
+ * number of bits to right shift each value
87
+ * @param mask
88
+ * bitmask to apply after bitshifting
89
+ * @param peak
90
+ * peak value (in the source domain) to normalize against
91
+ * @param target
92
+ * peak of the normalized values
93
+ * @return normalized values
94
+ */
95
+ public static float[] getAsNormalizedFloatArray(int[] source, int bits,
96
+ int mask, int peak, float target) {
97
+ float invPeak = target / peak;
98
+ float[] normalized = new float[source.length];
99
+ for (int i = 0; i < source.length; i++) {
100
+ int val = source[i];
101
+ if (bits > 0) {
102
+ val >>= bits;
103
+ }
104
+ val &= mask;
105
+ normalized[i] = val * invPeak;
106
+ }
107
+ return normalized;
108
+ }
109
+
110
+ /**
111
+ * Returns the index of the element where the given value is found in the
112
+ * array.
113
+ *
114
+ * @param needle
115
+ * number to find
116
+ * @param stack
117
+ * array to search
118
+ * @param maxLen
119
+ * number of elements to search
120
+ * @return array index or -1 if value couldn't be found in array
121
+ */
122
+ public static int indexInArray(float needle, float[] stack, int maxLen) {
123
+ for (int i = 0; i < maxLen; i++) {
124
+ if (stack[i] == needle) {
125
+ return i;
126
+ }
127
+ }
128
+ return -1;
129
+ }
130
+
131
+ /**
132
+ * Returns the index of the element where the given value is found in the
133
+ * array.
134
+ *
135
+ * @param needle
136
+ * number to find
137
+ * @param stack
138
+ * array to search
139
+ * @param maxLen
140
+ * number of elements to search
141
+ * @return array index or -1 if value couldn't be found in array
142
+ */
143
+ public static int indexInArray(int needle, int[] stack, int maxLen) {
144
+ for (int i = 0; i < maxLen; i++) {
145
+ if (stack[i] == needle) {
146
+ return i;
147
+ }
148
+ }
149
+ return -1;
150
+ }
151
+
152
+ /**
153
+ * Returns the index of the element where the given value is found in the
154
+ * array. The comparison uses {@link Object#equals(Object)}.
155
+ *
156
+ * @param needle
157
+ * number to find
158
+ * @param stack
159
+ * array to search
160
+ * @param maxLen
161
+ * number of elements to search
162
+ * @return array index or -1 if value couldn't be found in array
163
+ */
164
+ public static int indexInArray(Object needle, Object[] stack, int maxLen) {
165
+ for (int i = 0; i < maxLen; i++) {
166
+ if (stack[i].equals(needle)) {
167
+ return i;
168
+ }
169
+ }
170
+ return -1;
171
+ }
172
+
173
+ /**
174
+ * Normalizes the values in the given array to the new absolute target
175
+ * value. The original values are overridden.
176
+ *
177
+ * @param buffer
178
+ * array
179
+ * @param peak
180
+ * current peak in the source domain
181
+ * @param target
182
+ * new peak in the target domain
183
+ * @return normalized array
184
+ */
185
+ public static float[] normalizeFloatArray(float[] buffer, float peak,
186
+ float target) {
187
+ float invPeak = target / peak;
188
+ for (int i = 0; i < buffer.length; i++) {
189
+ buffer[i] *= invPeak;
190
+ }
191
+ return buffer;
192
+ }
193
+
194
+ /**
195
+ * Reverses the item order of the supplied byte array.
196
+ *
197
+ * @param array
198
+ */
199
+ public static void reverse(byte[] array) {
200
+ int len = array.length - 1;
201
+ int len2 = array.length / 2;
202
+ for (int i = 0; i < len2; i++) {
203
+ byte tmp = array[i];
204
+ array[i] = array[len - i];
205
+ array[len - i] = tmp;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Reverses the item order of the supplied char array.
211
+ *
212
+ * @param array
213
+ */
214
+ public static void reverse(char[] array) {
215
+ int len = array.length - 1;
216
+ int len2 = array.length / 2;
217
+ for (int i = 0; i < len2; i++) {
218
+ char tmp = array[i];
219
+ array[i] = array[len - i];
220
+ array[len - i] = tmp;
221
+ }
222
+ }
223
+
224
+ /**
225
+ * Reverses the item order of the supplied float array.
226
+ *
227
+ * @param array
228
+ */
229
+ public static void reverse(float[] array) {
230
+ int len = array.length - 1;
231
+ int len2 = array.length / 2;
232
+ for (int i = 0; i < len2; i++) {
233
+ float tmp = array[i];
234
+ array[i] = array[len - i];
235
+ array[len - i] = tmp;
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Reverses the item order of the supplied int array.
241
+ *
242
+ * @param array
243
+ */
244
+ public static void reverse(int[] array) {
245
+ int len = array.length - 1;
246
+ int len2 = array.length / 2;
247
+ for (int i = 0; i < len2; i++) {
248
+ int tmp = array[i];
249
+ array[i] = array[len - i];
250
+ array[len - i] = tmp;
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Reverses the item order of the supplied short array.
256
+ *
257
+ * @param array
258
+ */
259
+ public static void reverse(short[] array) {
260
+ int len = array.length - 1;
261
+ int len2 = array.length / 2;
262
+ for (int i = 0; i < len2; i++) {
263
+ short tmp = array[i];
264
+ array[i] = array[len - i];
265
+ array[len - i] = tmp;
266
+ }
267
+ }
268
+
269
+ /**
270
+ * Reverses the item order of the supplied array (generic types).
271
+ *
272
+ * @param <T>
273
+ * @param array
274
+ */
275
+ public static <T> void reverse(T[] array) {
276
+ int len = array.length - 1;
277
+ int len2 = array.length / 2;
278
+ for (int i = 0; i < len2; i++) {
279
+ T tmp = array[i];
280
+ array[i] = array[len - i];
281
+ array[len - i] = tmp;
282
+ }
283
+ }
284
+
285
+ /**
286
+ * Rearranges the array items in random order using the default
287
+ * java.util.Random generator. Operation is in-place, no copy is created.
288
+ *
289
+ * @param <T>
290
+ * @param array
291
+ */
292
+ public static <T> void shuffle(T[] array) {
293
+ shuffle(array, new Random());
294
+ }
295
+
296
+ /**
297
+ * Rearranges the array items in random order using the given RNG. Operation
298
+ * is in-place, no copy is created.
299
+ *
300
+ * @param <T>
301
+ * @param array
302
+ * @param rnd
303
+ */
304
+ public static <T> void shuffle(T[] array, Random rnd) {
305
+ int N = array.length;
306
+ for (int i = 0; i < N; i++) {
307
+ int r = i + rnd.nextInt(N - i); // between i and N-1
308
+ T swap = array[i];
309
+ array[i] = array[r];
310
+ array[r] = swap;
311
+ }
312
+ }
313
+
314
+ /**
315
+ *
316
+ * @param array
317
+ * @return
318
+ */
319
+ public static String toString(byte[] array) {
320
+ StringBuilder s = new StringBuilder();
321
+ s.append('{');
322
+ final int max = array.length - 1;
323
+ for (int i = 0; i < array.length; i++) {
324
+ s.append(array[i]);
325
+ if (i < max) {
326
+ s.append(',');
327
+ }
328
+ }
329
+ return s.append('}').toString();
330
+ }
331
+
332
+ /**
333
+ *
334
+ * @param array
335
+ * @return
336
+ */
337
+ public static String toString(double[] array) {
338
+ StringBuilder s = new StringBuilder();
339
+ s.append('{');
340
+ final int max = array.length - 1;
341
+ for (int i = 0; i < array.length; i++) {
342
+ s.append(array[i]);
343
+ if (i < max) {
344
+ s.append(',');
345
+ }
346
+ }
347
+ return s.append('}').toString();
348
+ }
349
+
350
+ /**
351
+ *
352
+ * @param array
353
+ * @return
354
+ */
355
+ public static String toString(float[] array) {
356
+ StringBuilder s = new StringBuilder();
357
+ s.append('{');
358
+ final int max = array.length - 1;
359
+ for (int i = 0; i < array.length; i++) {
360
+ s.append(array[i]);
361
+ if (i < max) {
362
+ s.append(',');
363
+ }
364
+ }
365
+ return s.append('}').toString();
366
+ }
367
+
368
+ /**
369
+ *
370
+ * @param array
371
+ * @return
372
+ */
373
+ public static String toString(int[] array) {
374
+ StringBuilder s = new StringBuilder();
375
+ s.append('{');
376
+ final int max = array.length - 1;
377
+ for (int i = 0; i < array.length; i++) {
378
+ s.append(array[i]);
379
+ if (i < max) {
380
+ s.append(',');
381
+ }
382
+ }
383
+ return s.append('}').toString();
384
+ }
385
+
386
+ /**
387
+ *
388
+ * @param <T>
389
+ * @param array
390
+ * @return
391
+ */
392
+ public static <T> String toString(T[] array) {
393
+ StringBuilder s = new StringBuilder();
394
+ s.append('{');
395
+ final int max = array.length - 1;
396
+ for (int i = 0; i < array.length; i++) {
397
+ s.append(array[i]);
398
+ if (i < max) {
399
+ s.append(',');
400
+ }
401
+ }
402
+ return s.append('}').toString();
403
+ }
404
+ }