SHOW:
|
|
- or go back to the newest paste.
1 | import javax.swing.JFrame; | |
2 | import javax.swing.JPanel; | |
3 | import java.awt.Color; | |
4 | import java.awt.Dimension; | |
5 | import java.awt.Graphics; | |
6 | import java.awt.Graphics2D; | |
7 | import java.awt.image.BufferedImage; | |
8 | ||
9 | public class Graph extends JPanel { | |
10 | public static void main(String[] args) { | |
11 | JFrame frame = new JFrame(); | |
12 | Graph graph = new Graph(800, 600); | |
13 | graph.setPreferredSize(new Dimension(800, 600)); | |
14 | frame.add(graph); | |
15 | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
16 | frame.pack(); | |
17 | frame.setVisible(true); | |
18 | } | |
19 | ||
20 | - | private final BufferedImage image; |
20 | + | |
21 | ||
22 | public Graph(int width, int height) { | |
23 | setPreferredSize(new Dimension(width, height)); | |
24 | ||
25 | Func easeInCubic = power(3); | |
26 | - | image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); |
26 | + | |
27 | Func easeInOutCubic = easeInCubic.inOut(); | |
28 | Func easeInCirc = circ; | |
29 | Func easeOutCirc = easeInCirc.flipXY(); | |
30 | Func easeInOutCirc = easeInCirc.inOut(); | |
31 | Func easeOutSine = sine; | |
32 | Func easeInSine = easeOutSine.flipXY(); | |
33 | Func easeInOutSine = easeInSine.inOut(); | |
34 | func = easeInOutSine; | |
35 | } | |
36 | ||
37 | public static Func power(final double e) { | |
38 | return new Func() { | |
39 | public double apply(double x) { | |
40 | return Math.pow(x, e); | |
41 | } | |
42 | }; | |
43 | } | |
44 | ||
45 | public static Func circ = new Func() { | |
46 | public double apply(double x) { | |
47 | return 1-Math.sqrt(1-x*x); | |
48 | } | |
49 | }; | |
50 | ||
51 | public static Func sine = new Func() { | |
52 | public double apply(double x) { | |
53 | return Math.sin(x*Math.PI/2); | |
54 | } | |
55 | }; | |
56 | ||
57 | public void setFunc(Func func) { | |
58 | this.func = func; | |
59 | } | |
60 | ||
61 | @Override | |
62 | public void paint(Graphics _g) { | |
63 | Graphics2D g = (Graphics2D)_g; | |
64 | g.setColor(Color.WHITE); | |
65 | g.fillRect(0, 0, getWidth(), getHeight()); | |
66 | g.setColor(Color.BLACK); | |
67 | int lastX = 0, lastY = 0; | |
68 | for(int ix = 0; ix < getWidth(); ix++) { | |
69 | double x = ((double)ix)/getWidth(); | |
70 | double y = func.apply(x); | |
71 | int iy = getHeight() - (int)(y*getHeight()); | |
72 | g.drawLine(lastX, lastY, ix, iy); | |
73 | lastX = ix; lastY = iy; | |
74 | } | |
75 | } | |
76 | } |