toxiclibs 0.4.0 → 0.8.0

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