LANZAMIENTO
El lanzamiento va a ser efectuado implementando una abstracción del lanzamiento parabólico por medio de un código fuente que por medio de la velocidad y el angulo, dos parámetros que seleccionara el usuario al momento de lanzar!
Código Fuente:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Proyectil extends JApplet implements Runnable { private PanelDibujo panelDibujo; private PanelBotones panelBotones; private double z; //posición y private double z0; //posición y inicial private double vz0; //velocidad y inicial; private double x;// posición x; private double x0; //posicion x inicial; private double vx0; //velocidad x inicial ; private double velocidadInicial; private double tiempo; private boolean puedoDisparar = true; private int angulo; @Override public void init() { setSize(400, 450); panelDibujo = new PanelDibujo(); panelBotones = new PanelBotones(); setLayout(new BorderLayout()); add(BorderLayout.CENTER, panelDibujo); add(BorderLayout.SOUTH, panelBotones); iniciarVariables(); } public void iniciarVariables() { z = 290; z0 = 0; //se aplica la fórmula v0=v0.senθ vz0 = velocidadInicial * Math.sin(Math.toRadians(angulo)); //se aplica la fórmula v0=v0.cosθ vx0 = velocidadInicial * Math.cos(Math.toRadians(angulo)); x = 10; x0 = 0; tiempo = 0; } public void disparar() { if (puedoDisparar) { new Thread(this).start(); } } public void update() { //actualizar el tiempo y la nueva posicion. double incrementoTiempo = 0.05; tiempo += incrementoTiempo; //se aplica la fórmula x= v0.cosθ.t x = vx0 *Math.cos(Math.toRadians(angulo))* tiempo; //posicionamos el proyectil respecto a sus coordenadas iniciales. x = x + 10; double g = -9.81; //se aplica la fórmula y(t)=v0 . sen θ . t - .5 g t2. z = vz0 * Math.sin(Math.toRadians(angulo)) * tiempo + 0.5 * g * tiempo * tiempo; //posicionamos el proyectil respecto a sus coordenadas iniciales. z = 290 - z; } public void run() { puedoDisparar = false; //El bucle se ejecuta hasta que el projectil sobrepasa el suelo. while (z < 300) { try { update(); Thread.sleep(20); panelDibujo.repaint(); } catch (InterruptedException ex) { ex.printStackTrace(); } } //Reinicia las varibles y activa el disparo iniciarVariables(); panelDibujo.repaint(); puedoDisparar = true; } class PanelDibujo extends JPanel { public PanelDibujo() { setSize(400, 400); setDoubleBuffered(true); } @Override public void paint(Graphics g) { g.setColor(Color.DARK_GRAY); g.fillRect(0, 0, 400, 400); g.setColor(Color.ORANGE); g.drawLine(0, 300, 400, 300); g.fillOval((int) x, (int) z, 10, 10); } } class PanelBotones extends JPanel implements ActionListener { JButton boton; JTextField textFieldVelocidad; JTextField textFieldAngulo; JLabel labelVelocidad; JLabel labelAngulo; public PanelBotones() { setSize(400, 50); boton = new JButton("disparar"); labelAngulo = new JLabel("ángulo"); textFieldVelocidad = new JTextField("50 "); textFieldVelocidad.setColumns(3); textFieldAngulo = new JTextField("45"); labelVelocidad = new JLabel("Velocidad "); add(boton); add(labelAngulo); add(textFieldAngulo); add(labelVelocidad); add(textFieldVelocidad); boton.addActionListener(this); } public void actionPerformed(ActionEvent e) { velocidadInicial = Double.valueOf(textFieldVelocidad.getText()); angulo = Integer.valueOf(textFieldAngulo.getText()); iniciarVariables(); disparar(); } } }(Tomado de: http://nekan.serveblog.net/content/movimiento-parabolico-de-un-proyectil)
No hay comentarios:
Publicar un comentario