放物運動
/*
A basic extension of the java.applet.Applet class
*/
import java.awt.*;
import java.applet.*;
import java.lang.Math;
public class Applet1 extends Applet implements Runnable
{
double x,y,x1,y1;
double ang=45;
double v0=50;
double gr=9.8;
double rad=Math.PI/180;
Thread th;
boolean thFlag=true;
boolean thFlag1=true;
boolean imgFlag=false;
Graphics g;
Image imgs;
public void init()
{
// Take out this line if you
don't use symantec.itools.net.RelativeURL or
symantec.itools.awt.util.StatusScroller
symantec.itools.lang.Context.setApplet(this);
// This code is automatically
generated by Visual Cafe when you add
// components to the visual
environment. It instantiates and initializes
// the components. To modify
the code, only use code syntax that matches
// what Visual Cafe can
generate, or Visual Cafe may be unable to back
// parse your Java file into
its visual environment.
//{{INIT_CONTROLS
setLayout(null);
setSize(769,452);
textField1.setText("80");
add(textField1);
textField1.setBounds(96,216,36,24);
textField2.setText("45");
add(textField2);
textField2.setBounds(96,252,36,24);
label1.setText("初速度");
add(label1);
label1.setBounds(36,216,48,24);
label2.setText("仰角");
add(label2);
label2.setBounds(36,252,48,24);
label3.setText("m/s");
add(label3);
label3.setBounds(144,216,38,20);
label4.setText("度");
add(label4);
label4.setBounds(144,252,27,18);
label5.setText("0");
add(label5);
label5.setForeground(java.awt.Color.blue);
label5.setBounds(300,216,48,27);
label6.setText("X 座標");
add(label6);
label6.setBounds(228,216,57,32);
label7.setText("Y 座標");
add(label7);
label7.setBounds(228,252,63,25);
label8.setText("0");
add(label8);
label8.setForeground(java.awt.Color.blue);
label8.setBounds(300,252,48,24);
button1.setLabel("Restart");
add(button1);
button1.setBackground(java.awt.Color.lightGray);
button1.setBounds(36,312,74,24);
label9.setText("時間");
add(label9);
label9.setBounds(228,288,52,26);
label10.setText("0");
add(label10);
label10.setForeground(java.awt.Color.blue);
label10.setBounds(300,288,108,28);
imgs=getImage(getDocumentBase(),"formula.gif");
//}}
//{{REGISTER_LISTENERS
SymMouse aSymMouse = new
SymMouse();
this.addMouseListener(aSymMouse);
SymAction lSymAction = new
SymAction();
textField1.addActionListener(lSymAction);
SymText lSymText = new
SymText();
textField1.addTextListener(lSymText);
textField2.addTextListener(lSymText);
button1.addActionListener(lSymAction);
//}}
}
public void start()
{
if (th == null) {
th = new Thread(this);
th.start();
}
}
public void run()
{
while (true)
{
repaint();
try
{
th.sleep(20);
}
catch (InterruptedException e) {}
x=x+8;
}
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g) {
g.drawString("放物体の運動", 20, 30);
g.drawString("黄色の目標物の座標は
(1344,13)", 20, 50);
g.drawString(" t = 13.244101
秒後に目標に到達します。",20,70);
g.drawString("初速度と仰角を計算で求めて目標に当ててください。",20,90);
g.drawString("当たると OK!
が表示されます",20,110);
if(imgFlag)
{
g.setColor(Color.red);
g.drawString("Hint !!",500,290);
g.drawImage(imgs,500,300,this);
imgFlag=false;
}
g.setColor(Color.orange);
g.fillRect(720,201-10,10,10);
g.setColor(Color.blue);
g.drawLine(0,201, 1200, 201);
String
st1=textField1.getText();
v0=Integer.parseInt(st1);
String
st2=textField2.getText();
ang=Integer.parseInt(st2);
y=Math.tan(ang*rad)*x-4.9*x*x/((v0*v0*Math.cos(ang*rad)*Math.cos(ang*rad)));//放物線の方程式 教科書参照
x1=x/2;
y1=-y/2;
int x2=(int)x1;
int y2=(int)y1;
double t=x/(121*Math.cos(33*rad));
label5.setText(""+(int)x);
label8.setText(""+(int)y);
label10.setText(""+t);
if((int)x==1344 && (int)y==13)
{
g.setColor(Color.red);
g.drawString("OK!!",720,180);
try
{
th.sleep(3000);
}
catch (InterruptedException e) {}
}
if(x>1200 && y>0)
{
if(x<1400 && y<30)
{
imgFlag=true;
}
}
g.setColor(Color.blue);
g.drawOval(x2+50,y2+200,1,1);
if (x>=1500)
{
try
{
th.sleep(3000);
}
catch (InterruptedException e) {}
Color
col=getBackground();
g.setColor(col);
g.fillRect(0,0,769,452);
x=0;
y=0;
}
if (y>=1500 || y<=-1500)
{
try
{
th.sleep(3000);
}
catch (InterruptedException e) {}
Color col=getBackground();
g.setColor(col);
g.fillRect(0,0,769,452);
y=0;
x=0;
}
}
public void stop() {
if (th != null) {
th.stop();
th = null;
}
}
//{{DECLARE_CONTROLS
java.awt.TextField textField1 = new
java.awt.TextField();
java.awt.TextField textField2 = new
java.awt.TextField();
java.awt.Label label1 = new java.awt.Label();
java.awt.Label label2 = new java.awt.Label();
java.awt.Label label3 = new java.awt.Label();
java.awt.Label label4 = new java.awt.Label();
java.awt.Label label5 = new java.awt.Label();
java.awt.Label label6 = new java.awt.Label();
java.awt.Label label7 = new java.awt.Label();
java.awt.Label label8 = new java.awt.Label();
java.awt.Button button1 = new java.awt.Button();
java.awt.Label label9 = new java.awt.Label();
java.awt.Label label10 = new java.awt.Label();
//}}
class SymMouse extends java.awt.event.MouseAdapter
{
public void
mouseClicked(java.awt.event.MouseEvent event)
{
Object object = event.getSource();
if
(object == Applet1.this)
Applet1_MouseClicked(event);
}
}
void Applet1_MouseClicked(java.awt.event.MouseEvent
event)
{
// to do: code goes here.
if (thFlag)
{
th.suspend();
thFlag=false;
button1.hide();
}
else if (thFlag==false)
{
th.resume();
thFlag=true;
button1.show();
}
}
class SymAction implements
java.awt.event.ActionListener
{
public void
actionPerformed(java.awt.event.ActionEvent event)
{
Object object = event.getSource();
if
(object == textField1)
textField1_ActionPerformed(event);
else
if (object == button1)
button1_ActionPerformed(event);
}
}
void
textField1_ActionPerformed(java.awt.event.ActionEvent event)
{
// to do: code goes here.
}
class SymText implements java.awt.event.TextListener
{
public void
textValueChanged(java.awt.event.TextEvent event)
{
Object object = event.getSource();
if
(object == textField1)
textField1_TextValueChanged(event);
else
if (object == textField2)
textField2_TextValueChanged(event);
}
}
void
textField1_TextValueChanged(java.awt.event.TextEvent event)
{
// to do: code goes here.
String
str1=textField1.getText();
int
val1=Integer.parseInt(str1);
if (val1>=501)
{
textField1.setText("500");
}
if
(val1<=0)
{
textField1.setText("1");
}
}
void
textField2_TextValueChanged(java.awt.event.TextEvent event)
{
// to do: code goes here.
String
str2=textField2.getText();
int
val2=Integer.parseInt(str2);
if (val2>=90)
{
textField2.setText("70");
}
if
(val2<=0)
{
textField2.setText("1");
}
}
void
button1_ActionPerformed(java.awt.event.ActionEvent event)
{
x=0;
Graphics g=getGraphics();
Color col=getBackground();
g.setColor(col);
g.fillRect(0,0,769,452);
if (thFlag1)
{
th.suspend();
thFlag1=false;
button1.setLabel("Start");
}
else {
button1.setLabel("Clear");
thFlag1=false;
th.resume();
thFlag1=true;
}
}
}