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,628 @@
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 toxi.geom.Vec3D.Axis;
31
+ import toxi.math.InterpolateStrategy;
32
+ import toxi.math.MathUtils;
33
+ import toxi.math.ScaleMap;
34
+
35
+ /**
36
+ * Readonly, immutable interface wrapper for Vec3D instances. Used throughout
37
+ * the library for safety purposes.
38
+ */
39
+ public interface ReadonlyVec3D {
40
+
41
+ /**
42
+ * Adds vector {a,b,c} and returns result as new vector.
43
+ *
44
+ * @param a
45
+ * X coordinate
46
+ * @param b
47
+ * Y coordinate
48
+ * @param c
49
+ * Z coordinate
50
+ *
51
+ * @return result as new vector
52
+ */
53
+ public Vec3D add(float a, float b, float c);
54
+
55
+ /**
56
+ *
57
+ * @param v
58
+ * @return
59
+ */
60
+ public Vec3D add(ReadonlyVec3D v);
61
+
62
+ /**
63
+ * Add vector v and returns result as new vector.
64
+ *
65
+ * @param v
66
+ * vector to add
67
+ *
68
+ * @return result as new vector
69
+ */
70
+ public Vec3D add(Vec3D v);
71
+
72
+ /**
73
+ * Computes the angle between this vector and vector V. This function
74
+ * assumes both vectors are normalized, if this can't be guaranteed, use the
75
+ * alternative implementation {@link #angleBetween(ReadonlyVec3D, boolean)}
76
+ *
77
+ * @param v
78
+ * vector
79
+ *
80
+ * @return angle in radians, or NaN if vectors are parallel
81
+ */
82
+ public float angleBetween(ReadonlyVec3D v);
83
+
84
+ /**
85
+ * Computes the angle between this vector and vector V.
86
+ *
87
+ * @param v
88
+ * vector
89
+ * @param forceNormalize
90
+ * true, if normalized versions of the vectors are to be used
91
+ * (Note: only copies will be used, original vectors will not be
92
+ * altered by this method)
93
+ *
94
+ * @return angle in radians, or NaN if vectors are parallel
95
+ */
96
+ public float angleBetween(ReadonlyVec3D v, boolean forceNormalize);
97
+
98
+ /**
99
+ * Compares the length of the vector with another one.
100
+ *
101
+ * @param v
102
+ * vector to compare with
103
+ *
104
+ * @return -1 if other vector is longer, 0 if both are equal or else +1
105
+ */
106
+ public int compareTo(ReadonlyVec3D v);
107
+
108
+ /**
109
+ * Copy.
110
+ *
111
+ * @return a new independent instance/copy of a given vector
112
+ */
113
+ public Vec3D copy();
114
+
115
+ /**
116
+ * Calculates cross-product with vector v. The resulting vector is
117
+ * perpendicular to both the current and supplied vector.
118
+ *
119
+ * @param v
120
+ * vector to cross
121
+ *
122
+ * @return cross-product as new vector
123
+ */
124
+ public Vec3D cross(ReadonlyVec3D v);
125
+
126
+ /**
127
+ * Calculates cross-product with vector v. The resulting vector is
128
+ * perpendicular to both the current and supplied vector and stored in the
129
+ * supplied result vector.
130
+ *
131
+ * @param v
132
+ * vector to cross
133
+ * @param result
134
+ * result vector
135
+ *
136
+ * @return result vector
137
+ */
138
+ public Vec3D crossInto(ReadonlyVec3D v, Vec3D result);
139
+
140
+ /**
141
+ * Calculates distance to another vector.
142
+ *
143
+ * @param v
144
+ * non-null vector
145
+ *
146
+ * @return distance or Float.NaN if v=null
147
+ */
148
+ public float distanceTo(ReadonlyVec3D v);
149
+
150
+ /**
151
+ * Calculates the squared distance to another vector.
152
+ *
153
+ * @param v
154
+ * non-null vector
155
+ *
156
+ * @return distance or NaN if v=null
157
+ *
158
+ * @see #magSquared()
159
+ */
160
+ public float distanceToSquared(ReadonlyVec3D v);
161
+
162
+ /**
163
+ * Computes the scalar product (dot product) with the given vector.
164
+ *
165
+ * @param v
166
+ * the v
167
+ *
168
+ * @return dot product
169
+ *
170
+ * @see <a href="http://en.wikipedia.org/wiki/Dot_product">Wikipedia
171
+ * entry</a>
172
+ */
173
+ public float dot(ReadonlyVec3D v);
174
+
175
+ /*
176
+ * (non-Javadoc)
177
+ *
178
+ * @see java.lang.Object#equals(java.lang.Object)
179
+ */
180
+
181
+ /**
182
+ *
183
+ * @param obj
184
+ * @return
185
+ */
186
+
187
+ @Override
188
+ public boolean equals(Object obj);
189
+
190
+ /**
191
+ * Compares this vector with the one given. The vectors are deemed equal if
192
+ * the individual differences of all component values are within the given
193
+ * tolerance.
194
+ *
195
+ * @param v
196
+ * the v
197
+ * @param tolerance
198
+ * the tolerance
199
+ *
200
+ * @return true, if equal
201
+ */
202
+ public boolean equalsWithTolerance(ReadonlyVec3D v, float tolerance);
203
+
204
+ /**
205
+ * Gets the abs.
206
+ *
207
+ * @return the abs
208
+ */
209
+ public Vec3D getAbs();
210
+
211
+ /**
212
+ * Converts the spherical vector back into cartesian coordinates.
213
+ *
214
+ * @return new vector
215
+ */
216
+ public Vec3D getCartesian();
217
+
218
+ /**
219
+ *
220
+ * @return
221
+ */
222
+ public Axis getClosestAxis();
223
+
224
+ /**
225
+ *
226
+ * @param id
227
+ * @return
228
+ */
229
+ public float getComponent(Axis id);
230
+
231
+ /**
232
+ *
233
+ * @param id
234
+ * @return
235
+ */
236
+ public float getComponent(int id);
237
+
238
+ /**
239
+ * Creates a copy of the vector which forcefully fits in the given AABB.
240
+ *
241
+ * @param box
242
+ * the box
243
+ *
244
+ * @return fitted vector
245
+ */
246
+ public Vec3D getConstrained(AABB box);
247
+
248
+ /**
249
+ * Creates a new vector whose components are the integer value of their
250
+ * current values.
251
+ *
252
+ * @return result as new vector
253
+ */
254
+ public Vec3D getFloored();
255
+
256
+ /**
257
+ * Creates a new vector whose components are the fractional part of their
258
+ * current values.
259
+ *
260
+ * @return result as new vector
261
+ */
262
+ public Vec3D getFrac();
263
+
264
+ /**
265
+ * Scales vector uniformly by factor -1 ( v = -v ).
266
+ *
267
+ * @return result as new vector
268
+ */
269
+ public Vec3D getInverted();
270
+
271
+ /**
272
+ * Creates a copy of the vector with its magnitude limited to the length
273
+ * given.
274
+ *
275
+ * @param lim
276
+ * new maximum magnitude
277
+ *
278
+ * @return result as new vector
279
+ */
280
+ public Vec3D getLimited(float lim);
281
+
282
+ /**
283
+ * Produces a new vector with its coordinates passed through the given
284
+ * {@link ScaleMap}.
285
+ *
286
+ * @param map
287
+ * @return mapped vector
288
+ */
289
+ public Vec3D getMapped(ScaleMap map);
290
+
291
+ /**
292
+ * Produces the normalized version as a new vector.
293
+ *
294
+ * @return new vector
295
+ */
296
+ public Vec3D getNormalized();
297
+
298
+ /**
299
+ * Produces a new vector normalized to the given length.
300
+ *
301
+ * @param len
302
+ * new desired length
303
+ *
304
+ * @return new vector
305
+ */
306
+ public Vec3D getNormalizedTo(float len);
307
+
308
+ /**
309
+ * Returns a multiplicative inverse copy of the vector.
310
+ *
311
+ * @return new vector
312
+ */
313
+ public Vec3D getReciprocal();
314
+
315
+ /**
316
+ *
317
+ * @param normal
318
+ * @return
319
+ */
320
+ public Vec3D getReflected(ReadonlyVec3D normal);
321
+
322
+ /**
323
+ * Gets the rotated around axis.
324
+ *
325
+ * @param axis
326
+ * the axis
327
+ * @param theta
328
+ * the theta
329
+ *
330
+ * @return new result vector
331
+ */
332
+ public Vec3D getRotatedAroundAxis(ReadonlyVec3D axis, float theta);
333
+
334
+ /**
335
+ * Creates a new vector rotated by the given angle around the X axis.
336
+ *
337
+ * @param theta
338
+ * the theta
339
+ *
340
+ * @return rotated vector
341
+ */
342
+ public Vec3D getRotatedX(float theta);
343
+
344
+ /**
345
+ * Creates a new vector rotated by the given angle around the Y axis.
346
+ *
347
+ * @param theta
348
+ * the theta
349
+ *
350
+ * @return rotated vector
351
+ */
352
+ public Vec3D getRotatedY(float theta);
353
+
354
+ /**
355
+ * Creates a new vector rotated by the given angle around the Z axis.
356
+ *
357
+ * @param theta
358
+ * the theta
359
+ *
360
+ * @return rotated vector
361
+ */
362
+ public Vec3D getRotatedZ(float theta);
363
+
364
+ /**
365
+ * Creates a new vector with its coordinates rounded to the given precision
366
+ * (grid alignment).
367
+ *
368
+ * @param prec
369
+ * @return grid aligned vector
370
+ */
371
+ public Vec3D getRoundedTo(float prec);
372
+
373
+ /**
374
+ * Creates a new vector in which all components are replaced with the signum
375
+ * of their original values. In other words if a components value was
376
+ * negative its new value will be -1, if zero => 0, if positive => +1
377
+ *
378
+ * @return result vector
379
+ */
380
+ public Vec3D getSignum();
381
+
382
+ /**
383
+ * Converts the vector into spherical coordinates. After the conversion the
384
+ * vector components are to be interpreted as:
385
+ * <ul>
386
+ * <li>x = radius</li>
387
+ * <li>y = azimuth</li>
388
+ * <li>z = theta</li>
389
+ * </ul>
390
+ *
391
+ * @return new vector
392
+ */
393
+ public Vec3D getSpherical();
394
+
395
+ /**
396
+ * Computes the vector's direction in the XY plane (for example for 2D
397
+ * points). The positive X axis equals 0 degrees.
398
+ *
399
+ * @return rotation angle
400
+ */
401
+ public float headingXY();
402
+
403
+ /**
404
+ * Computes the vector's direction in the XZ plane. The positive X axis
405
+ * equals 0 degrees.
406
+ *
407
+ * @return rotation angle
408
+ */
409
+ public float headingXZ();
410
+
411
+ /**
412
+ * Computes the vector's direction in the YZ plane. The positive Z axis
413
+ * equals 0 degrees.
414
+ *
415
+ * @return rotation angle
416
+ */
417
+ public float headingYZ();
418
+
419
+ /**
420
+ * Interpolates the vector towards the given target vector, using linear
421
+ * interpolation.
422
+ *
423
+ * @param v
424
+ * target vector
425
+ * @param f
426
+ * interpolation factor (should be in the range 0..1)
427
+ *
428
+ * @return result as new vector
429
+ */
430
+ public Vec3D interpolateTo(ReadonlyVec3D v, float f);
431
+
432
+ /**
433
+ * Interpolates the vector towards the given target vector, using the given
434
+ * {@link InterpolateStrategy}.
435
+ *
436
+ * @param v
437
+ * target vector
438
+ * @param f
439
+ * interpolation factor (should be in the range 0..1)
440
+ * @param s
441
+ * InterpolateStrategy instance
442
+ *
443
+ * @return result as new vector
444
+ */
445
+ public Vec3D interpolateTo(ReadonlyVec3D v, float f, InterpolateStrategy s);
446
+
447
+ /**
448
+ * Checks if the point is inside the given AABB.
449
+ *
450
+ * @param box
451
+ * bounding box to check
452
+ *
453
+ * @return true, if point is inside
454
+ */
455
+ public boolean isInAABB(AABB box);
456
+
457
+ /**
458
+ * Checks if the point is inside the given axis-aligned bounding box.
459
+ *
460
+ * @param boxOrigin
461
+ * bounding box origin/center
462
+ * @param boxExtent
463
+ * bounding box extends (half measure)
464
+ *
465
+ * @return true, if point is inside the box
466
+ */
467
+
468
+ public boolean isInAABB(Vec3D boxOrigin, Vec3D boxExtent);
469
+
470
+ /**
471
+ * Checks if the vector is parallel with either the X or Y axis (any
472
+ * direction).
473
+ *
474
+ * @param tolerance
475
+ * @return true, if parallel within the given tolerance
476
+ */
477
+ public boolean isMajorAxis(float tolerance);
478
+
479
+ /**
480
+ * Checks if vector has a magnitude equals or close to zero (tolerance used
481
+ * is {@link MathUtils#EPS}).
482
+ *
483
+ * @return true, if zero vector
484
+ */
485
+ public boolean isZeroVector();
486
+
487
+ /**
488
+ * Calculates the magnitude/eucledian length of the vector.
489
+ *
490
+ * @return vector length
491
+ */
492
+ public float magnitude();
493
+
494
+ /**
495
+ * Calculates only the squared magnitude/length of the vector. Useful for
496
+ * inverse square law applications and/or for speed reasons or if the real
497
+ * eucledian distance is not required (e.g. sorting).
498
+ *
499
+ * @return squared magnitude (x^2 + y^2 + z^2)
500
+ */
501
+ public float magSquared();
502
+
503
+ /**
504
+ * Scales vector uniformly and returns result as new vector.
505
+ *
506
+ * @param s
507
+ * scale factor
508
+ *
509
+ * @return new vector
510
+ */
511
+ public Vec3D scale(float s);
512
+
513
+ /**
514
+ * Scales vector non-uniformly and returns result as new vector.
515
+ *
516
+ * @param a
517
+ * scale factor for X coordinate
518
+ * @param b
519
+ * scale factor for Y coordinate
520
+ * @param c
521
+ * scale factor for Z coordinate
522
+ *
523
+ * @return new vector
524
+ */
525
+ public Vec3D scale(float a, float b, float c);
526
+
527
+ /**
528
+ * Scales vector non-uniformly by vector v and returns result as new vector.
529
+ *
530
+ * @param s
531
+ * scale vector
532
+ *
533
+ * @return new vector
534
+ */
535
+ public Vec3D scale(ReadonlyVec3D s);
536
+
537
+ /**
538
+ * Subtracts vector {a,b,c} and returns result as new vector.
539
+ *
540
+ * @param a
541
+ * X coordinate
542
+ * @param b
543
+ * Y coordinate
544
+ * @param c
545
+ * Z coordinate
546
+ *
547
+ * @return result as new vector
548
+ */
549
+ public Vec3D sub(float a, float b, float c);
550
+
551
+ /**
552
+ * Subtracts vector v and returns result as new vector.
553
+ *
554
+ * @param v
555
+ * vector to be subtracted
556
+ *
557
+ * @return result as new vector
558
+ */
559
+ public Vec3D sub(ReadonlyVec3D v);
560
+
561
+ /**
562
+ * Creates a new 2D vector of the XY components.
563
+ *
564
+ * @return new vector
565
+ */
566
+ public Vec2D to2DXY();
567
+
568
+ /**
569
+ * Creates a new 2D vector of the XZ components.
570
+ *
571
+ * @return new vector
572
+ */
573
+ public Vec2D to2DXZ();
574
+
575
+ /**
576
+ * Creates a new 2D vector of the YZ components.
577
+ *
578
+ * @return new vector
579
+ */
580
+ public Vec2D to2DYZ();
581
+
582
+ /**
583
+ * Creates a Vec4D instance of this vector with the w component set to 1.0
584
+ *
585
+ * @return 4d vector
586
+ */
587
+ public Vec4D to4D();
588
+
589
+ /**
590
+ * Creates a Vec4D instance of this vector with it w component set to the
591
+ * given value.
592
+ *
593
+ * @param w
594
+ * @return weighted 4d vector
595
+ */
596
+ public Vec4D to4D(float w);
597
+
598
+ /**
599
+ *
600
+ * @return
601
+ */
602
+ public float[] toArray();
603
+
604
+ /**
605
+ *
606
+ * @param w
607
+ * @return
608
+ */
609
+ public float[] toArray4(float w);
610
+
611
+ /**
612
+ *
613
+ * @return
614
+ */
615
+ public float x();
616
+
617
+ /**
618
+ *
619
+ * @return
620
+ */
621
+ public float y();
622
+
623
+ /**
624
+ *
625
+ * @return
626
+ */
627
+ public float z();
628
+ }