From 1b12613a1b8015fbdfd92f576162d6adccc5ab70 Mon Sep 17 00:00:00 2001 From: yaqubroli Date: Tue, 03 Jan 2023 13:55:14 -0800 Subject: [PATCH] Initial commit --- .DS_Store | 0 .classpath | 10 ++++++++++ .gitignore | 1 + .project | 17 +++++++++++++++++ .settings/org.eclipse.core.resources.prefs | 2 ++ .settings/org.eclipse.jdt.core.prefs | 14 ++++++++++++++ src/.DS_Store | 0 src/module-info.java | 3 +++ src/absmaths/AbsMaths.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/absmaths/Complex.java | 23 +++++++++++++++++++++++ src/absmaths/Matrix.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/absmaths/package-info.java | 1 + src/eyecandy/CubeRotator.java | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/eyecandy/Drawable.java | 8 ++++++++ src/eyecandy/Mandelbrot.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/eyecandy/Modulo.java | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/eyecandy/Sorter.java | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/eyecandy/StackableBackground.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/eyecandy/ball.gif | 0 src/eyecandy/fontsheet.gif | 0 src/main/DemoPanel.java | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/KeyHandler.java | 35 +++++++++++++++++++++++++++++++++++ src/main/Main.java | 27 +++++++++++++++++++++++++++ 23 files changed, 813 insertions(+) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..31ec78e3db287211329a36139dfbf9066092050d 100644 Binary files /dev/null and a/.DS_Store differ diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..57bca72 100644 --- /dev/null +++ a/.classpath @@ -1,0 +1,10 @@ + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6dd29b7 100644 --- /dev/null +++ a/.gitignore @@ -1,0 +1,1 @@ +bin/diff --git a/.project b/.project new file mode 100644 index 0000000..40826cd 100644 --- /dev/null +++ a/.project @@ -1,0 +1,17 @@ + + + Demo + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 100644 --- /dev/null +++ a/.settings/org.eclipse.core.resources.prefs @@ -1,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8c9943d 100644 --- /dev/null +++ a/.settings/org.eclipse.jdt.core.prefs @@ -1,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..86b16195756e0a34218dfa4ac7cf19a2a8952ea9 100644 Binary files /dev/null and a/src/.DS_Store differ diff --git a/src/module-info.java b/src/module-info.java new file mode 100644 index 0000000..00ac793 100644 --- /dev/null +++ a/src/module-info.java @@ -1,0 +1,3 @@ +module Demo { + requires java.desktop; +}diff --git a/src/absmaths/AbsMaths.java b/src/absmaths/AbsMaths.java new file mode 100644 index 0000000..b4bb4d0 100644 --- /dev/null +++ a/src/absmaths/AbsMaths.java @@ -1,0 +1,51 @@ + + +package absmaths; + +public class AbsMaths { + public static int[][] newTimesTable (int width, int height) { // generates a new 2d array times table of arbitrary size + int[][] arr = new int[width][height]; + for (int x=0; x H in HSV -> RGB + PAL_MODE, // modulo value -> -U and V in YUV -> RGB + GREY_MODE // modulo value -> all RGB + } + + public int getModuloTableEntry(int x) { //who knows + return (int) ( + (x / (float)( + ( + ((Math.sin((float)iteration / (plazmaIterationCycle / plazmaSpeedFactor)) + 1) * (plazmaIterationCycle / 2) + ) / 5 + ) + 0.25)) % 255 + ); + } + + public int getColourThroughPAL(int x) { + x = getModuloTableEntry(x); + + // PAL colour spanning via matrix hackery + Matrix coloursYUV = new Matrix(new double[][]{ + {0}, + {255 - x}, + {x}, + }); + double[] coloursRGB = AbsMaths.sanitizeToBounds(transformYUVtoRGB.getProduct(coloursYUV).getColumnAsArray(0), 0, 255); + // System.out.println(Arrays.toString(coloursRGB)); + Color color = new Color((int)coloursRGB[0], (int)coloursRGB[1], (int)coloursRGB[2]); + return color.getRGB(); + } + + public int getColourThroughHue(int x) { + //giant piecewise function stolen from wikipedia and javafied + float h = (float)getModuloTableEntry(x) / (255f / 6); // hue as float so the multiplication works out + float w = (float)(1 - Math.abs((h % 2) - 1)); + + switch ((int)Math.floor(h)) { + case 0: + return new Color(1, w, 0).getRGB(); + case 1: + return new Color(w, 1, 0).getRGB(); + case 2: + return new Color(0, 1, w).getRGB(); + case 3: + return new Color(0, w, 1).getRGB(); + case 4: + return new Color(w, 0, 1).getRGB(); + case 5: + return new Color(1, 0, w).getRGB(); + default: + return 0; + } + } + + public int getColourStraight(int x) { + x = getModuloTableEntry(x); + Color color = new Color(x, x, x); + return color.getRGB(); + } + + @Override + public int getColour(int x, int y) { + return getColourStraight(moduloTable[x][y]); + } + + @Override + public int[] transformScreen() { + //System.out.println("this is being called"); + return new int[]{ + (int) (Math.sin(((float)(iteration % rotationIterationCycle) / rotationIterationCycle) * 2 * Math.PI) * (width / 4) - (width / 4)), + (int) (Math.cos(((float)(iteration % rotationIterationCycle) / rotationIterationCycle) * 2 * Math.PI) * (height / 4) - (height / 4)) + }; + } + +} diff --git a/src/eyecandy/Sorter.java b/src/eyecandy/Sorter.java new file mode 100644 index 0000000..ce0604e 100644 --- /dev/null +++ a/src/eyecandy/Sorter.java @@ -1,0 +1,137 @@ +package eyecandy; + +import java.awt.Color; +import java.awt.Graphics2D; + +public class Sorter implements Drawable{ + final int width = 320; + final int height = 200; + final int setLength = 93; + final int setRange = 100; + final int widthOffset = 20; + final int heightOffset = 150; + final int poleDistance = 3; + + int[] set = new int[setLength]; + int[] work = new int[setLength]; + + public enum Modes { + MERGE_MODE, + BUBBLE_MODE, + QUICK_MODE, + } + + private Modes mode; + /* + private class BubbleRegisters { + int hold; + boolean changed; + } + + private class MergeRegisters { + int x; + } + + private class QuickRegisters { + int x; + } + */ + public Sorter() { + for (int i = 0; i < setLength; i++) { + set[i] = (int)Math.floor(Math.random() * setRange); + } + mode = Modes.BUBBLE_MODE; + } + + public void setMode(Modes m) { + switch (m) { + case MERGE_MODE: + mode = Modes.MERGE_MODE; + break; + case BUBBLE_MODE: + mode = Modes.BUBBLE_MODE; + break; + case QUICK_MODE: + mode = Modes.QUICK_MODE; + break; + } + } + + private int[] bubbleSort(int[] s) { + boolean changed = false; + do { + for (int i = 0; i < s.length - 1; i++) { + if (s[i] > s[i + 1]) { + int hold = s[i]; // swap entries + s[i] = s[i + 1]; + s[i + 1] = hold; + } + } + } while (changed); + return s; + } + + private int[] topDownMergeSort(int[] s, int n) { + int[] w = new int[s.length]; // work array, hence 'w' + + return s; + } + + private void topDownSplitMerge() { + + } + @Override + public void update() { + switch (mode) { + case MERGE_MODE: + set = topDownMergeSort(set); + break; + case BUBBLE_MODE: + set = bubbleSort(set); + break; + case QUICK_MODE: + break; + } + } + + public void renderSet(int offset, Graphics2D graphics2d) { + for (int i = 0; i < setLength; i++) { + graphics2d.drawLine( + widthOffset + (i*poleDistance) + offset, + heightOffset, + widthOffset + (i*poleDistance) + offset, + heightOffset - set[i] + ); + } + } + + @Override + public void draw(Graphics2D graphics2d) { + switch (mode) { + case MERGE_MODE: + graphics2d.setColor(Color.cyan); + break; + case BUBBLE_MODE: + graphics2d.setColor(Color.magenta); + break; + case QUICK_MODE: + graphics2d.setColor(Color.green); + break; + } + renderSet(0, graphics2d); + switch (mode) { + case MERGE_MODE: + graphics2d.setColor(Color.blue); + break; + case BUBBLE_MODE: + graphics2d.setColor(Color.red); + break; + case QUICK_MODE: + graphics2d.setColor(Color.green); + break; + } + graphics2d.setColor(Color.black); + renderSet(2, graphics2d); + } + +}diff --git a/src/eyecandy/StackableBackground.java b/src/eyecandy/StackableBackground.java new file mode 100644 index 0000000..0dc83cc 100644 --- /dev/null +++ a/src/eyecandy/StackableBackground.java @@ -1,0 +1,51 @@ +package eyecandy; + +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; + +public class StackableBackground implements Drawable { + + final int width = 640; + final int height = 400; + + int iteration = 0; // java doesn't handle unsigned ints; this is effectively our "absolute timer" we treat as unsigned. + + boolean procedural = false; // not really necessary, might take it out. just enables/disables rendering. + + BufferedImage canvas = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + + public int getColour(int x, int y) { + return 255; + } + + @Override + public void update() { + iteration++; + if (iteration < 0) { + iteration = Math.abs(iteration); // replace with bitwise hack later + } + for (int x=0; x