MathematicalРendulum РешетниковаЛюда

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

import java.awt.

*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;

public class PendulumPainter extends Frame {


int shift;
int frameLength = 620, frameHeight = 600;
int xStart = 280, yStart = 150;

PendulumPainter(String title) {
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
System.exit(0);
}
});
setSize(frameLength, frameHeight);
setVisible(true);
}

public static void main(String[] args) throws Exception {


PendulumPainter painter = new PendulumPainter("");
painter.go();
}

void go() throws Exception {


for (;;) {
repaint();
if (isMoveRight) {
shift = shift + discrete;
if (shift > 180 - delta) {
isMoveRight = false;
delta = delta + difference;
if (delta > 500) {
difference = 10;
}
if (delta > 800) {
discrete = 0;
}

}
} else {
shift = shift - discrete;
if (shift < -180 + delta) {
isMoveRight = true;
delta = delta + difference;
}
}
Thread.sleep(5);
}
}

int delta = 0, difference = 20, discrete = 1;


int horizontalOvalDiameter = 20;
int verticalLineHeight = 200;
int pendulumDiameter = 60;
int pendulumShift = 0;
boolean isMoveRight = true;
////////////////////////////////////////////////////////
int pendulumCenter = xStart + horizontalOvalDiameter / 2;
int xRightPoint = xStart + horizontalOvalDiameter;
int xPendulum = pendulumCenter - pendulumDiameter / 2;
int yPendulum = yStart + verticalLineHeight;
Ellipse2D.Double Pendulum, horizontalOval;
Polygon verticalLine;
GeneralPath pendulum;

public void update(Graphics g) {


BufferedImage bi = (BufferedImage) createImage(frameLength, frameHeight);
Graphics2D big = bi.createGraphics();

Pendulum = new Ellipse2D.Double(xPendulum + pendulumShift, yPendulum,


pendulumDiameter, pendulumDiameter);
verticalLine = new Polygon();
verticalLine.addPoint(pendulumCenter + pendulumShift, yStart);
verticalLine.addPoint(pendulumCenter + pendulumShift, yPendulum);
horizontalOval = new Ellipse2D.Double(xStart, yStart - horizontalOvalDiameter,
horizontalOvalDiameter,
horizontalOvalDiameter);

//////// buildPendulum ////////////////////////////


pendulum = new GeneralPath(Pendulum);
big.setColor(Color.BLACK);
big.fill(horizontalOval);
big.draw(horizontalOval);

big.rotate(0.01 * shift, pendulumCenter, yStart);

GradientPaint gradient = new GradientPaint(xPendulum + pendulumShift,


yPendulum, new Color(12, 192, 192),
xPendulum + pendulumShift, yPendulum + pendulumDiameter, new Color(128,
128, 128));
big.setPaint(gradient);
big.fill(Pendulum);
big.setColor(Color.BLACK);
big.draw(Pendulum);

big.setColor(Color.BLACK);
big.draw(verticalLine);
g.drawImage(bi, 0, 0, this);
}
}

You might also like