propane 3.5.0-java → 3.9.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -1
  3. data/.mvn/wrapper/MavenWrapperDownloader.java +1 -1
  4. data/.mvn/wrapper/maven-wrapper.properties +2 -2
  5. data/.travis.yml +1 -1
  6. data/CHANGELOG.md +7 -1
  7. data/README.md +7 -22
  8. data/Rakefile +3 -2
  9. data/lib/propane.rb +2 -1
  10. data/lib/propane/app.rb +4 -0
  11. data/lib/propane/helper_methods.rb +0 -1
  12. data/lib/propane/runner.rb +12 -12
  13. data/lib/propane/version.rb +1 -1
  14. data/library/pdf/pdf.rb +7 -0
  15. data/library/svg/svg.rb +7 -0
  16. data/pom.rb +65 -43
  17. data/pom.xml +44 -5
  18. data/propane.gemspec +9 -4
  19. data/src/main/java/japplemenubar/JAppleMenuBar.java +3 -3
  20. data/src/main/java/monkstone/fastmath/DegLutTables.java +111 -0
  21. data/src/main/java/monkstone/fastmath/Deglut.java +6 -56
  22. data/src/main/java/monkstone/noise/FastTerrain.java +874 -0
  23. data/src/main/java/monkstone/noise/Noise.java +90 -0
  24. data/src/main/java/monkstone/noise/NoiseGenerator.java +75 -0
  25. data/src/main/java/monkstone/noise/NoiseMode.java +28 -0
  26. data/src/main/java/monkstone/noise/OpenSimplex2F.java +881 -0
  27. data/src/main/java/monkstone/noise/OpenSimplex2S.java +1106 -0
  28. data/src/main/java/monkstone/noise/SmoothTerrain.java +1099 -0
  29. data/src/main/java/processing/awt/PGraphicsJava2D.java +8 -17
  30. data/src/main/java/processing/awt/PImageAWT.java +123 -6
  31. data/src/main/java/processing/awt/PShapeJava2D.java +1 -0
  32. data/src/main/java/processing/awt/PSurfaceAWT.java +9 -7
  33. data/src/main/java/processing/awt/ShimAWT.java +2 -1
  34. data/src/main/java/processing/core/PApplet.java +13297 -14838
  35. data/src/main/java/processing/core/PConstants.java +5 -5
  36. data/src/main/java/processing/core/PFont.java +5 -17
  37. data/src/main/java/processing/core/PGraphics.java +346 -351
  38. data/src/main/java/processing/core/PImage.java +1440 -1537
  39. data/src/main/java/processing/core/PMatrix2D.java +24 -7
  40. data/src/main/java/processing/core/PMatrix3D.java +12 -5
  41. data/src/main/java/processing/core/PShape.java +155 -173
  42. data/src/main/java/processing/core/PShapeOBJ.java +2 -0
  43. data/src/main/java/processing/core/PShapeSVG.java +632 -611
  44. data/src/main/java/processing/core/PSurface.java +15 -10
  45. data/src/main/java/processing/core/PSurfaceNone.java +8 -4
  46. data/src/main/java/processing/core/PVector.java +35 -28
  47. data/src/main/java/processing/data/Table.java +20 -20
  48. data/src/main/java/processing/data/XML.java +1 -1
  49. data/src/main/java/processing/event/Event.java +1 -1
  50. data/src/main/java/processing/event/MouseEvent.java +7 -6
  51. data/src/main/java/processing/javafx/PGraphicsFX2D.java +20 -345
  52. data/src/main/java/processing/javafx/PSurfaceFX.java +127 -125
  53. data/src/main/java/processing/opengl/FrameBuffer.java +2 -4
  54. data/src/main/java/processing/opengl/LinePath.java +4 -0
  55. data/src/main/java/processing/opengl/LineStroker.java +2 -6
  56. data/src/main/java/processing/opengl/PGL.java +72 -45
  57. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +106 -60
  58. data/src/main/java/processing/opengl/PJOGL.java +15 -3
  59. data/src/main/java/processing/opengl/PShader.java +26 -47
  60. data/src/main/java/processing/opengl/PShapeOpenGL.java +1041 -1001
  61. data/src/main/java/processing/opengl/PSurfaceJOGL.java +211 -208
  62. data/src/main/java/processing/opengl/Texture.java +7 -4
  63. data/src/main/java/processing/opengl/VertexBuffer.java +2 -2
  64. data/src/main/java/processing/pdf/PGraphicsPDF.java +581 -0
  65. data/src/main/java/processing/svg/PGraphicsSVG.java +378 -0
  66. data/test/deglut_spec_test.rb +2 -2
  67. data/vendors/Rakefile +22 -33
  68. metadata +53 -21
  69. data/library/simplex_noise/simplex_noise.rb +0 -5
  70. data/src/main/java/monkstone/noise/SimplexNoise.java +0 -436
