Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package test;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.EventQueue;
- import java.awt.Graphics;
- import java.awt.Toolkit;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.*;
- public class Kolos extends JFrame{
- MyComponent komponent;
- int MAXN=200;
- int n=0;
- Timer timer;
- int alfa = 0;
- class MyComponent extends JComponent{
- @Override
- protected void paintComponent(Graphics g) {
- int w=getWidth();
- int h=getHeight();
- int x=0,y=0;
- int x0=w/2;
- int y0=h/2;
- int R=((w<h)?w:h)*9/20;
- g.drawArc(x0-R, y0-R, 2*R, 2*R, 90-alfa, 180);
- int x1=xKart(x0,R/2,Math.toRadians(alfa-90));
- int y1=yKart(y0,R/2,Math.toRadians(alfa-90));
- g.drawArc(x1-R/2, y1-R/2, R, R, -90-alfa, 180);
- int x2=xKart(x0,R,Math.toRadians(alfa+90));
- int y2=yKart(y0,R,Math.toRadians(alfa+90));
- g.drawLine(x0, y0, x2, y2);
- int Obw = (int) Math.round(Math.PI*R+Math.PI*R/2+R);
- int na = (int)Math.round(MAXN*Math.PI*R/Obw);
- int nb = (int)Math.round((MAXN*Math.PI*R/2)/Obw);
- int nc = MAXN-na-nb;
- if(n<na) {
- double kat = Math.PI/2+Math.PI*n/na+Math.toRadians(alfa);
- x=(int)Math.round(x0+R*Math.cos(kat));
- y=(int)Math.round(y0+R*Math.sin(kat));
- }else if(n<na+nb) {
- double kat = Math.PI/2+Math.PI*(n-na)/nb+Math.toRadians(alfa);
- x=(int)Math.round(x1-(R/2)*Math.cos(kat));
- y=(int)Math.round(y1-(R/2)*Math.sin(kat));
- }else {
- x=x0+(x2-x0)*(n-na-nb)/nc;
- y=y0+(y2-y0)*(n-na-nb)/nc;
- }
- g.setColor(Color.RED);
- g.fillOval(x-6, y-6, 12, 12);
- g.setColor(Color.BLACK);
- super.paintComponent(g);
- }
- private int xKart(int x0, int r, double kat) {
- return (int)Math.round(x0+r*Math.cos(kat));
- }
- private int yKart(int y0, int r, double kat) {
- return (int)Math.round(y0+r*Math.sin(kat));
- }
- }
- public Kolos(String string) {
- super(string);
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- Toolkit kit=Toolkit.getDefaultToolkit();
- Dimension d=kit.getScreenSize();
- setBounds(d.width/4, d.height/4, d.width/2, d.height/2);
- add(komponent=new MyComponent());
- timer=new Timer(20,new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- n++;
- if(n>=MAXN)
- n-=MAXN;
- alfa++;
- komponent.repaint();
- }
- });
- timer.start();
- setVisible(true);
- }
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
- @Override
- public void run() {
- new Kolos("Kolos");
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement