import java.awt.* ; import java.lang.*; public class sine extends Frame{ public static void main(String arg[]) { MyFrame f = new MyFrame("sine curve"); f.setSize(460, 230); // JDK1.0.対応: f.resize(460, 230); MyCanvas cnv= new MyCanvas( ); cnv.setSize(400, 200); // JDK1.0.対応: cnv.resize(400, 200); cnv.setBackground(Color.white); cnv.setForeground(Color.darkGray); f.setLayout(new FlowLayout()); f.add(cnv); f.show(); } } class P{ // 異なる座標軸で同じ点を扱う int marg=10, xorg=0, yorg=100, width=400, height=200; double sx = 1.0, sy = 80.0; int x, y, u, v; public P(int u, int v){ // コンストラクタ this.u = u; this.v = v; UVtoXY(); } public void UVtoXY(){ x = xorg + marg + (int)(sx*(double)u); y = yorg + marg - (int)(sy*(double)v); } public void UVtoXY(double du, double dv){ x = xorg + marg + (int)(sx*du); y = yorg + marg - (int)(sy*dv); } } class MyCanvas extends Canvas{ public void paint(Graphics g) { int i; double u, v, frq=2.0; P org = new P(0, 0); P x400 = new P(400, 0); P ypone = new P(0, 1); P ymone = new P(0, -1); g.drawLine(org.x, org.y, x400.x, x400.y); g.drawLine(ypone.x, ypone.y, ymone.x, ymone.y); P pold = new P(0, 0); P pnew = new P(0, 0); // sine カーブを直線で近似する for(i = 0; i < 360 ; i=i+1) { u = (double)i; v = Math.sin(frq*u*Math.PI/180.0); pnew.UVtoXY(u, v); g.drawLine(pold.x, pold.y, pnew.x, pnew.y); pold.x = pnew.x; pold.y = pnew.y; } } }