metadata CHANGED
@@ -1,64 +1,84 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: propane
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0
4
+ version: 3.9.0
5
5
  platform: java
6
6
  authors:
7
7
  - monkstone
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-04 00:00:00.000000000 Z
11
+ date: 2021-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: minitest
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: '5.11'
18
+ version: 0.1.0
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 0.1.3
22
+ name: jruby-openssl
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '5.11'
29
+ version: 0.1.0
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.1.3
27
33
  - !ruby/object:Gem::Dependency
28
- name: rake
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
36
  - - "~>"
32
37
  - !ruby/object:Gem::Version
33
- version: '12.3'
38
+ version: '5.14'
39
+ name: minitest
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '12.3'
46
+ version: '5.14'
41
47
  - !ruby/object:Gem::Dependency
42
- name: arcball
43
48
  requirement: !ruby/object:Gem::Requirement
44
49
  requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 1.0.0
48
50
  - - "~>"
49
51
  - !ruby/object:Gem::Version
50
- version: '1.0'
52
+ version: '12.3'
53
+ name: rake
51
54
  type: :runtime
52
55
  prerelease: false
53
56
  version_requirements: !ruby/object:Gem::Requirement
54
57
  requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '12.3'
61
+ - !ruby/object:Gem::Dependency
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.0'
55
67
  - - ">="
56
68
  - !ruby/object:Gem::Version
57
- version: 1.0.0
69
+ version: 1.0.2
70
+ name: arcball
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
58
75
  - - "~>"
59
76
  - !ruby/object:Gem::Version
60
77
  version: '1.0'
61
- description: " A batteries included version of processing in ruby targetting jdk11.\n"
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 1.0.2
81
+ description: " A batteries included version of processing in ruby targetting jdk11+.\n"
62
82
  email:
63
83
  - mamba2928@yahoo.co.uk
64
84
  executables:
@@ -91,7 +111,7 @@ files:
91
111
  - lib/jogl-all-natives-macosx-universal.jar
92
112
  - lib/jogl-all-natives-windows-amd64.jar
93
113
  - lib/jogl-all.jar
94
- - lib/propane-3.5.0.jar
114
+ - lib/propane-3.9.0.jar
95
115
  - lib/propane.rb
96
116
  - lib/propane/app.rb
97
117
  - lib/propane/creators/sketch_class.rb
@@ -115,8 +135,11 @@ files:
115
135
  - library/library_proxy/README.md
116
136
  - library/library_proxy/library_proxy.rb
117
137
  - library/net/net.rb
118
- - library/simplex_noise/simplex_noise.rb
138
+ - library/pdf/itextpdf-5.5.13.2.jar
139
+ - library/pdf/pdf.rb
119
140
  - library/slider/slider.rb
141
+ - library/svg/batik-all-1.14.jar
142
+ - library/svg/svg.rb
120
143
  - library/vector_utils/vector_utils.rb
121
144
  - library/video_event/video_event.rb
122
145
  - license.txt
@@ -131,10 +154,17 @@ files:
131
154
  - src/main/java/monkstone/MathToolModule.java
132
155
  - src/main/java/monkstone/PropaneLibrary.java
133
156
  - src/main/java/monkstone/core/LibraryProxy.java
157
+ - src/main/java/monkstone/fastmath/DegLutTables.java
134
158
  - src/main/java/monkstone/fastmath/Deglut.java
135
159
  - src/main/java/monkstone/fastmath/package-info.java
136
160
  - src/main/java/monkstone/filechooser/Chooser.java
