picrate 0.0.2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +47 -0
  3. data/.mvn/extensions.xml +9 -0
  4. data/.mvn/wrapper/maven-wrapper.properties +1 -0
  5. data/.travis.yml +10 -0
  6. data/CHANGELOG.md +4 -0
  7. data/LICENSE.md +165 -0
  8. data/README.md +51 -0
  9. data/Rakefile +59 -0
  10. data/bin/picrate +8 -0
  11. data/docs/.gitignore +6 -0
  12. data/docs/_config.yml +30 -0
  13. data/docs/_includes/footer.html +38 -0
  14. data/docs/_includes/head.html +16 -0
  15. data/docs/_includes/header.html +27 -0
  16. data/docs/_includes/icon-github.html +1 -0
  17. data/docs/_includes/icon-github.svg +1 -0
  18. data/docs/_includes/icon-twitter.html +1 -0
  19. data/docs/_includes/icon-twitter.svg +1 -0
  20. data/docs/_includes/navigation.html +24 -0
  21. data/docs/_layouts/default.html +20 -0
  22. data/docs/_layouts/page.html +14 -0
  23. data/docs/_layouts/post.html +15 -0
  24. data/docs/_posts/2018-05-06-getting_started.md +8 -0
  25. data/docs/_posts/2018-05-06-install_jruby.md +35 -0
  26. data/docs/_sass/_base.scss +206 -0
  27. data/docs/_sass/_layout.scss +242 -0
  28. data/docs/_sass/_syntax-highlighting.scss +71 -0
  29. data/docs/about.md +10 -0
  30. data/docs/css/main.scss +38 -0
  31. data/docs/favicon.ico +0 -0
  32. data/docs/feed.xml +30 -0
  33. data/docs/index.html +38 -0
  34. data/lib/picrate.rb +10 -0
  35. data/lib/picrate/app.rb +187 -0
  36. data/lib/picrate/creators/sketch_class.rb +57 -0
  37. data/lib/picrate/creators/sketch_factory.rb +12 -0
  38. data/lib/picrate/creators/sketch_writer.rb +21 -0
  39. data/lib/picrate/helper_methods.rb +214 -0
  40. data/lib/picrate/helpers/numeric.rb +9 -0
  41. data/lib/picrate/library.rb +69 -0
  42. data/lib/picrate/library_loader.rb +53 -0
  43. data/lib/picrate/native_folder.rb +35 -0
  44. data/lib/picrate/native_loader.rb +27 -0
  45. data/lib/picrate/runner.rb +81 -0
  46. data/lib/picrate/version.rb +4 -0
  47. data/library/boids/boids.rb +209 -0
  48. data/library/chooser/chooser.rb +19 -0
  49. data/library/control_panel/control_panel.rb +182 -0
  50. data/library/library_proxy/README.md +99 -0
  51. data/library/library_proxy/library_proxy.rb +14 -0
  52. data/library/slider/slider.rb +42 -0
  53. data/library/vector_utils/vector_utils.rb +69 -0
  54. data/library/video_event/video_event.rb +3 -0
  55. data/license.txt +508 -0
  56. data/picrate.gemspec +35 -0
  57. data/pom.rb +122 -0
  58. data/pom.xml +214 -0
  59. data/src/main/java/japplemenubar/JAppleMenuBar.java +88 -0
  60. data/src/main/java/japplemenubar/libjAppleMenuBar.jnilib +0 -0
  61. data/src/main/java/monkstone/ColorUtil.java +115 -0
  62. data/src/main/java/monkstone/MathToolModule.java +236 -0
  63. data/src/main/java/monkstone/PicrateLibrary.java +47 -0
  64. data/src/main/java/monkstone/core/LibraryProxy.java +127 -0
  65. data/src/main/java/monkstone/fastmath/Deglut.java +122 -0
  66. data/src/main/java/monkstone/fastmath/package-info.java +6 -0
  67. data/src/main/java/monkstone/filechooser/Chooser.java +48 -0
  68. data/src/main/java/monkstone/noise/SimplexNoise.java +465 -0
  69. data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +168 -0
  70. data/src/main/java/monkstone/slider/CustomVerticalSlider.java +182 -0
  71. data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +149 -0
  72. data/src/main/java/monkstone/slider/SimpleSlider.java +196 -0
  73. data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +163 -0
  74. data/src/main/java/monkstone/slider/Slider.java +67 -0
  75. data/src/main/java/monkstone/slider/SliderBar.java +277 -0
  76. data/src/main/java/monkstone/slider/SliderGroup.java +78 -0
  77. data/src/main/java/monkstone/slider/WheelHandler.java +35 -0
  78. data/src/main/java/monkstone/vecmath/AppRender.java +87 -0
  79. data/src/main/java/monkstone/vecmath/JRender.java +56 -0
  80. data/src/main/java/monkstone/vecmath/ShapeRender.java +87 -0
  81. data/src/main/java/monkstone/vecmath/package-info.java +20 -0
  82. data/src/main/java/monkstone/vecmath/vec2/Vec2.java +757 -0
  83. data/src/main/java/monkstone/vecmath/vec2/package-info.java +6 -0
  84. data/src/main/java/monkstone/vecmath/vec3/Vec3.java +727 -0
  85. data/src/main/java/monkstone/vecmath/vec3/package-info.java +6 -0
  86. data/src/main/java/monkstone/videoevent/VideoInterface.java +42 -0
  87. data/src/main/java/monkstone/videoevent/package-info.java +20 -0
  88. data/src/main/java/processing/awt/PGraphicsJava2D.java +3098 -0
  89. data/src/main/java/processing/awt/PShapeJava2D.java +401 -0
  90. data/src/main/java/processing/awt/PSurfaceAWT.java +1660 -0
  91. data/src/main/java/processing/core/PApplet.java +17647 -0
  92. data/src/main/java/processing/core/PConstants.java +1033 -0
  93. data/src/main/java/processing/core/PFont.java +1250 -0
  94. data/src/main/java/processing/core/PGraphics.java +9614 -0
  95. data/src/main/java/processing/core/PImage.java +3608 -0
  96. data/src/main/java/processing/core/PMatrix.java +347 -0
  97. data/src/main/java/processing/core/PMatrix2D.java +694 -0
  98. data/src/main/java/processing/core/PMatrix3D.java +1153 -0
  99. data/src/main/java/processing/core/PShape.java +4332 -0
  100. data/src/main/java/processing/core/PShapeOBJ.java +544 -0
  101. data/src/main/java/processing/core/PShapeSVG.java +1987 -0
  102. data/src/main/java/processing/core/PStyle.java +208 -0
  103. data/src/main/java/processing/core/PSurface.java +242 -0
  104. data/src/main/java/processing/core/PSurfaceNone.java +479 -0
  105. data/src/main/java/processing/core/PVector.java +1140 -0
  106. data/src/main/java/processing/data/FloatDict.java +829 -0
  107. data/src/main/java/processing/data/FloatList.java +912 -0
  108. data/src/main/java/processing/data/IntDict.java +796 -0
  109. data/src/main/java/processing/data/IntList.java +913 -0
  110. data/src/main/java/processing/data/JSONArray.java +1260 -0
  111. data/src/main/java/processing/data/JSONObject.java +2282 -0
  112. data/src/main/java/processing/data/JSONTokener.java +435 -0
  113. data/src/main/java/processing/data/Sort.java +46 -0
  114. data/src/main/java/processing/data/StringDict.java +601 -0
  115. data/src/main/java/processing/data/StringList.java +775 -0
  116. data/src/main/java/processing/data/Table.java +4923 -0
  117. data/src/main/java/processing/data/TableRow.java +198 -0
  118. data/src/main/java/processing/data/XML.java +1149 -0
  119. data/src/main/java/processing/event/Event.java +108 -0
  120. data/src/main/java/processing/event/KeyEvent.java +70 -0
  121. data/src/main/java/processing/event/MouseEvent.java +149 -0
  122. data/src/main/java/processing/event/TouchEvent.java +57 -0
  123. data/src/main/java/processing/javafx/PGraphicsFX2D.java +354 -0
  124. data/src/main/java/processing/opengl/FontTexture.java +379 -0
  125. data/src/main/java/processing/opengl/FrameBuffer.java +503 -0
  126. data/src/main/java/processing/opengl/LinePath.java +623 -0
  127. data/src/main/java/processing/opengl/LineStroker.java +685 -0
  128. data/src/main/java/processing/opengl/PGL.java +3366 -0
  129. data/src/main/java/processing/opengl/PGraphics2D.java +615 -0
  130. data/src/main/java/processing/opengl/PGraphics3D.java +281 -0
  131. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +13634 -0
  132. data/src/main/java/processing/opengl/PJOGL.java +1966 -0
  133. data/src/main/java/processing/opengl/PShader.java +1478 -0
  134. data/src/main/java/processing/opengl/PShapeOpenGL.java +5234 -0
  135. data/src/main/java/processing/opengl/PSurfaceJOGL.java +1315 -0
  136. data/src/main/java/processing/opengl/Texture.java +1670 -0
  137. data/src/main/java/processing/opengl/VertexBuffer.java +88 -0
  138. data/src/main/java/processing/opengl/cursors/arrow.png +0 -0
  139. data/src/main/java/processing/opengl/cursors/cross.png +0 -0
  140. data/src/main/java/processing/opengl/cursors/hand.png +0 -0
  141. data/src/main/java/processing/opengl/cursors/license.txt +27 -0
  142. data/src/main/java/processing/opengl/cursors/move.png +0 -0
  143. data/src/main/java/processing/opengl/cursors/text.png +0 -0
  144. data/src/main/java/processing/opengl/cursors/wait.png +0 -0
  145. data/src/main/java/processing/opengl/shaders/ColorFrag.glsl +32 -0
  146. data/src/main/java/processing/opengl/shaders/ColorVert.glsl +34 -0
  147. data/src/main/java/processing/opengl/shaders/LightFrag.glsl +33 -0
  148. data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +154 -0
  149. data/src/main/java/processing/opengl/shaders/LightVert.glsl +151 -0
  150. data/src/main/java/processing/opengl/shaders/LineFrag.glsl +32 -0
  151. data/src/main/java/processing/opengl/shaders/LineVert.glsl +100 -0
  152. data/src/main/java/processing/opengl/shaders/MaskFrag.glsl +40 -0
  153. data/src/main/java/processing/opengl/shaders/PointFrag.glsl +32 -0
  154. data/src/main/java/processing/opengl/shaders/PointVert.glsl +56 -0
  155. data/src/main/java/processing/opengl/shaders/TexFrag.glsl +37 -0
  156. data/src/main/java/processing/opengl/shaders/TexLightFrag.glsl +37 -0
  157. data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +160 -0
  158. data/src/main/java/processing/opengl/shaders/TexLightVert.glsl +157 -0
  159. data/src/main/java/processing/opengl/shaders/TexVert.glsl +38 -0
  160. data/src/main/resources/icon/icon-1024.png +0 -0
  161. data/src/main/resources/icon/icon-128.png +0 -0
  162. data/src/main/resources/icon/icon-16.png +0 -0
  163. data/src/main/resources/icon/icon-256.png +0 -0
  164. data/src/main/resources/icon/icon-32.png +0 -0
  165. data/src/main/resources/icon/icon-48.png +0 -0
  166. data/src/main/resources/icon/icon-512.png +0 -0
  167. data/src/main/resources/icon/icon-64.png +0 -0
  168. data/src/main/resources/license.txt +508 -0
  169. data/test/create_test.rb +68 -0
  170. data/test/deglut_spec_test.rb +24 -0
  171. data/test/helper_methods_test.rb +58 -0
  172. data/test/math_tool_test.rb +75 -0
  173. data/test/respond_to_test.rb +215 -0
  174. data/test/sketches/key_event.rb +37 -0
  175. data/test/sketches/library/my_library/my_library.rb +32 -0
  176. data/test/test_helper.rb +3 -0
  177. data/test/vecmath_spec_test.rb +522 -0
  178. data/vendors/Rakefile +127 -0
  179. metadata +289 -0
