PROJETO PARÁBOLA em movimento(com diretriz e foco) ENUNCIADO Desenvolva uma parábola com diretriz e foco(verde) em Java. (Resolução abaixo) ANEXO A – Código Principal_Parabola.java /* Programa: Principal_Parabola.java Projeto Parábola Autor: Guilherme Bezerra Fernandes Data: 19/12/2011 */ import java.awt.*; import javax.swing.*; public class Principal_Parabola extends JFrame{ Parabola pl; public Principal_Parabola(){ setLayout(new BorderLayout()); setSize(1250,750); setExtendedState(java.awt.Frame.MAXIMIZED_BOTH); pl = new Parabola(); getContentPane().setBackground(Color.black); add(BorderLayout.CENTER, pl); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocation(140,70); setTitle("Projeto Parábola"); setVisible(true); } public static void main(String[] args){ new Principal_Parabola(); } } ANEXO B – Parabola.java /* Programa: Parabola.java Projeto parábola Autor: Guilherme Bezerra Fernandes Data: 19/12/2011 */ import import import import java.awt.*; java.util.Timer; java.util.TimerTask; javax.swing.*; public class Parabola extends JPanel { float x_parabola,y_parabola,dx_parabola,dy_parabola; float x_parabola1,y_parabola1,dx_parabola1,dy_parabola1; //valores negativos float temp_parabola = 0; //valor temporário float temp_parabola1 = 0; //negativos float i = 0; float i1 = 0; final final final final final float float float float float FOCO = 42f; //Equivale ao FOCO de 1 cm do papel ou 10 mm PRECISAO = 1f; POS_X = 625;//400; POS_Y = 650;//450; MAXIMO = 310; //maximo de pontos em x Timer tempo = new Timer(); int conta_eixo_X = 625; int conta_eixo_X1 = 625; //negativos public Parabola() { dx_parabola = POS_X; //posição x dy_parabola = 0; //eixo negativo x_parabola = 0; x_parabola1 = 0; //eixo negativo y_parabola = POS_Y; y_parabola1 = POS_Y; //eixo negativo dx_parabola1 = POS_X; //x NEGATIVO dy_parabola1 = 0; //posição y //ajusta a velocidade do movimento tempo.schedule(new temp(),0,10); } public void paintComponent(Graphics g) { g.setColor(Color.black); g.drawLine((int)(x_parabola + dx_parabola) , (int)(y_parabola temp_parabola), (int)(x_parabola + dx_parabola), (int)(dy_parabola+ y_parabola temp_parabola)); g.drawLine((int)(x_parabola1 +dx_parabola1) , (int)(y_parabola1 temp_parabola1), (int)(x_parabola1 + dx_parabola1), (int)(dy_parabola1+ y_parabola1 temp_parabola1)); g.setColor(Color.RED); //desenha eixo X g.drawLine((int)0, (int)(POS_Y), (int)POS_X*2+10, (int)(POS_Y)); //desenha eixo Y g.drawLine((int)POS_X, (int)(POS_Y)+100, (int)POS_X, (int)(POS_Y)-600); g.setColor(Color.BLACK); //desenha diretriz g.drawString("DIRETRIZ",(int)POS_X, (int)(POS_Y + FOCO)); g.drawLine((int)0, (int)(POS_Y + FOCO), (int)POS_X*2 + 10, (int)(POS_Y + FOCO)); g.setColor(Color.blue); //Números do eixo X int r = 0, r1 = 0; for(conta_eixo_X = (int) POS_X, conta_eixo_X1 = conta_eixo_X <= 1260 ; conta_eixo_X += 42 ,conta_eixo_X1 -= { g.drawLine((int)conta_eixo_X, (int)(POS_Y (int)(POS_Y + 0)); g.drawLine((int)conta_eixo_X, (int)(POS_Y (int)(POS_Y + 1)); g.drawLine((int)conta_eixo_X, (int)(POS_Y (int)(POS_Y + 2)); (int) POS_X - 42; 42) + 0), (int)conta_eixo_X , + 1), (int)conta_eixo_X , + 2), (int)conta_eixo_X , g.drawLine((int)conta_eixo_X, (int)(POS_Y + 3), (int)conta_eixo_X , (int)(POS_Y + 3)); g.drawLine((int)conta_eixo_X, (int)(POS_Y + 4), (int)conta_eixo_X , (int)(POS_Y + 4)); g.drawLine((int)conta_eixo_X, (int)(POS_Y + 5), (int)conta_eixo_X , (int)(POS_Y + 5)); g.drawString(Integer.toString(r),(int)conta_eixo_X-4 , (int)POS_Y + r++; r1++; g.drawLine((int)conta_eixo_X1, (int)(POS_Y + 0), (int)conta_eixo_X1 (int)(POS_Y + 0)); g.drawLine((int)conta_eixo_X1, (int)(POS_Y + 1), (int)conta_eixo_X1 (int)(POS_Y + 1)); g.drawLine((int)conta_eixo_X1, (int)(POS_Y + 2), (int)conta_eixo_X1 (int)(POS_Y + 2)); 20); , , , g.drawLine((int)conta_eixo_X1, (int)(POS_Y + 3), (int)conta_eixo_X1 , (int)(POS_Y + 3)); g.drawLine((int)conta_eixo_X1, (int)(POS_Y + 4), (int)conta_eixo_X1 , (int)(POS_Y + 4)); g.drawLine((int)conta_eixo_X1, (int)(POS_Y + 5), (int)conta_eixo_X1 , (int)(POS_Y + 5)); g.drawString("-" + Integer.toString(r1),(int)conta_eixo_X1-4 , (int)POS_Y + 20); } r = 0; r1 = 0; //Números do eixo Y for(conta_eixo_X = (int) POS_Y; conta_eixo_X >= 50 ; { g.drawLine((int)(POS_X + 0), (int)conta_eixo_X 0),(int)conta_eixo_X ); g.drawLine((int)(POS_X + 1), (int)conta_eixo_X 1),(int)conta_eixo_X ); g.drawLine((int)(POS_X + 2), (int)conta_eixo_X 2),(int)conta_eixo_X ); g.drawLine((int)(POS_X + 3), (int)conta_eixo_X 3),(int)conta_eixo_X ); g.drawLine((int)(POS_X + 4), (int)conta_eixo_X 4),(int)conta_eixo_X ); g.drawLine((int)(POS_X + 5), (int)conta_eixo_X 5),(int)conta_eixo_X ); conta_eixo_X -= 42) , (int)(POS_X + , (int)(POS_X + , (int)(POS_X + , (int)(POS_X + , (int)(POS_X + , (int)(POS_X + g.drawString(Integer.toString(r),(int)POS_X + 6, (int)conta_eixo_X +4 ); r++; } //desenha foco g.setColor(Color.GREEN); g.drawLine((int)POS_X-2, (int)POS_Y, (int)POS_X-2, (int)(POS_Y - FOCO)); g.drawLine((int)POS_X-1, (int)POS_Y, (int)POS_X-1, (int)(POS_Y - FOCO)); g.drawLine((int)POS_X, (int)POS_Y, (int)POS_X, (int)(POS_Y - FOCO)); g.drawLine((int)POS_X+1, (int)POS_Y, (int)POS_X+1, (int)(POS_Y - FOCO)); g.drawLine((int)POS_X+2, (int)POS_Y, (int)POS_X+2, (int)(POS_Y - FOCO)); } private class temp extends TimerTask{ public void run() { if (x_parabola >= MAXIMO) tempo.cancel(); temp_parabola = (x_parabola * x_parabola)/(FOCO*4f); x_parabola = x_parabola + PRECISAO; temp_parabola1 = (x_parabola1 * x_parabola1)/(FOCO*4f); x_parabola1 = x_parabola1 - PRECISAO; repaint(); } } }