toxiclibs 0.4.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (404) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +16 -0
  3. data/.mvn/extensions.xml +8 -0
  4. data/.mvn/wrapper/maven-wrapper.properties +1 -0
  5. data/.travis.yml +23 -0
  6. data/CHANGELOG.md +7 -0
  7. data/COPYING.md +14 -0
  8. data/Gemfile +10 -0
  9. data/LICENSE +675 -0
  10. data/README.md +9 -7
  11. data/Rakefile +25 -81
  12. data/examples/README.md +5 -0
  13. data/examples/attract_repel/attract_repel.rb +30 -0
  14. data/examples/attract_repel/attractor.rb +23 -0
  15. data/examples/attract_repel/particle.rb +27 -0
  16. data/examples/data/ReplicaBold.ttf +0 -0
  17. data/examples/data/ti_yong.png +0 -0
  18. data/examples/force_directed/cluster.rb +76 -0
  19. data/examples/force_directed/force_directed_graph.rb +92 -0
  20. data/examples/force_directed/node.rb +26 -0
  21. data/examples/gray_scott_image.rb +74 -0
  22. data/examples/gray_scott_tone_map.rb +77 -0
  23. data/examples/implicit.rb +139 -0
  24. data/examples/inflate_mesh.rb +89 -0
  25. data/examples/model_align.rb +43 -0
  26. data/examples/physics_type.rb +77 -0
  27. data/examples/povmesh/data/mask.jpg +0 -0
  28. data/examples/povmesh/ftest.rb +59 -0
  29. data/examples/povmesh/mesh_align.rb +47 -0
  30. data/examples/povmesh/tentacle.rb +71 -0
  31. data/examples/simple_cluster/cluster.rb +47 -0
  32. data/examples/simple_cluster/node.rb +27 -0
  33. data/examples/simple_cluster/simple_cluster.rb +60 -0
  34. data/examples/soft_body/blanket.rb +45 -0
  35. data/examples/soft_body/connection.rb +16 -0
  36. data/examples/soft_body/particle.rb +22 -0
  37. data/examples/soft_body/soft_body_square_adapted.rb +55 -0
  38. data/examples/spherical_harmonics_mesh.rb +50 -0
  39. data/examples/test_rect.rb +32 -0
  40. data/lib/toxiclibs.jar +0 -0
  41. data/lib/toxiclibs.rb +72 -22
  42. data/lib/toxiclibs/version.rb +1 -1
  43. data/pom.rb +63 -0
  44. data/pom.xml +124 -0
  45. data/src/com/toxi/net/ClientListener.java +41 -0
  46. data/src/com/toxi/net/ServerListener.java +70 -0
  47. data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
  48. data/src/com/toxi/net/ServerState.java +18 -0
  49. data/src/com/toxi/net/UDPConnection.java +66 -0
  50. data/src/com/toxi/net/UDPSyncClient.java +81 -0
  51. data/src/com/toxi/net/UDPSyncServer.java +450 -0
  52. data/src/com/toxi/nio/UDPClient.java +121 -0
  53. data/src/com/toxi/nio/UDPClientState.java +32 -0
  54. data/src/com/toxi/nio/UDPServer.java +129 -0
  55. data/src/toxi/audio/AudioBuffer.java +229 -0
  56. data/src/toxi/audio/AudioSource.java +288 -0
  57. data/src/toxi/audio/DecompressInputStream.java +159 -0
  58. data/src/toxi/audio/IIRFilter.java +197 -0
  59. data/src/toxi/audio/JOALUtil.java +388 -0
  60. data/src/toxi/audio/MultiTimbralManager.java +162 -0
  61. data/src/toxi/audio/SoundListener.java +154 -0
  62. data/src/toxi/audio/SynthUtil.java +109 -0
  63. data/src/toxi/color/AccessCriteria.java +114 -0
  64. data/src/toxi/color/AlphaAccessor.java +67 -0
  65. data/src/toxi/color/CMYKAccessor.java +122 -0
  66. data/src/toxi/color/CMYKDistanceProxy.java +40 -0
  67. data/src/toxi/color/ColorGradient.java +260 -0
  68. data/src/toxi/color/ColorList.java +699 -0
  69. data/src/toxi/color/ColorRange.java +671 -0
  70. data/src/toxi/color/ColorTheme.java +163 -0
  71. data/src/toxi/color/DistanceProxy.java +44 -0
  72. data/src/toxi/color/HSVAccessor.java +113 -0
  73. data/src/toxi/color/HSVDistanceProxy.java +40 -0
  74. data/src/toxi/color/HistEntry.java +85 -0
  75. data/src/toxi/color/Histogram.java +185 -0
  76. data/src/toxi/color/Hue.java +249 -0
  77. data/src/toxi/color/LuminanceAccessor.java +78 -0
  78. data/src/toxi/color/NamedColor.java +935 -0
  79. data/src/toxi/color/ProximityComparator.java +70 -0
  80. data/src/toxi/color/RGBAccessor.java +113 -0
  81. data/src/toxi/color/RGBDistanceProxy.java +41 -0
  82. data/src/toxi/color/ReadonlyTColor.java +296 -0
  83. data/src/toxi/color/TColor.java +1677 -0
  84. data/src/toxi/color/TColorAdapter.java +68 -0
  85. data/src/toxi/color/ToneMap.java +218 -0
  86. data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
  87. data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
  88. data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
  89. data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
  90. data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
  91. data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
  92. data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
  93. data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
  94. data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
  95. data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
  96. data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
  97. data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
  98. data/src/toxi/data/csv/CSVAdapter.java +74 -0
  99. data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
  100. data/src/toxi/data/csv/CSVListener.java +61 -0
  101. data/src/toxi/data/csv/CSVParser.java +202 -0
  102. data/src/toxi/data/feeds/AtomAuthor.java +49 -0
  103. data/src/toxi/data/feeds/AtomContent.java +50 -0
  104. data/src/toxi/data/feeds/AtomEntry.java +111 -0
  105. data/src/toxi/data/feeds/AtomFeed.java +129 -0
  106. data/src/toxi/data/feeds/AtomLink.java +62 -0
  107. data/src/toxi/data/feeds/RSSChannel.java +88 -0
  108. data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
  109. data/src/toxi/data/feeds/RSSFeed.java +99 -0
  110. data/src/toxi/data/feeds/RSSItem.java +104 -0
  111. data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
  112. data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
  113. data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
  114. data/src/toxi/geom/AABB.java +658 -0
  115. data/src/toxi/geom/Axis3D.java +116 -0
  116. data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
  117. data/src/toxi/geom/BernsteinPolynomial.java +94 -0
  118. data/src/toxi/geom/BezierCurve2D.java +159 -0
  119. data/src/toxi/geom/BezierCurve3D.java +148 -0
  120. data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
  121. data/src/toxi/geom/BoxIntersector.java +52 -0
  122. data/src/toxi/geom/Circle.java +230 -0
  123. data/src/toxi/geom/CircleIntersector.java +85 -0
  124. data/src/toxi/geom/Cone.java +150 -0
  125. data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
  126. data/src/toxi/geom/CoordinateExtractor.java +16 -0
  127. data/src/toxi/geom/Ellipse.java +250 -0
  128. data/src/toxi/geom/GMatrix.java +2599 -0
  129. data/src/toxi/geom/GVector.java +833 -0
  130. data/src/toxi/geom/GlobalGridTesselator.java +54 -0
  131. data/src/toxi/geom/GridTesselator.java +108 -0
  132. data/src/toxi/geom/Intersector2D.java +49 -0
  133. data/src/toxi/geom/Intersector3D.java +51 -0
  134. data/src/toxi/geom/IsectData2D.java +103 -0
  135. data/src/toxi/geom/IsectData3D.java +103 -0
  136. data/src/toxi/geom/Line2D.java +534 -0
  137. data/src/toxi/geom/Line3D.java +471 -0
  138. data/src/toxi/geom/LineStrip2D.java +430 -0
  139. data/src/toxi/geom/LineStrip3D.java +230 -0
  140. data/src/toxi/geom/LocalGridTesselator.java +57 -0
  141. data/src/toxi/geom/Matrix3d.java +3048 -0
  142. data/src/toxi/geom/Matrix4f.java +3446 -0
  143. data/src/toxi/geom/Matrix4x4.java +1076 -0
  144. data/src/toxi/geom/MatrixSizeException.java +58 -0
  145. data/src/toxi/geom/OctreeVisitor.java +44 -0
  146. data/src/toxi/geom/Origin3D.java +148 -0
  147. data/src/toxi/geom/Plane.java +293 -0
  148. data/src/toxi/geom/PlaneIntersector.java +57 -0
  149. data/src/toxi/geom/PointCloud3D.java +253 -0
  150. data/src/toxi/geom/PointOctree.java +502 -0
  151. data/src/toxi/geom/PointQuadtree.java +375 -0
  152. data/src/toxi/geom/Polygon2D.java +1038 -0
  153. data/src/toxi/geom/PolygonClipper2D.java +45 -0
  154. data/src/toxi/geom/PolygonTesselator.java +20 -0
  155. data/src/toxi/geom/QuadtreeVisitor.java +44 -0
  156. data/src/toxi/geom/Quaternion.java +641 -0
  157. data/src/toxi/geom/Ray2D.java +146 -0
  158. data/src/toxi/geom/Ray3D.java +150 -0
  159. data/src/toxi/geom/Ray3DIntersector.java +75 -0
  160. data/src/toxi/geom/ReadonlyVec2D.java +575 -0
  161. data/src/toxi/geom/ReadonlyVec3D.java +628 -0
  162. data/src/toxi/geom/ReadonlyVec4D.java +431 -0
  163. data/src/toxi/geom/Rect.java +720 -0
  164. data/src/toxi/geom/Reflector3D.java +58 -0
  165. data/src/toxi/geom/Shape2D.java +94 -0
  166. data/src/toxi/geom/Shape3D.java +42 -0
  167. data/src/toxi/geom/SingularMatrixException.java +57 -0
  168. data/src/toxi/geom/SpatialBins.java +182 -0
  169. data/src/toxi/geom/SpatialIndex.java +61 -0
  170. data/src/toxi/geom/Sphere.java +224 -0
  171. data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
  172. data/src/toxi/geom/Spline2D.java +349 -0
  173. data/src/toxi/geom/Spline3D.java +351 -0
  174. data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
  175. data/src/toxi/geom/Triangle2D.java +422 -0
  176. data/src/toxi/geom/Triangle3D.java +456 -0
  177. data/src/toxi/geom/TriangleIntersector.java +105 -0
  178. data/src/toxi/geom/Vec2D.java +1328 -0
  179. data/src/toxi/geom/Vec3D.java +1832 -0
  180. data/src/toxi/geom/Vec4D.java +985 -0
  181. data/src/toxi/geom/VecMathUtil.java +100 -0
  182. data/src/toxi/geom/XAxisCylinder.java +64 -0
  183. data/src/toxi/geom/YAxisCylinder.java +65 -0
  184. data/src/toxi/geom/ZAxisCylinder.java +64 -0
  185. data/src/toxi/geom/mesh/BezierPatch.java +200 -0
  186. data/src/toxi/geom/mesh/BoxSelector.java +62 -0
  187. data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
  188. data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
  189. data/src/toxi/geom/mesh/Face.java +176 -0
  190. data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
  191. data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
  192. data/src/toxi/geom/mesh/Mesh3D.java +224 -0
  193. data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
  194. data/src/toxi/geom/mesh/OBJWriter.java +194 -0
  195. data/src/toxi/geom/mesh/PLYWriter.java +167 -0
  196. data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
  197. data/src/toxi/geom/mesh/STLColorModel.java +54 -0
  198. data/src/toxi/geom/mesh/STLReader.java +185 -0
  199. data/src/toxi/geom/mesh/STLWriter.java +323 -0
  200. data/src/toxi/geom/mesh/SphereFunction.java +156 -0
  201. data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
  202. data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
  203. data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
  204. data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
  205. data/src/toxi/geom/mesh/Terrain.java +451 -0
  206. data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
  207. data/src/toxi/geom/mesh/Vertex.java +78 -0
  208. data/src/toxi/geom/mesh/VertexSelector.java +193 -0
  209. data/src/toxi/geom/mesh/WEFace.java +100 -0
  210. data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
  211. data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
  212. data/src/toxi/geom/mesh/WEVertex.java +134 -0
  213. data/src/toxi/geom/mesh/WingedEdge.java +115 -0
  214. data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
  215. data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
  216. data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
  217. data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
  218. data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
  219. data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
  220. data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
  221. data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
  222. data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
  223. data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
  224. data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
  225. data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
  226. data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
  227. data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
  228. data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
  229. data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
  230. data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
  231. data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
  232. data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
  233. data/src/toxi/geom/nurbs/ControlNet.java +148 -0
  234. data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
  235. data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
  236. data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
  237. data/src/toxi/geom/nurbs/KnotVector.java +333 -0
  238. data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
  239. data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
  240. data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
  241. data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
  242. data/src/toxi/image/util/Filter8bit.java +331 -0
  243. data/src/toxi/image/util/TiledFrameExporter.java +162 -0
  244. data/src/toxi/math/BezierInterpolation.java +102 -0
  245. data/src/toxi/math/CircularInterpolation.java +88 -0
  246. data/src/toxi/math/CosineInterpolation.java +51 -0
  247. data/src/toxi/math/DecimatedInterpolation.java +77 -0
  248. data/src/toxi/math/ExponentialInterpolation.java +68 -0
  249. data/src/toxi/math/InterpolateStrategy.java +60 -0
  250. data/src/toxi/math/Interpolation2D.java +93 -0
  251. data/src/toxi/math/LinearInterpolation.java +46 -0
  252. data/src/toxi/math/MathUtils.java +990 -0
  253. data/src/toxi/math/NonLinearScaleMap.java +101 -0
  254. data/src/toxi/math/ScaleMap.java +183 -0
  255. data/src/toxi/math/SigmoidInterpolation.java +78 -0
  256. data/src/toxi/math/SinCosLUT.java +141 -0
  257. data/src/toxi/math/ThresholdInterpolation.java +58 -0
  258. data/src/toxi/math/ZoomLensInterpolation.java +126 -0
  259. data/src/toxi/math/conversion/UnitTranslator.java +161 -0
  260. data/src/toxi/math/noise/PerlinNoise.java +281 -0
  261. data/src/toxi/math/noise/SimplexNoise.java +542 -0
  262. data/src/toxi/math/waves/AMFMSineWave.java +143 -0
  263. data/src/toxi/math/waves/AbstractWave.java +248 -0
  264. data/src/toxi/math/waves/ConstantWave.java +48 -0
  265. data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
  266. data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
  267. data/src/toxi/math/waves/FMSineWave.java +142 -0
  268. data/src/toxi/math/waves/FMSquareWave.java +143 -0
  269. data/src/toxi/math/waves/FMTriangleWave.java +126 -0
  270. data/src/toxi/math/waves/SineWave.java +81 -0
  271. data/src/toxi/math/waves/Wave2D.java +68 -0
  272. data/src/toxi/math/waves/WaveState.java +69 -0
  273. data/src/toxi/music/scale/AbstractScale.java +117 -0
  274. data/src/toxi/music/scale/GenericScale.java +66 -0
  275. data/src/toxi/music/scale/MajorScale.java +41 -0
  276. data/src/toxi/newmesh/AttributedEdge.java +106 -0
  277. data/src/toxi/newmesh/AttributedFace.java +63 -0
  278. data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
  279. data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
  280. data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
  281. data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
  282. data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
  283. data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
  284. data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
  285. data/src/toxi/newmesh/SpatialIndex.java +78 -0
  286. data/src/toxi/physics2d/ParticlePath2D.java +100 -0
  287. data/src/toxi/physics2d/ParticleString2D.java +184 -0
  288. data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
  289. data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
  290. data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
  291. data/src/toxi/physics2d/VerletParticle2D.java +457 -0
  292. data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
  293. data/src/toxi/physics2d/VerletSpring2D.java +181 -0
  294. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
  295. data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
  296. data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
  297. data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
  298. data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
  299. data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
  300. data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
  301. data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
  302. data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
  303. data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
  304. data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
  305. data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
  306. data/src/toxi/physics3d/ParticlePath3D.java +100 -0
  307. data/src/toxi/physics3d/ParticleString3D.java +184 -0
  308. data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
  309. data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
  310. data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
  311. data/src/toxi/physics3d/VerletParticle3D.java +385 -0
  312. data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
  313. data/src/toxi/physics3d/VerletSpring3D.java +180 -0
  314. data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
  315. data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
  316. data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
  317. data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
  318. data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
  319. data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
  320. data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
  321. data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
  322. data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
  323. data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
  324. data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
  325. data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
  326. data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
  327. data/src/toxi/processing/ArrowModifier.java +116 -0
  328. data/src/toxi/processing/DashedLineModifier.java +48 -0
  329. data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
  330. data/src/toxi/processing/Line2DRenderModifier.java +18 -0
  331. data/src/toxi/processing/MeshToVBO.java +127 -0
  332. data/src/toxi/processing/NormalMapper.java +18 -0
  333. data/src/toxi/processing/POVInterface.java +121 -0
  334. data/src/toxi/processing/POVMesh.java +219 -0
  335. data/src/toxi/processing/POVWriter.java +460 -0
  336. data/src/toxi/processing/RCOpaque.java +77 -0
  337. data/src/toxi/processing/RCTransp.java +78 -0
  338. data/src/toxi/processing/TextureBuilder.java +232 -0
  339. data/src/toxi/processing/Textures.java +110 -0
  340. data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
  341. data/src/toxi/processing/Tracing.java +25 -0
  342. data/src/toxi/processing/XYZNormalMapper.java +30 -0
  343. data/src/toxi/sim/automata/CAMatrix.java +297 -0
  344. data/src/toxi/sim/automata/CARule.java +76 -0
  345. data/src/toxi/sim/automata/CARule2D.java +354 -0
  346. data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
  347. data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
  348. data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
  349. data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
  350. data/src/toxi/sim/dla/DLA.java +497 -0
  351. data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
  352. data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
  353. data/src/toxi/sim/dla/DLAEventListener.java +57 -0
  354. data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
  355. data/src/toxi/sim/dla/DLAParticle.java +102 -0
  356. data/src/toxi/sim/dla/DLASegment.java +88 -0
  357. data/src/toxi/sim/dla/PipelineOrder.java +50 -0
  358. data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
  359. data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
  360. data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
  361. data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
  362. data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
  363. data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
  364. data/src/toxi/sim/grayscott/GrayScott.java +469 -0
  365. data/src/toxi/util/DateUtils.java +141 -0
  366. data/src/toxi/util/FileSequenceDescriptor.java +181 -0
  367. data/src/toxi/util/FileUtils.java +467 -0
  368. data/src/toxi/util/datatypes/ArraySet.java +128 -0
  369. data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
  370. data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
  371. data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
  372. data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
  373. data/src/toxi/util/datatypes/DoubleRange.java +251 -0
  374. data/src/toxi/util/datatypes/FloatRange.java +251 -0
  375. data/src/toxi/util/datatypes/GenericSet.java +215 -0
  376. data/src/toxi/util/datatypes/IntegerRange.java +247 -0
  377. data/src/toxi/util/datatypes/IntegerSet.java +149 -0
  378. data/src/toxi/util/datatypes/ItemIndex.java +72 -0
  379. data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
  380. data/src/toxi/util/datatypes/TypedProperties.java +291 -0
  381. data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
  382. data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
  383. data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
  384. data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
  385. data/src/toxi/util/events/EventDispatcher.java +86 -0
  386. data/src/toxi/volume/AdditiveBrush.java +19 -0
  387. data/src/toxi/volume/ArrayIsoSurface.java +297 -0
  388. data/src/toxi/volume/BoxBrush.java +100 -0
  389. data/src/toxi/volume/BrushMode.java +16 -0
  390. data/src/toxi/volume/HashIsoSurface.java +354 -0
  391. data/src/toxi/volume/IsoSurface.java +59 -0
  392. data/src/toxi/volume/MarchingCubesIndex.java +312 -0
  393. data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
  394. data/src/toxi/volume/MeshVoxelizer.java +216 -0
  395. data/src/toxi/volume/MultiplyBrush.java +20 -0
  396. data/src/toxi/volume/PeakBrush.java +21 -0
  397. data/src/toxi/volume/ReplaceBrush.java +19 -0
  398. data/src/toxi/volume/RoundBrush.java +113 -0
  399. data/src/toxi/volume/VolumetricBrush.java +160 -0
  400. data/src/toxi/volume/VolumetricHashMap.java +179 -0
  401. data/src/toxi/volume/VolumetricSpace.java +195 -0
  402. data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
  403. data/toxiclibs.gemspec +28 -0
  404. metadata +442 -31