@@ -0,0 +1,347 @@
1
+ /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+
3
+ /*
4
+ Part of the Processing project - http://processing.org
5
+
6
+ Copyright (c) 2005-08 Ben Fry and Casey Reas
7
+
8
+ This library is free software; you can redistribute it and/or
9
+ modify it under the terms of the GNU Lesser General Public
10
+ License as published by the Free Software Foundation; either
11
+ version 2.1 of the License, or (at your option) any later version.
12
+
13
+ This library is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ Lesser General Public License for more details.
17
+
18
+ You should have received a copy of the GNU Lesser General
19
+ Public License along with this library; if not, write to the
20
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
21
+ Boston, MA 02111-1307 USA
22
+ */
23
+
24
+ package processing.core;
25
+
26
+
27
+ /**
28
+ * A matrix is used to define graphical transformations. PMatrix is the common
29
+ * interface for both the 2D and 3D matrix classes in Processing. A matrix is a
30
+ * grid of numbers, which can be multiplied by a vector to give another vector.
31
+ * Multiplying a point by a particular matrix might translate it, rotate it,
32
+ * or carry out a combination of transformations.
33
+ *
34
+ * Multiplying matrices by each other combines their effects; use the
35
+ * {@code apply} and {@code preApply} methods for this.
36
+ */
37
+ public interface PMatrix {
38
+
39
+ /**
40
+ * Make this an identity matrix. Multiplying by it will have no effect.
41
+ */
42
+ public void reset();
43
+
44
+ /**
45
+ * Returns a copy of this PMatrix.
46
+ * @return
47
+ */
48
+ public PMatrix get();
49
+
50
+ /**
51
+ * Copies the matrix contents into a float array.
52
+ * If target is null (or not the correct size), a new array will be created.
53
+ * @param target
54
+ * @return
55
+ */
56
+ public float[] get(float[] target);
57
+
58
+
59
+ /**
60
+ * Make this matrix become a copy of src.
61
+ * @param src
62
+ */
63
+ public void set(PMatrix src);
64
+
65
+ /**
66
+ * Set the contents of this matrix to the contents of source. Fills the
67
+ * matrix left-to-right, starting in the top row.
68
+ * @param source
69
+ */
70
+ public void set(float[] source);
71
+
72
+ /**
73
+ * Set the matrix content to this 2D matrix or its 3D equivalent.
74
+ * @param m00
75
+ * @param m01
76
+ * @param m10
77
+ * @param m02
78
+ * @param m12
79
+ * @param m11
80
+ */
81
+ public void set(float m00, float m01, float m02,
82
+ float m10, float m11, float m12);
83
+
84
+ /**
85
+ * Set the matrix content to the 3D matrix supplied, if this matrix is 3D.
86
+ * @param m00
87
+ * @param m01
88
+ * @param m20
89
+ * @param m02
90
+ * @param m03
91
+ * @param m10
92
+ * @param m12
93
+ * @param m11
94
+ * @param m22
95
+ * @param m33
96
+ * @param m13
97
+ * @param m23
98
+ * @param m30
99
+ * @param m31
100
+ * @param m21
101
+ * @param m32
102
+ */
103
+ public void set(float m00, float m01, float m02, float m03,
104
+ float m10, float m11, float m12, float m13,
105
+ float m20, float m21, float m22, float m23,
106
+ float m30, float m31, float m32, float m33);
107
+
108
+ /**
109
+ *
110
+ * @param tx
111
+ * @param ty
112
+ */
113
+ public void translate(float tx, float ty);
114
+
115
+ /**
116
+ *
117
+ * @param tx
118
+ * @param ty
119
+ * @param tz
120
+ */
121
+ public void translate(float tx, float ty, float tz);
122
+
123
+ /**
124
+ *
125
+ * @param angle
126
+ */
127
+ public void rotate(float angle);
128
+
129
+ /**
130
+ *
131
+ * @param angle
132
+ */
133
+ public void rotateX(float angle);
134
+
135
+ /**
136
+ *
137
+ * @param angle
138
+ */
139
+ public void rotateY(float angle);
140
+
141
+ /**
142
+ *
143
+ * @param angle
144
+ */
145
+ public void rotateZ(float angle);
146
+
147
+ /**
148
+ *
149
+ * @param angle
150
+ * @param v0
151
+ * @param v1
152
+ * @param v2
153
+ */
154
+ public void rotate(float angle, float v0, float v1, float v2);
155
+
156
+ /**
157
+ *
158
+ * @param s
159
+ */
160
+ public void scale(float s);
161
+
162
+ /**
163
+ *
164
+ * @param sx
165
+ * @param sy
166
+ */
167
+ public void scale(float sx, float sy);
168
+
169
+ /**
170
+ *
171
+ * @param x
172
+ * @param y
173
+ * @param z
174
+ */
175
+ public void scale(float x, float y, float z);
176
+
177
+ /**
178
+ *
179
+ * @param angle
180
+ */
181
+ public void shearX(float angle);
182
+
183
+ /**
184
+ *
185
+ * @param angle
186
+ */
187
+ public void shearY(float angle);
188
+
189
+ /**
190
+ * Multiply this matrix by another.
191
+ * @param source
192
+ */
193
+ public void apply(PMatrix source);
194
+
195
+ /**
196
+ * Multiply this matrix by another.
197
+ * @param source
198
+ */
199
+ public void apply(PMatrix2D source);
200
+
201
+ /**
202
+ * Multiply this matrix by another.
203
+ * @param source
204
+ */
205
+ public void apply(PMatrix3D source);
206
+
207
+ /**
208
+ * Multiply this matrix by another.
209
+ * @param n00
210
+ * @param n11
211
+ * @param n02
212
+ * @param n10
213
+ * @param n01
214
+ * @param n12
215
+ */
216
+ public void apply(float n00, float n01, float n02,
217
+ float n10, float n11, float n12);
218
+
219
+ /**
220
+ * Multiply this matrix by another.
221
+ * @param n00
222
+ * @param n32
223
+ * @param n02
224
+ * @param n01
225
+ * @param n21
226
+ * @param n10
227
+ * @param n03
228
+ * @param n11
229
+ * @param n13
230
+ * @param n23
231
+ * @param n22
232
+ * @param n20
233
+ * @param n12
234
+ * @param n31
235
+ * @param n30
236
+ * @param n33
237
+ */
238
+ public void apply(float n00, float n01, float n02, float n03,
239
+ float n10, float n11, float n12, float n13,
240
+ float n20, float n21, float n22, float n23,
241
+ float n30, float n31, float n32, float n33);
242
+
243
+ /**
244
+ * Apply another matrix to the left of this one.
245
+ * @param left
246
+ */
247
+ public void preApply(PMatrix left);
248
+
249
+ /**
250
+ * Apply another matrix to the left of this one.
251
+ * @param left
252
+ */
253
+ public void preApply(PMatrix2D left);
254
+
255
+ /**
256
+ * Apply another matrix to the left of this one. 3D only.
257
+ * @param left
258
+ */
259
+ public void preApply(PMatrix3D left);
260
+
261
+ /**
262
+ * Apply another matrix to the left of this one.
263
+ * @param n00
264
+ * @param n12
265
+ * @param n02
266
+ * @param n10
267
+ * @param n01
268
+ * @param n11
269
+ */
270
+ public void preApply(float n00, float n01, float n02,
271
+ float n10, float n11, float n12);
272
+
273
+ /**
274
+ * Apply another matrix to the left of this one. 3D only.
275
+ * @param n00
276
+ * @param n10
277
+ * @param n02
278
+ * @param n01
279
+ * @param n33
280
+ * @param n13
281
+ * @param n11
282
+ * @param n03
283
+ * @param n20
284
+ * @param n21
285
+ * @param n12
286
+ * @param n30
287
+ * @param n23
288
+ * @param n22
289
+ * @param n32
290
+ * @param n31
291
+ */
292
+ public void preApply(float n00, float n01, float n02, float n03,
293
+ float n10, float n11, float n12, float n13,
294
+ float n20, float n21, float n22, float n23,
295
+ float n30, float n31, float n32, float n33);
296
+
297
+
298
+ /**
299
+ * Multiply source by this matrix, and return the result.
300
+ * The result will be stored in target if target is non-null, and target
301
+ * will then be the matrix returned. This improves performance if you reuse
302
+ * target, so it's recommended if you call this many times in draw().
303
+ * @param source
304
+ * @param target
305
+ * @return
306
+ */
307
+ public PVector mult(PVector source, PVector target);
308
+
309
+
310
+ /**
311
+ * Multiply a multi-element vector against this matrix.
312
+ * Supplying and recycling a target array improves performance, so it's
313
+ * recommended if you call this many times in draw().
314
+ * @param source
315
+ * @param target
316
+ * @return
317
+ */
318
+ public float[] mult(float[] source, float[] target);
319
+
320
+
321
+ // public float multX(float x, float y);
322
+ // public float multY(float x, float y);
323
+
324
+ // public float multX(float x, float y, float z);
325
+ // public float multY(float x, float y, float z);
326
+ // public float multZ(float x, float y, float z);
327
+
328
+
329
+ /**
330
+ * Transpose this matrix; rows become columns and columns rows.
331
+ */
332
+ public void transpose();
333
+
334
+
335
+ /**
336
+ * Invert this matrix. Will not necessarily succeed, because some matrices
337
+ * map more than one point to the same image point, and so are irreversible.
338
+ * @return true if successful
339
+ */
340
+ public boolean invert();
341
+
342
+
343
+ /**
344
+ * @return the determinant of the matrix
345
+ */
346
+ public float determinant();
347
+ }
@@ -0,0 +1,694 @@
1
+ /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+
3
+ /*
4
+ Part of the Processing project - http://processing.org
5
+
6
+ Copyright (c) 2005-08 Ben Fry and Casey Reas
7
+
8
+ This library is free software; you can redistribute it and/or
9
+ modify it under the terms of the GNU Lesser General Public
10
+ License as published by the Free Software Foundation; either
11
+ version 2.1 of the License, or (at your option) any later version.
12
+
13
+ This library is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ Lesser General Public License for more details.
17
+
18
+ You should have received a copy of the GNU Lesser General
19
+ Public License along with this library; if not, write to the
20
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
21
+ Boston, MA 02111-1307 USA
22
+ */
23
+
24
+ package processing.core;
25
+
26
+
27
+ /**
28
+ * 3x2 affine matrix implementation.
29
+ * Matrices are used to describe a transformation; see {@link PMatrix} for a
30
+ * general description. This matrix looks like the following when multiplying
31
+ * a vector (x, y) in {@code mult()}.
32
+ * <pre>
33
+ * [m00 m01 m02][x] [m00*x + m01*y + m02*1] [x']
34
+ * [m10 m11 m12][y] = [m10*x + m11*y + m12*1] = [y']
35
+ * [ 0 0 1 ][1] [ 0*x + 0*y + 1*1 ] [ 1]</pre>
36
+ * (x', y') is returned. The values in the matrix determine the transformation.
37
+ * They are modified by the various transformation functions.
38
+ */
39
+ public class PMatrix2D implements PMatrix {
40
+
41
+ /**
42
+ *
43
+ */
44
+ public float m00,
45
+
46
+ /**
47
+ *
48
+ */
49
+ m01,
50
+
51
+ /**
52
+ *
53
+ */
54
+ m02;
55
+
56
+ /**
57
+ *
58
+ */
59
+ public float m10,
60
+
61
+ /**
62
+ *
63
+ */
64
+ m11,
65
+
66
+ /**
67
+ *
68
+ */
69
+ m12;
70
+
71
+
72
+ /**
73
+ * Create a new matrix, set to the identity matrix.
74
+ */
75
+ public PMatrix2D() {
76
+ reset();
77
+ }
78
+
79
+ /**
80
+ *
81
+ * @param m00
82
+ * @param m01
83
+ * @param m02
84
+ * @param m10
85
+ * @param m11
86
+ * @param m12
87
+ */
88
+ public PMatrix2D(float m00, float m01, float m02,
89
+ float m10, float m11, float m12) {
90
+ set(m00, m01, m02,
91
+ m10, m11, m12);
92
+ }
93
+
94
+ /**
95
+ *
96
+ * @param matrix
97
+ */
98
+ public PMatrix2D(PMatrix matrix) {
99
+ set(matrix);
100
+ }
101
+
102
+
103
+ public void reset() {
104
+ set(1, 0, 0,
105
+ 0, 1, 0);
106
+ }
107
+
108
+
109
+ /**
110
+ * Returns a copy of this PMatrix.
111
+ * @return
112
+ */
113
+ public PMatrix2D get() {
114
+ PMatrix2D outgoing = new PMatrix2D();
115
+ outgoing.set(this);
116
+ return outgoing;
117
+ }
118
+
119
+
120
+ /**
121
+ * Copies the matrix contents into a 6 entry float array.
122
+ * If target is null (or not the correct size), a new array will be created.
123
+ * Returned in the order {@code {m00, m01, m02, m10, m11, m12}}.
124
+ * @param target
125
+ * @return
126
+ */
127
+ public float[] get(float[] target) {
128
+ if ((target == null) || (target.length != 6)) {
129
+ target = new float[6];
130
+ }
131
+ target[0] = m00;
132
+ target[1] = m01;
133
+ target[2] = m02;
134
+
135
+ target[3] = m10;
136
+ target[4] = m11;
137
+ target[5] = m12;
138
+
139
+ return target;
140
+ }
141
+
142
+
143
+ /**
144
+ * If matrix is a PMatrix2D, sets this matrix to be a copy of it.
145
+ * @param matrix
146
+ * @throws IllegalArgumentException If <tt>matrix</tt> is not 2D.
147
+ */
148
+ public void set(PMatrix matrix) {
149
+ if (matrix instanceof PMatrix2D) {
150
+ PMatrix2D src = (PMatrix2D) matrix;
151
+ set(src.m00, src.m01, src.m02,
152
+ src.m10, src.m11, src.m12);
153
+ } else {
154
+ throw new IllegalArgumentException("PMatrix2D.set() only accepts PMatrix2D objects.");
155
+ }
156
+ }
157
+
158
+
159
+ /**
160
+ * Unavailable in 2D. Does nothing.
161
+ * @param src
162
+ */
163
+ public void set(PMatrix3D src) {
164
+ }
165
+
166
+
167
+ public void set(float[] source) {
168
+ m00 = source[0];
169
+ m01 = source[1];
170
+ m02 = source[2];
171
+
172
+ m10 = source[3];
173
+ m11 = source[4];
174
+ m12 = source[5];
175
+ }
176
+
177
+
178
+ /**
179
+ * Sets the matrix content.
180
+ * @param m00
181
+ * @param m01
182
+ * @param m02
183
+ * @param m11
184
+ * @param m10
185
+ * @param m12
186
+ */
187
+ public void set(float m00, float m01, float m02,
188
+ float m10, float m11, float m12) {
189
+ this.m00 = m00; this.m01 = m01; this.m02 = m02;
190
+ this.m10 = m10; this.m11 = m11; this.m12 = m12;
191
+ }
192
+
193
+
194
+ /**
195
+ * Unavailable in 2D. Does nothing.
196
+ * @param m00
197
+ * @param m23
198
+ * @param m02
199
+ * @param m01
200
+ * @param m10
201
+ * @param m12
202
+ * @param m03
203
+ * @param m11
204
+ * @param m20
205
+ * @param m21
206
+ * @param m13
207
+ * @param m31
208
+ * @param m33
209
+ * @param m22
210
+ * @param m30
211
+ * @param m32
212
+ */
213
+ public void set(float m00, float m01, float m02, float m03,
214
+ float m10, float m11, float m12, float m13,
215
+ float m20, float m21, float m22, float m23,
216
+ float m30, float m31, float m32, float m33) {
217
+
218
+ }
219
+
220
+ /**
221
+ *
222
+ * @param tx
223
+ * @param ty
224
+ */
225
+ public void translate(float tx, float ty) {
226
+ m02 = tx*m00 + ty*m01 + m02;
227
+ m12 = tx*m10 + ty*m11 + m12;
228
+ }
229
+
230
+
231
+ /**
232
+ * Unavailable in 2D.
233
+ * @param x
234
+ * @param y
235
+ * @param z
236
+ * @throws IllegalArgumentException
237
+ */
238
+ public void translate(float x, float y, float z) {
239
+ throw new IllegalArgumentException("Cannot use translate(x, y, z) on a PMatrix2D.");
240
+ }
241
+
242
+
243
+ // Implementation roughly based on AffineTransform.
244
+
245
+ /**
246
+ *
247
+ * @param angle
248
+ */
249
+ public void rotate(float angle) {
250
+ float s = sin(angle);
251
+ float c = cos(angle);
252
+
253
+ float temp1 = m00;
254
+ float temp2 = m01;
255
+ m00 = c * temp1 + s * temp2;
256
+ m01 = -s * temp1 + c * temp2;
257
+ temp1 = m10;
258
+ temp2 = m11;
259
+ m10 = c * temp1 + s * temp2;
260
+ m11 = -s * temp1 + c * temp2;
261
+ }
262
+
263
+
264
+ /**
265
+ * Unavailable in 2D.
266
+ * @param angle
267
+ * @throws IllegalArgumentException
268
+ */
269
+ public void rotateX(float angle) {
270
+ throw new IllegalArgumentException("Cannot use rotateX() on a PMatrix2D.");
271
+ }
272
+
273
+
274
+ /**
275
+ * Unavailable in 2D.
276
+ * @param angle
277
+ * @throws IllegalArgumentException
278
+ */
279
+ public void rotateY(float angle) {
280
+ throw new IllegalArgumentException("Cannot use rotateY() on a PMatrix2D.");
281
+ }
282
+
283
+ /**
284
+ *
285
+ * @param angle
286
+ */
287
+ public void rotateZ(float angle) {
288
+ rotate(angle);
289
+ }
290
+
291
+
292
+ /**
293
+ * Unavailable in 2D.
294
+ * @param angle
295
+ * @param v0
296
+ * @param v1
297
+ * @param v2
298
+ * @throws IllegalArgumentException
299
+ */
300
+ public void rotate(float angle, float v0, float v1, float v2) {
301
+ throw new IllegalArgumentException("Cannot use this version of rotate() on a PMatrix2D.");
302
+ }
303
+
304
+ /**
305
+ *
306
+ * @param s
307
+ */
308
+ public void scale(float s) {
309
+ scale(s, s);
310
+ }
311
+
312
+ /**
313
+ *
314
+ * @param sx
315
+ * @param sy
316
+ */
317
+ public void scale(float sx, float sy) {
318
+ m00 *= sx; m01 *= sy;
319
+ m10 *= sx; m11 *= sy;
320
+ }
321
+
322
+
323
+ /**
324
+ * Unavailable in 2D.
325
+ * @param x
326
+ * @param y
327
+ * @param z
328
+ * @throws IllegalArgumentException
329
+ */
330
+ public void scale(float x, float y, float z) {
331
+ throw new IllegalArgumentException("Cannot use this version of scale() on a PMatrix2D.");
332
+ }
333
+
334
+ /**
335
+ *
336
+ * @param angle
337
+ */
338
+ public void shearX(float angle) {
339
+ apply(1, 0, 1, tan(angle), 0, 0);
340
+ }
341
+
342
+ /**
343
+ *
344
+ * @param angle
345
+ */
346
+ public void shearY(float angle) {
347
+ apply(1, 0, 1, 0, tan(angle), 0);
348
+ }
349
+
350
+
351
+ public void apply(PMatrix source) {
352
+ if (source instanceof PMatrix2D) {
353
+ apply((PMatrix2D) source);
354
+ } else if (source instanceof PMatrix3D) {
355
+ apply((PMatrix3D) source);
356
+ }
357
+ }
358
+
359
+
360
+ public void apply(PMatrix2D source) {
361
+ apply(source.m00, source.m01, source.m02,
362
+ source.m10, source.m11, source.m12);
363
+ }
364
+
365
+
366
+ /**
367
+ * Unavailable in 2D.
368
+ * @param source
369
+ * @throws IllegalArgumentException
370
+ */
371
+ public void apply(PMatrix3D source) {
372
+ throw new IllegalArgumentException("Cannot use apply(PMatrix3D) on a PMatrix2D.");
373
+ }
374
+
375
+
376
+ public void apply(float n00, float n01, float n02,
377
+ float n10, float n11, float n12) {
378
+ float t0 = m00;
379
+ float t1 = m01;
380
+ m00 = n00 * t0 + n10 * t1;
381
+ m01 = n01 * t0 + n11 * t1;
382
+ m02 += n02 * t0 + n12 * t1;
383
+
384
+ t0 = m10;
385
+ t1 = m11;
386
+ m10 = n00 * t0 + n10 * t1;
387
+ m11 = n01 * t0 + n11 * t1;
388
+ m12 += n02 * t0 + n12 * t1;
389
+ }
390
+
391
+
392
+ /**
393
+ * Unavailable in 2D.
394
+ * @param n00
395
+ * @param n21
396
+ * @param n02
397
+ * @param n01
398
+ * @param n03
399
+ * @param n11
400
+ * @param n10
401
+ * @param n30
402
+ * @param n23
403
+ * @param n13
404
+ * @param n12
405
+ * @param n22
406
+ * @param n32
407
+ * @param n20
408
+ * @param n31
409
+ * @param n33
410
+ * @throws IllegalArgumentException
411
+ */
412
+ public void apply(float n00, float n01, float n02, float n03,
413
+ float n10, float n11, float n12, float n13,
414
+ float n20, float n21, float n22, float n23,
415
+ float n30, float n31, float n32, float n33) {
416
+ throw new IllegalArgumentException("Cannot use this version of apply() on a PMatrix2D.");
417
+ }
418
+
419
+
420
+ /**
421
+ * Apply another matrix to the left of this one.
422
+ * @param source
423
+ */
424
+ public void preApply(PMatrix source) {
425
+ if (source instanceof PMatrix2D) {
426
+ preApply((PMatrix2D) source);
427
+ } else if (source instanceof PMatrix3D) {
428
+ preApply((PMatrix3D) source);
429
+ }
430
+ }
431
+
432
+
433
+ public void preApply(PMatrix2D left) {
434
+ preApply(left.m00, left.m01, left.m02,
435
+ left.m10, left.m11, left.m12);
436
+ }
437
+
438
+
439
+ /**
440
+ * Unavailable in 2D.
441
+ * @param left
442
+ * @throws IllegalArgumentException
443
+ */
444
+ public void preApply(PMatrix3D left) {
445
+ throw new IllegalArgumentException("Cannot use preApply(PMatrix3D) on a PMatrix2D.");
446
+ }
447
+
448
+
449
+ public void preApply(float n00, float n01, float n02,
450
+ float n10, float n11, float n12) {
451
+ float t0 = m02;
452
+ float t1 = m12;
453
+ n02 += t0 * n00 + t1 * n01;
454
+ n12 += t0 * n10 + t1 * n11;
455
+
456
+ m02 = n02;
457
+ m12 = n12;
458
+
459
+ t0 = m00;
460
+ t1 = m10;
461
+ m00 = t0 * n00 + t1 * n01;
462
+ m10 = t0 * n10 + t1 * n11;
463
+
464
+ t0 = m01;
465
+ t1 = m11;
466
+ m01 = t0 * n00 + t1 * n01;
467
+ m11 = t0 * n10 + t1 * n11;
468
+ }
469
+
470
+
471
+ /**
472
+ * Unavailable in 2D.
473
+ * @param n00
474
+ * @param n01
475
+ * @param n03
476
+ * @param n02
477
+ * @param n10
478
+ * @param n12
479
+ * @param n21
480
+ * @param n13
481
+ * @param n11
482
+ * @param n30
483
+ * @param n23
484
+ * @param n20
485
+ * @param n32
486
+ * @param n22
487
+ * @param n31
488
+ * @param n33
489
+ * @throws IllegalArgumentException
490
+ */
491
+ public void preApply(float n00, float n01, float n02, float n03,
492
+ float n10, float n11, float n12, float n13,
493
+ float n20, float n21, float n22, float n23,
494
+ float n30, float n31, float n32, float n33) {
495
+ throw new IllegalArgumentException("Cannot use this version of preApply() on a PMatrix2D.");
496
+ }
497
+
498
+
499
+ //////////////////////////////////////////////////////////////
500
+
501
+
502
+ /**
503
+ * {@inheritDoc}
504
+ * Ignores any z component.
505
+ */
506
+ public PVector mult(PVector source, PVector target) {
507
+ if (target == null) {
508
+ target = new PVector();
509
+ }
510
+ target.x = m00*source.x + m01*source.y + m02;
511
+ target.y = m10*source.x + m11*source.y + m12;
512
+ return target;
513
+ }
514
+
515
+
516
+ /**
517
+ * Multiply a two element vector against this matrix.
518
+ * If out is null or not length four, a new float array will be returned.
519
+ * The values for vec and out can be the same (though that's less efficient).
520
+ * @param vec
521
+ * @param out
522
+ * @return
523
+ */
524
+ public float[] mult(float vec[], float out[]) {
525
+ if (out == null || out.length != 2) {
526
+ out = new float[2];
527
+ }
528
+
529
+ if (vec == out) {
530
+ float tx = m00*vec[0] + m01*vec[1] + m02;
531
+ float ty = m10*vec[0] + m11*vec[1] + m12;
532
+
533
+ out[0] = tx;
534
+ out[1] = ty;
535
+
536
+ } else {
537
+ out[0] = m00*vec[0] + m01*vec[1] + m02;
538
+ out[1] = m10*vec[0] + m11*vec[1] + m12;
539
+ }
540
+
541
+ return out;
542
+ }
543
+
544
+
545
+ /**
546
+ * Returns the x-coordinate of the result of multiplying the point (x, y)
547
+ * by this matrix.
548
+ * @param x
549
+ * @param y
550
+ * @return
551
+ */
552
+ public float multX(float x, float y) {
553
+ return m00*x + m01*y + m02;
554
+ }
555
+
556
+
557
+ /**
558
+ * Returns the y-coordinate of the result of multiplying the point (x, y)
559
+ * by this matrix.
560
+ * @param x
561
+ * @param y
562
+ * @return
563
+ */
564
+ public float multY(float x, float y) {
565
+ return m10*x + m11*y + m12;
566
+ }
567
+
568
+
569
+
570
+ /**
571
+ * Unavailable in 2D. Does nothing.
572
+ */
573
+ public void transpose() {
574
+ }
575
+
576
+
577
+ /*
578
+ * Implementation stolen from OpenJDK.
579
+ */
580
+ public boolean invert() {
581
+ float determinant = determinant();
582
+ if (Math.abs(determinant) <= Float.MIN_VALUE) {
583
+ return false;
584
+ }
585
+
586
+ float t00 = m00;
587
+ float t01 = m01;
588
+ float t02 = m02;
589
+ float t10 = m10;
590
+ float t11 = m11;
591
+ float t12 = m12;
592
+
593
+ m00 = t11 / determinant;
594
+ m10 = -t10 / determinant;
595
+ m01 = -t01 / determinant;
596
+ m11 = t00 / determinant;
597
+ m02 = (t01 * t12 - t11 * t02) / determinant;
598
+ m12 = (t10 * t02 - t00 * t12) / determinant;
599
+
600
+ return true;
601
+ }
602
+
603
+
604
+ /**
605
+ * @return the determinant of the matrix
606
+ */
607
+ public float determinant() {
608
+ return m00 * m11 - m01 * m10;
609
+ }
610
+
611
+
612
+ //////////////////////////////////////////////////////////////
613
+
614
+ /**
615
+ *
616
+ */
617
+
618
+
619
+ public void print() {
620
+ int big = (int) abs(max(PApplet.max(abs(m00), abs(m01), abs(m02)),
621
+ PApplet.max(abs(m10), abs(m11), abs(m12))));
622
+
623
+ int digits = 1;
624
+ if (Float.isNaN(big) || Float.isInfinite(big)) { // avoid infinite loop
625
+ digits = 5;
626
+ } else {
627
+ while ((big /= 10) != 0) digits++; // cheap log()
628
+ }
629
+
630
+ System.out.println(PApplet.nfs(m00, digits, 4) + " " +
631
+ PApplet.nfs(m01, digits, 4) + " " +
632
+ PApplet.nfs(m02, digits, 4));
633
+
634
+ System.out.println(PApplet.nfs(m10, digits, 4) + " " +
635
+ PApplet.nfs(m11, digits, 4) + " " +
636
+ PApplet.nfs(m12, digits, 4));
637
+
638
+ System.out.println();
639
+ }
640
+
641
+
642
+ //////////////////////////////////////////////////////////////
643
+
644
+ // TODO these need to be added as regular API, but the naming and
645
+ // implementation needs to be improved first. (e.g. actually keeping track
646
+ // of whether the matrix is in fact identity internally.)
647
+
648
+ /**
649
+ *
650
+ * @return
651
+ */
652
+
653
+
654
+ protected boolean isIdentity() {
655
+ return ((m00 == 1) && (m01 == 0) && (m02 == 0) &&
656
+ (m10 == 0) && (m11 == 1) && (m12 == 0));
657
+ }
658
+
659
+
660
+ // TODO make this more efficient, or move into PMatrix2D
661
+
662
+ /**
663
+ *
664
+ * @return
665
+ */
666
+ protected boolean isWarped() {
667
+ return ((m00 != 1) || (m01 != 0) &&
668
+ (m10 != 0) || (m11 != 1));
669
+ }
670
+
671
+
672
+ //////////////////////////////////////////////////////////////
673
+
674
+
675
+ static private final float max(float a, float b) {
676
+ return (a > b) ? a : b;
677
+ }
678
+
679
+ static private final float abs(float a) {
680
+ return (a < 0) ? -a : a;
681
+ }
682
+
683
+ static private final float sin(float angle) {
684
+ return (float)Math.sin(angle);
685
+ }
686
+
687
+ static private final float cos(float angle) {
688
+ return (float)Math.cos(angle);
689
+ }
690
+
691
+ static private final float tan(float angle) {
692
+ return (float)Math.tan(angle);
693
+ }
694
+ }