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,351 @@
1
+ /*
2
+ * __ .__ .__ ._____.
3
+ * _/ |_ _______ __|__| ____ | | |__\_ |__ ______
4
+ * \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
5
+ * | | ( <_> > <| \ \___| |_| || \_\ \\___ \
6
+ * |__| \____/__/\_ \__|\___ >____/__||___ /____ >
7
+ * \/ \/ \/ \/
8
+ *
9
+ * Copyright (c) 2006-2011 Karsten Schmidt
10
+ *
11
+ * This library is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 2.1 of the License, or (at your option) any later version.
15
+ *
16
+ * http://creativecommons.org/licenses/LGPL/2.1/
17
+ *
18
+ * This library is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ * You should have received a copy of the GNU Lesser General Public
24
+ * License along with this library; if not, write to the Free Software
25
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26
+ */
27
+
28
+ package toxi.geom;
29
+
30
+ import java.util.ArrayList;
31
+ import java.util.Arrays;
32
+ import java.util.List;
33
+
34
+ import javax.xml.bind.annotation.XmlAccessType;
35
+ import javax.xml.bind.annotation.XmlAccessorType;
36
+ import javax.xml.bind.annotation.XmlAttribute;
37
+ import javax.xml.bind.annotation.XmlElement;
38
+ import javax.xml.bind.annotation.XmlTransient;
39
+
40
+ /**
41
+ * <p>
42
+ * This is a generic 3D B-Spline class for curves of arbitrary length, control
43
+ * handles and patches are created and joined automatically as described here:
44
+ * <a
45
+ * href="http://www.ibiblio.org/e-notes/Splines/Bint.htm">ibiblio.org/e-notes/
46
+ * Splines/Bint.htm</a>
47
+ * </p>
48
+ *
49
+ * <p>
50
+ * Thanks to a bug report by Aaron Meyers (http://universaloscillation.com) the
51
+ * {@linkplain #toLineStrip3D(int)} method has a slightly changed behaviour from
52
+ * version 0014 onwards. In earlier versions erroneous duplicate points would be
53
+ * added near each given control point, which lead to various weird results.
54
+ * </p>
55
+ *
56
+ * <p>
57
+ * The new behaviour of the curve interpolation/computation is described in the
58
+ * docs for the {@linkplain #toLineStrip3D(int)} method below.
59
+ * </p>
60
+ *
61
+ * @version 0014 Added user adjustable curve tightness control
62
+ * @version 0015 Added JAXB annotations and List support for dynamic building of
63
+ * spline
64
+ */
65
+ @XmlAccessorType(XmlAccessType.FIELD)
66
+ public class Spline3D {
67
+
68
+ /**
69
+ *
70
+ */
71
+ public static final float DEFAULT_TIGHTNESS = 0.25f;
72
+
73
+ /**
74
+ *
75
+ */
76
+ @XmlTransient
77
+ protected Vec3D[] points;
78
+
79
+ /**
80
+ *
81
+ */
82
+ @XmlElement(name = "p")
83
+ public List<Vec3D> pointList = new ArrayList<>();
84
+
85
+ /**
86
+ *
87
+ */
88
+ @XmlTransient
89
+ public BernsteinPolynomial bernstein;
90
+
91
+ /**
92
+ *
93
+ */
94
+ @XmlTransient
95
+ public Vec3D[] delta;
96
+
97
+ /**
98
+ *
99
+ */
100
+ @XmlTransient
101
+ public Vec3D[] coeffA;
102
+
103
+ /**
104
+ *
105
+ */
106
+ @XmlTransient
107
+ public float[] bi;
108
+
109
+ /**
110
+ *
111
+ */
112
+ @XmlAttribute
113
+ protected float tightness;
114
+
115
+ /**
116
+ *
117
+ */
118
+ @XmlTransient
119
+ protected float invTightness;
120
+
121
+ /**
122
+ * Constructs an empty spline container with default curve tightness. You
123
+ * need to populate the spline manually by using {@link #add(ReadonlyVec3D)}
124
+ * .
125
+ */
126
+ public Spline3D() {
127
+ setTightness(DEFAULT_TIGHTNESS);
128
+ }
129
+
130
+ /**
131
+ * @param rawPoints
132
+ * list of control point vectors
133
+ */
134
+ public Spline3D(List<Vec3D> rawPoints) {
135
+ this(rawPoints, null, DEFAULT_TIGHTNESS);
136
+ }
137
+
138
+ /**
139
+ * @param rawPoints
140
+ * list of control point vectors
141
+ * @param b
142
+ * predefined Bernstein polynomial (good for reusing)
143
+ * @param tightness
144
+ * default curve tightness used for the interpolated vertices
145
+ * {@linkplain #setTightness(float)}
146
+ */
147
+ public Spline3D(List<Vec3D> rawPoints, BernsteinPolynomial b,
148
+ float tightness) {
149
+ pointList.addAll(rawPoints);
150
+ bernstein = b;
151
+ setTightness(tightness);
152
+ }
153
+
154
+ /**
155
+ * @param pointArray
156
+ * array of control point vectors
157
+ */
158
+ public Spline3D(Vec3D[] pointArray) {
159
+ this(pointArray, null, DEFAULT_TIGHTNESS);
160
+ }
161
+
162
+ /**
163
+ * @param pointArray
164
+ * array of control point vectors
165
+ * @param b
166
+ * predefined Bernstein polynomial (good for reusing)
167
+ * @param tightness
168
+ * default curve tightness used for the interpolated vertices
169
+ * {@linkplain #setTightness(float)}
170
+ */
171
+ public Spline3D(Vec3D[] pointArray, BernsteinPolynomial b, float tightness) {
172
+ this(Arrays.asList(pointArray), b, tightness);
173
+ }
174
+
175
+ /**
176
+ *
177
+ * @param x
178
+ * @param y
179
+ * @param z
180
+ * @return
181
+ */
182
+ public Spline3D add(float x, float y, float z) {
183
+ return add(new Vec3D(x, y, z));
184
+ }
185
+
186
+ /**
187
+ * Adds the given point to the list of control points.
188
+ *
189
+ * @param p
190
+ * @return itself
191
+ */
192
+ public Spline3D add(ReadonlyVec3D p) {
193
+ pointList.add(p.copy());
194
+ return this;
195
+ }
196
+
197
+ /**
198
+ *
199
+ */
200
+ protected void findCPoints() {
201
+ bi[1] = -tightness;
202
+ coeffA[1].set((points[2].x - points[0].x - delta[0].x) * tightness,
203
+ (points[2].y - points[0].y - delta[0].y) * tightness,
204
+ (points[2].z - points[0].z - delta[0].z) * tightness);
205
+ final int numP = getNumPoints();
206
+ for (int i = 2; i < numP - 1; i++) {
207
+ bi[i] = -1 / (invTightness + bi[i - 1]);
208
+ coeffA[i].set(
209
+ -(points[i + 1].x - points[i - 1].x - coeffA[i - 1].x)
210
+ * bi[i],
211
+ -(points[i + 1].y - points[i - 1].y - coeffA[i - 1].y)
212
+ * bi[i],
213
+ -(points[i + 1].z - points[i - 1].z - coeffA[i - 1].z)
214
+ * bi[i]);
215
+ }
216
+ for (int i = numP - 2; i > 0; i--) {
217
+ delta[i].set(coeffA[i].x + delta[i + 1].x * bi[i], coeffA[i].y
218
+ + delta[i + 1].y * bi[i], coeffA[i].z + delta[i + 1].z
219
+ * bi[i]);
220
+ }
221
+ }
222
+
223
+ /**
224
+ * Returns the number of key points.
225
+ *
226
+ * @return the numP
227
+ */
228
+ public final int getNumPoints() {
229
+ return pointList.size();
230
+ }
231
+
232
+ /**
233
+ * @return the pointList
234
+ */
235
+ public List<Vec3D> getPointList() {
236
+ return pointList;
237
+ }
238
+
239
+ /**
240
+ * @see #setTightness(float)
241
+ * @return the spline3d tightness
242
+ * @since 0014 (rev.216)
243
+ */
244
+ public float getTightness() {
245
+ return tightness;
246
+ }
247
+
248
+ /**
249
+ * Overrides the current control points with the given list.
250
+ *
251
+ * @param plist
252
+ * the pointList to set
253
+ * @return itself
254
+ */
255
+ public Spline3D setPointList(List<Vec3D> plist) {
256
+ pointList.clear();
257
+ for (ReadonlyVec3D p : plist) {
258
+ pointList.add(p.copy());
259
+ }
260
+ return this;
261
+ }
262
+
263
+ /**
264
+ * Sets the tightness for future curve interpolation calls. Default value is
265
+ * 0.25. A value of 0.0 equals linear interpolation between the given curve
266
+ * input points. Curve behaviour for values outside the 0.0 .. 0.5 interval
267
+ * is unspecified and becomes increasingly less intuitive. Negative values
268
+ * are possible too and create interesting results (in some cases).
269
+ *
270
+ * @param tightness
271
+ * the tightness value used for the next call to
272
+ * {@link #toLineStrip3D(int)}
273
+ * @since 0014 (rev. 216)
274
+ * @return itself
275
+ */
276
+ public final Spline3D setTightness(float tightness) {
277
+ this.tightness = tightness;
278
+ this.invTightness = 1f / tightness;
279
+ return this;
280
+ }
281
+
282
+ /**
283
+ * <p>
284
+ * Computes all curve vertices based on the resolution/number of
285
+ * subdivisions requested. The higher, the more vertices are computed:
286
+ * </p>
287
+ * <p>
288
+ * <strong>(number of control points - 1) * resolution + 1</strong>
289
+ * </p>
290
+ * <p>
291
+ * Since version 0014 the automatic placement of the curve handles can also
292
+ * be manipulated via the {@linkplain #setTightness(float)} method.
293
+ * </p>
294
+ *
295
+ * @param res
296
+ * the number of vertices to be computed per segment between
297
+ * original control points (incl. control point always at the
298
+ * start of each segment)
299
+ * @return list of Vec3D vertices along the curve
300
+ */
301
+ public LineStrip3D toLineStrip3D(int res) {
302
+ updateCoefficients();
303
+ if (res < 1) {
304
+ res = 1;
305
+ }
306
+ res++;
307
+ if (bernstein == null || bernstein.resolution != res) {
308
+ bernstein = new BernsteinPolynomial(res);
309
+ }
310
+ LineStrip3D strip = new LineStrip3D();
311
+ findCPoints();
312
+ Vec3D deltaP = new Vec3D();
313
+ Vec3D deltaQ = new Vec3D();
314
+ res--;
315
+ for (int i = 0, numP = getNumPoints(); i < numP - 1; i++) {
316
+ Vec3D p = points[i];
317
+ Vec3D q = points[i + 1];
318
+ deltaP.set(delta[i]).addSelf(p);
319
+ deltaQ.set(q).subSelf(delta[i + 1]);
320
+ for (int k = 0; k < res; k++) {
321
+ float x = p.x * bernstein.b0[k] + deltaP.x * bernstein.b1[k]
322
+ + deltaQ.x * bernstein.b2[k] + q.x * bernstein.b3[k];
323
+ float y = p.y * bernstein.b0[k] + deltaP.y * bernstein.b1[k]
324
+ + deltaQ.y * bernstein.b2[k] + q.y * bernstein.b3[k];
325
+ float z = p.z * bernstein.b0[k] + deltaP.z * bernstein.b1[k]
326
+ + deltaQ.z * bernstein.b2[k] + q.z * bernstein.b3[k];
327
+ strip.add(new Vec3D(x, y, z));
328
+ }
329
+ }
330
+ strip.add(points[points.length - 1].copy());
331
+ return strip;
332
+ }
333
+
334
+ /**
335
+ *
336
+ */
337
+ public void updateCoefficients() {
338
+ final int numP = getNumPoints();
339
+ if (points == null || (points != null && points.length != numP)) {
340
+ coeffA = new Vec3D[numP];
341
+ delta = new Vec3D[numP];
342
+ bi = new float[numP];
343
+ for (int i = 0; i < numP; i++) {
344
+ coeffA[i] = new Vec3D();
345
+ delta[i] = new Vec3D();
346
+ }
347
+ }
348
+ setTightness(tightness);
349
+ points = pointList.toArray(new Vec3D[numP]);
350
+ }
351
+ }
@@ -0,0 +1,151 @@
1
+ /*
2
+ * __ .__ .__ ._____.
3
+ * _/ |_ _______ __|__| ____ | | |__\_ |__ ______
4
+ * \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
5
+ * | | ( <_> > <| \ \___| |_| || \_\ \\___ \
6
+ * |__| \____/__/\_ \__|\___ >____/__||___ /____ >
7
+ * \/ \/ \/ \/
8
+ *
9
+ * Copyright (c) 2006-2011 Karsten Schmidt
10
+ *
11
+ * This library is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 2.1 of the License, or (at your option) any later version.
15
+ *
16
+ * http://creativecommons.org/licenses/LGPL/2.1/
17
+ *
18
+ * This library is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ * You should have received a copy of the GNU Lesser General Public
24
+ * License along with this library; if not, write to the Free Software
25
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26
+ */
27
+
28
+ package toxi.geom;
29
+
30
+ import java.util.ArrayList;
31
+ import java.util.List;
32
+
33
+ /**
34
+ * A version of the Sutherland-Hodgeman algorithm to clip 2D polygons optimized
35
+ * for rectangular clipping regions.
36
+ *
37
+ * More information: http://en.wikipedia.org/wiki/Sutherland-Hodgman_algorithm
38
+ *
39
+ * @see ConvexPolygonClipper
40
+ */
41
+ public class SutherlandHodgemanClipper implements PolygonClipper2D {
42
+
43
+ /**
44
+ *
45
+ */
46
+ protected Rect bounds;
47
+
48
+ /**
49
+ *
50
+ * @param bounds
51
+ */
52
+ public SutherlandHodgemanClipper(Rect bounds) {
53
+ this.bounds = bounds;
54
+ }
55
+
56
+ @Override
57
+ public Polygon2D clipPolygon(Polygon2D poly) {
58
+ List<Vec2D> points = new ArrayList<>(poly.vertices);
59
+ List<Vec2D> clipped = new ArrayList<>();
60
+ points.add(points.get(0));
61
+ for (int edgeID = 0; edgeID < 4; edgeID++) {
62
+ clipped.clear();
63
+ for (int i = 0, num = points.size() - 1; i < num; i++) {
64
+ Vec2D p = points.get(i);
65
+ Vec2D q = points.get(i + 1);
66
+ if (isInsideEdge(p, edgeID)) {
67
+ if (isInsideEdge(q, edgeID)) {
68
+ clipped.add(q.copy());
69
+ } else {
70
+ clipped.add(getClippedPosOnEdge(edgeID, p, q));
71
+ }
72
+ continue;
73
+ }
74
+ if (isInsideEdge(q, edgeID)) {
75
+ clipped.add(getClippedPosOnEdge(edgeID, p, q));
76
+ clipped.add(q.copy());
77
+ }
78
+ }
79
+ if (clipped.size() > 0
80
+ && clipped.get(0) != clipped.get(clipped.size() - 1)) {
81
+ clipped.add(clipped.get(0));
82
+ }
83
+ List<Vec2D> t = points;
84
+ points = clipped;
85
+ clipped = t;
86
+ }
87
+ return new Polygon2D(points).removeDuplicates(0.001f);
88
+ }
89
+
90
+ /**
91
+ * @return the bounding rect
92
+ */
93
+ public Rect getBounds() {
94
+ return bounds;
95
+ }
96
+
97
+ private Vec2D getClippedPosOnEdge(int edgeID, Vec2D p1, Vec2D p2) {
98
+ switch (edgeID) {
99
+ case 0:
100
+ return new Vec2D(p1.x + ((bounds.y - p1.y) * (p2.x - p1.x))
101
+ / (p2.y - p1.y), bounds.y);
102
+ case 2:
103
+ float by = bounds.y + bounds.height;
104
+ return new Vec2D(p1.x + ((by - p1.y) * (p2.x - p1.x))
105
+ / (p2.y - p1.y), by);
106
+ case 1:
107
+ float bx = bounds.x + bounds.width;
108
+ return new Vec2D(bx, p1.y + ((bx - p1.x) * (p2.y - p1.y))
109
+ / (p2.x - p1.x));
110
+
111
+ case 3:
112
+ return new Vec2D(bounds.x, p1.y
113
+ + ((bounds.x - p1.x) * (p2.y - p1.y)) / (p2.x - p1.x));
114
+ default:
115
+ return null;
116
+ }
117
+ }
118
+
119
+ private boolean isInsideEdge(Vec2D p, int edgeID) {
120
+ switch (edgeID) {
121
+ case 0:
122
+ return p.y >= bounds.y;
123
+ case 2:
124
+ return p.y < bounds.y + bounds.height;
125
+ case 3:
126
+ return p.x >= bounds.x;
127
+ case 1:
128
+ return p.x < bounds.x + bounds.width;
129
+ default:
130
+ return false;
131
+ }
132
+ }
133
+
134
+ /**
135
+ *
136
+ * @param list
137
+ * @param q
138
+ * @return
139
+ */
140
+ protected boolean isKnownVertex(List<Vec2D> list, Vec2D q) {
141
+ return list.stream().anyMatch((p) -> (p.equalsWithTolerance(q, 0.0001f)));
142
+ }
143
+
144
+ /**
145
+ * @param bounds
146
+ * the bounding rect to set
147
+ */
148
+ public void setBounds(Rect bounds) {
149
+ this.bounds = bounds;
150
+ }
151
+ }