From b532724d8ce6fac2b004919c6defd8d83a62c80f Mon Sep 17 00:00:00 2001 From: Justin Dretvic Date: Sun, 14 Jun 2020 14:42:24 +0200 Subject: [PATCH] First Commit Uploaded the first Project for this Seminar --- .classpath | 10 ++ .project | 17 ++ Geodaten_Erdkugel.png | Bin 0 -> 19382 bytes bin/.gitignore | 2 + src/app/_0_Constants.java | 42 +++++ src/app/_0_Matrices.java | 47 +++++ src/app/_1_GeoAnimation_CreateAnimation.java | 46 +++++ .../_1_GeoAnimation_DrawingOperations.java | 162 ++++++++++++++++++ src/app/_2_Methods.java | 152 ++++++++++++++++ src/utils/ApplicationTime.java | 40 +++++ src/utils/FrameUpdate.java | 19 ++ 11 files changed, 537 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 Geodaten_Erdkugel.png create mode 100644 bin/.gitignore create mode 100644 src/app/_0_Constants.java create mode 100644 src/app/_0_Matrices.java create mode 100644 src/app/_1_GeoAnimation_CreateAnimation.java create mode 100644 src/app/_1_GeoAnimation_DrawingOperations.java create mode 100644 src/app/_2_Methods.java create mode 100644 src/utils/ApplicationTime.java create mode 100644 src/utils/FrameUpdate.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..f00af9b --- /dev/null +++ b/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..2a706a0 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Mathe-Simulation-Gruppe4 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Geodaten_Erdkugel.png b/Geodaten_Erdkugel.png new file mode 100644 index 0000000000000000000000000000000000000000..4867e9380a332261c69b1f57f5aaba3f9cda1e14 GIT binary patch literal 19382 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 TD!V~|wZ&t7*#S{&;hXqB^~rJT literal 0 HcmV?d00001 diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..33628ba --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,2 @@ +/app/ +/utils/ diff --git a/src/app/_0_Constants.java b/src/app/_0_Constants.java new file mode 100644 index 0000000..d993678 --- /dev/null +++ b/src/app/_0_Constants.java @@ -0,0 +1,42 @@ +package app; + +public class _0_Constants { + public static int WINDOW_WIDTH = 800; + public static int WINDOW_HEIGHT = 600; + + public static int FPS = 200; + public static int TPF = 1000 / FPS; + + public static double TIMESCALE = 1; + + // Eigene Konstanten + + // Startpunkte + public static double START_X = WINDOW_WIDTH / 2; + public static double START_Y= WINDOW_HEIGHT / 2; + + // Skalierungsfaktor und Drehung der X-Achse + public static double S1 = (1 / Math.sqrt(2) / 3); + public static double ALPHA = Math.toRadians(135); + + // Radius + public static int DIAMETER = 400; + public static int RADIUS = DIAMETER / 2; + public static int DIAMETER_KUGEL = 10; + public static int RADIUS_KUGEL = DIAMETER_KUGEL / 2; + + // Axes + public static double[][] NULLVECTOR_X = new double[][] { {RADIUS}, {0}, {0}, {1} }; + public static double[][] NULLVECTOR_Y = new double[][] { {0}, {RADIUS}, {0}, {1} }; + public static double[][] NULLVECTOR_Z = new double[][] { {0}, {0}, {RADIUS}, {1} }; + public static double[][] ZENTRUM = new double[][] { {0}, {0}, {0}, {1} }; + + // Axes Optional + public static double[][] NULLVECTOR_MINUS_X = new double[][] { {-RADIUS}, {0}, {0}, {1} }; + public static double[][] NULLVECTOR_MINUS_Y = new double[][] { {0}, {-RADIUS}, {0}, {1} }; + public static double[][] NULLVECTOR_MINUS_Z = new double[][] { {0}, {0}, {-RADIUS}, {1} }; + + // Simulation + public static double VELOCITY = 10; + +} diff --git a/src/app/_0_Matrices.java b/src/app/_0_Matrices.java new file mode 100644 index 0000000..804d6f7 --- /dev/null +++ b/src/app/_0_Matrices.java @@ -0,0 +1,47 @@ +package app; + +public class _0_Matrices { + + public static double[][] M_JavaNormalized = new double[][] { + { -(_0_Constants.S1) * Math.sin(_0_Constants.ALPHA), 1, 0, _0_Constants.START_X}, + { -(_0_Constants.S1) * Math.cos(_0_Constants.ALPHA), 0, -1, _0_Constants.START_Y}, + }; + + + public static double[][] M_JavaNormalized_Umriss = new double[][] { + { -(_0_Constants.S1) * Math.sin(_0_Constants.ALPHA), 1, 0}, + { (_0_Constants.S1) * Math.cos(_0_Constants.ALPHA), 0, -1}, + }; + + public static double[][] DrehungX(double winkel) { + return new double[][] { + { 1, 0, 0}, + { 0, Math.cos(winkel), -Math.sin(winkel) }, + { 0, Math.sin(winkel), Math.cos(winkel) } }; + } + public static double[][] DrehungY(double theta) { + return new double[][] { + { Math.cos(theta), 0, -Math.sin(theta) }, + { 0, 1, 0 }, + { Math.sin(theta), 0, Math.cos(theta) } + }; + } + public static double[][] DrehungZ(double phi) { + return new double[][] { + { Math.cos(phi), -Math.sin(phi), 0 }, + { Math.sin(phi), Math.cos(phi), 0 }, + { 0, 0, 1 } + }; + } + + public static double[][] START = new double[][] { + {_0_Constants.RADIUS * Math.cos( Math.toRadians(45) ) * Math.cos( Math.toRadians(230) )}, + {_0_Constants.RADIUS * Math.cos( Math.toRadians(45) ) * Math.sin( Math.toRadians(230) )}, + {_0_Constants.RADIUS * Math.sin( Math.toRadians(45) ) } + }; + public static double[][] END = new double[][] { + {_0_Constants.RADIUS * Math.cos( Math.toRadians(-35) ) * Math.cos( Math.toRadians(30) )}, + {_0_Constants.RADIUS * Math.cos( Math.toRadians(-35) ) * Math.sin( Math.toRadians(30) )}, + {_0_Constants.RADIUS * Math.sin( Math.toRadians(-35) ) } + }; +} diff --git a/src/app/_1_GeoAnimation_CreateAnimation.java b/src/app/_1_GeoAnimation_CreateAnimation.java new file mode 100644 index 0000000..4d14075 --- /dev/null +++ b/src/app/_1_GeoAnimation_CreateAnimation.java @@ -0,0 +1,46 @@ +package app; + +import java.util.Timer; + +//import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; + +import utils.ApplicationTime; +import utils.FrameUpdate; + +public class _1_GeoAnimation_CreateAnimation { + + private static JFrame frame; + + public static void main(String[] args) { + + //open new thread for time measurement + ApplicationTime animThread = new ApplicationTime(); + animThread.start(); + + CreateFrame(animThread); + + Timer timer = new Timer(); + timer.scheduleAtFixedRate(new FrameUpdate(frame), 100, _0_Constants.TPF); + } + + //create a JFrame as my container for the simulation content + private static void CreateFrame(ApplicationTime thread) { + + //Create a new frame + frame = new JFrame("Mathematik und Simulation"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + //Add a JPanel as the new drawing surface + JPanel panel = new _1_GeoAnimation_DrawingOperations(thread); + frame.add(panel); + frame.pack(); //adjusts size of the JFrame to fit the size of it's components + frame.setVisible(true); + + // TODO Add other stuff +// JButton button = new JButton("Click here!"); +// frame.add(button); + } + +} diff --git a/src/app/_1_GeoAnimation_DrawingOperations.java b/src/app/_1_GeoAnimation_DrawingOperations.java new file mode 100644 index 0000000..b9cb7ca --- /dev/null +++ b/src/app/_1_GeoAnimation_DrawingOperations.java @@ -0,0 +1,162 @@ +package app; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.util.ArrayList; +import java.util.Arrays; + +import javax.swing.JPanel; +//import javax.swing.colorchooser.*; + +import com.sun.org.apache.xalan.internal.templates.Constants; + +import utils.ApplicationTime; + +import java.util.Collections; + +@SuppressWarnings({ "serial", "unused" }) +public class _1_GeoAnimation_DrawingOperations extends JPanel{ + // panel has a single time tracking thread associated with it + private ApplicationTime t; + private double time; + + public _1_GeoAnimation_DrawingOperations(ApplicationTime thread) { + this.t = thread; + } + + // set this panel's preferred size for auto-sizing the container JFrame + public Dimension getPreferredSize() { + return new Dimension(_0_Constants.WINDOW_WIDTH, _0_Constants.WINDOW_HEIGHT); + } + + // Objekt-Attribute + _2_Methods Meth = new _2_Methods(); +// double[][] drehMatrix = Meth.drehBewegung(); + ArrayList WegX = new ArrayList(); + ArrayList WegY = new ArrayList(); + double distance = Meth.startToEnd(); + double differencePhi = Meth.getPhi(_0_Matrices.END) - Meth.getPhi(_0_Matrices.START); + double differenceTheta = Meth.getTheta(_0_Matrices.END) - Meth.getTheta(_0_Matrices.START); + + // DRAWING OPERATIONS IN HERE + @Override protected void paintComponent(Graphics g) { + + super.paintComponent(g); + time = t.GetTimeInSeconds(); + + Graphics2D g2d; + g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + + // Drawing Background + g2d.setColor(Color.BLACK); + g2d.fillRect(0, 0, _0_Constants.WINDOW_WIDTH, _0_Constants.WINDOW_HEIGHT); + + // Random Text + g2d.setColor(Color.WHITE); + g2d.setFont(new Font("Arial", Font.BOLD, 15)); + g2d.drawString("FÜRCHTET DIESEN TEXT MUAHAHAHAHA", 10, 30); + for(int breitengrad = -90; breitengrad <= 90; breitengrad += 30) { + double[][] text = new double[][] { + {(_0_Constants.RADIUS + 40) * Math.cos( Math.toRadians(breitengrad) ) * Math.cos( Math.toRadians(270) ) }, + {(_0_Constants.RADIUS + 40) * Math.cos( Math.toRadians(breitengrad) ) * Math.sin( Math.toRadians(270) ) }, + {(_0_Constants.RADIUS + 40) * Math.sin( Math.toRadians(breitengrad) ) }, + {1} + }; + g2d.drawString(String.valueOf(breitengrad)+"°", Meth.getCoords(text, "x")-15, Meth.getCoords(text, "y")); + } + + // Drawing Coordinate-System + g2d.setColor(Color.RED); + g2d.drawLine(Meth.getCoords(_0_Constants.ZENTRUM, "x"), Meth.getCoords(_0_Constants.ZENTRUM, "y"), Meth.getCoords(_0_Constants.NULLVECTOR_X, "x"), Meth.getCoords(_0_Constants.NULLVECTOR_X, "y") ); + g2d.drawLine(Meth.getCoords(_0_Constants.ZENTRUM, "x"), Meth.getCoords(_0_Constants.ZENTRUM, "y"), Meth.getCoords(_0_Constants.NULLVECTOR_MINUS_X, "x"), Meth.getCoords(_0_Constants.NULLVECTOR_MINUS_X, "y") ); + g2d.setColor(Color.GREEN); + g2d.drawLine(Meth.getCoords(_0_Constants.ZENTRUM, "x"), Meth.getCoords(_0_Constants.ZENTRUM, "y"), Meth.getCoords(_0_Constants.NULLVECTOR_Y, "x"), Meth.getCoords(_0_Constants.NULLVECTOR_Y, "y") ); + g2d.drawLine(Meth.getCoords(_0_Constants.ZENTRUM, "x"), Meth.getCoords(_0_Constants.ZENTRUM, "y"), Meth.getCoords(_0_Constants.NULLVECTOR_MINUS_Y, "x"), Meth.getCoords(_0_Constants.NULLVECTOR_MINUS_Y, "y") ); + g2d.setColor(Color.BLUE); + g2d.drawLine(Meth.getCoords(_0_Constants.ZENTRUM, "x"), Meth.getCoords(_0_Constants.ZENTRUM, "y"), Meth.getCoords(_0_Constants.NULLVECTOR_Z, "x"), Meth.getCoords(_0_Constants.NULLVECTOR_Z, "y") ); + g2d.drawLine(Meth.getCoords(_0_Constants.ZENTRUM, "x"), Meth.getCoords(_0_Constants.ZENTRUM, "y"), Meth.getCoords(_0_Constants.NULLVECTOR_MINUS_Z, "x"), Meth.getCoords(_0_Constants.NULLVECTOR_MINUS_Z, "y") ); + + // Drawing The Globus + double[][] erdkreis = new double[4][1]; + erdkreis[3][0] = 1; + for(int winkelEins = 0; winkelEins < 360 ; winkelEins += 15) { + for(double winkelZwei = 0; winkelZwei < 360 ; winkelZwei +=0.25) { + // Längengrad + erdkreis[0][0] = _0_Constants.RADIUS * Math.cos( Math.toRadians(winkelZwei) ) * Math.cos( Math.toRadians(winkelEins) ); + erdkreis[1][0] = _0_Constants.RADIUS * Math.cos( Math.toRadians(winkelZwei) ) * Math.sin( Math.toRadians(winkelEins) ); + erdkreis[2][0] = _0_Constants.RADIUS * Math.sin( Math.toRadians(winkelZwei) ); + if( Meth.istHinten(erdkreis) ) + g2d.setColor(Color.DARK_GRAY); + else + g2d.setColor(Color.WHITE); + g2d.drawLine(Meth.getCoords(erdkreis, "x"), Meth.getCoords(erdkreis, "y"), Meth.getCoords(erdkreis, "x"), Meth.getCoords(erdkreis, "y")); + // Breitengrad + erdkreis[0][0] = _0_Constants.RADIUS * Math.cos( Math.toRadians(winkelEins) ) * Math.cos( Math.toRadians(winkelZwei) ); + erdkreis[1][0] = _0_Constants.RADIUS * Math.cos( Math.toRadians(winkelEins) ) * Math.sin( Math.toRadians(winkelZwei) ); + erdkreis[2][0] = _0_Constants.RADIUS * Math.sin( Math.toRadians(winkelEins) ) ; + if( Meth.istHinten(erdkreis) ) + g2d.setColor(Color.DARK_GRAY); + else + g2d.setColor(Color.WHITE); + + g2d.drawLine(Meth.getCoords(erdkreis, "x"), Meth.getCoords(erdkreis, "y"), Meth.getCoords(erdkreis, "x"), Meth.getCoords(erdkreis, "y")); + } + } + + // Zeichnen der Umrissellipse + g.setColor(Color.MAGENTA); + for(double parameter = 0; parameter < 360 ; parameter+=0.25) { +// double winkelTheta = Math.toRadians(180); +// double winkelPhi = Math.toRadians(-220); + double winkelTheta = Math.toRadians(90); + double winkelPhi = Math.toRadians(0); + double[][] kreis = Meth.umrissellipse(winkelPhi,winkelTheta,Math.toRadians(parameter)); + g2d.drawLine((int)(kreis[0][0]*_0_Constants.RADIUS+_0_Constants.START_X), (int)(kreis[1][0]*_0_Constants.RADIUS+_0_Constants.START_Y), (int)(kreis[0][0]*_0_Constants.RADIUS+_0_Constants.START_X), (int)(kreis[1][0]*_0_Constants.RADIUS+_0_Constants.START_Y)); + } + + // Start- & Endpunkt Zeichnen + g2d.setColor(Color.YELLOW); + g2d.setFont(new Font("Arial", Font.BOLD, 20)); + g2d.fillOval(Meth.getCoords(Meth.normVector(_0_Matrices.START), "x")-(_0_Constants.RADIUS_KUGEL), Meth.getCoords(Meth.normVector(_0_Matrices.START), "y")-(_0_Constants.RADIUS_KUGEL), _0_Constants.DIAMETER_KUGEL, _0_Constants.DIAMETER_KUGEL); + g2d.drawString("START", Meth.getCoords(Meth.normVector(_0_Matrices.START), "x"),Meth.getCoords(Meth.normVector(_0_Matrices.START), "y")-15); + g2d.fillOval(Meth.getCoords(Meth.normVector(_0_Matrices.END), "x")-(_0_Constants.RADIUS_KUGEL), Meth.getCoords(Meth.normVector(_0_Matrices.END), "y")-(_0_Constants.RADIUS_KUGEL), _0_Constants.DIAMETER_KUGEL, _0_Constants.DIAMETER_KUGEL); + g2d.drawString("END", Meth.getCoords(Meth.normVector(_0_Matrices.END), "x"),Meth.getCoords(Meth.normVector(_0_Matrices.END), "y")-15); + + // TODO Wenn sich zwei Punkte gegenüberstehen, was dann? + // TODO Stopper verbessern + // Wegpunkt & Streckenverlauf Zeichnen + g2d.setColor(Color.CYAN); + double[][] bewegung = Meth.drehBewegung(Math.toRadians(time)); + + WegX.add(Meth.getCoords(Meth.normVector(bewegung), "x")); + WegY.add(Meth.getCoords(Meth.normVector(bewegung), "y")); + for(int i = 0; i < WegX.size(); i++) + g2d.drawLine(WegX.get(i), WegY.get(i), WegX.get(i), WegY.get(i)); + + g2d.setColor(Color.CYAN); + double differencePhi = Meth.getPhi(_0_Matrices.END) - Meth.getPhi(bewegung); + if (differencePhi < 0) + differencePhi *= (-1); + System.out.println("Phi: " + differencePhi); + double differenceTheta = Meth.getTheta(_0_Matrices.END) - Meth.getTheta(bewegung); + if (differenceTheta < 0) + differenceTheta *= (-1); + System.out.println("Theta: " + differenceTheta); + if(differencePhi >= 0.5 && differenceTheta >= 0.5) + g2d.setColor(Color.RED); + else + g2d.setColor(Color.CYAN); + g2d.fillOval(Meth.getCoords(Meth.normVector(bewegung), "x")-(_0_Constants.RADIUS_KUGEL), Meth.getCoords(Meth.normVector(bewegung), "y")-(_0_Constants.RADIUS_KUGEL), _0_Constants.DIAMETER_KUGEL, _0_Constants.DIAMETER_KUGEL); + + // TODO Reihenfolge von Globus und Bewegung fixen + // TODO Reale Orte an wählbare Koordinaten knüpfen + + + } + +} \ No newline at end of file diff --git a/src/app/_2_Methods.java b/src/app/_2_Methods.java new file mode 100644 index 0000000..019e8dd --- /dev/null +++ b/src/app/_2_Methods.java @@ -0,0 +1,152 @@ +package app; + +public class _2_Methods { + + // Gibt X oder Y Koordinate aus einem normierten Vektor zurück, abhängig vom String Parameter + protected int getCoords(double[][] _vector, String _axe) { + double[][] coordinate = matrixMultiplikation(_0_Matrices.M_JavaNormalized, _vector); + if( _axe.contentEquals("x")) + return (int)coordinate[0][0]; + else if( _axe.contentEquals("y")) + return (int)coordinate[1][0]; + else + return -1000; + } + + // Führt eine Matrixmultiplikation zweier 2D-Arrays aus + protected double[][] matrixMultiplikation(double[][] matrix_eins, double[][] matrix_zwei) { + double[][] ergebnismatrix = new double[matrix_eins.length][matrix_zwei[0].length]; + if(matrix_eins[0].length == matrix_zwei.length) + for(int z=0; z