Witam
Mam program który graficznie ukazuje powstawanie funkcji sinus. Problem jest z ustawieniem metody sleep(), aby kolejne wyświetlenie obrazu było opóźnione o pewien czas. Drugim problemem jest taki ,gdy zmieniam kąt "k" zmienia się tylko położenie funkcji sinus a nie wektora
<code = java>
import java.awt.;
import java.awt.Graphics.;
import java.awt.event.ActionEvent;
import javax.swing.*;
class DrawTestFrame extends JFrame
{
public static final int D_WIDTH = 450;
public static final int D_HEIGHT = 380;
public DrawTestFrame()
{
setTitle("DrawTest");
setSize(D_WIDTH, D_HEIGHT);
//dodanie panelu do ramki
DrawComponent2 component = new DrawComponent2();
add(component);
}
}
class DrawComponent2 extends JComponent {
int vxmin;
int vxmax;
int vymin;
int vymax;
double xmin;
double xmax;
double ymin;
double ymax;
double PI;
double bun;
Graphics g;
ActionEvent event;
public int map(int sw, double z)
{
int s = 2;
if((double)sw < 0.5D)
s = vxmin + (int)(((z - xmin) / (xmax - xmin)) * (double)(vxmax - vxmin));
if((double)sw > 0.5D)
s = vymin + (int)(((ymax - z) / (ymax - ymin)) * (double)(vymax - vymin));
return s;
}
public void drawGraph(Graphics g, int k)
{
vxmax = 400;
vymax = 160;
xmin = -3D;
xmax = 7D;
ymin = -2D;
ymax = 2D;
PI = 3.1415920000000002D;
bun = 72D;
Graphics2D g2 = (Graphics2D) g;
int r = map(0, 1.0D) - map(0, 0.0D);
//ustawia kolor tła
g2.setColor(new Color(235, 225, 200));
//wypełnia prostokąt
g2.fillRect(vxmin, vymin, vxmax - vxmin, vymax - vymin);
//kolor lini prostokąta
g2.setColor(Color.black);
//Rysuje prostokąt
g2.drawRect(vxmin, vymin, vxmax - vxmin - 1, vymax - vymin - 1);
//Linia osi x
g2.drawLine(map(0, xmin), map(1, 0.0D), map(0, xmax), map(1, 0.0D));
//linia osi y
g2.drawLine(map(0, 0.0D), map(1, ymax), map(0, 0.0D), map(1, ymin));
//wyświetlenie i ustawienie liczb na układzie współrzędnych
g2.drawString("O", map(0, 0.0D) + 2, map(1, 0.0D) + 12);
g2.drawString("180", map(0, PI), map(1, 0.0D) + 12);
g2.drawString("360", map(0, 2D * PI), map(1, 0.0D) + 12);
g2.drawString("1", map(0, -0.40000000000000002D), map(1, 0.0D) + 12);
g2.drawString("1", map(0, -1.3999999999999999D), map(1, 1.1000000000000001D));
//Rysuje okrąg
g2.drawOval(map(0, -1.5D) - r, map(1, 0.0D) - r, 2 * r, 2 * r);
//Linia przechodząca przez okrąg
g2.drawLine(map(0, -1.5D), map(1, ymax), map(0, -1.5D), map(1, ymin));
//Powstawanie funkcji sinus
double co = Math.cos(((double)k / bun) * PI * 2D);
double si = Math.sin(((double)k / bun) * PI * 2D);
g2.drawLine(map(0, -1.5D + co), map(1, si), map(0, ((double)k / bun) * PI * 2D), map(1, si));
g2.drawLine(map(0, -1.5D), map(1, 0.0D), map(0, -1.5D + co), map(1, si));
g2.setColor(Color.red);
g2.drawLine(map(0, -1.5D + co), map(1, 0.0D), map(0, -1.5D + co), map(1, si));
g2.setColor(Color.blue);
for(int xi = 0; xi <= k; xi++)
{
double x1;
if((double)xi < 0.10000000000000001D)
x1 = 0.0D;
else
x1 = ((double)(xi - 1) / bun) * PI * 2D;
double y1 = Math.sin(x1);
double x2 = ((double)xi / bun) * PI * 2D;
double y2 = Math.sin(x2);
g.drawLine(map(0, x1), map(1, y1), map(0, x2), map(1, y2));
}
g2.setColor(Color.red);
g2.drawLine(map(0, ((double)k / bun) * PI * 2D), map(1, 0.0D), map(0, ((double)k / bun) * PI * 2D), map(1, si));
}
@Override
public void paintComponent(Graphics g)
{
for(int k = 0; k<=bun; k++)
{
try{
drawGraph(g, k);
Thread.sleep(40L);
}catch (InterruptedException e) {}
}
}
}
public class DrawTest2 {
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
DrawTestFrame frame = new DrawTestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}