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,68 @@
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.math;
29
+
30
+ /**
31
+ * Exponential curve interpolation with adjustable exponent. Use exp in the
32
+ * following ranges to achieve these effects:
33
+ * <ul>
34
+ * <li>0.0 &lt; x &lt; 1.0 : ease in (steep changes towards b)</li>
35
+ * <li>1.0 : same as {@link LinearInterpolation}</li>
36
+ * <li>&gt; 1.0 : ease-out (steep changes from a)</li>
37
+ * </ul>
38
+ */
39
+ public class ExponentialInterpolation implements InterpolateStrategy {
40
+
41
+ private float exponent;
42
+
43
+ /**
44
+ * Default constructor uses square parabola (exp=2)
45
+ */
46
+ public ExponentialInterpolation() {
47
+ this(2);
48
+ }
49
+
50
+ /**
51
+ * @param exp
52
+ * curve exponent
53
+ */
54
+ public ExponentialInterpolation(float exp) {
55
+ this.exponent = exp;
56
+ }
57
+
58
+ @Override
59
+ public double interpolate(double a, double b, double f) {
60
+ return a + (b - a) * Math.pow(f, exponent);
61
+ }
62
+
63
+ @Override
64
+ public float interpolate(float a, float b, float f) {
65
+ return a + (b - a) * (float) Math.pow(f, exponent);
66
+ }
67
+
68
+ }
@@ -0,0 +1,60 @@
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.math;
29
+
30
+ /**
31
+ * Defines a generic function to interpolate 2 float values.
32
+ */
33
+ public interface InterpolateStrategy {
34
+
35
+ /**
36
+ * Implements an interpolation equation using double precision values.
37
+ *
38
+ * @param a
39
+ * current value
40
+ * @param b
41
+ * target value
42
+ * @param f
43
+ * normalized interpolation factor (0.0 .. 1.0)
44
+ * @return interpolated value
45
+ */
46
+ public double interpolate(double a, double b, double f);
47
+
48
+ /**
49
+ * Implements an interpolation equation using float values.
50
+ *
51
+ * @param a
52
+ * current value
53
+ * @param b
54
+ * target value
55
+ * @param f
56
+ * normalized interpolation factor (0.0 .. 1.0)
57
+ * @return interpolated value
58
+ */
59
+ public float interpolate(float a, float b, float f);
60
+ }
@@ -0,0 +1,93 @@
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.math;
29
+
30
+ import toxi.geom.Vec2D;
31
+
32
+ /**
33
+ * Implementations of 2D interpolation functions (currently only bilinear).
34
+ */
35
+ public class Interpolation2D {
36
+
37
+ /**
38
+ * @param x
39
+ * x coord of point to filter
40
+ * @param y
41
+ * y coord of point to filter
42
+ * @param x1
43
+ * x coord of top-left corner
44
+ * @param y1
45
+ * y coord of top-left corner
46
+ * @param x2
47
+ * x coord of bottom-right corner
48
+ * @param y2
49
+ * y coord of bottom-right corner
50
+ * @param tl
51
+ * top-left value
52
+ * @param tr
53
+ * top-right value
54
+ * @param bl
55
+ * bottom-left value
56
+ * @param br
57
+ * bottom-right value
58
+ * @return interpolated value
59
+ */
60
+ public static float bilinear(double x, double y, double x1, double y1,
61
+ double x2, double y2, float tl, float tr, float bl, float br) {
62
+ double denom = 1.0 / ((x2 - x1) * (y2 - y1));
63
+ double dx1 = (x - x1) * denom;
64
+ double dx2 = (x2 - x) * denom;
65
+ double dy1 = y - y1;
66
+ double dy2 = y2 - y;
67
+ return (float) (tl * dx2 * dy2 + tr * dx1 * dy2 + bl * dx2 * dy1 + br
68
+ * dx1 * dy1);
69
+ }
70
+
71
+ /**
72
+ * @param p
73
+ * point to filter
74
+ * @param p1
75
+ * top-left corner
76
+ * @param p2
77
+ * bottom-right corner
78
+ * @param tl
79
+ * top-left value
80
+ * @param tr
81
+ * top-right value
82
+ * @param bl
83
+ * bottom-left value
84
+ * @param br
85
+ * bottom-right value
86
+ * @return interpolated value
87
+ */
88
+ public static float bilinear(Vec2D p, Vec2D p1, Vec2D p2, float tl,
89
+ float tr, float bl, float br) {
90
+ return bilinear(p.x, p.y, p1.x, p1.y, p2.x, p2.y, tl, tr, bl, br);
91
+ }
92
+
93
+ }
@@ -0,0 +1,46 @@
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.math;
29
+
30
+ /**
31
+ * Implementation of the linear interpolation function
32
+ *
33
+ * i = a + ( b - a ) * f
34
+ */
35
+ public class LinearInterpolation implements InterpolateStrategy {
36
+
37
+ @Override
38
+ public double interpolate(double a, double b, double f) {
39
+ return a + (b - a) * f;
40
+ }
41
+
42
+ @Override
43
+ public final float interpolate(float a, float b, float f) {
44
+ return a + (b - a) * f;
45
+ }
46
+ }
@@ -0,0 +1,990 @@
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.math;
29
+
30
+ import java.util.Random;
31
+
32
+ /**
33
+ * Miscellaneous math utilities.
34
+ */
35
+ public final class MathUtils {
36
+
37
+ /**
38
+ *
39
+ */
40
+ public static final float THIRD = 1f / 3;
41
+
42
+ /**
43
+ * Square root of 2
44
+ */
45
+ public static final float SQRT2 = (float) Math.sqrt(2);
46
+
47
+ /**
48
+ * Square root of 3
49
+ */
50
+ public static final float SQRT3 = (float) Math.sqrt(3);
51
+
52
+ /**
53
+ * Log(2)
54
+ */
55
+ public static final float LOG2 = (float) Math.log(2);
56
+
57
+ /**
58
+ * PI
59
+ */
60
+ public static final float PI = 3.14159265358979323846f;
61
+
62
+ /**
63
+ * The reciprocal of PI: (1/PI)
64
+ */
65
+ public static final float INV_PI = 1f / PI;
66
+
67
+ /**
68
+ * PI/2
69
+ */
70
+ public static final float HALF_PI = PI / 2;
71
+
72
+ /**
73
+ * PI/3
74
+ */
75
+ public static final float THIRD_PI = PI / 3;
76
+
77
+ /**
78
+ * PI/4
79
+ */
80
+ public static final float QUARTER_PI = PI / 4;
81
+
82
+ /**
83
+ * PI*2
84
+ */
85
+ public static final float TWO_PI = PI * 2;
86
+
87
+ /**
88
+ * PI*1.5
89
+ */
90
+ public static final float THREE_HALVES_PI = TWO_PI - HALF_PI;
91
+
92
+ /**
93
+ * PI*PI
94
+ */
95
+ public static final float PI_SQUARED = PI * PI;
96
+
97
+ /**
98
+ * Epsilon value
99
+ */
100
+ public static final float EPS = 1.1920928955078125E-7f;
101
+
102
+ /**
103
+ * Degrees to radians conversion factor
104
+ */
105
+ public static final float DEG2RAD = PI / 180;
106
+
107
+ /**
108
+ * Radians to degrees conversion factor
109
+ */
110
+ public static final float RAD2DEG = 180 / PI;
111
+
112
+ private static final float SHIFT23 = 1 << 23;
113
+
114
+ private static final float INV_SHIFT23 = 1.0f / SHIFT23;
115
+ private final static double SIN_A = -4d / (PI * PI);
116
+
117
+ private final static double SIN_B = 4d / PI;
118
+ private final static double SIN_P = 9d / 40;
119
+ /**
120
+ * Default random number generator used by random methods of this class
121
+ * which don't use a passed in {@link Random} instance.
122
+ */
123
+ public static Random RND = new Random();
124
+
125
+ /**
126
+ * @param x
127
+ * @return absolute value of x
128
+ */
129
+ public static final double abs(double x) {
130
+ return x < 0 ? -x : x;
131
+ }
132
+
133
+ /**
134
+ * @param x
135
+ * @return absolute value of x
136
+ */
137
+ public static final float abs(float x) {
138
+ return x < 0 ? -x : x;
139
+ }
140
+
141
+ /**
142
+ * @param x
143
+ * @return absolute value of x
144
+ */
145
+ public static final int abs(int x) {
146
+ int y = x >> 31;
147
+ return (x ^ y) - y;
148
+ }
149
+
150
+ /**
151
+ * Rounds up the value to the nearest higher power^2 value.
152
+ *
153
+ * @param x
154
+ * @return power^2 value
155
+ */
156
+ public static final int ceilPowerOf2(int x) {
157
+ int pow2 = 1;
158
+ while (pow2 < x) {
159
+ pow2 <<= 1;
160
+ }
161
+ return pow2;
162
+ }
163
+
164
+ /**
165
+ *
166
+ * @param a
167
+ * @param min
168
+ * @param max
169
+ * @return
170
+ */
171
+ public static final double clip(double a, double min, double max) {
172
+ return a < min ? min : (a > max ? max : a);
173
+ }
174
+
175
+ /**
176
+ *
177
+ * @param a
178
+ * @param min
179
+ * @param max
180
+ * @return
181
+ */
182
+ public static final float clip(float a, float min, float max) {
183
+ return a < min ? min : (a > max ? max : a);
184
+ }
185
+
186
+ /**
187
+ *
188
+ * @param a
189
+ * @param min
190
+ * @param max
191
+ * @return
192
+ */
193
+ public static final int clip(int a, int min, int max) {
194
+ return a < min ? min : (a > max ? max : a);
195
+ }
196
+
197
+ /**
198
+ *
199
+ * @param a
200
+ * @return
201
+ */
202
+ public static double clipNormalized(double a) {
203
+ if (a < 0) {
204
+ return 0;
205
+ } else if (a > 1) {
206
+ return 1;
207
+ }
208
+ return a;
209
+ }
210
+
211
+ /**
212
+ * Clips the value to the 0.0 .. 1.0 interval.
213
+ *
214
+ * @param a
215
+ * @return clipped value
216
+ * @since 0012
217
+ */
218
+ public static final float clipNormalized(float a) {
219
+ if (a < 0) {
220
+ return 0;
221
+ } else if (a > 1) {
222
+ return 1;
223
+ }
224
+ return a;
225
+ }
226
+
227
+ /**
228
+ *
229
+ * @param theta
230
+ * @return
231
+ */
232
+ public static final double cos(final double theta) {
233
+ return sin(theta + HALF_PI);
234
+ }
235
+
236
+ /**
237
+ * Returns fast cosine approximation of a value. Note: code from <a
238
+ * href="http://wiki.java.net/bin/view/Games/JeffGems">wiki posting on
239
+ * java.net by jeffpk</a>
240
+ *
241
+ * @param theta
242
+ * angle in radians.
243
+ * @return cosine of theta.
244
+ */
245
+ public static final float cos(final float theta) {
246
+ return sin(theta + HALF_PI);
247
+ }
248
+
249
+ /**
250
+ *
251
+ * @param radians
252
+ * @return
253
+ */
254
+ public static final double degrees(double radians) {
255
+ return radians * RAD2DEG;
256
+ }
257
+
258
+ /**
259
+ *
260
+ * @param radians
261
+ * @return
262
+ */
263
+ public static final float degrees(float radians) {
264
+ return radians * RAD2DEG;
265
+ }
266
+
267
+ /**
268
+ *
269
+ * @param a
270
+ * @param b
271
+ * @return
272
+ */
273
+ public static double dualSign(double a, double b) {
274
+ double x = (a >= 0 ? a : -a);
275
+ return (b >= 0 ? x : -x);
276
+ }
277
+
278
+ /**
279
+ * Fast cosine approximation.
280
+ *
281
+ * @param x
282
+ * angle in -PI/2 .. +PI/2 interval
283
+ * @return cosine
284
+ */
285
+ public static final double fastCos(final double x) {
286
+ return fastSin(x + ((x > HALF_PI) ? -THREE_HALVES_PI : HALF_PI));
287
+ }
288
+
289
+ /**
290
+ * @param x
291
+ * @return
292
+ * @deprecated
293
+ */
294
+ @Deprecated
295
+ public static final float fastInverseSqrt(float x) {
296
+ float half = 0.5F * x;
297
+ int i = Float.floatToIntBits(x);
298
+ i = 0x5f375a86 - (i >> 1);
299
+ x = Float.intBitsToFloat(i);
300
+ return x * (1.5F - half * x * x);
301
+ }
302
+
303
+ /**
304
+ * Computes a fast approximation to <code>Math.pow(a, b)</code>. Adapted
305
+ * from http://www.dctsystems.co.uk/Software/power.html.
306
+ *
307
+ * @param a
308
+ * a positive number
309
+ * @param b
310
+ * a number
311
+ * @return a^b
312
+ *
313
+ */
314
+ public static final float fastPow(float a, float b) {
315
+ float x = Float.floatToRawIntBits(a);
316
+ x *= INV_SHIFT23;
317
+ x -= 127;
318
+ float y = x - (x >= 0 ? (int) x : (int) x - 1);
319
+ b *= x + (y - y * y) * 0.346607f;
320
+ y = b - (b >= 0 ? (int) b : (int) b - 1);
321
+ y = (y - y * y) * 0.33971f;
322
+ return Float.intBitsToFloat((int) ((b + 127 - y) * SHIFT23));
323
+ }
324
+
325
+ /**
326
+ * Fast sine approximation.
327
+ *
328
+ * @param x
329
+ * angle in -PI/2 .. +PI/2 interval
330
+ * @return sine
331
+ */
332
+ public static final double fastSin(double x) {
333
+ // float B = 4/pi;
334
+ // float C = -4/(pi*pi);
335
+ // float y = B * x + C * x * abs(x);
336
+ // y = P * (y * abs(y) - y) + y;
337
+ x = SIN_B * x + SIN_A * x * abs(x);
338
+ return SIN_P * (x * abs(x) - x) + x;
339
+ }
340
+
341
+ /**
342
+ *
343
+ * @return
344
+ */
345
+ public static final boolean flipCoin() {
346
+ return RND.nextBoolean();
347
+ }
348
+
349
+ /**
350
+ *
351
+ * @param rnd
352
+ * @return
353
+ */
354
+ public static final boolean flipCoin(Random rnd) {
355
+ return rnd.nextBoolean();
356
+ }
357
+
358
+ /**
359
+ *
360
+ * @param x
361
+ * @return
362
+ */
363
+ public static final long floor(double x) {
364
+ long y = (long) x;
365
+ if (x < 0 && x != y) {
366
+ y--;
367
+ }
368
+ return y;
369
+ }
370
+
371
+ /**
372
+ * This method is a *lot* faster than using (int)Math.floor(x).
373
+ *
374
+ * @param x
375
+ * value to be floored
376
+ * @return floored value as integer
377
+ * @since 0012
378
+ */
379
+ public static final int floor(float x) {
380
+ int y = (int) x;
381
+ if (x < 0 && x != y) {
382
+ y--;
383
+ }
384
+ return y;
385
+ }
386
+
387
+ /**
388
+ * Rounds down the value to the nearest lower power^2 value.
389
+ *
390
+ * @param x
391
+ * @return power^2 value
392
+ */
393
+ public static final int floorPowerOf2(int x) {
394
+ return (int) Math.pow(2, (int) (Math.log(x) / LOG2));
395
+ }
396
+
397
+ /**
398
+ * Computes the Greatest Common Devisor of integers p and q.
399
+ *
400
+ * @param p
401
+ * @param q
402
+ * @return gcd
403
+ */
404
+ public static final int gcd(int p, int q) {
405
+ if (q == 0) {
406
+ return p;
407
+ }
408
+ return gcd(q, p % q);
409
+ }
410
+
411
+ /**
412
+ * Creates a single normalized impulse signal with its peak at t=1/k. The
413
+ * attack and decay period is configurable via the k parameter. Code from:
414
+ * http://www.iquilezles.org/www/articles/functions/functions.htm
415
+ *
416
+ * @param k
417
+ * smoothness
418
+ * @param t
419
+ * time position (should be >= 0)
420
+ * @return impulse value (as double)
421
+ */
422
+ public static double impulse(double k, double t) {
423
+ double h = k * t;
424
+ return h * Math.exp(1.0 - h);
425
+ }
426
+
427
+ /**
428
+ * Creates a single normalized impulse signal with its peak at t=1/k. The
429
+ * attack and decay period is configurable via the k parameter. Code from:
430
+ * http://www.iquilezles.org/www/articles/functions/functions.htm
431
+ *
432
+ * @param k
433
+ * smoothness
434
+ * @param t
435
+ * time position (should be >= 0)
436
+ * @return impulse value (as float)
437
+ */
438
+ public static float impulse(float k, float t) {
439
+ float h = k * t;
440
+ return (float) (h * Math.exp(1.0f - h));
441
+ }
442
+
443
+ /**
444
+ *
445
+ * @param p
446
+ * @param q
447
+ * @return
448
+ */
449
+ public static final int lcm(int p, int q) {
450
+ return abs(p * q) / gcd(p, q);
451
+ }
452
+
453
+ /**
454
+ *
455
+ * @param a
456
+ * @param b
457
+ * @param t
458
+ * @return
459
+ */
460
+ public static double lerp(double a, double b, double t) {
461
+ return a + (b - a) * t;
462
+ }
463
+
464
+ /**
465
+ *
466
+ * @param a
467
+ * @param b
468
+ * @param t
469
+ * @return
470
+ */
471
+ public static float lerp(float a, float b, float t) {
472
+ return a + (b - a) * t;
473
+ }
474
+
475
+ /**
476
+ *
477
+ * @param x
478
+ * @param minIn
479
+ * @param maxIn
480
+ * @param minOut
481
+ * @param maxOut
482
+ * @return
483
+ */
484
+ public static double mapInterval(double x, double minIn, double maxIn,
485
+ double minOut, double maxOut) {
486
+ return minOut + (maxOut - minOut) * (x - minIn) / (maxIn - minIn);
487
+ }
488
+
489
+ /**
490
+ *
491
+ * @param x
492
+ * @param minIn
493
+ * @param maxIn
494
+ * @param minOut
495
+ * @param maxOut
496
+ * @return
497
+ */
498
+ public static float mapInterval(float x, float minIn, float maxIn,
499
+ float minOut, float maxOut) {
500
+ return minOut + (maxOut - minOut) * (x - minIn) / (maxIn - minIn);
501
+ }
502
+
503
+ /**
504
+ *
505
+ * @param a
506
+ * @param b
507
+ * @return
508
+ */
509
+ public static final double max(double a, double b) {
510
+ return a > b ? a : b;
511
+ }
512
+
513
+ /**
514
+ *
515
+ * @param a
516
+ * @param b
517
+ * @param c
518
+ * @return
519
+ */
520
+ public static final double max(double a, double b, double c) {
521
+ return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
522
+ }
523
+
524
+ /**
525
+ *
526
+ * @param values
527
+ * @return
528
+ */
529
+ public static final double max(double[] values) {
530
+ return max(values[0], values[1], values[2]);
531
+ }
532
+
533
+ /**
534
+ *
535
+ * @param a
536
+ * @param b
537
+ * @return
538
+ */
539
+ public static final float max(float a, float b) {
540
+ return a > b ? a : b;
541
+ }
542
+
543
+ /**
544
+ * Returns the maximum value of three floats.
545
+ *
546
+ * @param a
547
+ * @param b
548
+ * @param c
549
+ * @return max val
550
+ */
551
+ public static final float max(float a, float b, float c) {
552
+ return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
553
+ }
554
+
555
+ /**
556
+ *
557
+ * @param values
558
+ * @return
559
+ */
560
+ public static final float max(float[] values) {
561
+ return max(values[0], values[1], values[2]);
562
+ }
563
+
564
+ /**
565
+ *
566
+ * @param a
567
+ * @param b
568
+ * @return
569
+ */
570
+ public static final int max(int a, int b) {
571
+ return a > b ? a : b;
572
+ }
573
+
574
+ /**
575
+ * Returns the maximum value of three ints.
576
+ *
577
+ * @param a
578
+ * @param b
579
+ * @param c
580
+ * @return max val
581
+ */
582
+ public static final int max(int a, int b, int c) {
583
+ return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
584
+ }
585
+
586
+ /**
587
+ *
588
+ * @param values
589
+ * @return
590
+ */
591
+ public static final int max(int[] values) {
592
+ return max(values[0], values[1], values[2]);
593
+ }
594
+
595
+ /**
596
+ *
597
+ * @param a
598
+ * @param b
599
+ * @return
600
+ */
601
+ public static final double min(double a, double b) {
602
+ return a < b ? a : b;
603
+ }
604
+
605
+ /**
606
+ *
607
+ * @param a
608
+ * @param b
609
+ * @param c
610
+ * @return
611
+ */
612
+ public static final double min(double a, double b, double c) {
613
+ return (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c);
614
+ }
615
+
616
+ /**
617
+ *
618
+ * @param a
619
+ * @param b
620
+ * @return
621
+ */
622
+ public static final float min(float a, float b) {
623
+ return a < b ? a : b;
624
+ }
625
+
626
+ /**
627
+ * Returns the minimum value of three floats.
628
+ *
629
+ * @param a
630
+ * @param b
631
+ * @param c
632
+ * @return min val
633
+ */
634
+ public static final float min(float a, float b, float c) {
635
+ return (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c);
636
+ }
637
+
638
+ /**
639
+ *
640
+ * @param a
641
+ * @param b
642
+ * @return
643
+ */
644
+ public static final int min(int a, int b) {
645
+ return a < b ? a : b;
646
+ }
647
+
648
+ /**
649
+ * Returns the minimum value of three ints.
650
+ *
651
+ * @param a
652
+ * @param b
653
+ * @param c
654
+ * @return min val
655
+ */
656
+ public static final int min(int a, int b, int c) {
657
+ return (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c);
658
+ }
659
+
660
+ /**
661
+ * Returns a random number in the interval -1 .. +1.
662
+ *
663
+ * @return random float
664
+ */
665
+ public static final float normalizedRandom() {
666
+ return RND.nextFloat() * 2 - 1;
667
+ }
668
+
669
+ /**
670
+ * Returns a random number in the interval -1 .. +1 using the {@link Random}
671
+ * instance provided.
672
+ *
673
+ * @param rnd
674
+ * @return random float
675
+ */
676
+ public static final float normalizedRandom(Random rnd) {
677
+ return rnd.nextFloat() * 2 - 1;
678
+ }
679
+
680
+ /**
681
+ *
682
+ * @param degrees
683
+ * @return
684
+ */
685
+ public static double radians(double degrees) {
686
+ return degrees * DEG2RAD;
687
+ }
688
+
689
+ /**
690
+ *
691
+ * @param degrees
692
+ * @return
693
+ */
694
+ public static final float radians(float degrees) {
695
+ return degrees * DEG2RAD;
696
+ }
697
+
698
+ /**
699
+ *
700
+ * @param max
701
+ * @return
702
+ */
703
+ public static final float random(float max) {
704
+ return RND.nextFloat() * max;
705
+ }
706
+
707
+ /**
708
+ *
709
+ * @param min
710
+ * @param max
711
+ * @return
712
+ */
713
+ public static final float random(float min, float max) {
714
+ return RND.nextFloat() * (max - min) + min;
715
+ }
716
+
717
+ /**
718
+ *
719
+ * @param max
720
+ * @return
721
+ */
722
+ public static final int random(int max) {
723
+ return (int) (RND.nextFloat() * max);
724
+ }
725
+
726
+ /**
727
+ *
728
+ * @param min
729
+ * @param max
730
+ * @return
731
+ */
732
+ public static final int random(int min, int max) {
733
+ return (int) (RND.nextFloat() * (max - min)) + min;
734
+ }
735
+
736
+ /**
737
+ *
738
+ * @param rnd
739
+ * @param max
740
+ * @return
741
+ */
742
+ public static final double random(Random rnd, double max) {
743
+ return rnd.nextDouble() * max;
744
+ }
745
+
746
+ /**
747
+ *
748
+ * @param rnd
749
+ * @param min
750
+ * @param max
751
+ * @return
752
+ */
753
+ public static final double random(Random rnd, double min, double max) {
754
+ return rnd.nextDouble() * (max - min) + min;
755
+ }
756
+
757
+ /**
758
+ *
759
+ * @param rnd
760
+ * @param max
761
+ * @return
762
+ */
763
+ public static final float random(Random rnd, float max) {
764
+ return rnd.nextFloat() * max;
765
+ }
766
+
767
+ /**
768
+ *
769
+ * @param rnd
770
+ * @param min
771
+ * @param max
772
+ * @return
773
+ */
774
+ public static final float random(Random rnd, float min, float max) {
775
+ return rnd.nextFloat() * (max - min) + min;
776
+ }
777
+
778
+ /**
779
+ *
780
+ * @param rnd
781
+ * @param max
782
+ * @return
783
+ */
784
+ public static final int random(Random rnd, int max) {
785
+ return (int) (rnd.nextDouble() * max);
786
+ }
787
+
788
+ /**
789
+ *
790
+ * @param rnd
791
+ * @param min
792
+ * @param max
793
+ * @return
794
+ */
795
+ public static final int random(Random rnd, int min, int max) {
796
+ return (int) (rnd.nextDouble() * (max - min)) + min;
797
+ }
798
+
799
+ /**
800
+ *
801
+ * @param chance
802
+ * @return
803
+ */
804
+ public static final boolean randomChance(double chance) {
805
+ return RND.nextDouble() < chance;
806
+ }
807
+
808
+ /**
809
+ *
810
+ * @param chance
811
+ * @return
812
+ */
813
+ public static final boolean randomChance(float chance) {
814
+ return RND.nextFloat() < chance;
815
+ }
816
+
817
+ /**
818
+ *
819
+ * @param rnd
820
+ * @param chance
821
+ * @return
822
+ */
823
+ public static final boolean randomChance(Random rnd, double chance) {
824
+ return rnd.nextDouble() < chance;
825
+ }
826
+
827
+ /**
828
+ *
829
+ * @param rnd
830
+ * @param chance
831
+ * @return
832
+ */
833
+ public static final boolean randomChance(Random rnd, float chance) {
834
+ return rnd.nextFloat() < chance;
835
+ }
836
+
837
+ /**
838
+ *
839
+ * @param theta
840
+ * @return
841
+ */
842
+ public static final double reduceAngle(double theta) {
843
+ theta %= TWO_PI;
844
+ if (abs(theta) > PI) {
845
+ theta = theta - TWO_PI;
846
+ }
847
+ if (abs(theta) > HALF_PI) {
848
+ theta = PI - theta;
849
+ }
850
+ return theta;
851
+ }
852
+
853
+ /**
854
+ * Reduces the given angle into the -PI/4 ... PI/4 interval for faster
855
+ * computation of sin/cos. This method is used by {@link #sin(float)} &
856
+ * {@link #cos(float)}.
857
+ *
858
+ * @param theta
859
+ * angle in radians
860
+ * @return reduced angle
861
+ * @see #sin(float)
862
+ * @see #cos(float)
863
+ */
864
+ public static final float reduceAngle(float theta) {
865
+ theta %= TWO_PI;
866
+ if (abs(theta) > PI) {
867
+ theta = theta - TWO_PI;
868
+ }
869
+ if (abs(theta) > HALF_PI) {
870
+ theta = PI - theta;
871
+ }
872
+ return theta;
873
+ }
874
+
875
+ /**
876
+ * Rounds a double precision value to the given precision.
877
+ *
878
+ * @param val
879
+ * @param prec
880
+ * @return rounded value
881
+ */
882
+ public static final double roundTo(double val, double prec) {
883
+ return floor(val / prec + 0.5) * prec;
884
+ }
885
+
886
+ /**
887
+ * Rounds a single precision value to the given precision.
888
+ *
889
+ * @param val
890
+ * @param prec
891
+ * @return rounded value
892
+ */
893
+ public static final float roundTo(float val, float prec) {
894
+ return floor(val / prec + 0.5f) * prec;
895
+ }
896
+
897
+ /**
898
+ * Rounds an integer value to the given precision.
899
+ *
900
+ * @param val
901
+ * @param prec
902
+ * @return rounded value
903
+ */
904
+ public static final int roundTo(int val, int prec) {
905
+ return floor((float) val / prec + 0.5f) * prec;
906
+ }
907
+
908
+ /**
909
+ * Sets the default Random number generator for this class. This generator
910
+ * is being reused by all future calls to random() method versions which
911
+ * don't explicitly ask for a {@link Random} instance to be used.
912
+ *
913
+ * @param rnd
914
+ */
915
+ public static void setDefaultRandomGenerator(Random rnd) {
916
+ RND = rnd;
917
+ }
918
+
919
+ /**
920
+ *
921
+ * @param x
922
+ * @return
923
+ */
924
+ public static int sign(double x) {
925
+ return x < 0 ? -1 : (x > 0 ? 1 : 0);
926
+ }
927
+
928
+ /**
929
+ *
930
+ * @param x
931
+ * @return
932
+ */
933
+ public static int sign(float x) {
934
+ return x < 0 ? -1 : (x > 0 ? 1 : 0);
935
+ }
936
+
937
+ /**
938
+ *
939
+ * @param x
940
+ * @return
941
+ */
942
+ public static int sign(int x) {
943
+ return x < 0 ? -1 : (x > 0 ? 1 : 0);
944
+ }
945
+
946
+ /**
947
+ *
948
+ * @param theta
949
+ * @return
950
+ */
951
+ public static final double sin(double theta) {
952
+ theta = reduceAngle(theta);
953
+ if (abs(theta) <= QUARTER_PI) {
954
+ return (float) fastSin(theta);
955
+ }
956
+ return (float) fastCos(HALF_PI - theta);
957
+ }
958
+
959
+ /**
960
+ * Returns a fast sine approximation of a value. Note: code from <a
961
+ * href="http://wiki.java.net/bin/view/Games/JeffGems">wiki posting on
962
+ * java.net by jeffpk</a>
963
+ *
964
+ * @param theta
965
+ * angle in radians.
966
+ * @return sine of theta.
967
+ */
968
+ public static final float sin(float theta) {
969
+ theta = reduceAngle(theta);
970
+ if (abs(theta) <= QUARTER_PI) {
971
+ return (float) fastSin(theta);
972
+ }
973
+ return (float) fastCos(HALF_PI - theta);
974
+ }
975
+
976
+ /**
977
+ * @param x
978
+ * @return
979
+ * @deprecated
980
+ */
981
+ @Deprecated
982
+ public static final float sqrt(float x) {
983
+ x = fastInverseSqrt(x);
984
+ if (x > 0) {
985
+ return 1.0f / x;
986
+ } else {
987
+ return 0;
988
+ }
989
+ }
990
+ }