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,149 @@
1
+ /*
2
+ * __ .__ .__ ._____.
3
+ * _/ |_ _______ __|__| ____ | | |__\_ |__ ______
4
+ * \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
5
+ * | | ( <_> > <| \ \___| |_| || \_\ \\___ \
6
+ * |__| \____/__/\_ \__|\___ >____/__||___ /____ >
7
+ * \/ \/ \/ \/
8
+ *
9
+ * Copyright (c) 2006-2011 Karsten Schmidt
10
+ *
11
+ * This library is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 2.1 of the License, or (at your option) any later version.
15
+ *
16
+ * http://creativecommons.org/licenses/LGPL/2.1/
17
+ *
18
+ * This library is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ * You should have received a copy of the GNU Lesser General Public
24
+ * License along with this library; if not, write to the Free Software
25
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26
+ */
27
+
28
+ package toxi.geom.mesh2d;
29
+
30
+ import java.util.ArrayList;
31
+ import java.util.Collection;
32
+ import java.util.HashSet;
33
+ import java.util.LinkedList;
34
+ import java.util.List;
35
+ import toxi.geom.Polygon2D;
36
+ import toxi.geom.Triangle2D;
37
+ import toxi.geom.Vec2D;
38
+
39
+ /**
40
+ *
41
+ * @author tux
42
+ */
43
+ public class Voronoi {
44
+
45
+ /**
46
+ *
47
+ */
48
+ public static float DEFAULT_SIZE = 10000;
49
+
50
+ /**
51
+ *
52
+ */
53
+ protected DelaunayTriangulation delaunay;
54
+
55
+ /**
56
+ *
57
+ */
58
+ protected DelaunayTriangle initialTriangle;
59
+
60
+ /**
61
+ *
62
+ */
63
+ protected List<Vec2D> sites = new ArrayList<>();
64
+
65
+ /**
66
+ *
67
+ */
68
+ public Voronoi() {
69
+ this(DEFAULT_SIZE);
70
+ }
71
+
72
+ /**
73
+ *
74
+ * @param size
75
+ */
76
+ public Voronoi(float size) {
77
+ initialTriangle = new DelaunayTriangle(
78
+ new DelaunayVertex(-size, -size), new DelaunayVertex(size,
79
+ -size), new DelaunayVertex(0, size));
80
+ this.delaunay = new DelaunayTriangulation(initialTriangle);
81
+ }
82
+
83
+ /**
84
+ *
85
+ * @param p
86
+ */
87
+ public void addPoint(Vec2D p) {
88
+ sites.add(p.copy());
89
+ delaunay.delaunayPlace(new DelaunayVertex(p.x, p.y));
90
+ }
91
+
92
+ /**
93
+ *
94
+ * @param points
95
+ */
96
+ public void addPoints(Collection<? extends Vec2D> points) {
97
+ points.stream().forEach((p) -> {
98
+ addPoint(p);
99
+ });
100
+ }
101
+
102
+ /**
103
+ *
104
+ * @return
105
+ */
106
+ public List<Polygon2D> getRegions() {
107
+ List<Polygon2D> regions = new LinkedList<>();
108
+ HashSet<DelaunayVertex> done = new HashSet<>(
109
+ initialTriangle);
110
+ delaunay.stream().forEach((DelaunayTriangle triangle) -> {
111
+ triangle.stream().filter((site) -> !(done.contains(site))).map((site) -> {
112
+ done.add(site);
113
+ return site;
114
+ }).map((site) -> delaunay.surroundingTriangles(
115
+ site, triangle)).map((List<DelaunayTriangle> list) -> {
116
+ Polygon2D poly = new Polygon2D();
117
+ list.stream().map((tri) -> tri.getCircumcenter()).forEach((circumeter) -> {
118
+ poly.add(new Vec2D((float) circumeter.coord(0),
119
+ (float) circumeter.coord(1)));
120
+ });
121
+ return poly;
122
+ }).forEach((poly) -> {
123
+ regions.add(poly);
124
+ });
125
+ });
126
+ return regions;
127
+ }
128
+
129
+ /**
130
+ *
131
+ * @return
132
+ */
133
+ public List<Vec2D> getSites() {
134
+ return sites;
135
+ }
136
+
137
+ /**
138
+ *
139
+ * @return
140
+ */
141
+ public List<Triangle2D> getTriangles() {
142
+ List<Triangle2D> tris = new ArrayList<>();
143
+ for (DelaunayTriangle t : delaunay) {
144
+ tris.add(new Triangle2D(t.get(0).toVec2D(), t.get(1).toVec2D(), t
145
+ .get(2).toVec2D()));
146
+ }
147
+ return tris;
148
+ }
149
+ }
@@ -0,0 +1,210 @@
1
+ /*
2
+ * jgeom: Geometry Library fo Java
3
+ *
4
+ * Copyright (C) 2005 Samuel Gerber
5
+ *
6
+ * This program is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU General Public License
8
+ * as published by the Free Software Foundation; either version 2
9
+ * of the License, or (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+ */
20
+ package toxi.geom.nurbs;
21
+
22
+ import toxi.geom.Polygon2D;
23
+ import toxi.geom.Vec3D;
24
+ import toxi.geom.Vec4D;
25
+
26
+ /**
27
+ * A Basic implementation of a NurbsCurve.
28
+ *
29
+ * @author sg
30
+ * @version 1.0
31
+ */
32
+ public class BasicNurbsCurve implements NurbsCurve, Cloneable {
33
+
34
+ private Vec4D[] cpoly;
35
+ private KnotVector uKnots;
36
+
37
+ /**
38
+ * Create a Nurbs Curve from the given Controlpoints, Knots and degree.<br>
39
+ * [TODO Validate Input, part of it is done by creating the KnotVector]
40
+ *
41
+ * @param cps
42
+ * Array of Controlpoints
43
+ * @param uK
44
+ * Knot values
45
+ * @param degree
46
+ * Degree of the Nurbs Curve
47
+ */
48
+ public BasicNurbsCurve(Vec4D[] cps, float[] uK, int degree) {
49
+ this(cps, new KnotVector(uK, degree));
50
+ }
51
+
52
+ /**
53
+ * Generate a Nurbs from the given Controlpoints and the given Knotvector.<br>
54
+ * [TODO validate input]
55
+ *
56
+ * @param cps
57
+ * Array of Controlpoints
58
+ * @param uKnots
59
+ * Knotvector of the Nurbs
60
+ */
61
+ public BasicNurbsCurve(Vec4D[] cps, KnotVector uKnots) {
62
+ cpoly = cps;
63
+ this.uKnots = uKnots;
64
+ if (uKnots.length() != uKnots.getDegree() + cpoly.length + 1) {
65
+ throw new IllegalArgumentException(
66
+ "Nurbs Curve has wrong knot number");
67
+ }
68
+ }
69
+
70
+ @Override
71
+ public Vec4D[][] curveDerivCpts(int d, int r1, int r2) {
72
+
73
+ Vec4D[][] result = new Vec4D[d + 1][r2 - r1 + 1];
74
+
75
+ int degree = uKnots.getDegree();
76
+
77
+ // k=0 => control points
78
+ int r = r2 - r1;
79
+ for (int i = 0; i <= r; i++) {
80
+ result[0][i] = cpoly[i];
81
+ }
82
+
83
+ // k=1 => 1st derivative, k=2 => 2nd derivative, etc...
84
+ for (int k = 1; k <= d; k++) {
85
+ int tmp = degree - k + 1;
86
+ for (int i = 0; i <= (r - k); i++) {
87
+ Vec4D cw = new Vec4D(result[k - 1][i + 1]);
88
+ cw.subSelf(result[k - 1][i]);
89
+ cw.scaleSelf(tmp);
90
+ cw.scaleSelf(1 / (uKnots.get(r1 + i + degree + 1) - uKnots
91
+ .get(r1 + i + k)));
92
+ result[k][i] = cw;
93
+ }
94
+ }
95
+ return result;
96
+ }
97
+
98
+ /**
99
+ *
100
+ * @param u
101
+ * @param grade
102
+ * @return
103
+ */
104
+ @Override
105
+ public Vec3D[] derivativesOnCurve(float u, int grade) {
106
+ return derivativesOnCurve(u, grade, new Vec3D[grade + 1]);
107
+ }
108
+
109
+ /**
110
+ *
111
+ * @param u
112
+ * @param grade
113
+ * @param derivs
114
+ * @return
115
+ */
116
+ @Override
117
+ public Vec3D[] derivativesOnCurve(float u, int grade, Vec3D[] derivs) {
118
+
119
+ int span = uKnots.findSpan(u);
120
+ int degree = uKnots.getDegree();
121
+
122
+ // TODO: compute derivatives also for NURBS
123
+ // currently supports only non-rational B-Splines
124
+ float derivVals[][] = uKnots.derivBasisFunctions(span, u, grade);
125
+
126
+ // Zero values
127
+ for (int k = (degree + 1); k <= grade; k++) {
128
+ derivs[k] = new Vec3D();
129
+ }
130
+
131
+ for (int k = 0; k <= grade; k++) {
132
+ Vec3D d = new Vec3D();
133
+ for (int j = 0; j <= degree; j++) {
134
+ Vec4D v = cpoly[(span - degree) + j];
135
+ float s = derivVals[k][j];
136
+ d.addSelf(v.x * s, v.y * s, v.z * s);
137
+ }
138
+ derivs[k] = d;
139
+ }
140
+ return derivs;
141
+ }
142
+
143
+ @Override
144
+ public Vec4D[] getControlPoints() {
145
+ return cpoly;
146
+ }
147
+
148
+ @Override
149
+ public int getDegree() {
150
+ return uKnots.getDegree();
151
+ }
152
+
153
+ @Override
154
+ public float[] getKnots() {
155
+ return uKnots.getArray();
156
+ }
157
+
158
+ /**
159
+ *
160
+ * @return
161
+ */
162
+ @Override
163
+ public KnotVector getKnotVector() {
164
+ return uKnots;
165
+ }
166
+
167
+ @Override
168
+ public Vec3D pointOnCurve(float u) {
169
+ return pointOnCurve(u, new Vec3D());
170
+ }
171
+
172
+ @Override
173
+ public Vec3D pointOnCurve(float u, Vec3D out) {
174
+ int span = uKnots.findSpan(u);
175
+ int degree = uKnots.getDegree();
176
+
177
+ // for periodic knot vectors the usable parameter range is
178
+ // span >= degree and span <= no control points (n+1)
179
+ if (span < degree) {
180
+ return out;
181
+ }
182
+
183
+ if (span > uKnots.getN()) {
184
+ return out;
185
+ }
186
+
187
+ double[] bf = uKnots.basisFunctions(span, u);
188
+ Vec4D cw = new Vec4D();
189
+ for (int i = 0; i <= degree; i++) {
190
+ cw.addSelf(cpoly[(span - degree) + i].getWeighted().scaleSelf(
191
+ (float) bf[i]));
192
+ }
193
+ return cw.unweightInto(out);
194
+ }
195
+
196
+ /**
197
+ *
198
+ * @param res
199
+ * @return
200
+ */
201
+ @Override
202
+ public Polygon2D toPolygon2D(int res) {
203
+ float delta = 1f / (res - 1);
204
+ Polygon2D poly = new Polygon2D();
205
+ for (int i = 0; i < res; i++) {
206
+ poly.add(pointOnCurve(i * delta).to2DXY());
207
+ }
208
+ return poly;
209
+ }
210
+ }
@@ -0,0 +1,233 @@
1
+ /*
2
+ * jgeom: Geometry Library fo Java
3
+ *
4
+ * Copyright (C) 2005 Samuel Gerber
5
+ *
6
+ * This program is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU General Public License
8
+ * as published by the Free Software Foundation; either version 2
9
+ * of the License, or (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
+ */
20
+ package toxi.geom.nurbs;
21
+
22
+ import toxi.geom.Vec3D;
23
+ import toxi.geom.Vec4D;
24
+
25
+ /**
26
+ * A Basic NurbsSurface implementation.
27
+ *
28
+ * @author sg
29
+ * @version 1.2
30
+ */
31
+ public class BasicNurbsSurface implements NurbsSurface {
32
+
33
+ private KnotVector uKnots;
34
+ private KnotVector vKnots;
35
+ private ControlNet cpnet;
36
+
37
+ // private List<TrimCurve> trimms = new LinkedList<TrimCurve>();
38
+
39
+ /**
40
+ * Create a Nurbs Surface from the given {@link ControlNet} and the knot
41
+ * values of degree p in u direction and of degree q in v direction.
42
+ *
43
+ * @param cps
44
+ * ControlNet of the Nurbs
45
+ * @param uK
46
+ * Knot values in u direction
47
+ * @param vK
48
+ * Knot values in v direction
49
+ * @param p
50
+ * degree in u direction
51
+ * @param q
52
+ * degree in v direction
53
+ */
54
+ public BasicNurbsSurface(ControlNet cps, float[] uK, float[] vK, int p,
55
+ int q) throws IllegalArgumentException {
56
+ this(cps, new KnotVector(uK, p), new KnotVector(vK, q));
57
+ }
58
+
59
+ /**
60
+ * Create a Nurbs form the Controlnet and the two Knot vectors.
61
+ *
62
+ * @param net
63
+ * Contorl net of Nurbs
64
+ * @param u
65
+ * KnotVector in u direction
66
+ * @param v
67
+ * KnotVector in v direction
68
+ */
69
+ public BasicNurbsSurface(ControlNet net, KnotVector u, KnotVector v)
70
+ throws IllegalArgumentException {
71
+ cpnet = net;
72
+ uKnots = u;
73
+ vKnots = v;
74
+ validate();
75
+ }
76
+
77
+ // public void addTrimCurve(TrimCurve tc) {
78
+ // trimms.add(tc);
79
+ // }
80
+
81
+ @Override
82
+ public ControlNet getControlNet() {
83
+ return cpnet;
84
+ }
85
+
86
+ // public List<TrimCurve> getTrimCurves() {
87
+ // return trimms;
88
+ // }
89
+
90
+ @Override
91
+ public int getUDegree() {
92
+ return uKnots.getDegree();
93
+ }
94
+
95
+ @Override
96
+ public float[] getUKnots() {
97
+ return uKnots.getArray();
98
+ }
99
+
100
+ /**
101
+ *
102
+ * @return
103
+ */
104
+ @Override
105
+ public KnotVector getUKnotVector() {
106
+ return uKnots;
107
+ }
108
+
109
+ @Override
110
+ public int getVDegree() {
111
+ return vKnots.getDegree();
112
+ }
113
+
114
+ @Override
115
+ public float[] getVKnots() {
116
+ return vKnots.getArray();
117
+ }
118
+
119
+ /**
120
+ *
121
+ * @return
122
+ */
123
+ @Override
124
+ public KnotVector getVKnotVector() {
125
+ return vKnots;
126
+ }
127
+
128
+ /**
129
+ *
130
+ * @param u
131
+ * @param v
132
+ * @return
133
+ */
134
+ @Override
135
+ public Vec3D pointOnSurface(double u, double v) {
136
+ return pointOnSurface((float) u, (float) v, new Vec3D());
137
+ }
138
+
139
+ @Override
140
+ public Vec3D pointOnSurface(float u, float v) {
141
+ return pointOnSurface(u, v, new Vec3D());
142
+ }
143
+
144
+ @Override
145
+ public Vec3D pointOnSurface(float u, float v, Vec3D out) {
146
+
147
+ // Piegl -> Algorithm A4.3 -> page 134
148
+
149
+ int uspan = uKnots.findSpan(u);
150
+ double[] bfu = uKnots.basisFunctions(uspan, u);
151
+
152
+ int vspan = vKnots.findSpan(v);
153
+ double[] bfv = vKnots.basisFunctions(vspan, v);
154
+
155
+ int p = uKnots.getDegree();
156
+ int q = vKnots.getDegree();
157
+ Vec4D[] tmp = new Vec4D[q + 1];
158
+ for (int l = 0; l <= q; l++) {
159
+ Vec4D pw = new Vec4D();
160
+ for (int k = 0; k <= p; k++) {
161
+ pw.addSelf(cpnet.get(uspan - p + k, vspan - q + l)
162
+ .getWeighted().scaleSelf((float) bfu[k]));
163
+ }
164
+ tmp[l] = pw;
165
+ }
166
+ Vec4D sw = new Vec4D();
167
+ for (int l = 0; l <= q; l++) {
168
+ sw.addSelf(tmp[l].scaleSelf((float) bfv[l]));
169
+ }
170
+ return sw.unweightInto(out);
171
+ }
172
+
173
+ @Override
174
+ public Vec4D[][][][] surfaceDerivCpts(int d, int r1, int r2, int s1, int s2) {
175
+
176
+ Vec4D[][][][] result = new Vec4D[d + 1][d + 1][r2 - r1 + 1][s2 - s1 + 1];
177
+ int degreeU = uKnots.getDegree();
178
+ int degreeV = vKnots.getDegree();
179
+
180
+ int du = d < degreeU ? d : degreeU;
181
+ int dv = d < degreeV ? d : degreeV;
182
+ int r = r2 - r1;
183
+ int s = s2 - s1;
184
+ Vec4D[][] cps = cpnet.getControlPoints();
185
+ Vec4D[] ucps = new Vec4D[cpnet.uLength()];
186
+ for (int j = s1; j <= s2; j++) {
187
+ for (int idxu = 0; idxu < cpnet.uLength(); idxu++) {
188
+ ucps[idxu] = cps[idxu][j];
189
+ }
190
+ Vec4D[][] tmp = new BasicNurbsCurve(ucps, uKnots).curveDerivCpts(
191
+ du, r1, r2);
192
+ for (int k = 0; k <= du; k++) {
193
+ final Vec4D[][] resk0 = result[k][0];
194
+ for (int i = 0; i <= (r - k); i++) {
195
+ resk0[i][j - s1] = tmp[k][i];
196
+ }
197
+ }
198
+ }
199
+
200
+ for (int k = 0; k <= du; k++) {
201
+ final Vec4D[][] resk0 = result[k][0];
202
+ for (int i = 0; i <= (r - k); i++) {
203
+ final int length = resk0[i].length;
204
+ final Vec4D[] resk0i = resk0[i];
205
+ Vec4D[] vcps = new Vec4D[length];
206
+ System.arraycopy(resk0i, 0, vcps, 0, length);
207
+ final int dd = (d - k) < dv ? (d - k) : dv;
208
+ Vec4D[][] tmp = new BasicNurbsCurve(vcps, vKnots)
209
+ .curveDerivCpts(dd, 0, s);
210
+ for (int l = 1; l <= dd; l++) {
211
+ final Vec4D[] reskli = result[k][l][i];
212
+ final Vec4D[] tmpL = tmp[l];
213
+ for (int j = 0; j <= (s - 1); j++) {
214
+ reskli[j] = tmpL[j];
215
+ }
216
+ }
217
+ }
218
+ }
219
+ return result;
220
+ }
221
+
222
+ private void validate() {
223
+ if (uKnots.length() != uKnots.getDegree() + cpnet.uLength() + 1) {
224
+ throw new IllegalArgumentException(
225
+ "Nurbs Surface has wrong Knot number in u Direction");
226
+ }
227
+ if (vKnots.length() != vKnots.getDegree() + cpnet.vLength() + 1) {
228
+ throw new IllegalArgumentException(
229
+ "Nurbs Surface has wrong Knot number in v Direction");
230
+ }
231
+
232
+ }
233
+ }