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,534 @@
1
+ /*
2
+ * __ .__ .__ ._____.
3
+ * _/ |_ _______ __|__| ____ | | |__\_ |__ ______
4
+ * \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
5
+ * | | ( <_> > <| \ \___| |_| || \_\ \\___ \
6
+ * |__| \____/__/\_ \__|\___ >____/__||___ /____ >
7
+ * \/ \/ \/ \/
8
+ *
9
+ * Copyright (c) 2006-2011 Karsten Schmidt
10
+ *
11
+ * This library is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 2.1 of the License, or (at your option) any later version.
15
+ *
16
+ * http://creativecommons.org/licenses/LGPL/2.1/
17
+ *
18
+ * This library is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ * You should have received a copy of the GNU Lesser General Public
24
+ * License along with this library; if not, write to the Free Software
25
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26
+ */
27
+
28
+ package toxi.geom;
29
+
30
+ import java.util.ArrayList;
31
+ import java.util.List;
32
+
33
+ import javax.xml.bind.annotation.XmlElement;
34
+
35
+ import toxi.geom.Line2D.LineIntersection.Type;
36
+
37
+ /**
38
+ *
39
+ * @author tux
40
+ */
41
+ public class Line2D {
42
+
43
+ /**
44
+ *
45
+ */
46
+ public static class LineIntersection {
47
+
48
+ /**
49
+ *
50
+ */
51
+ public static enum Type {
52
+
53
+ /**
54
+ *
55
+ */
56
+ COINCIDENT,
57
+
58
+ /**
59
+ *
60
+ */
61
+ COINCIDENT_NO_INTERSECT,
62
+
63
+ /**
64
+ *
65
+ */
66
+ PARALLEL,
67
+
68
+ /**
69
+ *
70
+ */
71
+ NON_INTERSECTING,
72
+
73
+ /**
74
+ *
75
+ */
76
+ INTERSECTING
77
+ }
78
+
79
+ private final Type type;
80
+ private final ReadonlyVec2D pos;
81
+ private final float[] coeff;
82
+
83
+ /**
84
+ *
85
+ * @param type
86
+ * @param pos
87
+ */
88
+ public LineIntersection(Type type, ReadonlyVec2D pos) {
89
+ this(type, pos, 0, 0);
90
+ }
91
+
92
+ /**
93
+ *
94
+ * @param type
95
+ * @param pos
96
+ * @param ua
97
+ * @param ub
98
+ */
99
+ public LineIntersection(Type type, ReadonlyVec2D pos, float ua, float ub) {
100
+ this.type = type;
101
+ this.pos = pos;
102
+ this.coeff = new float[] {
103
+ ua, ub
104
+ };
105
+ }
106
+
107
+ /**
108
+ *
109
+ * @return
110
+ */
111
+ public float[] getCoefficients() {
112
+ return coeff;
113
+ }
114
+
115
+ /**
116
+ * Returns copy of intersection point.
117
+ *
118
+ * @return point
119
+ */
120
+ public Vec2D getPos() {
121
+ return pos != null ? pos.copy() : null;
122
+ }
123
+
124
+ /**
125
+ * Returns intersection type enum.
126
+ *
127
+ * @return type
128
+ */
129
+ public Type getType() {
130
+ return type;
131
+ }
132
+
133
+ /**
134
+ *
135
+ * @return
136
+ */
137
+ @Override
138
+ public String toString() {
139
+ return "type: " + type + " pos: " + pos;
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Splits the line between A and B into segments of the given length,
145
+ * starting at point A. The tweened points are added to the given result
146
+ * list. The last point added is B itself and hence it is likely that the
147
+ * last segment has a shorter length than the step length requested. The
148
+ * first point (A) can be omitted and not be added to the list if so
149
+ * desired.
150
+ *
151
+ * @param a
152
+ * start point
153
+ * @param b
154
+ * end point (always added to results)
155
+ * @param stepLength
156
+ * desired distance between points
157
+ * @param segments
158
+ * existing array list for results (or a new list, if null)
159
+ * @param addFirst
160
+ * false, if A is NOT to be added to results
161
+ * @return list of result vectors
162
+ */
163
+ public static final List<Vec2D> splitIntoSegments(Vec2D a, Vec2D b,
164
+ float stepLength, List<Vec2D> segments, boolean addFirst) {
165
+ if (segments == null) {
166
+ segments = new ArrayList<>();
167
+ }
168
+ if (addFirst) {
169
+ segments.add(a.copy());
170
+ }
171
+ float dist = a.distanceTo(b);
172
+ if (dist > stepLength) {
173
+ Vec2D pos = a.copy();
174
+ Vec2D step = b.sub(a).limit(stepLength);
175
+ while (dist > stepLength) {
176
+ pos.addSelf(step);
177
+ segments.add(pos.copy());
178
+ dist -= stepLength;
179
+ }
180
+ }
181
+ segments.add(b.copy());
182
+ return segments;
183
+ }
184
+
185
+ @XmlElement
186
+ public Vec2D a,
187
+
188
+ /**
189
+ *
190
+ */
191
+
192
+ /**
193
+ *
194
+ */
195
+ b;
196
+
197
+ /**
198
+ *
199
+ * @param x1
200
+ * @param y1
201
+ * @param x2
202
+ * @param y2
203
+ */
204
+ public Line2D(float x1, float y1, float x2, float y2) {
205
+ this.a = new Vec2D(x1, y1);
206
+ this.b = new Vec2D(x2, y2);
207
+ }
208
+
209
+ /**
210
+ *
211
+ * @param a
212
+ * @param b
213
+ */
214
+ public Line2D(ReadonlyVec2D a, ReadonlyVec2D b) {
215
+ this.a = a.copy();
216
+ this.b = b.copy();
217
+ }
218
+
219
+ /**
220
+ *
221
+ * @param a
222
+ * @param b
223
+ */
224
+ public Line2D(Vec2D a, Vec2D b) {
225
+ this.a = a;
226
+ this.b = b;
227
+ }
228
+
229
+ /**
230
+ * Computes the dot product of these 2 vectors: line start -> point and the
231
+ * perpendicular line direction. If the result is negative
232
+ *
233
+ * @param p
234
+ * @return classifier float
235
+ */
236
+ public float classifyPoint(ReadonlyVec2D p) {
237
+ Vec2D normal = b.sub(a).perpendicular();
238
+ float d = p.sub(a).dot(normal);
239
+ return Math.signum(d);
240
+ }
241
+
242
+ /**
243
+ * Computes the closest point on this line to the point given.
244
+ *
245
+ * @param p
246
+ * point to check against
247
+ * @return closest point on the line
248
+ */
249
+ public Vec2D closestPointTo(ReadonlyVec2D p) {
250
+ final Vec2D v = b.sub(a);
251
+ final float t = p.sub(a).dot(v) / v.magSquared();
252
+ // Check to see if t is beyond the extents of the line segment
253
+ if (t < 0.0f) {
254
+ return a.copy();
255
+ } else if (t > 1.0f) {
256
+ return b.copy();
257
+ }
258
+ // Return the point between 'a' and 'b'
259
+ return a.add(v.scaleSelf(t));
260
+ }
261
+
262
+ /**
263
+ *
264
+ * @return
265
+ */
266
+ public Line2D copy() {
267
+ return new Line2D(a.copy(), b.copy());
268
+ }
269
+
270
+ /**
271
+ *
272
+ * @param p
273
+ * @return
274
+ */
275
+ public float distanceToPoint(ReadonlyVec2D p) {
276
+ return closestPointTo(p).distanceTo(p);
277
+ }
278
+
279
+ /**
280
+ *
281
+ * @param p
282
+ * @return
283
+ */
284
+ public float distanceToPointSquared(ReadonlyVec2D p) {
285
+ return closestPointTo(p).distanceToSquared(p);
286
+ }
287
+
288
+ /**
289
+ *
290
+ * @param obj
291
+ * @return
292
+ */
293
+ @Override
294
+ public boolean equals(Object obj) {
295
+ if (obj instanceof Line2D) {
296
+ Line2D l = (Line2D) obj;
297
+ return (a.equals(l.a) || a.equals(l.b))
298
+ && (b.equals(l.b) || b.equals(l.a));
299
+ }
300
+ return false;
301
+ }
302
+
303
+ /**
304
+ * Computes a hash code ignoring the directionality of the line.
305
+ *
306
+ * @return hash code
307
+ *
308
+ * @see java.lang.Object#hashCode()
309
+ * @see #hashCodeWithDirection()
310
+ */
311
+
312
+ @Override
313
+ public int hashCode() {
314
+ int hash = 5;
315
+ hash = 37 * hash + (a.hashCode() + b.hashCode());
316
+ return hash;
317
+ }
318
+
319
+ /**
320
+ *
321
+ * @return
322
+ */
323
+ public Circle getBoundingCircle() {
324
+ return Circle.from2Points(a, b);
325
+ }
326
+
327
+ /**
328
+ * Returns the line's bounding rect.
329
+ *
330
+ * @return bounding rect
331
+ */
332
+ public Rect getBounds() {
333
+ return new Rect(a, b);
334
+ }
335
+
336
+ /**
337
+ *
338
+ * @return
339
+ */
340
+ public Vec2D getDirection() {
341
+ return b.sub(a).normalize();
342
+ }
343
+
344
+ /**
345
+ *
346
+ * @return
347
+ */
348
+ public float getHeading() {
349
+ return b.sub(a).heading();
350
+ }
351
+
352
+ /**
353
+ *
354
+ * @return
355
+ */
356
+ public float getLength() {
357
+ return a.distanceTo(b);
358
+ }
359
+
360
+ /**
361
+ *
362
+ * @return
363
+ */
364
+ public float getLengthSquared() {
365
+ return a.distanceToSquared(b);
366
+ }
367
+
368
+ /**
369
+ *
370
+ * @return
371
+ */
372
+ public Vec2D getMidPoint() {
373
+ return a.add(b).scaleSelf(0.5f);
374
+ }
375
+
376
+ /**
377
+ *
378
+ * @return
379
+ */
380
+ public Vec2D getNormal() {
381
+ return b.sub(a).perpendicular();
382
+ }
383
+
384
+ /**
385
+ *
386
+ * @param p
387
+ * @return
388
+ */
389
+ public boolean hasEndPoint(Vec2D p) {
390
+ return a.equals(p) || b.equals(p);
391
+ }
392
+
393
+ /**
394
+ * Computes the hash code for this instance taking directionality into
395
+ * account. A->B will produce a different hash code than B->A. If
396
+ * directionality is not required or desired use the default
397
+ * {@link #hashCode()} method.
398
+ *
399
+ * @return hash code
400
+ *
401
+ * @see #hashCode()
402
+ */
403
+ public int hashCodeWithDirection() {
404
+ int hash = 5;
405
+ hash = 89 * hash + a.hashCode();
406
+ hash = 89 * hash + b.hashCode();
407
+ return hash;
408
+ }
409
+
410
+ /**
411
+ * Computes intersection between this and the given line. The returned value
412
+ * is a {@link LineIntersection} instance and contains both the type of
413
+ * intersection as well as the intersection points (if existing). The
414
+ * intersection points are ALWAYS computed for the types INTERSECTING and
415
+ * NON_INTERSECTING. In the latter case the points will lie outside the two
416
+ * given line segments and constitute the intersections of the infinite
417
+ * versions of each line.
418
+ *
419
+ * Based on: http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/
420
+ *
421
+ * @param l
422
+ * line to intersect with
423
+ * @return intersection result
424
+ */
425
+ public LineIntersection intersectLine(Line2D l) {
426
+ LineIntersection isec;
427
+ float denom = (l.b.y - l.a.y) * (b.x - a.x) - (l.b.x - l.a.x)
428
+ * (b.y - a.y);
429
+
430
+ float na = (l.b.x - l.a.x) * (a.y - l.a.y) - (l.b.y - l.a.y)
431
+ * (a.x - l.a.x);
432
+ float nb = (b.x - a.x) * (a.y - l.a.y) - (b.y - a.y) * (a.x - l.a.x);
433
+
434
+ if (denom != 0.0) {
435
+ float ua = na / denom;
436
+ float ub = nb / denom;
437
+ final Vec2D i = a.interpolateTo(b, ua);
438
+ if (ua >= 0.0f && ua <= 1.0 && ub >= 0.0 && ub <= 1.0) {
439
+ isec = new LineIntersection(Type.INTERSECTING, i, ua, ub);
440
+ } else {
441
+ isec = new LineIntersection(Type.NON_INTERSECTING, i, ua, ub);
442
+ }
443
+ } else {
444
+ if (na == 0.0 && nb == 0.0) {
445
+ if (distanceToPoint(l.a) == 0.0) {
446
+ isec = new LineIntersection(Type.COINCIDENT, null);
447
+ } else {
448
+ isec = new LineIntersection(Type.COINCIDENT_NO_INTERSECT,
449
+ null);
450
+ }
451
+ } else {
452
+ isec = new LineIntersection(Type.PARALLEL, null);
453
+ }
454
+ }
455
+ return isec;
456
+ }
457
+
458
+ /**
459
+ *
460
+ * @param offset
461
+ * @param scale
462
+ * @param ref
463
+ * @return
464
+ */
465
+ public Line2D offsetAndGrowBy(float offset, float scale, Vec2D ref) {
466
+ Vec2D m = getMidPoint();
467
+ Vec2D d = getDirection();
468
+ Vec2D n = d.getPerpendicular();
469
+ if (ref != null && m.sub(ref).dot(n) < 0) {
470
+ n.invert();
471
+ }
472
+ n.normalizeTo(offset);
473
+ a.addSelf(n);
474
+ b.addSelf(n);
475
+ d.scaleSelf(scale);
476
+ a.subSelf(d);
477
+ b.addSelf(d);
478
+ return this;
479
+ }
480
+
481
+ /**
482
+ *
483
+ * @param scale
484
+ * @return
485
+ */
486
+ public Line2D scaleLength(float scale) {
487
+ float delta = (1 - scale) * 0.5f;
488
+ Vec2D newA = a.interpolateTo(b, delta);
489
+ b.interpolateToSelf(a, delta);
490
+ a.set(newA);
491
+ return this;
492
+ }
493
+
494
+ /**
495
+ *
496
+ * @param a
497
+ * @param b
498
+ * @return
499
+ */
500
+ public Line2D set(Vec2D a, Vec2D b) {
501
+ this.a = a;
502
+ this.b = b;
503
+ return this;
504
+ }
505
+
506
+ /**
507
+ *
508
+ * @param segments
509
+ * @param stepLength
510
+ * @param addFirst
511
+ * @return
512
+ */
513
+ public List<Vec2D> splitIntoSegments(List<Vec2D> segments,
514
+ float stepLength, boolean addFirst) {
515
+ return splitIntoSegments(a, b, stepLength, segments, addFirst);
516
+ }
517
+
518
+ /**
519
+ *
520
+ * @return
521
+ */
522
+ public Ray2D toRay2D() {
523
+ return new Ray2D(a.copy(), getDirection());
524
+ }
525
+
526
+ /**
527
+ *
528
+ * @return
529
+ */
530
+ @Override
531
+ public String toString() {
532
+ return a.toString() + " -> " + b.toString();
533
+ }
534
+ }