サインが縦、コサインが横
っていうのがわかりやすくなるようなプログラムを考えてみる
//SinCos.java import java.awt.*; import java.awt.image.BufferedImage; import javax.swing.*; import static java.lang.Math.*; public class SinCos { public static void main(String[] args){ JFrame f = new JFrame("三角関数"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(400, 350); final Image img = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB); Image buf = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB); final Graphics2D g = (Graphics2D) img.getGraphics(); final Graphics2D gb = (Graphics2D) buf.getGraphics(); final JLabel lbl = new JLabel(new ImageIcon(buf)); f.add(lbl); f.setVisible(true); new Thread(){ @Override public void run() { for(;;){ g.setColor(Color.WHITE); g.fillRect(0, 0, 400, 300); for(int i = 0; i < 200; ++i){ //sin・cosの計算 double r = PI * 2 * i / 200; int x = (int) (45 + cos(r) * 40); int y = (int) (45 - sin(r) * 40); //描画 g.setColor(Color.WHITE); g.fillRect(5, 5, 100, 100); g.setColor(Color.BLACK); //円 g.drawOval(5, 5, 80, 80); //円の中 g.drawLine(45, 45, x, y); //sin g.drawString("sin", 140, 55); g.drawLine(100, 45, 300, 45); g.fillOval(i + 100, y, 2, 2); //cos g.drawString("cos", 50, 180); g.drawLine(45, 100, 45, 300); g.fillOval(x, i + 100, 2, 2); gb.drawImage(img, 0, 0, null); gb.setColor(Color.GRAY); gb.drawLine(i + 100, y, x, y); gb.drawLine(x, i + 100, x, y); lbl.repaint(); try{ Thread.sleep(20); }catch(InterruptedException e){} } } } }.start(); } }