@@ -0,0 +1,326 @@
1
+ package toxi.sim.fluids;
2
+
3
+ import toxi.geom.ReadonlyVec3D;
4
+ import toxi.geom.Vec3D;
5
+
6
+ /**
7
+ *
8
+ * @author tux
9
+ */
10
+ public class FluidSolver3D {
11
+
12
+ private final int size, size2, size3, sm1, sm2;
13
+ private final float dt;
14
+
15
+ /**
16
+ *
17
+ */
18
+ public float diff;
19
+
20
+ /**
21
+ *
22
+ */
23
+ public float visc;
24
+
25
+ private final float[] s;
26
+ private final float[] density;
27
+
28
+ private final float[] velX, velY, velZ;
29
+ private final float[] velX0, velY0, velZ0;
30
+ private final int numIterations = 10;
31
+
32
+ /**
33
+ *
34
+ * @param size
35
+ * @param diffusion
36
+ * @param viscosity
37
+ * @param dt
38
+ */
39
+ public FluidSolver3D(int size, float diffusion, float viscosity, float dt) {
40
+ this.size = size;
41
+ this.size2 = size * size;
42
+ this.size3 = size2 * size;
43
+ this.sm1 = size - 1;
44
+ this.sm2 = size - 2;
45
+ this.diff = diffusion;
46
+ this.visc = viscosity;
47
+ this.dt = dt;
48
+ this.s = new float[size3];
49
+ this.density = new float[size3];
50
+ this.velX = new float[size3];
51
+ this.velY = new float[size3];
52
+ this.velZ = new float[size3];
53
+ this.velX0 = new float[size3];
54
+ this.velY0 = new float[size3];
55
+ this.velZ0 = new float[size3];
56
+ }
57
+
58
+ /**
59
+ *
60
+ * @param x
61
+ * @param y
62
+ * @param z
63
+ * @param amount
64
+ */
65
+ public void addDensity(int x, int y, int z, float amount) {
66
+ density[IX(x, y, z)] += amount;
67
+ }
68
+
69
+ /**
70
+ *
71
+ * @param x
72
+ * @param y
73
+ * @param z
74
+ * @param amount
75
+ */
76
+ public void addVelocity(int x, int y, int z, Vec3D amount) {
77
+ int idx = IX(x, y, z);
78
+ velX[idx] += amount.x;
79
+ velY[idx] += amount.y;
80
+ velZ[idx] += amount.z;
81
+ }
82
+
83
+ private void advect(final int b, final float[] d, final float[] d0,
84
+ final float[] velocX, final float[] velocY, final float[] velocZ) {
85
+ int i0, j0, k0;
86
+
87
+ final float scaledTime = dt * sm2;
88
+
89
+ float s0, s1, t0, t1, u0, u1;
90
+ float x, y, z;
91
+
92
+ float maxSize = sm2 + 0.5f;
93
+ float ifloat, jfloat, kfloat;
94
+ int i, j, k;
95
+
96
+ for (k = 1, kfloat = 1; k < sm1; k++, kfloat++) {
97
+ for (j = 1, jfloat = 1; j < sm1; j++, jfloat++) {
98
+ for (i = 1, ifloat = 1; i < sm1; i++, ifloat++) {
99
+ final int idx = IX(i, j, k);
100
+ x = i - scaledTime * velocX[idx];
101
+ y = j - scaledTime * velocY[idx];
102
+ z = k - scaledTime * velocZ[idx];
103
+
104
+ if (x < 0.5f) {
105
+ x = 0.5f;
106
+ }
107
+ if (x > maxSize) {
108
+ x = maxSize;
109
+ }
110
+ i0 = (int) x;
111
+ if (y < 0.5f) {
112
+ y = 0.5f;
113
+ }
114
+ if (y > maxSize) {
115
+ y = maxSize;
116
+ }
117
+ j0 = (int) y;
118
+ if (z < 0.5f) {
119
+ z = 0.5f;
120
+ }
121
+ if (z > maxSize) {
122
+ z = maxSize;
123
+ }
124
+ k0 = (int) z;
125
+
126
+ s1 = x - i0;
127
+ s0 = 1.0f - s1;
128
+ t1 = y - j0;
129
+ t0 = 1.0f - t1;
130
+ u1 = z - k0;
131
+ u0 = 1.0f - u1;
132
+
133
+ final int ix = IX(i0, j0, k0);
134
+ d[idx] =
135
+
136
+ s0
137
+ * (t0 * (u0 * d0[ix] + u1 * d0[ix + size2]) + (t1 * (u0
138
+ * d0[ix + size] + u1
139
+ * d0[ix + size + size2])))
140
+ + s1
141
+ * (t0 * (u0 * d0[ix + 1] + u1 * d0[ix + 1 + size2]) + (t1 * (u0
142
+ * d0[ix + 1 + size] + u1
143
+ * d0[ix + 1 + size + size2])));
144
+ }
145
+ }
146
+ }
147
+ set_bnd(b, d);
148
+ }
149
+
150
+ /**
151
+ *
152
+ * @param x
153
+ * @param y
154
+ * @param z
155
+ */
156
+ public void clearAt(int x, int y, int z) {
157
+ final int idx = IX(x, y, z);
158
+ if (idx >= 0 && idx < density.length) {
159
+ density[idx] = 0;
160
+ velX[idx] = velY[idx] = velZ[idx] = 0;
161
+ }
162
+ }
163
+
164
+ /**
165
+ *
166
+ * @param decay
167
+ */
168
+ public final void decay(float decay) {
169
+ for (int i = 0; i < density.length; i++) {
170
+ density[i] *= decay;
171
+ }
172
+ }
173
+
174
+ private void diffuse(final int b, final float[] x, final float[] x0,
175
+ final float diff) {
176
+ float a = dt * diff * sm2 * sm2;
177
+ lin_solve(b, x, x0, a, 1 + 6 * a);
178
+ }
179
+
180
+ /**
181
+ * @return the density
182
+ */
183
+ public float[] getDensity() {
184
+ return density;
185
+ }
186
+
187
+ private int IX(int x, int y, int z) {
188
+ return x + y * size + z * size2;
189
+ }
190
+
191
+ void lin_solve(final int b, final float[] x, final float[] x0,
192
+ final float a, final float c) {
193
+ float cRecip = 1.0f / c;
194
+ for (int k = 0; k < numIterations; k++) {
195
+ for (int m = 1; m < sm1; m++) {
196
+ for (int j = 1, idx = m * size2 + size + 1; j < sm1; j++) {
197
+ for (int i = 1; i < sm1; i++) {
198
+ x[idx] = (x0[idx] + a
199
+ * (x[idx + 1] + x[idx - 1] + x[idx + size]
200
+ + x[idx - size] + x[idx + size2] + x[idx
201
+ - size2]))
202
+ * cRecip;
203
+ idx++;
204
+ }
205
+ }
206
+ }
207
+ set_bnd(b, x);
208
+ }
209
+ }
210
+
211
+ private void project(final float[] velocX, final float[] velocY,
212
+ final float[] velocZ, final float[] p, final float[] div) {
213
+ final float invSize = -0.5f * 1f / size;
214
+ for (int k = 1; k < sm1; k++) {
215
+ for (int j = 1; j < sm1; j++) {
216
+ for (int i = 1; i < sm1; i++) {
217
+ final int idx = IX(i, j, k);
218
+ div[idx] = (velocX[idx + 1] - velocX[idx - 1]
219
+ + velocY[idx + size] - velocY[idx - size]
220
+ + velocZ[idx + size2] - velocZ[idx - size2])
221
+ * invSize;
222
+ p[idx] = 0;
223
+ }
224
+ }
225
+ }
226
+ set_bnd(0, div);
227
+ set_bnd(0, p);
228
+ lin_solve(0, p, div, 1, 6);
229
+
230
+ float hs = 0.5f * size;
231
+ for (int k = 1; k < sm1; k++) {
232
+ for (int j = 1; j < sm1; j++) {
233
+ for (int i = 1; i < sm1; i++) {
234
+ final int idx = IX(i, j, k);
235
+ velocX[idx] -= hs * (p[idx + 1] - p[idx - 1]);
236
+ velocY[idx] -= hs * (p[idx + size] - p[idx - size]);
237
+ velocZ[idx] -= hs * (p[idx + size2] - p[idx - size2]);
238
+ }
239
+ }
240
+ }
241
+ set_bnd(1, velocX);
242
+ set_bnd(2, velocY);
243
+ set_bnd(3, velocZ);
244
+ }
245
+
246
+ private void set_bnd(int b, float[] x) {
247
+ for (int j = 1; j < sm1; j++) {
248
+ for (int i = 1; i < sm1; i++) {
249
+ final int idx = IX(i, j, 0);
250
+ x[idx] = b == 3 ? -x[idx + size2] : x[idx + size2];
251
+ x[idx + sm1 * size2] = b == 3 ? -x[idx + sm2 * size2] : x[idx
252
+ + sm2 * size2];
253
+ }
254
+ }
255
+ for (int k = 1; k < sm1; k++) {
256
+ for (int i = 1; i < sm1; i++) {
257
+ final int idx = IX(i, 0, k);
258
+ x[idx] = b == 2 ? -x[idx + size] : x[idx + size];
259
+ x[idx + sm1 * size] = b == 2 ? -x[idx + size * sm2] : x[idx
260
+ + size * sm2];
261
+ }
262
+ }
263
+ for (int k = 1; k < sm1; k++) {
264
+ for (int j = 1; j < sm1; j++) {
265
+ final int idx = IX(0, j, k);
266
+ x[idx] = b == 1 ? -x[idx + 1] : x[idx + 1];
267
+ x[idx + sm1] = b == 1 ? -x[idx + sm2] : x[idx + sm2];
268
+ }
269
+ }
270
+
271
+ x[0] = 0.33f * (x[IX(1, 0, 0)] + x[IX(0, 1, 0)] + x[IX(0, 0, 1)]);
272
+ x[IX(0, sm1, 0)] = 0.33f * (x[IX(1, sm1, 0)] + x[IX(0, sm2, 0)] + x[IX(
273
+ 0, sm1, 1)]);
274
+ x[IX(0, 0, sm1)] = 0.33f * (x[IX(1, 0, sm1)] + x[IX(0, 1, sm1)] + x[IX(
275
+ 0, 0, sm1)]);
276
+ x[IX(0, sm1, sm1)] = 0.33f * (x[IX(1, sm1, sm1)] + x[IX(0, sm2, sm1)] + x[IX(
277
+ 0, sm1, sm2)]);
278
+ x[IX(sm1, 0, 0)] = 0.33f * (x[IX(sm2, 0, 0)] + x[IX(sm1, 1, 0)] + x[IX(
279
+ sm1, 0, 1)]);
280
+ x[IX(sm1, sm1, 0)] = 0.33f * (x[IX(sm2, sm1, 0)] + x[IX(sm1, sm2, 0)] + x[IX(
281
+ sm1, sm1, 1)]);
282
+ x[IX(sm1, 0, sm1)] = 0.33f * (x[IX(sm2, 0, sm1)] + x[IX(sm1, 1, sm1)] + x[IX(
283
+ sm1, 0, sm2)]);
284
+ x[IX(sm1, sm1, sm1)] = 0.33f * (x[IX(sm2, sm1, sm1)]
285
+ + x[IX(sm1, sm2, sm1)] + x[IX(sm1, sm1, sm2)]);
286
+ }
287
+
288
+ /**
289
+ *
290
+ * @param x
291
+ * @param y
292
+ * @param z
293
+ * @param dens
294
+ * @param vel
295
+ */
296
+ public void setAt(int x, int y, int z, float dens, ReadonlyVec3D vel) {
297
+ final int idx = IX(x, y, z);
298
+ if (idx >= 0 && idx < density.length) {
299
+ density[idx] = dens;
300
+ velX[idx] = vel.x();
301
+ velY[idx] = vel.y();
302
+ velZ[idx] = vel.z();
303
+ }
304
+ }
305
+
306
+ /**
307
+ *
308
+ */
309
+ public void update() {
310
+ diffuse(1, velX0, velX, visc);
311
+ diffuse(2, velY0, velY, visc);
312
+ diffuse(3, velZ0, velZ, visc);
313
+
314
+ project(velX0, velY0, velZ0, velX, velY);
315
+
316
+ advect(1, velX, velX0, velX0, velY0, velZ0);
317
+ advect(2, velY, velY0, velX0, velY0, velZ0);
318
+ advect(3, velZ, velZ0, velX0, velY0, velZ0);
319
+
320
+ project(velX, velY, velZ, velX0, velY0);
321
+
322
+ diffuse(0, s, density, diff);
323
+ advect(0, density, s, velX, velY, velZ);
324
+ }
325
+
326
+ }
@@ -0,0 +1,469 @@
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.sim.grayscott;
29
+
30
+ import toxi.geom.Rect;
31
+ import toxi.math.MathUtils;
32
+
33
+ /**
34
+ * Implementation of the Gray-Scott reaction diffusion model described in detail
35
+ * on the links below:
36
+ * <ul>
37
+ * <li>http://groups.csail.mit.edu/mac/projects/amorphous/GrayScott/</li>
38
+ * <li>http://ix.cs.uoregon.edu/~jlidbeck/java/rd/</li>
39
+ * <li>http://www.mrob.com/pub/comp/xmorphia/</li>
40
+ * </ul>
41
+ */
42
+ public class GrayScott {
43
+
44
+ public float[] u,
45
+
46
+ /**
47
+ *
48
+ */
49
+
50
+ /**
51
+ *
52
+ */
53
+ v;
54
+ protected float[] uu,
55
+
56
+ /**
57
+ *
58
+ */
59
+
60
+ /**
61
+ *
62
+ */
63
+ vv;
64
+
65
+ protected int width,
66
+
67
+ /**
68
+ *
69
+ */
70
+
71
+ /**
72
+ *
73
+ */
74
+ height;
75
+
76
+ protected float f,
77
+
78
+ /**
79
+ *
80
+ */
81
+
82
+ /**
83
+ *
84
+ */
85
+ k;
86
+ protected float dU,
87
+
88
+ /**
89
+ *
90
+ */
91
+
92
+ /**
93
+ *
94
+ */
95
+ dV;
96
+
97
+ /**
98
+ *
99
+ */
100
+ protected boolean isTiling;
101
+
102
+ /**
103
+ *
104
+ * @param width
105
+ * @param height
106
+ * @param wrap
107
+ */
108
+ public GrayScott(int width, int height, boolean wrap) {
109
+ this.width = width;
110
+ this.height = height;
111
+ this.u = new float[width * height];
112
+ this.v = new float[u.length];
113
+ this.uu = new float[u.length];
114
+ this.vv = new float[u.length];
115
+ this.isTiling = wrap;
116
+ reset();
117
+ // default config
118
+ setCoefficients(0.023f, 0.077f, 0.16f, 0.08f);
119
+ }
120
+
121
+ /**
122
+ * Convenience method to access U array using 2D coordinates.
123
+ *
124
+ * @param x
125
+ * @param y
126
+ * @return current u value at the given position
127
+ */
128
+ public float getCurrentUAt(int x, int y) {
129
+ if (y >= 0 && y < height && x >= 0 && x < width) {
130
+ return u[y * width + x];
131
+ }
132
+ return 0;
133
+ }
134
+
135
+ /**
136
+ * Convenience method to access V array using 2D coordinates.
137
+ *
138
+ * @param x
139
+ * @param y
140
+ * @return current v value at the given position
141
+ */
142
+ public float getCurrentVAt(int x, int y) {
143
+ if (y >= 0 && y < height && x >= 0 && x < width) {
144
+ return v[y * width + x];
145
+ }
146
+ return 0;
147
+ }
148
+
149
+ /**
150
+ * @return the diffuse U coefficient
151
+ */
152
+ public float getDiffuseU() {
153
+ return dU;
154
+ }
155
+
156
+ /**
157
+ * @return the diffuse V coefficient
158
+ */
159
+ public float getDiffuseV() {
160
+ return dV;
161
+ }
162
+
163
+ /**
164
+ * @return the F coefficient
165
+ */
166
+ public float getF() {
167
+ return f;
168
+ }
169
+
170
+ /**
171
+ * Extension point for subclasses to modulate the F coefficient of the
172
+ * reaction diffusion, based on spatial (or other) parameters. This method
173
+ * is called for every cell/pixel of the simulation space from the main
174
+ * {@link #update(float)} cycle and can be used to create parameter
175
+ * gradients, animations and other spatial or temporal modulations.
176
+ *
177
+ * @param x
178
+ * @param y
179
+ * @return the active F coefficient at the given position
180
+ */
181
+ public float getFCoeffAt(int x, int y) {
182
+ return f;
183
+ }
184
+
185
+ /**
186
+ * @return the K coefficient
187
+ */
188
+ public float getK() {
189
+ return k;
190
+ }
191
+
192
+ /**
193
+ * Extension point for subclasses to modulate the K coefficient of the
194
+ * reaction diffusion, based on spatial (or other) parameters. This method
195
+ * is called for every cell/pixel of the simulation space and can be used to
196
+ * create parameter gradients, animations and other spatial or temporal
197
+ * modulations.
198
+ *
199
+ * @param x
200
+ * @param y
201
+ * @return the active K coefficient at the given position
202
+ */
203
+ public float getKCoeffAt(int x, int y) {
204
+ return k;
205
+ }
206
+
207
+ /**
208
+ * @return the isTiling
209
+ */
210
+ public boolean isTiling() {
211
+ return isTiling;
212
+ }
213
+
214
+ /**
215
+ * Resets the simulation matrix to an initial, clean state.
216
+ */
217
+ public final void reset() {
218
+ for (int i = 0; i < uu.length; i++) {
219
+ uu[i] = 1.0f;
220
+ vv[i] = 0.0f;
221
+ }
222
+ }
223
+
224
+ /**
225
+ *
226
+ * @param pixels
227
+ * @param imgWidth
228
+ * @param imgHeight
229
+ */
230
+ public void seedImage(int[] pixels, int imgWidth, int imgHeight) {
231
+ int xo = MathUtils.clip((width - imgWidth) / 2, 0, width - 1);
232
+ int yo = MathUtils.clip((height - imgHeight) / 2, 0, height - 1);
233
+ imgWidth = MathUtils.min(imgWidth, width);
234
+ imgHeight = MathUtils.min(imgHeight, height);
235
+ for (int y = 0; y < imgHeight; y++) {
236
+ int i = y * imgWidth;
237
+ for (int x = 0; x < imgWidth; x++) {
238
+ if (0 < (pixels[i + x] & 0xff)) {
239
+ int idx = (yo + y) * width + xo + x;
240
+ uu[idx] = 0.5f;
241
+ vv[idx] = 0.25f;
242
+ }
243
+ }
244
+ }
245
+ }
246
+
247
+ /**
248
+ *
249
+ * @param f
250
+ * @param k
251
+ * @param dU
252
+ * @param dV
253
+ */
254
+ public final void setCoefficients(float f, float k, float dU, float dV) {
255
+ this.f = f;
256
+ this.k = k;
257
+ this.dU = dU;
258
+ this.dV = dV;
259
+ }
260
+
261
+ /**
262
+ * @param dU
263
+ * the diffuse U coefficient to set
264
+ */
265
+ public void setDiffuseU(float dU) {
266
+ this.dU = dU;
267
+ }
268
+
269
+ /**
270
+ * @param dV
271
+ * the diffuse V coefficient to set
272
+ */
273
+ public void setDiffuseV(float dV) {
274
+ this.dV = dV;
275
+ }
276
+
277
+ /**
278
+ * @param f
279
+ * the F coefficient to set
280
+ */
281
+ public void setF(float f) {
282
+ this.f = f;
283
+ }
284
+
285
+ /**
286
+ * @param k
287
+ * the K coefficient to set
288
+ */
289
+ public void setK(float k) {
290
+ this.k = k;
291
+ }
292
+
293
+ /**
294
+ * @param x
295
+ * @param y
296
+ * @param w
297
+ * @param h
298
+ */
299
+ public void setRect(int x, int y, int w, int h) {
300
+ int mix = MathUtils.clip(x - w / 2, 0, width);
301
+ int max = MathUtils.clip(x + w / 2, 0, width);
302
+ int miy = MathUtils.clip(y - h / 2, 0, height);
303
+ int may = MathUtils.clip(y + h / 2, 0, height);
304
+ for (int yy = miy; yy < may; yy++) {
305
+ for (int xx = mix; xx < max; xx++) {
306
+ int idx = yy * width + xx;
307
+ uu[idx] = 0.5f;
308
+ vv[idx] = 0.25f;
309
+ }
310
+ }
311
+ }
312
+
313
+ /**
314
+ *
315
+ * @param r
316
+ */
317
+ public void setRect(Rect r) {
318
+ setRect((int) r.x, (int) r.y, (int) r.width, (int) r.height);
319
+ }
320
+
321
+ /**
322
+ * @param isTiling
323
+ * the isTiling to set
324
+ */
325
+ public void setTiling(boolean isTiling) {
326
+ this.isTiling = isTiling;
327
+ }
328
+
329
+ /**
330
+ *
331
+ * @param t
332
+ */
333
+ public void update(float t) {
334
+ t = MathUtils.clip(t, 0, 1f);
335
+ int w1 = width - 1;
336
+ int h1 = height - 1;
337
+ for (int y = 1; y < h1; y++) {
338
+ for (int x = 1; x < w1; x++) {
339
+ int idx = y * width + x;
340
+ int top = idx - width;
341
+ int bottom = idx + width;
342
+ int left = idx - 1;
343
+ int right = idx + 1;
344
+ float currF = getFCoeffAt(x, y);
345
+ float currK = getKCoeffAt(x, y);
346
+ float currU = uu[idx];
347
+ float currV = vv[idx];
348
+ float d2 = currU * currV * currV;
349
+ u[idx] = MathUtils
350
+ .max(0,
351
+ currU
352
+ + t
353
+ * ((dU
354
+ * ((uu[right] + uu[left]
355
+ + uu[bottom] + uu[top]) - 4 * currU) - d2) + currF
356
+ * (1.0f - currU)));
357
+ v[idx] = MathUtils
358
+ .max(0,
359
+ currV
360
+ + t
361
+ * ((dV
362
+ * ((vv[right] + vv[left]
363
+ + vv[bottom] + vv[top]) - 4 * currV) + d2) - currK
364
+ * currV));
365
+ }
366
+ }
367
+
368
+ if (isTiling) {
369
+ int w2 = w1 - 1;
370
+ int idxH1 = h1 * width;
371
+ int idxH2 = (h1 - 1) * width;
372
+ for (int x = 0; x < width; x++) {
373
+ int left = (x == 0 ? w1 : x - 1);
374
+ int right = (x == w1 ? 0 : x + 1);
375
+ int idx = idxH1 + x;
376
+ float cu = uu[x];
377
+ float cv = vv[x];
378
+ float cui = uu[idx];
379
+ float cvi = vv[idx];
380
+ float d = cu * cv * cv;
381
+ u[x] = MathUtils
382
+ .max(0,
383
+ cu
384
+ + t
385
+ * ((dU
386
+ * ((uu[right] + uu[left]
387
+ + uu[width + x] + cui) - 4 * cu) - d) + f
388
+ * (1.0f - cu)));
389
+ v[x] = MathUtils
390
+ .max(0,
391
+ cv
392
+ + t
393
+ * ((dV
394
+ * ((vv[right] + vv[left]
395
+ + vv[width + x] + cvi) - 4 * cv) + d) - k
396
+ * cv));
397
+ d = cui * cvi * cvi;
398
+ u[idx] = MathUtils
399
+ .max(0,
400
+ cui
401
+ + t
402
+ * ((dU
403
+ * ((uu[idxH1 + right]
404
+ + uu[idxH1 + left] + cu + uu[idxH2
405
+ + x]) - 4 * cui) - d) + f
406
+ * (1.0f - cui)));
407
+ v[idx] = MathUtils
408
+ .max(0,
409
+ cvi
410
+ + t
411
+ * ((dU
412
+ * ((vv[idxH1 + right]
413
+ + vv[idxH1 + left] + cv + vv[idxH2
414
+ + x]) - 4 * cvi) + d) - k
415
+ * cvi));
416
+ }
417
+
418
+ for (int y = 0; y < height; y++) {
419
+ int idx = y * width;
420
+ int idxW1 = idx + w1;
421
+ int idxW2 = idx + w2;
422
+ float cu = uu[idx];
423
+ float cv = vv[idx];
424
+ float cui = uu[idxW1];
425
+ float cvi = vv[idxW1];
426
+ float d = cu * cv * cv;
427
+ int up = (y == 0 ? h1 : y - 1) * width;
428
+ int down = (y == h1 ? 0 : y + 1) * width;
429
+ u[idx] = MathUtils
430
+ .max(0,
431
+ cu
432
+ + t
433
+ * ((dU
434
+ * ((uu[idx + 1] + cui
435
+ + uu[down] + uu[up]) - 4 * cu) - d) + f
436
+ * (1.0f - cu)));
437
+ v[idx] = MathUtils
438
+ .max(0,
439
+ cv
440
+ + t
441
+ * ((dV
442
+ * ((vv[idx + 1] + cvi
443
+ + vv[down] + vv[up]) - 4 * cv) + d) - k
444
+ * cv));
445
+ d = cui * cvi * cvi;
446
+ u[idxW1] = MathUtils
447
+ .max(0,
448
+ cui
449
+ + t
450
+ * ((dU
451
+ * ((cu + uu[idxW2]
452
+ + uu[down + w1] + uu[up
453
+ + w1]) - 4 * cui) - d) + f
454
+ * (1.0f - cui)));
455
+ v[idxW1] = MathUtils
456
+ .max(0,
457
+ cvi
458
+ + t
459
+ * ((dV
460
+ * ((cv + vv[idxW2]
461
+ + vv[down + w1] + vv[up
462
+ + w1]) - 4 * cvi) + d) - k
463
+ * cvi));
464
+ }
465
+ }
466
+ System.arraycopy(u, 0, uu, 0, u.length);
467
+ System.arraycopy(v, 0, vv, 0, v.length);
468
+ }
469
+ }