propane 3.4.2-java → 3.8.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.
- checksums.yaml +4 -4
- data/.mvn/extensions.xml +1 -1
- data/.mvn/wrapper/MavenWrapperDownloader.java +2 -2
- data/.mvn/wrapper/maven-wrapper.properties +2 -2
- data/.travis.yml +1 -1
- data/CHANGELOG.md +9 -1
- data/Gemfile +2 -0
- data/README.md +7 -10
- data/Rakefile +10 -11
- data/bin/propane +3 -1
- data/lib/propane.rb +4 -2
- data/lib/propane/app.rb +5 -1
- data/lib/propane/creators/sketch_class.rb +7 -1
- data/lib/propane/creators/sketch_factory.rb +4 -2
- data/lib/propane/creators/sketch_writer.rb +1 -0
- data/lib/propane/helper_methods.rb +22 -23
- data/lib/propane/helpers/numeric.rb +2 -0
- data/lib/propane/helpers/version_error.rb +1 -0
- data/lib/propane/library.rb +5 -1
- data/lib/propane/library_loader.rb +2 -0
- data/lib/propane/native_folder.rb +10 -9
- data/lib/propane/native_loader.rb +3 -0
- data/lib/propane/runner.rb +20 -14
- data/lib/propane/version.rb +2 -1
- data/library/boids/boids.rb +21 -11
- data/library/color_group/color_group.rb +2 -0
- data/library/control_panel/control_panel.rb +8 -5
- data/library/dxf/dxf.rb +2 -0
- data/library/file_chooser/chooser.rb +10 -9
- data/library/file_chooser/file_chooser.rb +10 -9
- data/library/library_proxy/library_proxy.rb +2 -0
- data/library/net/net.rb +2 -0
- data/library/slider/slider.rb +23 -22
- data/library/vector_utils/vector_utils.rb +4 -0
- data/library/video_event/video_event.rb +2 -0
- data/pom.rb +37 -36
- data/pom.xml +7 -7
- data/propane.gemspec +13 -9
- data/src/main/java/japplemenubar/JAppleMenuBar.java +3 -3
- data/src/main/java/monkstone/ColorUtil.java +1 -3
- data/src/main/java/monkstone/MathToolModule.java +1 -1
- data/src/main/java/monkstone/PropaneLibrary.java +2 -2
- data/src/main/java/monkstone/fastmath/DegLutTables.java +111 -0
- data/src/main/java/monkstone/fastmath/Deglut.java +6 -56
- data/src/main/java/monkstone/filechooser/Chooser.java +1 -1
- data/src/main/java/monkstone/noise/Noise.java +116 -0
- data/src/main/java/monkstone/noise/NoiseGenerator.java +63 -0
- data/src/main/java/monkstone/noise/NoiseMode.java +15 -0
- data/src/main/java/monkstone/noise/SimplexNoise.java +137 -103
- data/src/main/java/monkstone/noise/ValueNoise.java +170 -0
- data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +1 -1
- data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SliderBar.java +1 -1
- data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
- data/src/main/java/monkstone/slider/WheelHandler.java +1 -1
- data/src/main/java/monkstone/vecmath/package-info.java +1 -1
- data/src/main/java/monkstone/vecmath/vec2/Vec2.java +1 -1
- data/src/main/java/monkstone/vecmath/vec3/Vec3.java +1 -2
- data/src/main/java/monkstone/videoevent/CaptureEvent.java +1 -1
- data/src/main/java/monkstone/videoevent/MovieEvent.java +1 -1
- data/src/main/java/monkstone/videoevent/package-info.java +1 -1
- data/src/main/java/processing/awt/PGraphicsJava2D.java +781 -285
- data/src/main/java/processing/awt/PImageAWT.java +377 -0
- data/src/main/java/processing/awt/PShapeJava2D.java +56 -52
- data/src/main/java/processing/awt/PSurfaceAWT.java +308 -208
- data/src/main/java/processing/awt/ShimAWT.java +581 -0
- data/src/main/java/processing/core/PApplet.java +13142 -13883
- data/src/main/java/processing/core/PConstants.java +477 -447
- data/src/main/java/processing/core/PFont.java +914 -880
- data/src/main/java/processing/core/PGraphics.java +152 -136
- data/src/main/java/processing/core/PImage.java +275 -372
- data/src/main/java/processing/core/PMatrix.java +172 -159
- data/src/main/java/processing/core/PMatrix2D.java +478 -415
- data/src/main/java/processing/core/PMatrix3D.java +762 -735
- data/src/main/java/processing/core/PShape.java +2887 -2651
- data/src/main/java/processing/core/PShapeOBJ.java +97 -92
- data/src/main/java/processing/core/PShapeSVG.java +1705 -1490
- data/src/main/java/processing/core/PStyle.java +40 -37
- data/src/main/java/processing/core/PSurface.java +139 -97
- data/src/main/java/processing/core/PSurfaceNone.java +296 -218
- data/src/main/java/processing/core/PVector.java +995 -963
- data/src/main/java/processing/core/ThinkDifferent.java +12 -8
- data/src/main/java/processing/data/DoubleDict.java +756 -710
- data/src/main/java/processing/data/DoubleList.java +749 -696
- data/src/main/java/processing/data/FloatDict.java +748 -702
- data/src/main/java/processing/data/FloatList.java +751 -697
- data/src/main/java/processing/data/IntDict.java +720 -673
- data/src/main/java/processing/data/IntList.java +699 -633
- data/src/main/java/processing/data/JSONArray.java +931 -873
- data/src/main/java/processing/data/JSONObject.java +1262 -1165
- data/src/main/java/processing/data/JSONTokener.java +351 -341
- data/src/main/java/processing/data/LongDict.java +710 -663
- data/src/main/java/processing/data/LongList.java +701 -635
- data/src/main/java/processing/data/Sort.java +37 -41
- data/src/main/java/processing/data/StringDict.java +525 -486
- data/src/main/java/processing/data/StringList.java +626 -580
- data/src/main/java/processing/data/Table.java +3690 -3510
- data/src/main/java/processing/data/TableRow.java +182 -183
- data/src/main/java/processing/data/XML.java +957 -883
- data/src/main/java/processing/event/Event.java +87 -67
- data/src/main/java/processing/event/KeyEvent.java +48 -41
- data/src/main/java/processing/event/MouseEvent.java +88 -113
- data/src/main/java/processing/event/TouchEvent.java +10 -6
- data/src/main/java/processing/javafx/PGraphicsFX2D.java +20 -345
- data/src/main/java/processing/javafx/PSurfaceFX.java +149 -121
- data/src/main/java/processing/net/Client.java +20 -20
- data/src/main/java/processing/net/Server.java +9 -9
- data/src/main/java/processing/opengl/FontTexture.java +286 -266
- data/src/main/java/processing/opengl/FrameBuffer.java +389 -377
- data/src/main/java/processing/opengl/LinePath.java +132 -89
- data/src/main/java/processing/opengl/LineStroker.java +588 -581
- data/src/main/java/processing/opengl/PGL.java +660 -567
- data/src/main/java/processing/opengl/PGraphics2D.java +408 -315
- data/src/main/java/processing/opengl/PGraphics3D.java +107 -72
- data/src/main/java/processing/opengl/PGraphicsOpenGL.java +12378 -12075
- data/src/main/java/processing/opengl/PJOGL.java +1753 -1670
- data/src/main/java/processing/opengl/PShader.java +369 -461
- data/src/main/java/processing/opengl/PShapeOpenGL.java +4678 -4580
- data/src/main/java/processing/opengl/PSurfaceJOGL.java +1114 -1027
- data/src/main/java/processing/opengl/Texture.java +1492 -1401
- data/src/main/java/processing/opengl/VertexBuffer.java +57 -55
- data/test/create_test.rb +21 -20
- data/test/deglut_spec_test.rb +4 -2
- data/test/helper_methods_test.rb +49 -20
- data/test/math_tool_test.rb +39 -32
- data/test/native_folder.rb +47 -0
- data/test/respond_to_test.rb +3 -2
- data/test/sketches/key_event.rb +2 -2
- data/test/sketches/library/my_library/my_library.rb +3 -0
- data/test/test_helper.rb +2 -0
- data/test/vecmath_spec_test.rb +35 -22
- data/vendors/Rakefile +35 -40
- metadata +47 -23
- data/library/simplex_noise/simplex_noise.rb +0 -3
- data/src/main/java/processing/opengl/shaders/LightVert-brcm.glsl +0 -154
- data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +0 -154
- data/src/main/java/processing/opengl/shaders/TexLightVert-brcm.glsl +0 -160
- data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +0 -160
data/pom.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
project 'propane', 'https://github.com/monkstone/propane' do
|
|
3
4
|
model_version '4.0.0'
|
|
4
|
-
id 'propane:propane:3.
|
|
5
|
+
id 'propane:propane:3.8.0'
|
|
5
6
|
packaging 'jar'
|
|
6
7
|
|
|
7
8
|
description 'An integrated processing-core (somewhat hacked), with additional java code for a jruby version of processing.'
|
|
@@ -33,49 +34,49 @@ project 'propane', 'https://github.com/monkstone/propane' do
|
|
|
33
34
|
|
|
34
35
|
issue_management 'https://github.com/ruby-processing/propane/issues', 'Github'
|
|
35
36
|
|
|
36
|
-
source_control(
|
|
37
|
-
:
|
|
38
|
-
:
|
|
37
|
+
source_control(url: 'https://github.com/ruby-processing/propane',
|
|
38
|
+
connection: 'scm:git:git://github.com/ruby-processing/propane.git',
|
|
39
|
+
developer_connection: 'scm:git:git@github.com/ruby-processing/propane.git')
|
|
39
40
|
|
|
40
|
-
properties(
|
|
41
|
+
properties('propane.basedir' => '${project.basedir}',
|
|
41
42
|
'processing.api' => 'http://processing.github.io/processing-javadocs/core/',
|
|
42
43
|
'source.directory' => 'src',
|
|
43
44
|
'polyglot.dump.pom' => 'pom.xml',
|
|
44
45
|
'project.build.sourceEncoding' => 'utf-8',
|
|
45
|
-
'jogl.version' => '2.3.2',
|
|
46
|
-
'jruby.api' => 'http://jruby.org/apidocs/'
|
|
46
|
+
'jogl.version' => '2.3.2', # for compiling actual included 2.4.0-rc
|
|
47
|
+
'jruby.api' => 'http://jruby.org/apidocs/')
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
jar 'org.processing:video:3.3.7'
|
|
49
|
+
pom 'org.jruby:jruby:9.2.16.0'
|
|
50
|
+
jar 'org.processing:video:3.3.7' # only for compiling
|
|
50
51
|
jar 'org.jogamp.jogl:jogl-all:${jogl.version}'
|
|
51
52
|
jar 'org.jogamp.gluegen:gluegen-rt-main:${jogl.version}'
|
|
52
53
|
|
|
53
54
|
overrides do
|
|
54
|
-
plugin(
|
|
55
|
-
'generateBackupPoms' =>
|
|
56
|
-
plugin(
|
|
57
|
-
'release' =>
|
|
58
|
-
plugin(
|
|
59
|
-
'detectOfflineLinks' =>
|
|
60
|
-
'links' => [
|
|
61
|
-
'${processing.api}'
|
|
62
|
-
plugin(
|
|
63
|
-
:jar, '3.1.2',
|
|
55
|
+
plugin('org.codehaus.mojo:versions-maven-plugin:2.7',
|
|
56
|
+
'generateBackupPoms' => 'false')
|
|
57
|
+
plugin(:compiler, '3.8.1',
|
|
58
|
+
'release' => '11')
|
|
59
|
+
plugin(:javadoc, '3.2.0',
|
|
60
|
+
'detectOfflineLinks' => 'false',
|
|
61
|
+
'links' => ['${jruby.api}',
|
|
62
|
+
'${processing.api}'])
|
|
63
|
+
plugin(:jar, '3.2.0',
|
|
64
64
|
'archive' => {
|
|
65
|
-
'manifestEntries' => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
65
|
+
'manifestEntries' => {
|
|
66
|
+
'Automatic-Module-Name' => 'processing.core'
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
end
|
|
70
|
+
build do
|
|
71
|
+
resource do
|
|
72
|
+
directory '${source.directory}/main/java'
|
|
73
|
+
includes '**/**/*.glsl', '**/*.jnilib'
|
|
74
|
+
excludes '**/**/*.java'
|
|
75
|
+
end
|
|
76
|
+
resource do
|
|
77
|
+
directory '${source.directory}/main/resources'
|
|
78
|
+
includes '**/*.png', '*.txt'
|
|
79
|
+
excludes
|
|
80
|
+
end
|
|
81
|
+
end
|
|
79
82
|
end
|
|
80
|
-
end
|
|
81
|
-
end
|
data/pom.xml
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
<!--
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
DO NOT
|
|
5
|
+
DO NOT MODIFY - GENERATED CODE
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
-->
|
|
9
|
-
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
|
9
|
+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
|
10
10
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
11
11
|
<modelVersion>4.0.0</modelVersion>
|
|
12
12
|
<groupId>propane</groupId>
|
|
13
13
|
<artifactId>propane</artifactId>
|
|
14
|
-
<version>3.
|
|
14
|
+
<version>3.8.0</version>
|
|
15
15
|
<name>propane</name>
|
|
16
16
|
<description>An integrated processing-core (somewhat hacked), with additional java code for a jruby version of processing.</description>
|
|
17
17
|
<url>https://github.com/monkstone/propane</url>
|
|
@@ -74,7 +74,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
|
74
74
|
<dependency>
|
|
75
75
|
<groupId>org.jruby</groupId>
|
|
76
76
|
<artifactId>jruby</artifactId>
|
|
77
|
-
<version>9.2.
|
|
77
|
+
<version>9.2.16.0</version>
|
|
78
78
|
<type>pom</type>
|
|
79
79
|
</dependency>
|
|
80
80
|
<dependency>
|
|
@@ -132,7 +132,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
|
132
132
|
</plugin>
|
|
133
133
|
<plugin>
|
|
134
134
|
<artifactId>maven-javadoc-plugin</artifactId>
|
|
135
|
-
<version>3.
|
|
135
|
+
<version>3.2.0</version>
|
|
136
136
|
<configuration>
|
|
137
137
|
<detectOfflineLinks>false</detectOfflineLinks>
|
|
138
138
|
<links>
|
|
@@ -143,11 +143,11 @@ DO NOT MODIFIY - GENERATED CODE
|
|
|
143
143
|
</plugin>
|
|
144
144
|
<plugin>
|
|
145
145
|
<artifactId>maven-jar-plugin</artifactId>
|
|
146
|
-
<version>3.
|
|
146
|
+
<version>3.2.0</version>
|
|
147
147
|
<configuration>
|
|
148
148
|
<archive>
|
|
149
149
|
<manifestEntries>
|
|
150
|
-
<
|
|
150
|
+
<Automatic-Module-Name>processing.core</Automatic-Module-Name>
|
|
151
151
|
</manifestEntries>
|
|
152
152
|
</archive>
|
|
153
153
|
</configuration>
|
data/propane.gemspec
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
5
|
require 'propane/version'
|
|
5
6
|
|
|
@@ -8,27 +9,30 @@ Gem::Specification.new do |gem|
|
|
|
8
9
|
gem.version = Propane::VERSION
|
|
9
10
|
gem.authors = ['monkstone']
|
|
10
11
|
gem.email = ['mamba2928@yahoo.co.uk']
|
|
11
|
-
gem.licenses = %w
|
|
12
|
+
gem.licenses = %w[GPL-3.0 LGPL-2.0]
|
|
12
13
|
gem.description = <<-EOS
|
|
13
14
|
A batteries included version of processing in ruby targetting jdk11.
|
|
14
15
|
EOS
|
|
15
|
-
gem.summary =
|
|
16
|
+
gem.summary = 'ruby implementation of processing-4.0 on MacOS, linux and windows (64bit only)'
|
|
16
17
|
gem.homepage = 'https://ruby-processing.github.io/propane/'
|
|
17
|
-
gem.files = `git ls-files`.split(
|
|
18
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
18
19
|
gem.files << "lib/propane-#{Propane::VERSION}.jar"
|
|
19
20
|
gem.files << 'lib/gluegen-rt.jar'
|
|
20
21
|
gem.files << 'lib/jogl-all.jar'
|
|
21
22
|
gem.files << 'lib/gluegen-rt-natives-linux-amd64.jar'
|
|
22
23
|
gem.files << 'lib/gluegen-rt-natives-macosx-universal.jar'
|
|
24
|
+
# gem.files << 'lib/gluegen-rt-natives-ios-arm64.jar'
|
|
23
25
|
gem.files << 'lib/gluegen-rt-natives-windows-amd64.jar'
|
|
24
26
|
gem.files << 'lib/jogl-all-natives-linux-amd64.jar'
|
|
25
27
|
gem.files << 'lib/jogl-all-natives-macosx-universal.jar'
|
|
28
|
+
# gem.files << 'lib/jogl-all-natives-ios-arm64.jar'
|
|
26
29
|
gem.files << 'lib/jogl-all-natives-windows-amd64.jar'
|
|
27
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
30
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
|
28
31
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
29
|
-
gem.add_development_dependency '
|
|
30
|
-
gem.add_development_dependency 'minitest', '~> 5.
|
|
31
|
-
gem.add_runtime_dependency '
|
|
32
|
+
gem.add_development_dependency 'jruby-openssl', '~> 0.1.0', '>=0.1.3'
|
|
33
|
+
gem.add_development_dependency 'minitest', '~> 5.14'
|
|
34
|
+
gem.add_runtime_dependency 'rake', '~> 12.3'
|
|
35
|
+
gem.add_runtime_dependency 'arcball', '~> 1.0', '>= 1.0.2'
|
|
32
36
|
gem.require_paths = ['lib']
|
|
33
37
|
gem.platform = 'java'
|
|
34
38
|
gem.requirements << 'java runtime >= 11.0.2+'
|
|
@@ -19,9 +19,8 @@
|
|
|
19
19
|
*/
|
|
20
20
|
package japplemenubar;
|
|
21
21
|
|
|
22
|
-
import java.io
|
|
23
|
-
|
|
24
|
-
import java.io.InputStream;
|
|
22
|
+
import java.io.*;
|
|
23
|
+
|
|
25
24
|
import processing.core.PApplet;
|
|
26
25
|
|
|
27
26
|
|
|
@@ -59,6 +58,7 @@ public class JAppleMenuBar {
|
|
|
59
58
|
}
|
|
60
59
|
} catch (IOException e) {
|
|
61
60
|
sadness("Unknown error, here's the stack trace.");
|
|
61
|
+
e.printStackTrace();
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* in their sketches. Includes a method to efficiently convert an array of web
|
|
4
4
|
* strings to an array of color int, and another to convert an array of color
|
|
5
5
|
* int to a string that can be used in ruby code (to generate web color array).
|
|
6
|
-
* Copyright (c) 2015-
|
|
6
|
+
* Copyright (c) 2015-20 Martin Prout.
|
|
7
7
|
* This utility is free software; you can redistribute it and/or modify
|
|
8
8
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
9
9
|
* the Free Software Foundation; either version 2.1 of the License, or (at
|
|
@@ -13,8 +13,6 @@
|
|
|
13
13
|
*/
|
|
14
14
|
package monkstone;
|
|
15
15
|
|
|
16
|
-
import java.util.ArrayList;
|
|
17
|
-
import java.util.List;
|
|
18
16
|
import java.util.Random;
|
|
19
17
|
/**
|
|
20
18
|
*
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The purpose of this tool is to allow JRubyArt users to use an alternative
|
|
3
3
|
* to processing.org map, lerp and norm methods in their sketches and to implement
|
|
4
4
|
* JRubyArt convenenience method grid(width, height, stepW, stepH) { |x, y| do stuff }
|
|
5
|
-
* Copyright (c) 2015-
|
|
5
|
+
* Copyright (c) 2015-20 Martin Prout. This tool is free software; you can
|
|
6
6
|
* redistribute it and/or modify it under the terms of the GNU Lesser General
|
|
7
7
|
* Public License as published by the Free Software Foundation; either version
|
|
8
8
|
* 2.1 of the License, or (at your option) any later version.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The purpose of this class is to load the MathTool into ruby-processing runtime
|
|
3
|
-
* Copyright (C) 2015-
|
|
3
|
+
* Copyright (C) 2015-20 Martin Prout. This code is free software; you can
|
|
4
4
|
* redistribute it and/or modify it under the terms of the GNU Lesser General
|
|
5
5
|
* Public License as published by the Free Software Foundation; either version
|
|
6
6
|
* 2.1 of the License, or (at your option) any later version.
|
|
@@ -41,6 +41,6 @@ public class PropaneLibrary implements Library {
|
|
|
41
41
|
*/
|
|
42
42
|
@Override
|
|
43
43
|
public void load(final Ruby runtime, boolean wrap) throws IOException {
|
|
44
|
-
load(runtime);
|
|
44
|
+
PropaneLibrary.load(runtime);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021 Martin Prout
|
|
3
|
+
*
|
|
4
|
+
* This library is free software; you can redistribute it and/or
|
|
5
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
6
|
+
* License as published by the Free Software Foundation; either
|
|
7
|
+
* version 2.1 of the License, or (at your option) any later version.
|
|
8
|
+
*
|
|
9
|
+
* http://creativecommons.org/licenses/LGPL/2.1/
|
|
10
|
+
*
|
|
11
|
+
* This library 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 GNU
|
|
14
|
+
* Lesser General Public License for more details.
|
|
15
|
+
*
|
|
16
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
* License along with this library; if not, write to the Free Software
|
|
18
|
+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
*/
|
|
20
|
+
package monkstone.fastmath;
|
|
21
|
+
|
|
22
|
+
public final class DegLutTables {
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
static public final float PI = 3.1415927f;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
static public final float PI2 = PI * 2;
|
|
33
|
+
static private final int SIN_BITS = 15; // 16KB. Adjust for accuracy.
|
|
34
|
+
static private final int SIN_MASK = ~(-1 << SIN_BITS);
|
|
35
|
+
static private final int SIN_COUNT = SIN_MASK + 1;
|
|
36
|
+
|
|
37
|
+
static private final float RAD_FULL = PI * 2;
|
|
38
|
+
static private final float DEG_FULL = 360;
|
|
39
|
+
static private final float RAD_TO_INDEX = SIN_COUNT / RAD_FULL;
|
|
40
|
+
static private final float DEG_TO_INDEX = SIN_COUNT / DEG_FULL;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* multiply by this to convert from radians to degrees
|
|
44
|
+
*/
|
|
45
|
+
static public final float RADIANS_TO_DEGREES = 180f / PI;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
*/
|
|
50
|
+
static public final float RAD_DEG = RADIANS_TO_DEGREES;
|
|
51
|
+
/**
|
|
52
|
+
* multiply by this to convert from degrees to radians
|
|
53
|
+
*/
|
|
54
|
+
static public final float DEGREES_TO_RADIANS = PI / 180;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
*/
|
|
59
|
+
static public final float DEG_RAD = DEGREES_TO_RADIANS;
|
|
60
|
+
|
|
61
|
+
static private class Sin {
|
|
62
|
+
|
|
63
|
+
static final float[] table = new float[SIN_COUNT];
|
|
64
|
+
|
|
65
|
+
static {
|
|
66
|
+
for (int i = 0; i < SIN_COUNT; i++) {
|
|
67
|
+
table[i] = (float) Math.sin((i + 0.5f) / SIN_COUNT * RAD_FULL);
|
|
68
|
+
}
|
|
69
|
+
for (int i = 0; i < 360; i += 90) {
|
|
70
|
+
table[(int) (i * DEG_TO_INDEX) & SIN_MASK] = (float) Math.sin(i * DEGREES_TO_RADIANS);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Returns the sine in radians from a lookup table.
|
|
77
|
+
* @param radians
|
|
78
|
+
* @return
|
|
79
|
+
*/
|
|
80
|
+
static public final float sin(float radians) {
|
|
81
|
+
return Sin.table[(int) (radians * RAD_TO_INDEX) & SIN_MASK];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Returns the cosine in radians from a lookup table.
|
|
86
|
+
* @param radians
|
|
87
|
+
* @return
|
|
88
|
+
*/
|
|
89
|
+
static public final float cos(float radians) {
|
|
90
|
+
return Sin.table[(int) ((radians + PI / 2) * RAD_TO_INDEX) & SIN_MASK];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Returns the sine in radians from a lookup table.
|
|
95
|
+
* @param degrees
|
|
96
|
+
* @return
|
|
97
|
+
*/
|
|
98
|
+
static public final float sinDeg(float degrees) {
|
|
99
|
+
return Sin.table[(int) (degrees * DEG_TO_INDEX) & SIN_MASK];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Returns the cosine in radians from a lookup table.
|
|
104
|
+
* @param degrees
|
|
105
|
+
* @return
|
|
106
|
+
*/
|
|
107
|
+
static public final float cosDeg(float degrees) {
|
|
108
|
+
return Sin.table[(int) ((degrees + 90) * DEG_TO_INDEX) & SIN_MASK];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2015-
|
|
2
|
+
* Copyright (c) 2015-21 Martin Prout
|
|
3
3
|
*
|
|
4
4
|
* This library is free software; you can redistribute it and/or
|
|
5
5
|
* modify it under the terms of the GNU Lesser General Public
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
package monkstone.fastmath;
|
|
21
21
|
|
|
22
22
|
import org.jruby.Ruby;
|
|
23
|
-
import org.jruby.
|
|
23
|
+
import org.jruby.RubyNumeric;
|
|
24
24
|
import org.jruby.RubyModule;
|
|
25
25
|
import org.jruby.anno.JRubyModule;
|
|
26
26
|
import org.jruby.anno.JRubyMethod;
|
|
@@ -34,38 +34,6 @@ import org.jruby.runtime.builtin.IRubyObject;
|
|
|
34
34
|
@JRubyModule(name = "DegLut")
|
|
35
35
|
public class Deglut {
|
|
36
36
|
|
|
37
|
-
/**
|
|
38
|
-
* Lookup table for degree cosine/sine, has a fixed precision 1.0 degrees
|
|
39
|
-
* Quite accurate but imprecise
|
|
40
|
-
*
|
|
41
|
-
* @author Martin Prout <martin_p@lineone.net>
|
|
42
|
-
*/
|
|
43
|
-
static final double[] SIN_DEG_LUT = new double[91];
|
|
44
|
-
/**
|
|
45
|
-
*
|
|
46
|
-
*/
|
|
47
|
-
public static final double TO_RADIANS = Math.PI / 180;
|
|
48
|
-
/**
|
|
49
|
-
*
|
|
50
|
-
*/
|
|
51
|
-
private static boolean initialized = false;
|
|
52
|
-
|
|
53
|
-
private final static int NINETY = 90;
|
|
54
|
-
private final static int FULL = 360;
|
|
55
|
-
private static final long serialVersionUID = -1466528933765940101L;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Initialize sin table with values (first quadrant only)
|
|
59
|
-
*/
|
|
60
|
-
public static final void initTable() {
|
|
61
|
-
if (initialized == false) {
|
|
62
|
-
for (int i = 0; i <= NINETY; i++) {
|
|
63
|
-
SIN_DEG_LUT[i] = Math.sin(TO_RADIANS * i);
|
|
64
|
-
}
|
|
65
|
-
initialized = true;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
37
|
/**
|
|
70
38
|
*
|
|
71
39
|
* @param runtime Ruby
|
|
@@ -73,7 +41,6 @@ public class Deglut {
|
|
|
73
41
|
public static void createDeglut(final Ruby runtime) {
|
|
74
42
|
RubyModule deglutModule = runtime.defineModule("DegLut");
|
|
75
43
|
deglutModule.defineAnnotatedMethods(Deglut.class);
|
|
76
|
-
Deglut.initTable();
|
|
77
44
|
}
|
|
78
45
|
|
|
79
46
|
/**
|
|
@@ -84,18 +51,9 @@ public class Deglut {
|
|
|
84
51
|
* @return sin IRubyObject
|
|
85
52
|
*/
|
|
86
53
|
@JRubyMethod(name = "sin", module = true)
|
|
87
|
-
|
|
88
54
|
public static IRubyObject sin(ThreadContext context, IRubyObject recv, IRubyObject other) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
thet += FULL; // Needed because negative modulus plays badly in java
|
|
92
|
-
}
|
|
93
|
-
int theta = thet % FULL;
|
|
94
|
-
int y = theta % NINETY;
|
|
95
|
-
double result = (theta < NINETY) ? SIN_DEG_LUT[y] : (theta < 180)
|
|
96
|
-
? SIN_DEG_LUT[NINETY - y] : (theta < 270)
|
|
97
|
-
? -SIN_DEG_LUT[y] : -SIN_DEG_LUT[NINETY - y];
|
|
98
|
-
return context.runtime.newFloat(result);
|
|
55
|
+
float thet = (float) ((RubyNumeric) other).getLongValue();
|
|
56
|
+
return context.runtime.newFloat(DegLutTables.sinDeg(thet));
|
|
99
57
|
}
|
|
100
58
|
|
|
101
59
|
/**
|
|
@@ -107,15 +65,7 @@ public class Deglut {
|
|
|
107
65
|
*/
|
|
108
66
|
@JRubyMethod(name = "cos", module = true)
|
|
109
67
|
public static IRubyObject cos(ThreadContext context, IRubyObject recv, IRubyObject other) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
thet += FULL; // Needed because negative modulus plays badly in java
|
|
113
|
-
}
|
|
114
|
-
int theta = thet % FULL;
|
|
115
|
-
int y = theta % NINETY;
|
|
116
|
-
double result = (theta < NINETY) ? SIN_DEG_LUT[NINETY - y] : (theta < 180)
|
|
117
|
-
? -SIN_DEG_LUT[y] : (theta < 270)
|
|
118
|
-
? -SIN_DEG_LUT[NINETY - y] : SIN_DEG_LUT[y];
|
|
119
|
-
return context.runtime.newFloat(result);
|
|
68
|
+
float thet = (float) ((RubyNumeric) other).getLongValue();
|
|
69
|
+
return context.runtime.newFloat(DegLutTables.cosDeg(thet));
|
|
120
70
|
}
|
|
121
71
|
}
|