137
- - src/main/java/monkstone/noise/SimplexNoise.java
161
+ - src/main/java/monkstone/noise/FastTerrain.java
162
+ - src/main/java/monkstone/noise/Noise.java
163
+ - src/main/java/monkstone/noise/NoiseGenerator.java
164
+ - src/main/java/monkstone/noise/NoiseMode.java
165
+ - src/main/java/monkstone/noise/OpenSimplex2F.java
166
+ - src/main/java/monkstone/noise/OpenSimplex2S.java
167
+ - src/main/java/monkstone/noise/SmoothTerrain.java
138
168
  - src/main/java/monkstone/slider/CustomHorizontalSlider.java
139
169
  - src/main/java/monkstone/slider/CustomVerticalSlider.java
140
170
  - src/main/java/monkstone/slider/SimpleHorizontalSlider.java
@@ -236,6 +266,8 @@ files:
236
266
  - src/main/java/processing/opengl/shaders/TexLightFrag.glsl
237
267
  - src/main/java/processing/opengl/shaders/TexLightVert.glsl
238
268
  - src/main/java/processing/opengl/shaders/TexVert.glsl
269
+ - src/main/java/processing/pdf/PGraphicsPDF.java
270
+ - src/main/java/processing/svg/PGraphicsSVG.java
239
271
  - src/main/resources/icon/icon-1024.png
240
272
  - src/main/resources/icon/icon-128.png
241
273
  - src/main/resources/icon/icon-16.png
@@ -261,7 +293,7 @@ licenses:
261
293
  - GPL-3.0
262
294
  - LGPL-2.0
263
295
  metadata: {}
264
- post_install_message:
296
+ post_install_message:
265
297
  rdoc_options: []
266
298
  require_paths:
267
299
  - lib
@@ -278,7 +310,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
278
310
  requirements:
279
311
  - java runtime >= 11.0.2+
280
312
  rubygems_version: 3.0.6
281
- signing_key:
313
+ signing_key:
282
314
  specification_version: 4
