ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:232.88KB ,
资源ID:7806488      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7806488.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(在Apple画面中实现yaxx+bx+c 函数曲线的绘.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

在Apple画面中实现yaxx+bx+c 函数曲线的绘.docx

1、在Apple画面中实现yaxx+bx+c 函数曲线的绘*实践教学*软件学院2013年春季学期Java课程设计 说明书题 目:在Apple画面中实现y=a*x*x+b*x+c 函数曲线的绘专业班级 软件四班 姓 名: 康 贺 学 号: 1417700442 指导教师: 成 绩: 摘 要在Apple画面中实现y=a*x*x+b*x+c 函数曲线的绘制,曲线是由参数a,b,c来控制,变量thick来控制曲线的粗细,其中这四个变量是通过applet来传递参数的,改变这四个变量的值,可以发现曲线也相应的改变了。圆形是通过双缓冲区绘图,将曲线各点的参数值传递给它实现的,同样发现它一直在不停地运动。还有改变

2、曲线的颜色是通过建立一个下拉列表实现,下拉列表中存放了5中颜色,对下拉列表建立一个事件监听,通过鼠标点击来改变曲线颜色。可见,其运行结果达到了预先的期望和要求.关键词: 参数值 绘图 传递 颜色 1、课设任务及要求课程任务:在Applet画面中实现y=a*x2+b*x+c 函数曲线的绘制设计要求: 1、通过Applet参数传递a,b,c值; 2、通过Applet参数控制曲线的粗细; 3、曲线的颜色通过颜色对话框选取(通过一个颜色按钮控制)。 4、绘制一个圆形沿曲线轨迹运动,到终点由头重新开始。 2、需求分析利用Java 2D图形绘制,在Applet画面中实现一个二维图形,其中绘制二次函数(y=

3、a*x*x+b*y+c)曲线,通过Applet参数来传递a,b,c的值,使得能够绘制任意二次函数曲线,并通过另一个Applet参数来控制二次函数曲线的线条粗细;建立一个颜色选择对话框来选择曲线的绘制颜色;在二次函数曲线上要实现以一个圆形,并能沿着曲线循环运动。该实验考察的知识点是任何绘制图形以及用什么方法来控制图形的运动,通过建立一事件监听来实现人机交互。3、设计思路3.1工作原理及功能规划:起先就是创建坐标的问题,先设置坐标原点(offx,offy),以原点为中心来绘制坐标轴,通过在paint()函数建立一个Graphics2D 类对象g2d,再由g2d.draw()来绘制直线就很快实现了坐

4、标轴。其次是绘制曲线,曲线绘制是要通过applet参数来传递a,b,c及thick的值,这就要运用到getParameter()来获取HTML中的传递的各参数。之后就利用多边形描绘曲线,简单,创建一个GeneralPath对象:GeneralPath polly=new GeneralPath(),再利用moveTo()和lineTo()来实现曲线。有一点需得提出,绘制曲线时,我将曲线的横坐标值扩大了5倍,便于图形观察。第三步就是颜色选择对话框,这个好办,创建一个下拉列表(Choice)将所有选项折叠在一起,Choice color=new Choice( ),再对color设置一个监听者,c

5、olor.addItemListener(this)。而颜色的添加,是通过两个数组des、c,数组des中存放颜色名称,放入到下拉列表中,数组c中存放对应的颜色,在事件监听时,将到得颜色选择赋给drawColor来改变曲线的颜色。第四步就得实现一个圆形在曲线上的运动了。先得绘制一个圆形,通过建立图形缓冲区createImage(width,height),再将曲线坐标参数传递给drawImage( ),将图像缓存区的内容绘制到Applet面板上的。之后呢是实现其移动,就是将曲线的各个点的坐标值参数传递给圆形图像。4、详细设计4.1数据分析:1.变量a,b,c,thick是数值型,都为私有变量,

6、通过Applet参数传递的。2.变量x0,y0是数值型,曲线的顶点坐标,用于计算和控制圆形图像的定位。3.变量q,k同样是数值型,用来控制圆形图像在曲线上的循环运动。4.des字符串数组,其元素代表颜色的选择,通过Color类定义了一个color颜色数组,与des对应来控制曲线颜色变化。5.原点坐标offx,offy数值型,通过改点来绘制坐标轴和定位二次曲线。4.2算法思路:4.2.1.基本算法:for循环:.for(int i=0;ides.length;i+)color.add(desi);通过循环,将颜色字符串数组加入到颜色下拉列表中。.for(;x=50;x+)计算曲线上各点的坐标值,

7、再通过直线连接各点绘制曲线。.for(int i=0;ides.length;i+)在事件监听函数中,通过鼠标触发事件来选择绘制曲线的颜色。4.2.2.计算几何算法:由坐标原点(offx,offy)出发,通过g2d.draw(new Line2D.Float()计算绘制出坐标轴。利用多边形描绘曲线,通过计算a*x*x+b*x+c,得到曲线上各点的坐标,在由moveTo()和lineTo()来连接各点。同时通过计算得到圆形图像在曲线上移动的坐标,将坐标值传递给drawImage().4.3类设计: class Conic init(); /用来完成对applet实例的初始化工作 paint();

8、/用来在applet的界面中绘制文字、图形和其他界面元素 repaint();/用来对整个applet区域重画 Thread.sleep()/使用Thread类中的sleep()方法使圆形移动时睡眠一段时间后继续移动itemStateChanged(ItemEvent e);/对事件源进行监听,实现事件的选择 4.4功能实现:流程图:图1:流程图代码及注释:import java.awt.*;import java.awt.geom.*;import java.applet.*;import java.awt.event.*;public class Conic extends Applet

9、implements ItemListener private int a ; private int b ; private int c ; private int thick; int x0,y0; /曲线的顶点 Image img; int q=x0-20;/ 圆形起点横坐标 int k=0; /控制圆形循环移动 Color drawColor=Color.red; /曲线初始颜色设置 String des=红色,蓝色,绿色,黑色,灰色; Color color2=Color.red,Color.blue,Color.green,Color.black,Color.gray; publi

10、c void init() a=Integer.parseInt(getParameter(a); /从applet参数中获取a的值 b=Integer.parseInt(getParameter(b); /从applet参数中获取b的值 c=Integer.parseInt(getParameter(c); /从applet参数中获取c的值 x0=-b/(2*a); /曲线顶点横坐标 thick=Integer.parseInt(getParameter(thick); /从applet参数中获取thick的值 Choice color=new Choice(); /创建下拉列表 for(i

11、nt i=0;ides.length;i+) color.add(desi); /将颜色加入列表 color.addItemListener(this); /对下拉列表设置监听 this.add(north,color); /添加下拉列表及其位置/*绘制圆形*/ img=createImage(20,30); /画板的长宽 Graphics gimg=img.getGraphics(); gimg.setColor(Color.red); gimg.drawOval(5,0,10,10); public void paint(Graphics g) Graphics2D g2d=(Graphi

12、cs2D)g; int offx=200; /坐标轴原点的x int offy=250; /坐标轴原点的y g2d.setPaint(Color.blue);/设置坐标轴的颜色 g2d.setStroke(new BasicStroke(2);/坐标轴的线条宽度/*绘制坐标轴*/ g2d.draw(new Line2D.Float(offx+0,offy-100,offx+0,offy+100); g2d.draw(new Line2D.Float(offx-5,offy-97,offx+0,offy-100); g2d.draw(new Line2D.Float(offx+5,offy-97

13、,offx+0,offy-100); g2d.draw(new Line2D.Float(offx-100,offy+0,offx+200,offy+0); g2d.draw(new Line2D.Float(offx+195,offy-5,offx+200,offy+0); g2d.draw(new Line2D.Float(offx+196,offy+5,offx+200,offy+0); g2d.drawString(x,offx+205,offy); g2d.drawString(y,offx,offy-106);/*利用多边形描绘曲线*/ GeneralPath polly=new

14、GeneralPath();/创建一个GeneralPath对象 int x=-50; float x1=5*x; /将x坐标值放大5倍 float y1=(float)(a*x*x+b*x+c); polly.moveTo(offx+x1,offy-y1); /第一个点加入到路径 for(;x=50;x+) float x2=5*x; float y2=(float)(a*x*x+b*x+c); polly.lineTo(offx+x2,offy-y2); /将指定点加入路径,当前点与指定点连接 g2d.setPaint(drawColor); /绘制曲线的初始颜色 g2d.setStrok

15、e(new BasicStroke(thick);/曲线的宽度 g2d.draw(polly); /绘制曲线 int w = a * q* q + b * q + c; g.drawImage(img,offx+5*q-10,offy-w-15,this);/绘制圆形,并定位圆形在曲线上的位置 q+; k+; try Thread.sleep(100); catch (InterruptedException e) repaint(); if(k%40=0) q=x0-20; /控制圆形循环移动的范围 public void itemStateChanged(ItemEvent e) /事件监

16、听 Choice temp=(Choice)e.getItemSelectable(); for(int i=0;ides.length;i+) if(temp.getSelectedIndex()=i) drawColor=color2i; repaint(); break; 4.5界面: 图2:界面截图5、运行调试与分析讨论5.1以下为运行调试后的结果(部分截图):通过applet参数传递a,b,c及thick的值,thick为曲线的粗细。可以发现曲线颜色变化了且圆形在曲线上运动: 图3:红色曲线 图4:绿色曲线改变参数c的值后的结果,可以发现曲线下移了: 图6:曲线下移改变参数a,b,c

17、及thick的值后的结果,可以发现曲线变化了且粗细变化了: 图7:曲线粗细变化改变参数thick的值后的结果,可以发现曲线变粗了: 图8:曲线变粗改变各参数的值,曲线变化,圆形同时在运动: 图9:曲线变化5.2分析运行结果曲线是由参数a,b,c来控制,变量thick来控制曲线的粗细,其中这四个变量是通过applet来传递参数的,改变这四个变量的值,可以发现曲线也相应的改变了。圆形是通过双缓冲区绘图,将曲线各点的参数值传递给它实现的,同样发现它一直在不停地运动。还有改变曲线的颜色是通过建立一个下拉列表实现,下拉列表中存放了5中颜色,对下拉列表建立一个事件监听,通过鼠标点击来改变曲线颜色。可见,其

18、运行结果达到了预先的期望和要5.3有何改进想法 像这个程序运行时看上去有些单调,虽然圆形运动的实现有些难度,但程序有些地方可以是改进的。其中曲线坐标参数传递给小人物的方法可以改进,这里的方法稍微繁琐了一点,当然其考察到个人数学的能力;其次我感觉参数a,b,c及thick的控制应该在程序查看器中实现,通过重新载入来改变曲线图形,但这一知识点我还未掌握,由于课本上这一知识点涉及不深,未能成功实现该动作;再次可以设置上下左右四个Button来控制坐标轴的移动或通过鼠标来移动,这是一点创新功能,由于时间问题,在这里就不去实现了。 6、设计体会与小结通过这次的Java课程设计,让我系统的复习了一下本学期

19、所学的知识,不仅巩固了那些已掌握了的知识点,而且了解到许多还未掌握的方面。尽管感觉自己学得还不错,但在这次的课设中还是遇到了许多问题,像这个圆形在双曲线上的移动问题,起先就让我感到头痛,研究了一下午,到网上又找不到相关的解决方法,但第二天上午上机时看到书上有一个被我遗漏的知识点:双缓冲区绘图。突然让我豁然开朗,不久就把这个问题解决了,效果还挺好的。这次的课程设计给我的帮助非常大,尽管我做的题目没有涉及到好多的知识点,但通过考察,让我对Java产生的兴趣更浓厚,特别是按时完成任务时,比平时更有成就感。我在这次的课程暴露的错误,让我意识到我还有许多的知识要去掌握,特别是教材之外的许多东西还不是很了解,另外是对某些知识点的了解还不够深,看来要多看点有关Java的课外书籍,及时补一补那些被遗漏的知识点。7、参考文献1丁振凡. Java语言实用教程. 北京:北京邮电大学出版社,2005.22耿祥义,张跃平. Java2实用教程.北京:清华大学出版社,2006.8 3赵付青.Java面向对象程序设计国防工业出版社.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1