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();
}
}
}
Download

PROJETO PARÁBOLA em movimento(com diretriz e foco)