Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.EventQueue;
- import java.awt.Graphics;
- import java.awt.Polygon;
- import java.awt.Toolkit;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.*;
- public class A12 extends JFrame{
- MyComponent komponent;
- int MAXN=400;
- int n=0;
- int alfa=0;
- Timer timer;
- int [] xtab=new int[MAXN];
- int [] ytab=new int[MAXN];
- int D=20;
- 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 r1=w/4;//promien duzy
- int r2=r1/2;//promien maly
- double katN=-Math.PI/2.0+Math.toRadians(alfa);
- double katS=Math.PI/2.0+Math.toRadians(alfa);
- double katE=Math.toRadians(-alfa);
- double katW=Math.PI+Math.toRadians(-alfa);
- g.drawArc(x0-r1, y0-r1, r1*2, r1*2, 0+alfa, 180);
- g.drawLine(xKart(x0, r1, katW), yKart(y0, r1, katW), x0, y0);
- g.drawArc(xKart(x0, r2, katE)-r2, yKart(y0, r2, katE)-r2, r2*2, r2*2, 180+alfa, 180);
- g.setColor(Color.RED);
- int b=(int)(Math.PI*r2); //maly luk
- int a = (int)(Math.PI*r1); //duzy łuk 2 pi r -bo na polowe
- int c = r1; //prosta
- int obw = a+c+b;
- int nc=MAXN*c/obw; // liczba skoków dla duzego luku
- int nb=MAXN*b/obw ; // liczba skoków dla małego luku
- int na=MAXN-nc-nb; // liczba skoków dla prostej
- if(n<nb) {
- double kat=Math.PI+Math.PI*(n)/nb-Math.toRadians(alfa);
- x=(int)Math.round((xKart(x0, r2, katE)-r2*Math.cos(kat)));
- y=(int)Math.round((yKart(y0, r2, katE)-r2*Math.sin(kat)));
- }
- else if(n<nb+nc) {
- int xx=xKart(x0,r1,katW);
- int yy=yKart(y0,r1,katW);
- x=xx+(xx-x0)*(n-nb-nc)/nc;
- y=yy+(yy-y0)*(n-nb-nc)/nc;
- }
- else {
- double kat=Math.PI/2-Math.PI*(n-nb-na-nc)/na+Math.toRadians(alfa);
- x=(int)Math.round(x0+r1*Math.sin(kat));
- y=(int)Math.round(y0+r1*Math.cos(kat));
- }
- xtab[n]=x;
- ytab[n]=y;
- g.setColor(Color.GREEN);
- g.fillOval(x-6, y-6, 12, 12);
- super.paintComponent(g);
- }
- private int yKart(int y0, int r, double kat) {
- return (int)Math.round(y0+r*Math.sin(kat));
- }
- private int xKart(int x0, int r, double kat) {
- return (int)Math.round(x0+r*Math.cos(kat));
- }
- }
- public A12(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 A12("Animek 12");
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement