问题描述
packageweihu.com.GUI;importjava.applet.*;importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassZXextendsAppletimplementsRunnable{intw,h,EX,EY,beginX,afterX,beginY,afterY;intx,y,m,lenx,leny,d;doublespeed=0.5;doubleh1=4.0*Math.PI/n;doublex1=-2*Math.PI,y1=Math.sin(x1),x2,y2;Threadstartpoint;publicvoidinit(){startpoint=newThread(this,"startpoint");w=Integer.parseInt(getParameter("width"));h=Integer.parseInt(getParameter("height"));EY=(int)((h-30)/2);EX=(int)((w-30)/4/Math.PI);}finalstaticintn=1000;publicvoidpaint(Graphicsg){g.setColor(Color.green);g.drawLine(0,h/2,w,h/2);//画出X轴g.drawLine(w/2,0,w/2,h);//画出Y轴g.drawLine(w-10,h/2-10,w,h/2);g.drawLine(w-10,h/2+10,w,h/2);//画X轴的箭头g.drawLine(w/2,0,w/2-10,10);g.drawLine(w/2,0,w/2+10,10);//画Y轴的箭头m=8;lenx=(w-30)/8;d=8;leny=(h-30)/8;x=w/2;y=h/2;doubledb=0.5;intInt=1;for(inti=0;i<5;i++){g.drawLine(x+i*lenx,h/2,x+i*lenx,h/2-10);g.drawLine(x-i*lenx,h/2,x-i*lenx,h/2-10);}for(inti=1;i<5;i++){Strings2=String.valueOf(db);//double类型转换为String类型g.drawString(s2+"π",x+i*lenx-10,h/2+20);g.drawString(s2+"π",x-i*lenx-10,h/2+20);db=db+0.5;for(intq=1;q<5;q++){g.drawString("-",x-q*lenx-12,h/2+20);}}//画Xfor(inti=0;i<5;i++){g.drawLine(w/2,y+i*leny,w/2+10,y+leny*i);g.drawLine(w/2,y-i*leny,w/2+10,y-leny*i);}for(inti=1;i<5;i++){Strings=Integer.toString(Int);//int类型转换为String类型g.drawString(s,w/2+15,y-leny*i+2);g.drawString(s,w/2+15,y+leny*i+2);Int=Int+1;for(intq=1;q<5;q++){g.drawString("-",w/2+12,y+q*leny+2);}}//画Y轴坐标g.drawString("0",w/2+10,h/2+20);g.drawString("X",w-10,h/2-20);g.drawString("Y",w/2-20,10);g.setColor(Color.red);beginX=(int)(x1*EX)+w/2;afterX=(int)(x2*EX)+w/2;beginY=(int)(h/2)-(int)(EY*y1);afterY=(int)(h/2)-(int)(y2*EY);for(inti=0;i<n;i++){x2=x1+h1;y2=Math.sin(x2);beginX=(int)(x1*EX)+w/2;beginY=(int)(h/2)-(int)(EY*y1);afterX=(int)(x2*EX)+w/2;afterY=(int)(h/2)-(int)(y2*EY);x1=x2;y1=y2;g.drawLine(beginX,beginY,afterX,afterY);}}publicvoidrun(){StringcurrentRunning;currentRunning=Thread.currentThread().getName();if(currentRunning.equals("startpoint")){while((beginX)>0&&(beginX<200)){repaint();beginX+=speed;afterX+=speed;try{Thread.sleep(200);}catch(InterruptedExceptione){}}startpoint=null;}}}
解决方案
解决方案二:
这是之前写过的一个,你可以参考一下//画y=h*sin(t)的正弦曲线unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls,StdCtrls;typeTForm1=class(TForm)Button1:TButton;Timer1:TTimer;procedureButton1Click(Sender:TObject);procedureTimer1Timer(Sender:TObject);private{Privatedeclarations}publicy,t,h:real;end;varForm1:TForm1;implementation{$R*.dfm}procedureTForm1.Button1Click(Sender:TObject);vari:integer;beginWithForm1.Canvasdobegin//画坐标横轴PenPos:=Point(10,240);LineTo(600,240);PenPos:=Point(594,238);LineTo(600,240);PenPos:=Point(594,242);LineTo(600,240);//画坐标纵轴PenPos:=Point(10,400);LineTo(10,80);PenPos:=Point(8,86);LineTo(10,80);PenPos:=Point(12,86);LineTo(10,80);//将Pen移至坐标原点PenPos:=Point(10,240);end;//初始化h:=80;t:=0;Form1.Canvas.Pen.Mode:=pmXOR;Form1.Canvas.Pen.Color:=clRed;//开始画fori:=1to598dobeginy:=h*sin((t+i)/180*3.14159);Form1.Canvas.LineTo(Round(10+i),Round(240+y));end;Timer1.Enabled:=True;end;procedureTForm1.Timer1Timer(Sender:TObject);vari:integer;begin//擦除原线y:=h*sin((t+i)/180*3.14159);Form1.Canvas.PenPos:=Point(10,Round(240+y));fori:=1to598dobeginy:=h*sin((t+i)/180*3.14159);Form1.Canvas.LineTo(Round(10+i),Round(240+y));end;//画相移后的线t:=t+1;y:=h*sin((t+i)/180*3.14159);Form1.Canvas.PenPos:=Point(10,Round(240+y));fori:=1to598dobeginy:=h*sin((t+i)/180*3.14159);Form1.Canvas.LineTo(Round(10+i),Round(240+y));end;end;end.