为什么我画出的动态正弦曲线的往一个方向移动的速度好快,有什么办法变慢,由于是自学的,所以请大神对我代码评价,谢谢各位

问题描述

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.

时间: 2024-08-02 05:20:54

为什么我画出的动态正弦曲线的往一个方向移动的速度好快,有什么办法变慢,由于是自学的,所以请大神对我代码评价,谢谢各位的相关文章

程序-请大神帮忙解答一下,谢谢

问题描述 请大神帮忙解答一下,谢谢 从键盘输入有一个正整数n,求所有小于n的7的倍数和.请写出该题的程序代码 解决方案 好像不难吧,代码,呵呵呵 解决方案二: for(i=1;i<n;i++){ if(i/7==(i/7*7)) sum += i;} 解决方案三: if(i==(i/7*7)) 解决方案四: 不是很简单,直接for循环,取模看是0就加就好了 下面是js的 function getSum(nmod) { var r = 0; for (var i = mod; i < n; i+

java ee-没有C币,第一次提问,这个问题困扰很久了,请大神帮忙协助解决,谢谢!

问题描述 没有C币,第一次提问,这个问题困扰很久了,请大神帮忙协助解决,谢谢! 单独建立项目同样的配置不会出现这个问题,与spring mvc+mybatis框放在一起就会报这个错. <servlet> <servlet-name>Rest Servlet</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-cl

java调用微信API授权,获取用户信息?怎么弄,刚刚接触微信,求大神提供下代码。谢谢。

问题描述 http://wgate.gaitianxia.com/#contact这个网址里面的,调用一个接口,授权后可以获取信息.请问怎么调用?一点也不懂.求代码.微信之门Why?微信打开的网页,是无法持久存贮cookies的,你知道吗?那么如何辨识唯一用户呢?是的,使用微信服务号!服务号拥有高级接口,可以给让网站通过微信的OAuth2授权,获得用户的OpenID,从而辨别一个唯一用户.那么,没有微信服务号呢?这就是微信之门诞生的原因.How?使用非常简单!对于任意需要辨识唯一用户的网站,只需

node。js-请大神帮忙解答一下,谢谢!!!!!

问题描述 请大神帮忙解答一下,谢谢!!!!! 在startbootstrap-sb-admin-2中,控制左侧下拉菜单的代码是哪些?

c语言-C语言小白请大神帮忙改一下代码,谢谢。

问题描述 C语言小白请大神帮忙改一下代码,谢谢. #include #include #include #include #include void choose();//选择函数 void shu();//猜数字函数 void paihang();//排行榜 void repaihang(int n);//更新排行榜 void replace();//初始化排行榜(没有记录时的排行榜) typedef struct { char name[10]; int score; }re; int ma

如何用VB解方程,请大神指导!!!谢谢谢谢谢谢谢谢!!!

问题描述 如何用VB解方程,请大神指导!!!谢谢谢谢谢谢谢谢!!! 方程是:b*n*H*a+8.314*298.15*((m+n)*ln((m+n*b)/(m+n*b+n*b*a))+n*b*a*ln(n*b*a/( m+n*b+n*b*a))=0H = 42200m = 56n = 4b = 1119求a 解决方案 A)固定方程,你需要一个数学老师,先把a的计算方程列出来.B)动态方程,你需要开发一个AI,请准备好足够的资金招人攻关吧.

c++-求大神帮忙解答一下,谢谢

问题描述 求大神帮忙解答一下,谢谢 给定一组询问(l,r),若整数a,b同时满足以下三个条件: (1) b = a + 1 (2) a + b的值是一个素数 (3) l <= a, b <= r 我们就称a, b是一个符合条件的数对. 求出有多少符合条件的数对. [输入格式] 仅一行,2个整数l,r. [输出格式] 一行,一个整数ans,表示符合条件的数对的数量. [输入样例] 0 13 [输出样例] 8 [数据范围] 0 <= l, r <= 500 解决方案 我的思路就是用i对

指针-这道题可以用折半查找的办法做吗?麻烦大神帮忙解答一下吧!!!谢谢!!!

问题描述 这道题可以用折半查找的办法做吗?麻烦大神帮忙解答一下吧!!!谢谢!!! 有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插入数组中, 插入之后依然有序.指针实现 解决方案 插入数组意味着需要将数组插入位置后面的元素全部搬动一次,相当低效. 这里最好使用链表,当然更好的是使用二叉排序树. 解决方案二: 非要这么做也可以,参考 http://blog.csdn.net/xiaofeige567/article/details/26879075 文章是用的顺序查找,按照你说的折半查

c++ opencv 分裂合并-求大神帮忙把代码改成调用opencv库的,谢谢。

问题描述 求大神帮忙把代码改成调用opencv库的,谢谢. include using namespace std; #include //需要使用堆栈,对堆栈进行操作 #include "conio.h" include "viLib.h" // 包含头文件 pragma comment( lib, "viLib.lib" ) // 包含viLib.lib库 include "viImage.h" // 包含头文件 prag