package org.openpixi.pixi.ui.panel; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import org.openpixi.pixi.physics.Simulation; import org.openpixi.pixi.physics.particles.Particle; import org.openpixi.pixi.ui.SimulationAnimation; /** * This panel shows the one-dimensional phase space (x vs. vx). */ public class PhaseSpacePanel extends AnimationPanel { /** Constructor */ public PhaseSpacePanel(SimulationAnimation simulationAnimation) { super(simulationAnimation); } /** Display the particles */ public void paintComponent(Graphics graph1) { Graphics2D graph = (Graphics2D) graph1; setBackground(Color.white); graph.translate(0, this.getHeight()); graph.scale(1, -1); super.paintComponent(graph1); // scale factor for velocity double scaleV = .5; Simulation s = getSimulationAnimation().getSimulation(); /** Scaling factor for the displayed panel in x-direction*/ double sx = getWidth() / s.getWidth(); /** Scaling factor for the displayed panel in y-direction*/ double sy = getHeight() / s.getHeight(); double panelHeight = getHeight(); for (int i = 0; i < s.particles.size(); i++) { Particle par = (Particle) s.particles.get(i); graph.setColor(par.getColor()); double radius = par.getRadius(); int width = (int) (2*sx*radius); int height = (int) (2*sy*radius); double position = (0.5 + scaleV * par.getVx() ) * panelHeight; if(width > 2 && height > 2) { graph.fillOval((int) (par.getX()*sx) - width/2, (int) position - height/2, width, height); } else { graph.drawRect((int) (par.getX()*sx), (int) position, 0, 0); } } } }