Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.swing.*;
- import java.util.ArrayList;
- import java.awt.*;
- import java.awt.image.BufferStrategy;
- import static java.lang.Math.*;
- import java.awt.event.*;
- import java.awt.image.BufferedImage;
- class Spacetime {
- public static void main(String[] args) {
- new MainClass();
- }
- }
- class MainClass {
- public MainClass() {
- createFrameAndCanvases();
- generateEvents();
- mainLoop();
- }
- public void mainLoop(){
- render();
- jFrame.paintComponents(g2DjFrame);
- jFrame.repaint();
- do{
- updateState();
- render();
- try{Thread.sleep(20);} catch (Exception e){};
- } while(true);
- }
- public void updateState(){
- if(!lock) {
- if (v_rel<1) {
- v_rel+=0.001;
- }
- }
- }
- public void render(){
- g2Dcanvas1 = (Graphics2D) strategyCanvas1.getDrawGraphics();
- g2Dcanvas2 = (Graphics2D) strategyCanvas2.getDrawGraphics();
- g2DjFrame = (Graphics2D) strategyJFrame.getDrawGraphics();
- g2Dcanvas1.setStroke(new BasicStroke(3));
- g2Dcanvas2.setStroke(new BasicStroke(3));
- g2Dcanvas1.setColor(backgroundColor);
- g2Dcanvas2.setColor(backgroundColor);
- g2DjFrame.setColor(backgroundColor);
- g2Dcanvas1.fillRect(0,0,501,501);
- g2Dcanvas2.fillRect(0,0,501,501);
- g2DjFrame.fillRect(0,0,1280,720);
- plotDiagrams();
- plotLightbeams();
- plotEvents(v_rel);
- if (showPaths) {
- g2Dcanvas2.drawImage(bufferedImage,0,0,501,501,null);}
- jFrame.paintComponents(g2DjFrame);
- g2DjFrame.setColor(Color.RED);
- g2DjFrame.setFont(stringFont3);
- g2DjFrame.drawString("Vrel "+(Double.toString(round(v_rel*10000)/10000.0)),600,600);
- strategyCanvas2.show();
- strategyCanvas1.show();
- strategyJFrame.show();
- g2Dcanvas1.dispose();
- g2Dcanvas2.dispose();
- g2DjFrame.dispose();
- }
- public void plotLightbeams() {
- g2Dcanvas1.setColor(Color.YELLOW);
- g2Dcanvas2.setColor(Color.YELLOW);
- g2Dcanvas1.drawLine(0,0,501,501);
- g2Dcanvas1.drawLine(0,501,501,0);
- g2Dcanvas2.drawLine(0,0,501,501);
- g2Dcanvas2.drawLine(0,501,501,0);
- }
- public void plotEvents(double v_rel){
- g2Dcanvas1.setFont(stringFont);
- g2Dcanvas2.setFont(stringFont);
- double x,t,x_p,t_p;
- vrel = v_rel;
- gamma = 1/(sqrt(1-pow(vrel,2))); // c^2 = 1 when vrel is multiple of c
- for (int i=0; i<eventsArraylist.size();i++){
- x=eventsArraylist.get(i).xPosInLightSeconds;
- t=eventsArraylist.get(i).timeInSeconds;
- g2Dcanvas1.setColor(Color.RED);
- if (x==8 && t==4) { g2Dcanvas1.setColor(Color.GREEN);}
- if (x==4 || x==-4) { g2Dcanvas1.setColor(Color.GREEN);}
- if (x==0 ) { g2Dcanvas1.setColor(Color.BLUE);}
- g2Dcanvas1.drawString(Integer.toString((int)t),(int)(x*25+251-4),(int)(251+4-t*25));
- x_p = gamma*(x - vrel * t); // c^2 = 1 when vrel is multiple of c so no need for /c^2 in the formula
- t_p = gamma*(t - (vrel*x));
- g2Dcanvas2.setColor(Color.RED); g2Dimg.setColor(Color.RED);
- if (x==8 && t==4) { g2Dcanvas2.setColor(Color.GREEN); g2Dimg.setColor(Color.GREEN);}
- if (x==4 || x==-4) { g2Dcanvas2.setColor(Color.GREEN); g2Dimg.setColor(Color.GREEN);}
- if (x==0 ) { g2Dcanvas2.setColor(Color.BLUE); g2Dimg.setColor(Color.BLUE);}
- g2Dcanvas2.drawString(Integer.toString((int)t),(int)(x_p*25+251-4),(int)(251+4-t_p*25));
- g2Dimg.drawLine((int)(x_p*25+251),(int)(251-t_p*25),(int)(x_p*25+251),(int)(251-t_p*25));
- }
- }
- public void createFrameAndCanvases(){
- jFrame = new JFrame();
- jFrame.setLayout(null);
- jFrame.setSize(1280,720);
- jFrame.setResizable(false);
- jFrame.setIgnoreRepaint(true);
- button1 = new JButton("start/stop");
- button1.setBounds(100,530,130,130);
- button1.addActionListener(actionListener);
- button1.setActionCommand("start/stop");
- jFrame.add(button1);
- button2 = new JButton("reset");
- button2.setBounds(300,530,130,130);
- button2.addActionListener(actionListener);
- button2.setActionCommand("reset");
- button2.setVisible(true);
- jFrame.add(button2);
- canvas1 = new Canvas();
- canvas1.setSize(501,501);
- canvas1.setLocation(75,0);
- canvas1.setIgnoreRepaint(true);
- canvas1.setBackground(new Color(222,222,222));
- jFrame.add(canvas1);
- canvas2 = new Canvas();
- canvas2.setSize(501,501);
- canvas2.setLocation(1280-501-75,0);
- canvas2.setIgnoreRepaint(true);
- canvas2.setBackground(new Color(222,222,222));
- jFrame.add(canvas2);
- checkBox = new JCheckBox("show/hide paths",false);
- checkBox.addActionListener(actionListener);
- checkBox.setActionCommand("show/hide paths");
- checkBox.setBounds(500,600,200,20);
- jFrame.add(checkBox);
- jFrame.setVisible(true);
- jFrame.createBufferStrategy(2);
- canvas1.createBufferStrategy(2);
- canvas2.createBufferStrategy(2);
- strategyCanvas1 = canvas1.getBufferStrategy();
- strategyCanvas2 = canvas2.getBufferStrategy();
- strategyJFrame = jFrame.getBufferStrategy();
- g2DjFrame = (Graphics2D) strategyJFrame.getDrawGraphics();
- g2Dcanvas1 = (Graphics2D) strategyCanvas1.getDrawGraphics();
- g2Dcanvas2 = (Graphics2D) strategyCanvas2.getDrawGraphics();
- }
- public void plotDiagrams() {
- g2Dcanvas1.setFont(stringFont2);
- g2Dcanvas2.setFont(stringFont2);
- g2Dcanvas1.setColor(Color.BLACK);
- g2Dcanvas2.setColor(Color.BLACK);
- g2Dcanvas1.drawLine(0,250,500,250);
- g2Dcanvas1.drawLine(250,0,250,500);
- g2Dcanvas2.drawLine(0,250,500,250);
- g2Dcanvas2.drawLine(250,0,250,500);
- int x,t;
- for (x=0; x<21;x++){
- if (x!=10) {
- g2Dcanvas1.drawLine(x*(500/20),245, x*(500/20),255);
- g2Dcanvas1.drawString(Integer.toString(x-10),x*(500/20)-5,268);
- g2Dcanvas2.drawLine(x*(500/20),245, x*(500/20),255);
- g2Dcanvas2.drawString(Integer.toString(x-10),x*(500/20)-5,268);
- }
- }
- for (t=0; t<21;t++){
- if (t!=10) {
- g2Dcanvas1.drawLine(245,t*(500/20), 255,t*(500/20));
- g2Dcanvas1.drawString(Integer.toString(10-t),258,t*(500/20)+5);
- g2Dcanvas2.drawLine(245,t*(500/20), 255,t*(500/20));
- g2Dcanvas2.drawString(Integer.toString(10-t),258,t*(500/20)+5);
- }
- }
- }
- public void generateEvents(){
- int x,t;
- for (x=-10; x<11;x++){
- for (t=-10; t<11;t++){
- eventsArraylist.add( new Event(x,t));
- }
- }
- }
- class Event {
- double xPosInLightSeconds;
- double timeInSeconds;
- public Event(int x, int t) {
- xPosInLightSeconds = x;
- timeInSeconds = t;
- }
- }
- JFrame jFrame;
- Canvas canvas1,canvas2;
- boolean lock=true, showPaths=false;
- BufferedImage bufferedImage = new BufferedImage(501, 501,BufferedImage.TYPE_INT_ARGB);
- Color backgroundColor = new Color(211,222,222);
- BufferStrategy strategyCanvas1,strategyCanvas2,strategyJFrame;
- Graphics2D g2Dcanvas1, g2Dcanvas2, g2DjFrame, g2Dimg = bufferedImage.createGraphics();;
- JButton button1,button2;
- JCheckBox checkBox;
- ArrayList<Event> eventsArraylist = new ArrayList<Event>();
- double gamma,vrel,v_rel;
- Font stringFont = new Font( "SansSerif", Font.BOLD, 14 );
- Font stringFont2 = new Font( "SansSerif", Font.PLAIN, 10 );
- Font stringFont3 = new Font( "SansSerif", Font.PLAIN, 20 );
- ActionListener actionListener = new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- String str=e.getActionCommand();
- if (str.equals("show/hide paths")) {
- if (showPaths) {showPaths=false;} else {showPaths=true;};
- }
- if (str.equals("reset")) {
- vrel=0;
- v_rel=0;
- g2Dimg.setBackground(new Color(0,0,0,0));
- g2Dimg.clearRect(0,0,501,501);
- lock = true;
- }
- if (str.equals("start/stop")){
- if (lock){lock=false;} else {lock=true;};
- }
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement