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
+ package toxi.geom;
2
+
3
+ import java.util.ArrayList;
4
+ import java.util.List;
5
+
6
+ /**
7
+ * Standard multi-segment bezier curve implementation with optional automatic
8
+ * handle alignment between segments. Also provides curve tangent calculation
9
+ * feature. Can be used to create closed curves. Usage of this class is very
10
+ * similar to {@link Spline3D}.
11
+ */
12
+ public class BezierCurve3D {
13
+
14
+ /**
15
+ *
16
+ * @param a
17
+ * @param b
18
+ * @param c
19
+ * @param d
20
+ * @param t
21
+ * @return
22
+ */
23
+ public static Vec3D computePointInSegment(Vec3D a, Vec3D b, Vec3D c,
24
+ Vec3D d, float t) {
25
+ float it = 1.0f - t;
26
+ float it2 = it * it;
27
+ float t2 = t * t;
28
+ return a.scale(it2 * it).addSelf(b.scale(3 * t * it2))
29
+ .addSelf(c.scale(3 * t2 * it)).addSelf(d.scale(t2 * t));
30
+ }
31
+
32
+ /**
33
+ *
34
+ * @param a
35
+ * @param b
36
+ * @param c
37
+ * @param d
38
+ * @param t
39
+ * @return
40
+ */
41
+ public static Vec3D computeTangentInSegment(Vec3D a, Vec3D b, Vec3D c,
42
+ Vec3D d, float t) {
43
+ float t2 = t * t;
44
+ float x = (3 * t2 * (-a.x + 3 * b.x - 3 * c.x + d.x) + 6 * t
45
+ * (a.x - 2 * b.x + c.x) + 3 * (-a.x + b.x));
46
+ float y = (3 * t2 * (-a.y + 3 * b.y - 3 * c.y + d.y) + 6 * t
47
+ * (a.y - 2 * b.y + c.y) + 3 * (-a.y + b.y));
48
+ float z = (3 * t2 * (-a.z + 3 * b.z - 3 * c.z + d.z) + 6 * t
49
+ * (a.z - 2 * b.z + c.z) + 3 * (-a.z + b.z));
50
+ return new Vec3D(x, y, z).normalize();
51
+ }
52
+
53
+ private final List<Vec3D> points;
54
+
55
+ /**
56
+ *
57
+ */
58
+ public BezierCurve3D() {
59
+ points = new ArrayList<Vec3D>();
60
+ }
61
+
62
+ /**
63
+ *
64
+ * @param points
65
+ */
66
+ public BezierCurve3D(List<Vec3D> points) {
67
+ this.points = points;
68
+ }
69
+
70
+ /**
71
+ *
72
+ * @param p
73
+ * @return
74
+ */
75
+ public BezierCurve3D add(Vec3D p) {
76
+ points.add(p);
77
+ return this;
78
+ }
79
+
80
+ /**
81
+ *
82
+ */
83
+ public void alignAllHandles() {
84
+ for (int i = 0, num = points.size() - 1; i < num; i += 3) {
85
+ alignHandlesForPoint(i);
86
+ }
87
+ }
88
+
89
+ /**
90
+ *
91
+ * @param id
92
+ */
93
+ public void alignHandlesForPoint(int id) {
94
+ if (id < points.size() - 1) {
95
+ Vec3D c;
96
+ if (id == 0 && isClosed()) {
97
+ c = points.get(points.size() - 2);
98
+ } else {
99
+ c = points.get(id - 1);
100
+ }
101
+ Vec3D d = points.get(id);
102
+ Vec3D e = points.get(id + 1);
103
+ Vec3D cd = d.sub(c);
104
+ Vec3D de = e.sub(d);
105
+ Vec3D cd2 = cd.interpolateTo(de, 0.5f);
106
+ c.set(d.sub(cd2));
107
+ e.set(d.add(de.interpolateToSelf(cd, 0.5f)));
108
+ } else {
109
+ throw new IllegalArgumentException("invalid point index");
110
+ }
111
+ }
112
+
113
+ /**
114
+ * @return true, if the curve is closed. I.e. the first and last control
115
+ * point coincide.
116
+ */
117
+ public boolean isClosed() {
118
+ return points.get(0).equals(points.get(points.size() - 1));
119
+ }
120
+
121
+ /**
122
+ * Computes a list of intermediate curve points for all segments. For each
123
+ * curve segment the given number of points will be produced.
124
+ *
125
+ * @param res
126
+ * number of points per segment
127
+ * @return list of Vec3Ds
128
+ */
129
+ public LineStrip3D toLineStrip3D(int res) {
130
+ LineStrip3D strip = new LineStrip3D();
131
+ int i = 0;
132
+ int maxRes = res;
133
+ for (int num = points.size(); i < num - 3; i += 3) {
134
+ Vec3D a = points.get(i);
135
+ Vec3D b = points.get(i + 1);
136
+ Vec3D c = points.get(i + 2);
137
+ Vec3D d = points.get(i + 3);
138
+ if (i + 3 > num - 3) {
139
+ maxRes++;
140
+ }
141
+ for (int t = 0; t < maxRes; t++) {
142
+ strip.add(computePointInSegment(a, b, c, d, (float) t / res));
143
+ }
144
+ }
145
+ return strip;
146
+ }
147
+
148
+ }
@@ -0,0 +1,185 @@
1
+ package toxi.geom;
2
+
3
+ import java.awt.Shape;
4
+ import java.awt.geom.Area;
5
+ import java.awt.geom.Ellipse2D;
6
+ import java.awt.geom.Path2D;
7
+ import java.awt.geom.PathIterator;
8
+ import java.awt.geom.Rectangle2D;
9
+ import java.util.ArrayList;
10
+ import java.util.List;
11
+
12
+ /**
13
+ *
14
+ * @author tux
15
+ */
16
+ public class BooleanShapeBuilder {
17
+
18
+ /**
19
+ *
20
+ */
21
+ public enum Type {
22
+
23
+ /**
24
+ *
25
+ */
26
+ UNION,
27
+
28
+ /**
29
+ *
30
+ */
31
+ INTERSECTION,
32
+
33
+ /**
34
+ *
35
+ */
36
+ DIFFERENCE,
37
+
38
+ /**
39
+ *
40
+ */
41
+ XOR;
42
+ }
43
+
44
+ private int bezierRes;
45
+
46
+ private final Area area;
47
+ private final Type type;
48
+
49
+ /**
50
+ *
51
+ * @param type
52
+ */
53
+ public BooleanShapeBuilder(Type type) {
54
+ this(type, 8);
55
+ }
56
+
57
+ /**
58
+ *
59
+ * @param type
60
+ * @param bezierRes
61
+ */
62
+ public BooleanShapeBuilder(Type type, int bezierRes) {
63
+ this.type = type;
64
+ this.bezierRes = bezierRes;
65
+ area = new Area();
66
+ }
67
+
68
+ /**
69
+ *
70
+ * @param s
71
+ * @return
72
+ */
73
+ public BooleanShapeBuilder addShape(Shape2D s) {
74
+ return combineWithArea(new Area(convertToAWTShape(s)));
75
+ }
76
+
77
+ /**
78
+ *
79
+ * @param a
80
+ * @return
81
+ */
82
+ public BooleanShapeBuilder combineWithArea(Area a) {
83
+ switch (type) {
84
+ case UNION:
85
+ area.add(a);
86
+ break;
87
+ case INTERSECTION:
88
+ area.intersect(a);
89
+ break;
90
+ case DIFFERENCE:
91
+ area.subtract(a);
92
+ break;
93
+ case XOR:
94
+ area.exclusiveOr(a);
95
+ break;
96
+ }
97
+ return this;
98
+ }
99
+
100
+ /**
101
+ *
102
+ * @return
103
+ */
104
+ public List<Polygon2D> computeShapes() {
105
+ List<Polygon2D> shapes = new ArrayList<Polygon2D>();
106
+ PathIterator i = area.getPathIterator(null);
107
+ float[] buf = new float[6];
108
+ Vec2D prev = new Vec2D();
109
+ Polygon2D s = null;
110
+ while (!i.isDone()) {
111
+ int id = i.currentSegment(buf);
112
+ switch (id) {
113
+ case PathIterator.SEG_MOVETO:
114
+ s = new Polygon2D();
115
+ shapes.add(s);
116
+ prev.set(buf[0], buf[1]);
117
+ s.add(prev.copy());
118
+ break;
119
+ case PathIterator.SEG_LINETO:
120
+ prev.set(buf[0], buf[1]);
121
+ s.add(prev.copy());
122
+ break;
123
+ case PathIterator.SEG_CUBICTO:
124
+ Vec2D pa = new Vec2D(buf[0], buf[1]);
125
+ Vec2D pb = new Vec2D(buf[2], buf[3]);
126
+ Vec2D pc = new Vec2D(buf[4], buf[5]);
127
+ for (int t = 0; t <= bezierRes; t++) {
128
+ s.add(BezierCurve2D.computePointInSegment(prev, pa, pb,
129
+ pc, (float) t / bezierRes));
130
+ }
131
+ prev.set(pc);
132
+ break;
133
+ case PathIterator.SEG_CLOSE:
134
+ break;
135
+ default:
136
+ throw new UnsupportedOperationException(
137
+ "Unsupported path segment type: " + id);
138
+ }
139
+ i.next();
140
+ }
141
+ return shapes;
142
+ }
143
+
144
+ private Shape convertToAWTShape(Shape2D s) {
145
+ if (s instanceof Rect) {
146
+ Rect r = (Rect) s;
147
+ return new Rectangle2D.Float(r.x, r.y, r.width, r.height);
148
+ }
149
+ if (s instanceof Triangle2D) {
150
+ Triangle2D t = (Triangle2D) s;
151
+ Path2D path = new Path2D.Float();
152
+ path.moveTo(t.a.x, t.a.y);
153
+ path.lineTo(t.b.x, t.b.y);
154
+ path.lineTo(t.c.x, t.c.y);
155
+ path.closePath();
156
+ return path;
157
+ }
158
+ if (s instanceof Ellipse) {
159
+ Ellipse e = (Ellipse) s;
160
+ Vec2D r = e.getRadii();
161
+ return new Ellipse2D.Float(e.x - r.x, e.y - r.y, r.x * 2, r.y * 2);
162
+ }
163
+ if (!(s instanceof Polygon2D)) {
164
+ s = s.toPolygon2D();
165
+ }
166
+ Polygon2D poly = (Polygon2D) s;
167
+ Path2D path = new Path2D.Float();
168
+ Vec2D p = poly.get(0);
169
+ path.moveTo(p.x, p.y);
170
+ for (int i = 1, num = poly.getNumVertices(); i < num; i++) {
171
+ p = poly.get(i);
172
+ path.lineTo(p.x, p.y);
173
+ }
174
+ path.closePath();
175
+ return path;
176
+ }
177
+
178
+ /**
179
+ *
180
+ * @return
181
+ */
182
+ public Area getArea() {
183
+ return area;
184
+ }
185
+ }
@@ -0,0 +1,52 @@
1
+ package toxi.geom;
2
+
3
+ /**
4
+ *
5
+ * @author tux
6
+ */
7
+ public class BoxIntersector implements Intersector3D {
8
+
9
+ private AABB box;
10
+ private final IsectData3D isec;
11
+
12
+ /**
13
+ *
14
+ * @param box
15
+ */
16
+ public BoxIntersector(AABB box) {
17
+ this.box = box;
18
+ this.isec = new IsectData3D();
19
+ }
20
+
21
+ /**
22
+ * @return the box
23
+ */
24
+ public AABB getBox() {
25
+ return box;
26
+ }
27
+
28
+ @Override
29
+ public IsectData3D getIntersectionData() {
30
+ return isec;
31
+ }
32
+
33
+ @Override
34
+ public boolean intersectsRay(Ray3D ray) {
35
+ final Vec3D pos = box.intersectsRay(ray, 0, Float.MAX_VALUE);
36
+ isec.pos = pos;
37
+ isec.isIntersection = pos != null;
38
+ if (isec.isIntersection) {
39
+ isec.normal = box.getNormalForPoint(pos);
40
+ isec.dist = ray.distanceTo(pos);
41
+ }
42
+ return isec.isIntersection;
43
+ }
44
+
45
+ /**
46
+ * @param box
47
+ * the box to set
48
+ */
49
+ public void setBox(AABB box) {
50
+ this.box = box;
51
+ }
52
+ }
@@ -0,0 +1,230 @@
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.List;
31
+
32
+ import toxi.math.MathUtils;
33
+
34
+ /**
35
+ * This class overrides {@link Ellipse} to define a 2D circle and provides
36
+ * several utility methods for it, including factory methods to construct
37
+ * circles from points.
38
+ */
39
+ public class Circle extends Ellipse {
40
+
41
+ /**
42
+ * Factory method to construct a circle which has the two given points lying
43
+ * on its perimeter. If the points are coincident, the circle will have a
44
+ * radius of zero.
45
+ *
46
+ * @param p1
47
+ * @param p2
48
+ * @return new circle instance
49
+ */
50
+ public static Circle from2Points(Vec2D p1, Vec2D p2) {
51
+ Vec2D m = p1.interpolateTo(p2, 0.5f);
52
+ return new Circle(m, m.distanceTo(p1));
53
+ }
54
+
55
+ /**
56
+ * Factory method to construct a circle which has the three given points
57
+ * lying on its perimeter. The function returns null, if the 3 points are
58
+ * co-linear (in which case it's impossible to find a circle).
59
+ *
60
+ * Based on CPP code by Paul Bourke:
61
+ * http://local.wasp.uwa.edu.au/~pbourke/geometry/circlefrom3/
62
+ *
63
+ * @param p1
64
+ * @param p2
65
+ * @param p3
66
+ * @return new circle instance or null
67
+ */
68
+ public static Circle from3Points(Vec2D p1, Vec2D p2, Vec2D p3) {
69
+ Circle circle = null;
70
+ Vec2D deltaA = p2.sub(p1);
71
+ Vec2D deltaB = p3.sub(p2);
72
+ if (MathUtils.abs(deltaA.x) <= 0.0000001f
73
+ && MathUtils.abs(deltaB.y) <= 0.0000001f) {
74
+ Vec2D centroid = new Vec2D(p2.x + p3.x, p1.y + p2.y)
75
+ .scaleSelf(0.5f);
76
+ float radius = centroid.distanceTo(p1);
77
+ circle = new Circle(centroid, radius);
78
+ } else {
79
+ float aSlope = deltaA.y / deltaA.x;
80
+ float bSlope = deltaB.y / deltaB.x;
81
+ if (MathUtils.abs(aSlope - bSlope) > 0.0000001f) {
82
+ float x = (aSlope * bSlope * (p1.y - p3.y) + bSlope
83
+ * (p1.x + p2.x) - aSlope * (p2.x + p3.x))
84
+ / (2 * (bSlope - aSlope));
85
+ float y = -(x - (p1.x + p2.x) / 2) / aSlope + (p1.y + p2.y) / 2;
86
+ Vec2D centroid = new Vec2D(x, y);
87
+ float radius = centroid.distanceTo(p1);
88
+ circle = new Circle(centroid, radius);
89
+ }
90
+ }
91
+ return circle;
92
+ }
93
+
94
+ /**
95
+ *
96
+ * @param vertices
97
+ * @return
98
+ */
99
+ public static Circle newBoundingCircle(List<Vec2D> vertices) {
100
+ Vec2D origin = new Vec2D();
101
+ float maxD = 0;
102
+ for (Vec2D v : vertices) {
103
+ origin.addSelf(v);
104
+ }
105
+ origin.scaleSelf(1f / vertices.size());
106
+ for (Vec2D v : vertices) {
107
+ float d = origin.distanceToSquared(v);
108
+ if (d > maxD) {
109
+ maxD = d;
110
+ }
111
+ }
112
+ return new Circle(origin, (float) Math.sqrt(maxD));
113
+ }
114
+
115
+ /**
116
+ *
117
+ */
118
+ public Circle() {
119
+ this(new Vec2D(), 1);
120
+ }
121
+
122
+ /**
123
+ *
124
+ * @param c
125
+ */
126
+ public Circle(Circle c) {
127
+ this(c, c.radius.x);
128
+ }
129
+
130
+ /**
131
+ *
132
+ * @param radius
133
+ */
134
+ public Circle(float radius) {
135
+ this(0, 0, radius);
136
+ }
137
+
138
+ /**
139
+ *
140
+ * @param x
141
+ * @param y
142
+ * @param radius
143
+ */
144
+ public Circle(float x, float y, float radius) {
145
+ super(x, y, radius, radius);
146
+ }
147
+
148
+ /**
149
+ *
150
+ * @param origin
151
+ * @param radius
152
+ */
153
+ public Circle(ReadonlyVec2D origin, float radius) {
154
+ super(origin, radius);
155
+ }
156
+
157
+ /*
158
+ * (non-Javadoc)
159
+ *
160
+ * @see toxi.geom.Ellipse#containsPoint(toxi.geom.Vec2D)
161
+ */
162
+ @Override
163
+ public boolean containsPoint(ReadonlyVec2D p) {
164
+ return distanceToSquared(p) <= radius.x * radius.x;
165
+ }
166
+
167
+ /*
168
+ * (non-Javadoc)
169
+ *
170
+ * @see toxi.geom.Ellipse#getCircumference()
171
+ */
172
+ @Override
173
+ public float getCircumference() {
174
+ return MathUtils.TWO_PI * radius.x;
175
+ }
176
+
177
+ /**
178
+ *
179
+ * @return
180
+ */
181
+ public float getRadius() {
182
+ return radius.x;
183
+ }
184
+
185
+ /**
186
+ *
187
+ * @param p
188
+ * @return
189
+ */
190
+ public Vec2D[] getTangentPoints(ReadonlyVec2D p) {
191
+ Vec2D m = interpolateTo(p, 0.5f);
192
+ return intersectsCircle(new Circle(m, m.distanceTo(p)));
193
+ }
194
+
195
+ /**
196
+ *
197
+ * @param c
198
+ * @return
199
+ */
200
+ public Vec2D[] intersectsCircle(Circle c) {
201
+ Vec2D[] res = null;
202
+ Vec2D delta = c.sub(this);
203
+ float d = delta.magnitude();
204
+ float r1 = radius.x;
205
+ float r2 = c.radius.x;
206
+ if (d <= r1 + r2 && d >= Math.abs(r1 - r2)) {
207
+ float a = (r1 * r1 - r2 * r2 + d * d) / (2.0f * d);
208
+ d = 1 / d;
209
+ Vec2D p = add(delta.scale(a * d));
210
+ float h = (float) Math.sqrt(r1 * r1 - a * a);
211
+ delta.perpendicular().scaleSelf(h * d);
212
+ Vec2D i1 = p.add(delta);
213
+ Vec2D i2 = p.sub(delta);
214
+ res = new Vec2D[] {
215
+ i1, i2
216
+ };
217
+ }
218
+ return res;
219
+ }
220
+
221
+ /**
222
+ *
223
+ * @param r
224
+ * @return
225
+ */
226
+ public Circle setRadius(float r) {
227
+ super.setRadii(r, r);
228
+ return this;
229
+ }
230
+ }