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,148 @@
1
+ /*
2
+ * jgeom: Geometry Library fo Java
3
+ *
4
+ * Copyright (C) 2005 Samuel Gerber
5
+ *
6
+ * This program is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU General Public License
8
+ * as published by the Free Software Foundation; either version 2
9
+ * of the License, or (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+ */
20
+ package toxi.geom.nurbs;
21
+
22
+ import toxi.geom.ReadonlyVec3D;
23
+ import toxi.geom.Vec3D;
24
+ import toxi.geom.Vec4D;
25
+
26
+ /**
27
+ * A ControlNet for a NurbsSurface
28
+ *
29
+ * @author sg
30
+ * @version 1.0
31
+ */
32
+ public class ControlNet {
33
+
34
+ private int nU, nV;
35
+ private Vec4D[][] cps;
36
+
37
+ /**
38
+ * Create a ControlNet from the given points the two dimensional array must
39
+ * be a Matrix else an IllegalArgumentException is thrown.
40
+ *
41
+ * @param cpnet
42
+ * "Matrix" of ControlPoints
43
+ */
44
+ public ControlNet(Vec4D[][] cpnet) throws IllegalArgumentException {
45
+ if (cpnet.length < 1) {
46
+ throw new IllegalArgumentException(
47
+ "Nurbs is not a Surface, to few ControlPoints in u Direction");
48
+ }
49
+ if (cpnet[0].length < 1) {
50
+ throw new IllegalArgumentException(
51
+ "Nurbs is not a Surface, to few ControlPoints in v Direction");
52
+ }
53
+ for (int i = 1; i < cpnet.length; i++) {
54
+ if (cpnet[i].length != cpnet[i - 1].length) {
55
+ throw new IllegalArgumentException(
56
+ "ControlPoint net is not a Matrix");
57
+ }
58
+ }
59
+
60
+ nU = cpnet.length;
61
+ nV = cpnet[0].length;
62
+ cps = cpnet;
63
+ }
64
+
65
+ /**
66
+ *
67
+ * @param origin
68
+ */
69
+ public void center(ReadonlyVec3D origin) {
70
+ Vec3D centroid = computeCentroid();
71
+ Vec3D delta = origin != null ? origin.sub(centroid) : centroid
72
+ .getInverted();
73
+ for (int i = 0; i < nU; i++) {
74
+ for (int j = 0; j < nV; j++) {
75
+ cps[i][j].addXYZSelf(delta);
76
+ }
77
+ }
78
+ }
79
+
80
+ /**
81
+ *
82
+ * @return
83
+ */
84
+ public Vec3D computeCentroid() {
85
+ Vec4D centroid = new Vec4D();
86
+ for (int i = 0; i < nU; i++) {
87
+ for (int j = 0; j < nV; j++) {
88
+ centroid.addSelf(cps[i][j]);
89
+ }
90
+ }
91
+ return centroid.scaleSelf(1f / (nU * nV)).to3D();
92
+ }
93
+
94
+ /**
95
+ * Get the ControlPoint at the position u,v
96
+ *
97
+ * @param u
98
+ * index in u direction
99
+ * @param v
100
+ * index in v direction
101
+ * @return The by u and v indexed ControlPoint
102
+ */
103
+ public Vec4D get(int u, int v) {
104
+ return cps[u][v];
105
+ }
106
+
107
+ /**
108
+ * Get all the control points
109
+ *
110
+ * @return 2D array
111
+ */
112
+ public Vec4D[][] getControlPoints() {
113
+ return cps;
114
+ }
115
+
116
+ /**
117
+ * Set the ControlPoint at the position u,v
118
+ *
119
+ * @param u
120
+ * index in u direction
121
+ * @param v
122
+ * index in v direction
123
+ * @param cp
124
+ * ControlPoint to set at the indexed position
125
+ */
126
+ public void set(int u, int v, Vec4D cp) {
127
+ cps[u][v].set(cp);
128
+ }
129
+
130
+ /**
131
+ * Get number of ControlPoints in u direction
132
+ *
133
+ * @return number of ControlPoints in u direction
134
+ */
135
+ public int uLength() {
136
+ return nU;
137
+ }
138
+
139
+ /**
140
+ * Get number of ControlPoints in v direction
141
+ *
142
+ * @return number of ControlPoints in v direction
143
+ */
144
+ public int vLength() {
145
+ return nV;
146
+ }
147
+
148
+ }
@@ -0,0 +1,112 @@
1
+ /*
2
+ * jgeom: Geometry Library fo Java
3
+ *
4
+ * Copyright (C) 2005 Samuel Gerber
5
+ *
6
+ * This program is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU General Public License
8
+ * as published by the Free Software Foundation; either version 2
9
+ * of the License, or (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+ */
20
+ package toxi.geom.nurbs;
21
+
22
+ import java.util.LinkedList;
23
+ import java.util.List;
24
+
25
+ import toxi.geom.Vec3D;
26
+ import toxi.geom.Vec4D;
27
+
28
+ /**
29
+ * Convenience class to create dynamically NurbsCurves.
30
+ *
31
+ * @author sg
32
+ * @version 1.0
33
+ */
34
+ public class CurveCreator {
35
+
36
+ private final List<Vec4D> cps = new LinkedList<>();
37
+ private NurbsCurve curve = null;
38
+
39
+ private final int degree;
40
+ private int incp = 0;
41
+
42
+ /**
43
+ * Create a new CurveCretor object which can create Curves from the given
44
+ * degree
45
+ *
46
+ * @param degree
47
+ * Degree the created NurbsCurve will have.
48
+ */
49
+ public CurveCreator(int degree) {
50
+ this.degree = degree;
51
+ }
52
+
53
+ /**
54
+ * Add a normal Point as ControlPoint to the CurveCreator. The newly added
55
+ * Point has automatically the weight one.
56
+ *
57
+ * @param cp
58
+ * Controlpoint to add with weight one.
59
+ * @return the actual NurbsCurve if any exists, or null otherwise (to less
60
+ * control for the given degree).
61
+ */
62
+ public NurbsCurve addControlPoint(Vec3D cp) {
63
+ return addControlPoint(new Vec4D(cp, 1));
64
+ }
65
+
66
+ /**
67
+ * Add a new Controlpoint to the current CurveCreator.
68
+ *
69
+ * @param cp
70
+ * ControlPoint to add.
71
+ * @return the actual NurbsCurve if any exists, or null otherwise (to less
72
+ * control for the given degree).
73
+ */
74
+ public NurbsCurve addControlPoint(Vec4D cp) {
75
+ cps.add(cp);
76
+ int np = cps.size();
77
+ int tmp = degree;
78
+ if (np <= degree) {
79
+ if (incp == 0) {
80
+ incp++;
81
+ return null;
82
+ }
83
+ tmp = incp++;
84
+ }
85
+
86
+ float[] u = new float[np + tmp + 1];
87
+ for (int i = 0; i <= tmp; i++) {
88
+ u[u.length - 1 - i] = 1;
89
+ }
90
+ if (np > degree + 1) {
91
+ float val = 1.0f / (np - degree);
92
+ float step = val;
93
+ for (int i = degree + 1; i < u.length - 1 - degree; i++) {
94
+ u[i] = val;
95
+ val += step;
96
+ }
97
+ }
98
+ curve = new BasicNurbsCurve(cps.toArray(new Vec4D[cps.size()]), u, tmp);
99
+ return curve;
100
+ }
101
+
102
+ /**
103
+ * Get the curve NurbsCurve of the CurveCreator
104
+ *
105
+ * @return the actual NurbsCurve if any exists, or null otherwise (to less
106
+ * control for the given degree).
107
+ */
108
+ public NurbsCurve getCurve() {
109
+ return curve;
110
+ }
111
+
112
+ }
@@ -0,0 +1,259 @@
1
+ package toxi.geom.nurbs;
2
+
3
+ import java.util.LinkedList;
4
+
5
+ import toxi.geom.Vec4D;
6
+ import toxi.math.MathUtils;
7
+
8
+ /**
9
+ * @author sg
10
+ */
11
+ public final class CurveUtils {
12
+
13
+ private static int[] binomials(int x, int y) {
14
+ int[] bin = new int[y + 1];
15
+ bin[0] = 1;
16
+ for (int i = 1; i <= y; i++) {
17
+ bin[i] = (bin[i - 1] * x) / i;
18
+ x--;
19
+ }
20
+ return bin;
21
+ };
22
+
23
+ /**
24
+ *
25
+ * @param curve1
26
+ * @param curve2
27
+ * @return
28
+ */
29
+ public static NurbsCurve connectCurves(NurbsCurve curve1, NurbsCurve curve2) {
30
+ return connectCurves(new NurbsCurve[] {
31
+ curve1, curve2
32
+ });
33
+ }
34
+
35
+ /**
36
+ *
37
+ * @param curves
38
+ * @return
39
+ */
40
+ public static NurbsCurve connectCurves(NurbsCurve[] curves) {
41
+ if (curves.length < 2) {
42
+ throw new IllegalArgumentException("Must be at least 2 curves");
43
+ }
44
+ int degree = curves[0].getDegree();
45
+ LinkedList<Float> knots = new LinkedList<>();
46
+ for (int i = 0; i <= degree; i++) {
47
+ knots.add(0f);
48
+ }
49
+ LinkedList<Vec4D> cps = new LinkedList<>();
50
+ cps.add(curves[0].getControlPoints()[0]);
51
+ for (NurbsCurve curve : curves) {
52
+ float[] u = curve.getKnots();
53
+ if (degree != curve.getDegree()) {
54
+ throw new IllegalArgumentException(
55
+ "Curves must have equal degrees");
56
+ }
57
+ float start = knots.getLast() - u[0];
58
+ for (int j = degree + 1; j < u.length - degree - 1; j++) {
59
+ knots.addLast(start + u[j]);
60
+ }
61
+ final float lastU = start + u[u.length - 1];
62
+ for (int j = 0; j < degree; j++) {
63
+ knots.addLast(lastU);
64
+ }
65
+ Vec4D[] pts = curve.getControlPoints();
66
+ for (int j = 1; j < pts.length; j++) {
67
+ cps.addLast(pts[j]);
68
+ }
69
+ // TODO check start and end point equality
70
+ }
71
+ knots.addLast(knots.getLast());
72
+
73
+ float[] u = new float[knots.size()];
74
+ for (int i = 0; i < u.length; i++) {
75
+ u[i] = knots.get(i);
76
+ }
77
+ return new BasicNurbsCurve(cps.toArray(new Vec4D[cps.size()]), u,
78
+ degree);
79
+ }
80
+
81
+ /**
82
+ *
83
+ * @param curve
84
+ * @param t
85
+ * @return
86
+ */
87
+ public static NurbsCurve increaseDegree(NurbsCurve curve, int t) {
88
+ if (t <= 0) {
89
+ throw new IllegalArgumentException(
90
+ "New degree smaller or equal degree of curve");
91
+ }
92
+ Vec4D[] cp = curve.getControlPoints();
93
+ float[] u = curve.getKnots();
94
+ int p = curve.getDegree();
95
+ int seg = curve.getKnotVector().getNumberOfSegments() + 1;
96
+ Vec4D[] cph = new Vec4D[cp.length + t * seg];
97
+ float[] uh = new float[u.length + t * seg];
98
+
99
+ float[][] bezalfs = new float[p + t + 1][p + 1];
100
+ Vec4D[] bpts = new Vec4D[p + 1];
101
+ Vec4D[] ebpts = new Vec4D[p + t + 1];
102
+ Vec4D[] nextbpts = new Vec4D[p - 1];
103
+ float[] alfs = new float[p - 1];
104
+
105
+ double m = u.length - 1;
106
+ int ph = p + t;
107
+ int ph2 = ph / 2;
108
+ bezalfs[0][0] = bezalfs[p + t][p] = 1;
109
+ int[] binph = binomials(ph, ph2);
110
+ int[] binp = binomials(p, p);
111
+ int[] bint = binomials(t, t);
112
+ for (int i = 1; i <= ph2; i++) {
113
+ float inv = 1f / binph[i];
114
+ int mpi = MathUtils.min(p, i);
115
+ for (int j = MathUtils.max(0, i - t); j <= mpi; j++) {
116
+ bezalfs[i][j] = inv * binp[j] * bint[i - j];
117
+ }
118
+ }
119
+ for (int i = ph2 + 1; i < ph; i++) {
120
+ double mpi = MathUtils.min(p, i);
121
+ for (int j = MathUtils.max(0, i - t); j <= mpi; j++) {
122
+ bezalfs[i][j] = bezalfs[ph - i][p - j];
123
+ }
124
+ }
125
+ int mh = ph;
126
+ int kind = ph + 1;
127
+ int r = -1;
128
+ int a = p;
129
+ int b = p + 1;
130
+ int cind = 1;
131
+ float ua = u[0];
132
+ cph[0] = new Vec4D(cp[0]);
133
+ for (int i = 0; i <= ph; i++) {
134
+ uh[i] = ua;
135
+ }
136
+ for (int i = 0; i <= p; i++) {
137
+ bpts[i] = new Vec4D(cp[i]);
138
+ }
139
+
140
+ while (b < m) {
141
+ int i = b;
142
+ while (b < m && u[b] == u[b + 1]) {
143
+ b++;
144
+ }
145
+ int mul = b - i + 1;
146
+ mh += mul + t;
147
+ float ub = u[b];
148
+ int oldr = r;
149
+ r = p - mul;
150
+ int lbz = 1;
151
+ if (oldr > 0) {
152
+ lbz = (oldr + 2) / 2;
153
+ }
154
+ int rbz = ph;
155
+ if (r > 0) {
156
+ rbz = ph - (r + 1) / 2;
157
+ float numer = ub - ua;
158
+ for (int k = p; k > mul; k--) {
159
+ alfs[k - mul - 1] = numer / (u[a + k] - ua);
160
+ }
161
+ for (int j = 1; j <= r; j++) {
162
+ int save = r - j;
163
+ int s = mul + j;
164
+ for (int k = p; k >= s; k--) {
165
+ bpts[k].interpolateToSelf(bpts[k - 1], 1 - alfs[k - s]);
166
+ }
167
+ nextbpts[save] = bpts[p];
168
+ }
169
+ }
170
+ for (i = lbz; i <= ph; i++) {
171
+ ebpts[i] = new Vec4D();
172
+ int mpi = MathUtils.min(p, i);
173
+ for (int j = MathUtils.max(0, i - t); j <= mpi; j++) {
174
+ ebpts[i].addScaledSelf(bpts[j], bezalfs[i][j]);
175
+ }
176
+ }
177
+ if (oldr > 1) {
178
+ int first = kind - 2;
179
+ int last = kind;
180
+ float den = ua - ub;
181
+ for (int tr = 1; tr < oldr; tr++) {
182
+ i = first;
183
+ int j = last;
184
+ int kj = j - kind + 1;
185
+ while (j - i > tr) {
186
+ if (i < cind) {
187
+ float alf = (ub - uh[i]) / (ua - uh[i]);
188
+ cph[i].interpolateToSelf(cph[i - 1], 1 - alf);
189
+ }
190
+ if (j >= lbz) {
191
+ if (j - tr <= kind - ph + oldr) {
192
+ float gam = (ub - uh[j - tr]) / den;
193
+ ebpts[kj].interpolateToSelf(ebpts[kj + 1],
194
+ 1 - gam);
195
+ } else {
196
+ float bet = (ub - uh[kind - 1]) / den;
197
+ ebpts[kj].interpolateToSelf(ebpts[kj + 1],
198
+ 1 - bet);
199
+ }
200
+ }
201
+ i++;
202
+ j--;
203
+ kj--;
204
+ }
205
+ first--;
206
+ last++;
207
+ }
208
+ }
209
+ if (a != p) {
210
+ for (i = 0; i < ph - oldr; i++) {
211
+ uh[kind] = ua;
212
+ kind++;
213
+ }
214
+ }
215
+ for (int j = lbz; j <= rbz; j++) {
216
+ cph[cind] = new Vec4D(ebpts[j]);
217
+ cind++;
218
+ }
219
+ if (b < m) {
220
+ for (int j = 0; j < r; j++) {
221
+ bpts[j].set(nextbpts[j]);
222
+ }
223
+ for (int j = r; j <= p; j++) {
224
+ bpts[j].set(cp[b - p + j]);
225
+ }
226
+ a = b;
227
+ b++;
228
+ ua = ub;
229
+ } else {
230
+ for (i = 0; i <= ph; i++) {
231
+ uh[kind + i] = ub;
232
+ }
233
+ }
234
+ }
235
+ int nh = mh - ph - 1;
236
+ float[] uNew = new float[mh + 1];
237
+ System.arraycopy(uh, 0, uNew, 0, uNew.length);
238
+ Vec4D[] cpNew = new Vec4D[nh + 1];
239
+ for (int i = 0; i < cpNew.length; i++) {
240
+ cpNew[i] = new Vec4D(cph[i]);
241
+ }
242
+ return new BasicNurbsCurve(cpNew, uNew, p + t);
243
+ }
244
+
245
+ private CurveUtils() {
246
+ }
247
+
248
+ /**
249
+ *
250
+ * @param curves
251
+ * @return
252
+ */
253
+ public NurbsCurve equalizeConnectCurves(NurbsCurve[] curves) {
254
+ // TODO equalize degrees and movw curves so that end of curves[i-1] is
255
+ // the same as start of curves[i];
256
+ return connectCurves(curves);
257
+ }
258
+
259
+ }