283
315
  summary: ruby implementation of processing-4.0 on MacOS, linux and windows (64bit
284
316
  only)
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Propane::App
4
- SimplexNoise = Java::MonkstoneNoise::SimplexNoise
5
- end
@@ -1,436 +0,0 @@
1
- /*
2
- * A speed-improved simplex noise algorithm for 2D, 3D and 4D in Java.
3
- *
4
- * Based on example code by Stefan Gustavson (stegu@itn.liu.se).
5
- * Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).
6
- * Better rank ordering method for 4D by Stefan Gustavson in 2012.
7
- *
8
- * This could be speeded up even further, but it's useful as it is.
9
- *
10
- * Version 2012-03-09
11
- *
12
- * This code was placed in the public domain by its original author,
13
- * Stefan Gustavson. You may use it as you see fit, but
14
- * attribution is appreciated.
15
- *
16
- */
17
- package monkstone.noise;
18
-
19
- public class SimplexNoise { // Simplex noise in 2D, 3D and 4D
20
-
21
- private static Grad grad3[] = {new Grad(1, 1, 0), new Grad(-1, 1, 0), new Grad(1, -1, 0), new Grad(-1, -1, 0),
22
- new Grad(1, 0, 1), new Grad(-1, 0, 1), new Grad(1, 0, -1), new Grad(-1, 0, -1),
23
- new Grad(0, 1, 1), new Grad(0, -1, 1), new Grad(0, 1, -1), new Grad(0, -1, -1)};
24
-
25
- private static Grad grad4[] = {new Grad(0, 1, 1, 1), new Grad(0, 1, 1, -1), new Grad(0, 1, -1, 1), new Grad(0, 1, -1, -1),
26
- new Grad(0, -1, 1, 1), new Grad(0, -1, 1, -1), new Grad(0, -1, -1, 1), new Grad(0, -1, -1, -1),
27
- new Grad(1, 0, 1, 1), new Grad(1, 0, 1, -1), new Grad(1, 0, -1, 1), new Grad(1, 0, -1, -1),
28
- new Grad(-1, 0, 1, 1), new Grad(-1, 0, 1, -1), new Grad(-1, 0, -1, 1), new Grad(-1, 0, -1, -1),
29
- new Grad(1, 1, 0, 1), new Grad(1, 1, 0, -1), new Grad(1, -1, 0, 1), new Grad(1, -1, 0, -1),
30
- new Grad(-1, 1, 0, 1), new Grad(-1, 1, 0, -1), new Grad(-1, -1, 0, 1), new Grad(-1, -1, 0, -1),
31
- new Grad(1, 1, 1, 0), new Grad(1, 1, -1, 0), new Grad(1, -1, 1, 0), new Grad(1, -1, -1, 0),
32
- new Grad(-1, 1, 1, 0), new Grad(-1, 1, -1, 0), new Grad(-1, -1, 1, 0), new Grad(-1, -1, -1, 0)};
33
-
34
- private final static short p[] = {151, 160, 137, 91, 90, 15,
35
- 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23,
36
- 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33,
37
- 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166,
38
- 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244,
39
- 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196,
40
- 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123,
41
- 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42,
42
- 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9,
43
- 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228,
44
- 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107,
45
- 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254,
46
- 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180};
47
- // To remove the need for index wrapping, double the permutation table length
48
- final static short[] PERM = new short[512];
49
- static short[] PERM_MOD_12 = new short[512];
50
-
51
- static {
52
- for (int i = 0; i < 512; i++) {
53
- PERM[i] = p[i & 255];
54
- PERM_MOD_12[i] = (short) (PERM[i] % 12);
55
- }
56
- }
57
-
58
- // Skewing and unskewing factors for 2, 3, and 4 dimensions
59
- private static final double F2 = 0.5 * (Math.sqrt(3.0) - 1.0);
60
- private static final double G2 = (3.0 - Math.sqrt(3.0)) / 6.0;
61
- private static final double F3 = 1.0 / 3.0;
62
- private static final double G3 = 1.0 / 6.0;
63
- private static final double F4 = (Math.sqrt(5.0) - 1.0) / 4.0;
64
- private static final double G4 = (5.0 - Math.sqrt(5.0)) / 20.0;
65
-
66
- // This method is a *lot* faster than using (int)Math.floor(x)
67
- private static int fastfloor(double x) {
68
- int xi = (int) x;
69
- return x < xi ? xi - 1 : xi;
70
- }
71
-
72
- private static double dot(Grad g, double x, double y) {
73
- return g.x * x + g.y * y;
74
- }
75
-
76
- private static double dot(Grad g, double x, double y, double z) {
77
- return g.x * x + g.y * y + g.z * z;
78
- }
79
-
80
- private static double dot(Grad g, double x, double y, double z, double w) {
81
- return g.x * x + g.y * y + g.z * z + g.w * w;
82
- }
83
-
84
- // 2D simplex noise
85
- public static double noise(double xin, double yin) {
86
- double n0, n1, n2; // Noise contributions from the three corners
87
- // Skew the input space to determine which simplex cell we're in
88
- double s = (xin + yin) * F2; // Hairy factor for 2D
89
- int i = fastfloor(xin + s);
90
- int j = fastfloor(yin + s);
91
- double t = (i + j) * G2;
92
- double X0 = i - t; // Unskew the cell origin back to (x,y) space
93
- double Y0 = j - t;
94
- double x0 = xin - X0; // The x,y distances from the cell origin
95
- double y0 = yin - Y0;
96
- // For the 2D case, the simplex shape is an equilateral triangle.
97
- // Determine which simplex we are in.
98
- int i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords
99
- if (x0 > y0) {
100
- i1 = 1;
101
- j1 = 0;
102
- } // lower triangle, XY order: (0,0)->(1,0)->(1,1)
103
- else {
104
- i1 = 0;
105
- j1 = 1;
106
- } // upper triangle, YX order: (0,0)->(0,1)->(1,1)
107
- // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and
108
- // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where
109
- // c = (3-sqrt(3))/6
110
- double x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords
111
- double y1 = y0 - j1 + G2;
112
- double x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords
113
- double y2 = y0 - 1.0 + 2.0 * G2;
114
- // Work out the hashed gradient indices of the three simplex corners
115
- int ii = i & 255;
116
- int jj = j & 255;
117
- int gi0 = PERM_MOD_12[ii + PERM[jj]];
118
- int gi1 = PERM_MOD_12[ii + i1 + PERM[jj + j1]];
119
- int gi2 = PERM_MOD_12[ii + 1 + PERM[jj + 1]];
120
- // Calculate the contribution from the three corners
121
- double t0 = 0.5 - x0 * x0 - y0 * y0;
122
- if (t0 < 0) {
123
- n0 = 0.0;
124
- } else {
125
- t0 *= t0;
126
- n0 = t0 * t0 * dot(grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient
127
- }
128
- double t1 = 0.5 - x1 * x1 - y1 * y1;
129
- if (t1 < 0) {
130
- n1 = 0.0;
131
- } else {
132
- t1 *= t1;
133
- n1 = t1 * t1 * dot(grad3[gi1], x1, y1);
134
- }
135
- double t2 = 0.5 - x2 * x2 - y2 * y2;
136
- if (t2 < 0) {
137
- n2 = 0.0;
138
- } else {
139
- t2 *= t2;
140
- n2 = t2 * t2 * dot(grad3[gi2], x2, y2);
141
- }
142
- // Add contributions from each corner to get the final noise value.
143
- // The result is scaled to return values in the interval [-1,1].
144
- return 70.0 * (n0 + n1 + n2);
145
- }
146
-
147
- // 3D simplex noise
148
- public static double noise(double xin, double yin, double zin) {
149
- double n0, n1, n2, n3; // Noise contributions from the four corners
150
- // Skew the input space to determine which simplex cell we're in
151
- double s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D
152
- int i = fastfloor(xin + s);
153
- int j = fastfloor(yin + s);
154
- int k = fastfloor(zin + s);
155
- double t = (i + j + k) * G3;
156
- double X0 = i - t; // Unskew the cell origin back to (x,y,z) space
157
- double Y0 = j - t;
158
- double Z0 = k - t;
159
- double x0 = xin - X0; // The x,y,z distances from the cell origin
160
- double y0 = yin - Y0;
161
- double z0 = zin - Z0;
162
- // For the 3D case, the simplex shape is a slightly irregular tetrahedron.
163
- // Determine which simplex we are in.
164
- int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords
165
- int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords
166
- if (x0 >= y0) {
167
- if (y0 >= z0) {
168
- i1 = 1;
169
- j1 = 0;
170
- k1 = 0;
171
- i2 = 1;
172
- j2 = 1;
173
- k2 = 0;
174
- } // X Y Z order
175
- else if (x0 >= z0) {
176
- i1 = 1;
177
- j1 = 0;
178
- k1 = 0;
179
- i2 = 1;
180
- j2 = 0;
181
- k2 = 1;
182
- } // X Z Y order
183
- else {
184
- i1 = 0;
185
- j1 = 0;
186
- k1 = 1;
187
- i2 = 1;
188
- j2 = 0;
189
- k2 = 1;
190
- } // Z X Y order
191
- } else { // x0<y0
192
- if (y0 < z0) {
193
- i1 = 0;
194
- j1 = 0;
195
- k1 = 1;
196
- i2 = 0;
197
- j2 = 1;
198
- k2 = 1;
199
- } // Z Y X order
200
- else if (x0 < z0) {
201
- i1 = 0;
202
- j1 = 1;
203
- k1 = 0;
204
- i2 = 0;
205
- j2 = 1;
206
- k2 = 1;
207
- } // Y Z X order
208
- else {
209
- i1 = 0;
210
- j1 = 1;
211
- k1 = 0;
212
- i2 = 1;
213
- j2 = 1;
214
- k2 = 0;
215
- } // Y X Z order
216
- }
217
- // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),
218
- // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and
219
- // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where
220
- // c = 1/6.
221
- double x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords
222
- double y1 = y0 - j1 + G3;
223
- double z1 = z0 - k1 + G3;
224
- double x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords
225
- double y2 = y0 - j2 + 2.0 * G3;
226
- double z2 = z0 - k2 + 2.0 * G3;
227
- double x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords
228
- double y3 = y0 - 1.0 + 3.0 * G3;
229
- double z3 = z0 - 1.0 + 3.0 * G3;
230
- // Work out the hashed gradient indices of the four simplex corners
231
- int ii = i & 255;
232
- int jj = j & 255;
233
- int kk = k & 255;
234
- int gi0 = PERM_MOD_12[ii + PERM[jj + PERM[kk]]];
235
- int gi1 = PERM_MOD_12[ii + i1 + PERM[jj + j1 + PERM[kk + k1]]];
236
- int gi2 = PERM_MOD_12[ii + i2 + PERM[jj + j2 + PERM[kk + k2]]];
237
- int gi3 = PERM_MOD_12[ii + 1 + PERM[jj + 1 + PERM[kk + 1]]];
238
- // Calculate the contribution from the four corners
239
- double t0 = 0.5 - x0 * x0 - y0 * y0 - z0 * z0;
240
- if (t0 < 0) {
241
- n0 = 0.0;
242
- } else {
243
- t0 *= t0;
244
- n0 = t0 * t0 * dot(grad3[gi0], x0, y0, z0);
245
- }
246
- double t1 = 0.5 - x1 * x1 - y1 * y1 - z1 * z1;
247
- if (t1 < 0) {
248
- n1 = 0.0;
249
- } else {
250
- t1 *= t1;
251
- n1 = t1 * t1 * dot(grad3[gi1], x1, y1, z1);
252
- }
253
- double t2 = 0.5 - x2 * x2 - y2 * y2 - z2 * z2;
254
- if (t2 < 0) {
255
- n2 = 0.0;
256
- } else {
257
- t2 *= t2;
258
- n2 = t2 * t2 * dot(grad3[gi2], x2, y2, z2);
259
- }
260
- double t3 = 0.5 - x3 * x3 - y3 * y3 - z3 * z3;
261
- if (t3 < 0) {
262
- n3 = 0.0;
263
- } else {
264
- t3 *= t3;
265
- n3 = t3 * t3 * dot(grad3[gi3], x3, y3, z3);
266
- }
267
- // Add contributions from each corner to get the final noise value.
268
- // The result is scaled to stay just inside [-1,1]
269
- return 32.0 * (n0 + n1 + n2 + n3);
270
- }
271
-
272
- // 4D simplex noise, better simplex rank ordering method 2012-03-09
273
- public static double noise(double x, double y, double z, double w) {
274
-
275
- double n0, n1, n2, n3, n4; // Noise contributions from the five corners
276
- // Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in
277
- double s = (x + y + z + w) * F4; // Factor for 4D skewing
278
- int i = fastfloor(x + s);
279
- int j = fastfloor(y + s);
280
- int k = fastfloor(z + s);
281
- int l = fastfloor(w + s);
282
- double t = (i + j + k + l) * G4; // Factor for 4D unskewing
283
- double X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space
284
- double Y0 = j - t;
285
- double Z0 = k - t;
286
- double W0 = l - t;
287
- double x0 = x - X0; // The x,y,z,w distances from the cell origin
288
- double y0 = y - Y0;
289
- double z0 = z - Z0;
290
- double w0 = w - W0;
291
- // For the 4D case, the simplex is a 4D shape I won't even try to describe.
292
- // To find out which of the 24 possible simplices we're in, we need to
293
- // determine the magnitude ordering of x0, y0, z0 and w0.
294
- // Six pair-wise comparisons are performed between each possible pair
295
- // of the four coordinates, and the results are used to rank the numbers.
296
- int rankx = 0;
297
- int ranky = 0;
298
- int rankz = 0;
299
- int rankw = 0;
300
- if (x0 > y0) {
301
- rankx++;
302
- } else {
303
- ranky++;
304
- }
305
- if (x0 > z0) {
306
- rankx++;
307
- } else {
308
- rankz++;
309
- }
310
- if (x0 > w0) {
311
- rankx++;
312
- } else {
313
- rankw++;
314
- }
315
- if (y0 > z0) {
316
- ranky++;
317
- } else {
318
- rankz++;
319
- }
320
- if (y0 > w0) {
321
- ranky++;
322
- } else {
323
- rankw++;
324
- }
325
- if (z0 > w0) {
326
- rankz++;
327
- } else {
328
- rankw++;
329
- }
330
- int i1, j1, k1, l1; // The integer offsets for the second simplex corner
331
- int i2, j2, k2, l2; // The integer offsets for the third simplex corner
332
- int i3, j3, k3, l3; // The integer offsets for the fourth simplex corner
333
- // [rankx, ranky, rankz, rankw] is a 4-vector with the numbers 0, 1, 2 and 3
334
- // in some order. We use a thresholding to set the coordinates in turn.
335
- // Rank 3 denotes the largest coordinate.
336
- i1 = rankx >= 3 ? 1 : 0;
337
- j1 = ranky >= 3 ? 1 : 0;
338
- k1 = rankz >= 3 ? 1 : 0;
339
- l1 = rankw >= 3 ? 1 : 0;
340
- // Rank 2 denotes the second largest coordinate.
341
- i2 = rankx >= 2 ? 1 : 0;
342
- j2 = ranky >= 2 ? 1 : 0;
343
- k2 = rankz >= 2 ? 1 : 0;
344
- l2 = rankw >= 2 ? 1 : 0;
345
- // Rank 1 denotes the second smallest coordinate.
346
- i3 = rankx >= 1 ? 1 : 0;
347
- j3 = ranky >= 1 ? 1 : 0;
348
- k3 = rankz >= 1 ? 1 : 0;
349
- l3 = rankw >= 1 ? 1 : 0;
350
- // The fifth corner has all coordinate offsets = 1, so no need to compute that.
351
- double x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords
352
- double y1 = y0 - j1 + G4;
353
- double z1 = z0 - k1 + G4;
354
- double w1 = w0 - l1 + G4;
355
- double x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords
356
- double y2 = y0 - j2 + 2.0 * G4;
357
- double z2 = z0 - k2 + 2.0 * G4;
358
- double w2 = w0 - l2 + 2.0 * G4;
359
- double x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords
360
- double y3 = y0 - j3 + 3.0 * G4;
361
- double z3 = z0 - k3 + 3.0 * G4;
362
- double w3 = w0 - l3 + 3.0 * G4;
363
- double x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords
364
- double y4 = y0 - 1.0 + 4.0 * G4;
365
- double z4 = z0 - 1.0 + 4.0 * G4;
366
- double w4 = w0 - 1.0 + 4.0 * G4;
367
- // Work out the hashed gradient indices of the five simplex corners
368
- int ii = i & 255;
369
- int jj = j & 255;
370
- int kk = k & 255;
371
- int ll = l & 255;
372
- int gi0 = PERM[ii + PERM[jj + PERM[kk + PERM[ll]]]] % 32;
373
- int gi1 = PERM[ii + i1 + PERM[jj + j1 + PERM[kk + k1 + PERM[ll + l1]]]] % 32;
374
- int gi2 = PERM[ii + i2 + PERM[jj + j2 + PERM[kk + k2 + PERM[ll + l2]]]] % 32;
375
- int gi3 = PERM[ii + i3 + PERM[jj + j3 + PERM[kk + k3 + PERM[ll + l3]]]] % 32;
376
- int gi4 = PERM[ii + 1 + PERM[jj + 1 + PERM[kk + 1 + PERM[ll + 1]]]] % 32;
377
- // Calculate the contribution from the five corners
378
- double t0 = 0.5 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
379
- if (t0 < 0) {
380
- n0 = 0.0;
381
- } else {
382
- t0 *= t0;
383
- n0 = t0 * t0 * dot(grad4[gi0], x0, y0, z0, w0);
384
- }
385
- double t1 = 0.5 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
386
- if (t1 < 0) {
387
- n1 = 0.0;
388
- } else {
389
- t1 *= t1;
390
- n1 = t1 * t1 * dot(grad4[gi1], x1, y1, z1, w1);
391
- }
392
- double t2 = 0.5 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
393
- if (t2 < 0) {
394
- n2 = 0.0;
395
- } else {
396
- t2 *= t2;
397
- n2 = t2 * t2 * dot(grad4[gi2], x2, y2, z2, w2);
398
- }
399
- double t3 = 0.5 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
400
- if (t3 < 0) {
401
- n3 = 0.0;
402
- } else {
403
- t3 *= t3;
404
- n3 = t3 * t3 * dot(grad4[gi3], x3, y3, z3, w3);
405
- }
406
- double t4 = 0.5 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
407
- if (t4 < 0) {
408
- n4 = 0.0;
409
- } else {
410
- t4 *= t4;
411
- n4 = t4 * t4 * dot(grad4[gi4], x4, y4, z4, w4);
412
- }
413
- // Sum up and scale the result to cover the range [-1,1]
414
- return 27.0 * (n0 + n1 + n2 + n3 + n4);
415
- }
416
-
417
- // Inner class to speed upp gradient computations
418
- // (In Java, array access is a lot slower than member access)
419
- private static class Grad {
420
-
421
- double x, y, z, w;
422
-
423
- Grad(double x, double y, double z) {
424
- this.x = x;
425
- this.y = y;
426
- this.z = z;
427
- }
428
-
429
- Grad(double x, double y, double z, double w) {
430
- this.x = x;
431
- this.y = y;
432
- this.z = z;
433
- this.w = w;
434
- }
435
- }
436
- }