实验1实验报告格式
【最新文档】实验一实验报告-优秀word范文 (6页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==实验一实验报告网络程序设计实验报告实验名称:_ Winsock编程接口实验 _实验类型:_______ 验证型实验 ________指导教师:专业班级:_________XXXXXXXXX__________姓名:________ XXXXXXXXX_____ ________ 学号:_________XXXXXXXXX____________电子邮件:_______XXXXXXXXXXXX________实验地点:_______XXXXXXXXX______________实验日期: XXXXXXXXX实验成绩:__________________________一、实验目的1.掌握Winsock的启动和初始化;2.掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的使用。
二、实验设计实验流程图三、实验过程1.在实验过程中调用GetAdaptersInfo()时,出现了undeclared identifier 的报错,原因是没有包含其头文件,但在加了头文件iphlpapi.h后,依然出现如下错误:fatal error C1083: Cannot open include file: 'iphlpapi.h': No such file or directoryError executing cl.exe.查阅资料得知,该错误的出现是因为没有安装SDK,将SDK安装并添加到VC中后,程序错误得到解决。
2.实验结果1.程序主界面2.选择解析指定域名3.选择查看本机信息四、讨论与分析1)Winsock初始化的作用是什么?答:使用winsock初始化可加载winsock编程的动态链接库。
最新大学物理实验1-实验报告模板

最新大学物理实验1-实验报告模板实验名称:测量物体的密度实验目的:1. 掌握测量固体和液体密度的基本方法。
2. 熟悉使用比重瓶和电子天平的操作。
3. 分析实验误差,提高实验数据的准确性。
实验原理:密度定义为物体质量与体积的比值,即 \( \rho = \frac{m}{V} \)。
本实验通过测量物体的质量和体积来计算其密度。
对于固体,体积可通过排水法测量;对于液体,体积可通过比重瓶直接测量。
实验仪器:1. 电子天平2. 比重瓶3. 烧杯4. 移液管5. 蒸馏水6. 待测固体样品7. 待测液体样品实验步骤:1. 使用电子天平测量待测固体样品的质量 \( m \)。
2. 将适量的蒸馏水倒入烧杯中,使用移液管将部分水转移到比重瓶中。
3. 将待测固体样品完全浸入比重瓶中的水中,并记录比重瓶中水的体积变化 \( V_{water} \)。
4. 计算固体样品的体积 \( V = V_{water} \)。
5. 根据密度公式计算固体样品的密度 \( \rho = \frac{m}{V} \)。
6. 重复上述步骤,测量不同液体样品的密度。
7. 记录所有数据,并进行必要的误差分析。
实验数据与结果:(此处填写实验数据表格,包括样品编号、质量m、体积V、计算出的密度ρ以及可能的误差分析)结论:通过本次实验,我们成功地测量了不同固体和液体样品的密度,并掌握了使用比重瓶和电子天平进行密度测量的方法。
实验结果与理论值相近,但在实际操作中存在一定的系统误差和随机误差,这些误差来源包括仪器的精度限制、操作者的技术水平等。
未来可以通过改进实验方法和提高操作精确度来减少误差,提高实验结果的准确性。
实验报告1

实验名称:电源的等效变换姓名:陈庚学号:1138360117同组人:郭盛、全卓越学号:1138360110 、1138360138专业、班级:土木工程1班评分:日期:2013. 5. 6 指导老师:一、实验目的1、掌握电源外特性的测试方法。
2、验证电压源与电流源等效变换的条件。
二、原理说明1.一个直流稳压电源在一定的电流范围内,具有很小的内阻。
故在实用中,常将它视为一个理想的电压源,即其输出电压不随负载电流而变。
其外特性曲线,即其伏安特性曲线U=f(I)是一条平行于I轴的直线。
一个实用中的恒流源在一定的电压范围内,可视为一个理想的电流源。
2.一个实际的电压源(或电流源),其端电压(或输出电流)不可能不随负载而变,因它具有一定的内阻值。
故在实验中,用一个小阻值的电阻(或电流源)。
3.一个实际的电源,就其外部特性而言,既可以看成是一个电压源,又可以看成是一个电流源。
若视为电压源,则可用一个理想的电压源Us与一个电阻Ro相串联的组合来表示;若视为电流源,则可用一个理想电流源Is与一电导go相并联的组合来表示。
如果这两种电源能向同样大小的负载供出同样大小的电流和端电压,则称这两个电源是等效的,即具有相同的外特性。
一个电压源与一个电流源等效变换的条件为:Is=Us/Ro,go=1/Ro 或Us=IsRo,Ro=1/go。
如图3-1所示。
三、实验设备图3-1序号名称型号与规格数量备注1 可调直流稳压电源0~30V 1 DG042 可调直流恒流源0~500mA 1 DG043 直流数字电压表0~200V 1 D314 直流数字毫安表0~200mA 1 D315 万用表 1 自备6 电阻器120Ω,200Ω,510Ω,1KΩDG097 可调电阻箱0~99999.9Ω 1 DG098 实验线路DG05 1.测定直流稳压电源与实际电压源的外特性。
(1)按图1接线。
Us为+12V直流稳压电源(将Ro短接)。
调节R2,令其阻值由大至小变化,记录数据结果在表3-1。
实验报告模板1

实验报告
学院:专业:年月日
4.实验方法、步骤、程序及测试结果建立S,P,J,SPJ表:
1.找出所有供应商的姓名和所在城市
运行程序:SELECT SNAME,CITY FROM S;
运行结果图:
2.找出所有零件的名称、颜色、重量
运行程序: SELECT PNAME,COLOR,WEIGHT FROM P;
运行结果图:
3.找出使用供应商S1所供应零件的工程号码
运行程序: SELECT JNO FROM SPJ
WHERE SNO='S1';
运行结果图:
4.找出工程项目J2使用的各种零件的名称及其数量
运行程序: SELECT PNAME,QTY
FROM P,SPJ
WHERE P.PNO=SPJ.PNO AND SPJ.JNO='J2';
运行结果图:
5.找出天津厂商供应的所有零件号码
运行程序: select PNO
FROM S,SPJ
WHERE S.SNO=SPJ.SNO AND CITY='天津';
运行结果图:。
实验报告格式一

运行结果:
错误
错误所在行:
应改为:
(五)编写程序
1.编写程序输出用6颗星构成的等边三角形。*
* *
* * *
2.编写一个C程序,输入a,b,c三个值,输出其中最大者。
四、实验心得体会及存在问题
指导教师批改意见:
批改日期:
1.求(a+b)×c的值。(设a=3,b=2,c=1)
main( )
{int a,b,c;
a=3;
;
c=1;
printf(“\n%d”,(a+b)*c);}
2.求圆的面积。
#define PI 3.14
main( )
{float r,area;
printf(“\n Enter r value:”);
scanf(“%f”,&r);
area=PI*r*r;
printf(“ \n area=%f”,); }
(四)调试程序
要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。
行号#include <stdio.h>
1 main( )
2 {int x,y;
3 x=5,y=8,
4 printf(“\n%d,%d,%d\n”,x,(x+5)*2,y); }
void main()
{printf(“*********************\n\n”);
printf(“ very good!\n\n”);
printf(“*********************\n”);
}
分析
结果
运行
结果
思考:可否采用一个输出函数实现此输出结果。
实验报告内容格式范文5篇

实验报告内容格式范文5篇实验报告内容格式范文5篇实验报告的分析讨论,主要分析实验结果和数值是否匹配,如果有误差,分析具体原因。
下面是小编为大家整理的实验报告格式范文,如果大家喜欢可以分享给身边的朋友。
实验报告格式内容范文【篇1】准备材料:一个玻璃杯、一枚硬币、小半杯水(最好是有颜色的)、蜡烛和一个平底的容器。
实验内容:在一个盘子里倒半杯水,放入一枚硬币。
手既不许接触到水,又不能把水倒出来,怎样才能把硬币取出来呢?实验过程:第1次:我们首先在平底的容器中倒入小半杯水,淹没硬币。
然后点燃一节蜡烛放在盘子里,罩上玻璃杯,蜡烛会因为缺氧停止燃烧,这时,外面的水便源源不断地涌进玻璃杯。
(可惜吸水不够多,所以没有把硬币取出来)结果:失败。
第2次:和第一次一样,失败。
第3次:我们换了一根大一点的蜡烛,这次流进去的水很多,成功。
第4次:我们用了两根蜡烛,不过因为杯子扣的太紧,杯口被盘子吸住,水没能流进玻璃杯,失败。
第5次:我把杯子扣下去的速度慢了一点点,导致蜡烛提前熄灭,失败。
第6次:同样是放了两根蜡烛,这次很正常,成功。
实验总结:我做这个实验是为了证实气体冷却后,能让压力下降,于是外面正常的大气压把盘子中的水挤进了杯中。
另外,在实验中,我观察到,用玻璃杯盖住蜡烛的时候,火焰不是马上熄灭,是继续燃烧一会儿才熄灭,说明玻璃杯的空气也是含有一定量的氧气的。
而做这个实验应注意:1、杯子不要扣的太慢,否则会让火焰提前熄灭导致实验失败。
2、水最好是有颜色的水,我选择在水中滴蓝墨水,效果不错,这样方便观看。
3、可以用燃烧的纸片代替蜡烛,但是水一定要放少一点,放多了难吸光。
4、要保持距离,让火焰离自己远一点。
实验报告格式内容范文【篇2】电路实验课已经结束,请按题目要求认真完成实验报告,并要仔细检查一遍,以免退回,具体要求如下:一、绘制电路图要工整、选取适宜比例,元件参数标注要准确、完整。
二、计算题要有计算步骤、解题过程,要代具体数据进行计算,不能只写得数。
实验报告模板 (1)

再一次,老师将指令细化,同学更具指令动作
睁开眼睛,展开纸,发现只有1个、2个,两种情况,且2个的情况占大多数
三、实验心得(结合理论知识谈谈自己的心得和收获,请着重论述)
信息的处理具有主观性,所以相同的指令会造成不同的结果。但是如果将指令细化,尽量考虑到细节,则最终的差异将会大大减少。所以在公司的决策传达时应考虑指令的清晰明确,以便尽量减少理解上的差异,以便于更好的完成决策
管理学实验报告
实验名称
信息的传达
专业班级
酒店管理一班
姓名学号
胡晶旌2014064138
小组号
5
1、实验接收和处理信息的准确性
二、实验内容(对实验过程及结果进行描述和说明)
每人一张白纸,闭上眼睛,听从老师的指令
老师说出指令,同学闭上眼睛听从指令折叠白纸,撕下指令中所指的纸角。
实验报告封面及格式(一)

实验报告封面及格式(一)引言概述:
实验报告封面及格式是实验报告写作中非常重要的一部分。
封面是实验报告的开篇,能够提供报告的基本信息,并为读者提供整体的概览。
而格式则是规范实验报告的排版和呈现方式,使报告更加易读和专业。
本文将从封面设计、报告标题、作者信息、日期和编号以及报告目录等方面探讨实验报告封面及格式的相关要点。
正文内容:
一、封面设计
1. 封面的设计应简洁大方,突出实验报告的主题。
2. 封面可以包含实验报告的标题、作者和机构的名称,以及相应的标志或图标。
3. 可以使用不同字体、字号和颜色来设计标题,使其醒目易读。
二、报告标题
1. 报告标题应简明扼要,能够准确概括实验的内容和目的。
2. 可以使用粗体、居中和加大字号等方式使标题突出。
三、作者信息
1. 应在封面上标明作者的姓名、学号和所在机构信息。
2. 作者信息应按一定格式排列,如姓名在上,学号在下,均使用统一的字体和字号。
四、日期和编号
1. 封面上应标明实验报告的完成日期。
2. 可以为实验报告编号,方便文档归档和检索。
五、报告目录
1. 报告目录应按照章节和页码的顺序进行编排,以便读者快速导航报告内容。
2. 目录的标题和页码应使用清晰可辨的字体和字号,并居中显示。
总结:
实验报告封面及格式对于报告的整体形象和读者阅读体验具有重要影响。
设计简洁大方的封面、准确明了的报告标题、清晰规范的作者信息、明确的日期和编号、以及规范的报告目录可以提高报告的可读性和专业性。
在编写实验报告时,应注意封面及格式的设计和排版,以确保报告的质量和效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1实验报告格式《计算机图形学》实验1实验报告实验题目:用户坐标、视图坐标、Java awt坐标概念的建立和应用实验内容:掌握用户坐标、视图坐标、Java awt坐标概念,掌握三类坐标的转换算法。
编写自己的算法函数,并形成Java语言程序包。
编写程序调用验证之。
参考程序:有两个示范程序MyTest.java和MyLineDrawApplet.java基本概念:用户坐标:是独立于设备的逻辑坐标,可以是用户用来定义设计对象的各种坐标。
应用程序使用该坐标系:所有传给Java 2D渲染过程的坐标都是指用户坐标。
例如下面程序中的默认用户坐标的范围是X轴从-1到1,Y轴也是凑够-1到1。
视图坐标:是设备相关的坐标,随目标渲染设备不同而不同。
下面程序中定义的视图坐标的缺省值为(0,0)和(1,1)。
Java awt坐标:使用java.awt时使用的坐标,即窗口显示图像时的边界坐标。
填充:这个过程可以抽象的理解为以已知的线为中心,向周围扩展像素,然后对这些像素所在的方块进行着色。
将用户坐标转换为视图坐标实际上是将独立于设备的逻辑坐标转换为设备相关的坐标,将视图坐标转化为A WT坐标就是将视图坐标按照显示窗口的大小进行缩放。
算法设计:(详细叙述自己设计程序的功能、算法及实现)程序的功能:可以根据传入的用户坐标进行视图坐标、A WT坐标之间的转换,其反向转换同理也可以实现,即将转换的方法逆过去即可。
此外,程序还可以进行图形的绘画和填充,比如矩形、椭圆、多边形等。
算法及其实现函数:用户坐标到视图坐标的转换:对于相应的用户坐标应用数学中的平移与放缩,就可以得到视图坐标。
具体方法如下:在用户坐标系下,设矩形窗口的左下角坐标为(Ux1,Uyb), 右上角为(Uxr,Uyt),视图坐标系下的两个点坐标分别为(Vx1,V yb)和(Vxr,V yt),则视图坐标的表达式为:(Xu,Y u)是已知的用户坐标,(Xv ,Y v)是要求的视图坐标Xv=aXu+b Y v=cY u+d其中:a=(Vxr-Vxl)/(Uxr-Uxl) b=Vxl-aUxlc=(V yt-V yb)/(Uyt-Uyb) d=V yb-cUyb//将用户坐标的点转换到视图坐标public double view_x(double x) {double s=(x-user_i_x)/(user_a_x- user_i_x);double t=view_i_x[currentV iew]+s* //坐标的平移及压缩(view_a_x[currentView]-view_i_x[currentV iew]);return t;}public double view_y(double y) {double s=(y-user_i_y)/(user_a_y-user_i_y);double t=view_i_y[currentV iew]+s* //坐标的平移及压缩(view_a_y[currentView]-view_i_y[currentV iew]);return t;}视图坐标到A WT坐标的转换:由于视图坐标在0到1之间,因此将显示窗口的宽和高按照视图坐标缩小就得到A WT坐标。
具体算法如下:视图坐标为(Vx ,V y),窗口的宽和高分别为:Ww和Wh,A WT坐标为(X,Y),其中X、Y均为整数,因此计算之后应将计算结果转为整数,并且与V y坐标方向相反。
那么X=Vx*Ww Y=(1-V y)*Wh//将视图坐标系的点转换到Java A WT坐标public int getIntX(double x) {return (int)(windowWidth * x); //注意视图坐标0-1之间}public int getIntY(double y) {return (int)(windowHeight * (1-y)); //Y轴方向相反}用户坐标到A WT坐标的转换:先按照用户坐标转视图坐标的方法转为视图坐标,然后按照视图坐标转A WT坐标的方法转为A WT坐标,简而言之,就是将第一种和第二种转换相结合。
//将用户坐标的点转换到Java A WT坐标public int getX(double x) {double xx=view_x(x); //先将x转换到视图坐标int ix=getIntX(xx); //将视图坐标转换到Java A WT坐标return ix;}public int getY(double y) {double yy=view_y(y); //先将y转换到视图坐标int iy=getIntY(yy); //将视图坐标转换到Java A WT坐标return iy;}椭圆的画法:用到圆心坐标和两个半径,画的时候首先将用户坐标转成java A WT坐标。
public void drawOval(double x, double y, double xr, double yr) {// 圆心从用户坐标转换到Java A WT坐标int ix = getX(x);int iy = getY(y);int ixr = getDimensionX(xr); // x轴半径投影到Java A WT坐标int iyr = getDimensionX(yr); // y轴半径投影int x0 = ix - ixr; // 椭圆外切矩形的左上角x坐标int y0 = iy - iyr; // 椭圆外切矩形的左上角y坐标graphics.drawOval(x0, y0, 2 * ixr, 2 * iyr);}代码:(给出主要的Java程序和注解)package first;import java.io.*;import java.awt.*;import java.awt.image.*;//定义容器类public class MyTest extends Component {//用户坐标系范围缺省值([-1,1],[-1,1])protected double user_i_x=-1; //用户坐标系X轴的最小值protected double user_a_x=1; //用户坐标系X轴的最大值protected double user_i_y=-1; //用户坐标系Y轴的最小值protected double user_a_y=1; //用户坐标系Y轴的最大值//视图的坐标范围缺省值([0,1],[0,1])protected double[] view_i_x; //各视图X轴最小值的数组protected double[] view_a_x; //各视图X轴最大值的数组protected double[] view_i_y; //各视图Y轴最小值的数组protected double[] view_a_y; //各视图Y轴最大值的数组final static int DefaultViewport_a=256; //缺省的视图数protected int viewport_a=DefaultViewport_a; //最大视图数protected int viewportNum=0; //当前视图数protected int currentView=0; //当前视图的索引号//窗口大小final static int DefaultWindowSize=256; //缺省的窗口大小protected int windowWidth=DefaultWindowSize; //窗口宽度protected int windowHeight=DefaultWindowSize; //窗口宽度//定义Java A WT 的Graphics 和Componentprotected Graphics graphics; //MyTest的Graphics数据类protected Component component; //MyTest的component数据类protected Color fontColor=Color.white; //当前前景颜色protected Color backColor=Color.white; //当前背景色//构造方法public MyTest(Component a) {component=a; //设定MyTest类所用的Componentgraphics=a.getGraphics(); //设定MyTest类所用的graphicswindowWidth=a.getSize().width; //窗口宽度windowHeight=a.getSize().height; //窗口高度createViewport(DefaultViewport_a); //创建视图}//创建视图private void createViewport(int max) {currentV iew=0; //设定当前视图索引号viewport_a=max; //设定视图数的最大值view_i_x=new double[viewport_a]; //存放各视图X轴最小值view_a_x=new double[viewport_a]; //存放各视图X轴最大值view_i_y=new double[viewport_a]; //存放各视图y轴最小值view_a_y=new double[viewport_a]; //存放各视图y轴最大值view_i_x[currentView]=0.0; //设定当前视图的坐标轴范围view_i_y[currentView]=0.0;view_a_x[currentV iew]=1.0;view_a_y[currentV iew]=1.0;viewportNum=1; //当前视图数}//设定用户坐标系范围public void setWindow(double x1,double x2,double y1,double y2) { user_i_x=x1; //设定窗口(用户坐标系)X轴的最小值user_a_x=x2; //设定窗口(用户坐标系)X轴的最大值user_i_y=y1; //设定窗口(用户坐标系)y轴的最小值user_a_y=y2; //设定窗口(用户坐标系)y轴的最大值}//设定视图public void setViewport(double x1,double x2,double y1,double y2) { currentV iew=viewportNum; //设定新的当前视图索引号viewportNum++; //当前视图数加1view_i_x[currentView]=x1; //存放视图的X轴最小值view_a_x[currentV iew]=x2; //存放视图的X轴最大值view_i_y[currentView]=y1; //存放视图的y轴最小值view_a_y[currentV iew]=y2; //存放视图的y轴最大值}//视图复位public void resetViewport() {currentV iew=0; //当前视图索引号重归于零view_i_x[currentView]=0.0; //设定当前视图的坐标轴范围view_i_y[currentView]=0.0;view_a_x[currentV iew]=1.0;view_a_y[currentV iew]=1.0;viewportNum=1; //当前视图数}//将视图坐标系的点转换到Java A WT坐标public int getIntX(double x) {return (int)(windowWidth * x); //注意视图坐标0-1之间}public int getIntY(double y) {return (int)(windowHeight * (1-y)); //Y轴方向相反}//将用户坐标的点转换到视图坐标public double view_x(double x) {double s=(x-user_i_x)/(user_a_x-user_i_x);double t=view_i_x[currentV iew]+s* //坐标的平移及压缩(view_a_x[currentView]-view_i_x[currentV iew]);return t;}public double view_y(double y) {double s=(y-user_i_y)/(user_a_y-user_i_y);double t=view_i_y[currentV iew]+s* //坐标的平移及压缩(view_a_y[currentView]-view_i_y[currentV iew]);return t;}//将用户坐标的点转换到Java A WT坐标public int getX(double x) {double xx=view_x(x); //先将x转换到视图坐标int ix=getIntX(xx); //将视图坐标转换到Java A WT坐标return ix;}public int getY(double y) {double yy=view_y(y); //先将y转换到视图坐标int iy=getIntY(yy); //将视图坐标转换到Java A WT坐标return iy;}//将用户坐标系的宽度、高度值投影到Java A WT坐标public int getDimensionX(double w) {double x=view_a_x[currentV iew]-view_i_x[currentView];x*=windowWidth*w/(user_a_x-user_i_x); //按比例投影,经由视图坐标系return ((int)Math.abs(x)); //用户坐标系可能反向}public int getDimensionY(double h) {double y=view_a_y[currentV iew]-view_i_y[currentView];y*=windowHeight*h/(user_a_y-user_i_y); //按比例投影,经由视图坐标系return ((int)Math.abs(y)); //用户坐标系可能反向}//有关当前颜色的设定方法:画笔颜色、前景色、背景色public Color getColor() {return fontColor; //得到当前颜色序号}public void setColor(Color c) {graphics.setColor(c); //设置图形对象的颜色fontColor=c; //设定当前颜色序号}public Color getForeground() {return fontColor; //得到当前前景色序号}public void setForeground(Color c) {component.setForeground(c); //设置前景色fontColor=c; //设定当前前景色序号}public Color getBackground() {return backColor; //得到当前背景色序号}public void setBackground(Color c) {component.setBackground(c); //设置背景色backColor=c; //设定当前背景色序号}//-----各类图形的描画方法-----------//直线画法:两点式参数public void drawLine(double x1,double y1,double x2,double y2) { //从用户的点坐标转换到Java A WT坐标int ix1=getX(x1); int iy1=getY(y1);int ix2=getX(x2); int iy2=getY(y2);graphics.drawLine(ix1,iy1,ix2,iy2); //这个方法它是怎样画直线的?}//矩形画法:对角式参数public void drawRect(double x1,double y1,double x2,double y2) { //从用户的点坐标转换到Java A WT坐标int ix1=getX(x1); int iy1=getY(y1);int ix2=getX(x2); int iy2=getY(y2);int ix0=(ix1<ix2)?ix1:ix2; //矩形左上角坐标int iy0=(iy1<iy2)?iy1:iy2;int width=Math.abs((ix1-ix2))+1; //矩形宽度,单位像素int height=Math.abs((iy1-iy2))+1; //矩形高度graphics.drawRect(ix0,iy0,width,height);}//矩形填充public void fillRect(double x1,double y1,double x2,double y2) { //从用户的点坐标转换到Java A WT坐标int ix1=getX(x1); int iy1=getY(y1);int ix2=getX(x2); int iy2=getY(y2);int ix0=(ix1<ix2)?ix1:ix2; //矩形左上角坐标int iy0=(iy1<iy2)?iy1:iy2;int width=Math.abs((ix1-ix2))+1; //矩形宽度,单位像素int height=Math.abs((iy1-iy2))+1; //矩形高度graphics.fillRect(ix0,iy0,width,height); //填充算法如何实现?}//椭圆的画法(圆心坐标和两个半径)public void drawOval(double x,double y,double xr,double yr) {//圆心从用户坐标转换到Java A WT坐标int ix=getX(x); int iy=getY(y);int ixr=getDimensionX(xr); //x轴半径投影到Java A WT坐标int iyr=getDimensionX(yr); //y轴半径投影int x0=ix-ixr; //椭圆外切矩形的左上角x坐标int y0=iy-iyr; //椭圆外切矩形的左上角y坐标graphics.drawOval(x0,y0,2*ixr,2*iyr);}//椭圆的填充(圆心坐标和两个半径)public void fillOval(double x,double y,double xr,double yr) {//圆心从用户坐标转换到Java A WT坐标int ix=getX(x); int iy=getY(y);int ixr=getDimensionX(xr); //x轴半径投影到Java A WT坐标int iyr=getDimensionX(yr); //y轴半径投影int x0=ix-ixr; //椭圆外切矩形的左上角x坐标int y0=iy-iyr; //椭圆外切矩形的左上角y坐标graphics.fillOval(x0,y0,2*ixr,2*iyr);}//多边形public void drawPolygon(double[] x,double[] y,int numPoints) { int[] ix=new int[numPoints];int[] iy=new int[numPoints];for(int i=0;i<numPoints;i++) {ix[i]=getX(x[i]); //从用户坐标点转换到Java A WT坐标iy[i]=getY(y[i]);}graphics.drawPolygon(ix,iy,numPoints); //封闭的折线图}//多边形填充public void fillPolygon(double[] x,double[] y,int numPoints) { int[] ix=new int[numPoints];int[] iy=new int[numPoints];for(int i=0;i<numPoints;i++) {ix[i]=getX(x[i]); //从用户坐标点转换到Java A WT坐标iy[i]=getY(y[i]);}graphics.fillPolygon(ix,iy,numPoints); //掌握填充的算法是重点}//写字符串public void drawString(String str,double x,double y) {//从用户坐标点转换到Java A WT坐标int ix=getX(x); int iy=getY(y);graphics.drawString(str,ix,iy);}//获取当前Graphics类的字体public Font getFont() {return graphics.getFont();}//设定当前Graphics类的字体public void setFont(Font f) {graphics.setFont(f);}//定义一种字体:仅对window已有字体放大尺寸public Font MyFont(String name,int style,double size) {int DefaultFontSize=12;if(size<=0) size=1.0; //字体大小不能为负数int isize=(int)(DefaultFontSize*size); //定义字体的大小Font f=new Font(name,style,isize); //构造字体return f;}//Java A WT坐标系到视图坐标系的反向转换public int getViewport(int ix,int iy){if(viewportNum==1) return 0; //默认视图double s=(double)(ix)/(double)windowWidth;double t=(double)(windowHeight-iy)/(double)windowHeight;for(int i=0;i<viewportNum;i++) { //视图索引号if(s>=view_i_x[i] && s<=view_a_x[i] &&t>=view_i_y[i] && t<=view_a_y[i]) return i;}return 0;}//视图到用户坐标系的反向转换(x坐标)public double getUserX(int ix,int v) {double t=(double)(ix)/(double)windowWidth;double x=user_i_x+(t-view_i_x[v])/(view_a_x[v]-view_i_x[v])*(user_a_x-user_i_x);return x;}//视图到用户坐标系的反向转换(y坐标)public double getUserY(int iy,int v) {double t=(double)(windowHeight-iy)/(double)windowHeight;double y=user_i_y+(t-view_i_y[v])/(view_a_y[v]-view_i_y[v])*(user_a_y-user_i_y);return y;}//******线段光栅化的成员变量********protected Image image; //Java图像类的对象protected MemoryImageSource mis; //内存图像数据源protected int pixelWidth; //图像点阵的宽度(像素数)protected int pixelHeight; //图像点阵的高度(像素数)protected int[] pixel; //存放图像点的颜色(行优先一维存放)protected int xoffset; //像素数据窗口内X坐标的偏移protected int yoffset; //像素数据窗口内Y坐标的偏移//直线(光栅化)实数型Bresenham算法public void rasterizeDrawLine(double x1,double y1,double x2,double y2) { double leftTopx,leftTopy;//从用户坐标到Java A WT坐标int ix1=getX(x1);int iy1=windowHeight-getY(y1); //到窗口下方的像素数int ix2=getX(x2);int iy2=windowHeight-getY(y2); //到窗口下方的像素数if(x1<x2){leftTopx=x1; //左上角的X坐标值设为x1(用户坐标)xoffset=ix1; //窗口中的偏移量是Java A WT坐标}else{leftTopx=x2; //左上角的X坐标值设为x2(用户坐标)xoffset=ix2; //窗口中的偏移量是Java A WT坐标}if(y1<y2){ //用户坐标原点在左下,Java A WT在左上leftTopy=y2; //左上角的y坐标值设为y2yoffset=iy1; //窗口中的偏移量是Java A WT坐标}else{ //用户坐标原点在左下,Java A WT在左上leftTopy=y1; //左上角的y坐标值设为y1(用户坐标)yoffset=iy2; //窗口中的偏移量是Java A WT坐标}int dx=ix2-ix1; //取得X向的间距int dy=iy2-iy1; //取得y向的间距int adx=Math.abs(dx); //X向的间距的绝对值int ady=Math.abs(dy); //Y向的间距的绝对值pixelWidth=adx+1; //图像点阵的宽度(像素数)pixelHeight=ady+1; //图像点阵的高度(像素数)//一维数组存放图像点的颜色(行优先)pixel=new int[pixelWidth*pixelHeight];for(int k=0;k<pixelWidth*pixelHeight;k++)pixel[k]=0x00000000; //预设透明背景,32位0int sx=(dx>0)?1:-1; //取正负号,1或者-1int sy=(dy>0)?1:-1;int x=ix1; //x从ix1开始循环int y=iy1; //y从iy1开始循环if(adx==0) { //说明这是平行于Y轴的直线for(int j=1;j<=ady;j++) {myPutPixel(x,y); //调用同类成员函数,设当前定像素颜色y+=sy; //y坐标的改变量为1或者-1个像素}}else if(ady==0) { //说明这是平行于x轴的直线for(int i=1;i<=adx;i++) {myPutPixel(x,y); //调用同类成员函数,设当前定像素颜色i+=sx; //x坐标的改变量为1或者-1个像素}}else if(adx>ady) { //直线走向贴近x轴方向double d=(double)dy/(double)dx; //直线斜率double ty=(double)y;for(int i=1;i<=adx;i++,x+=sx) { //x增加1或者-1个像素myPutPixel(x,y); //调用同类成员函数,设定当前像素颜色ty+=sx*d; //y坐标相应的改变量(像素)if(Math.abs(ty-y)>Math.abs(ty-y-sy))y+=sy; //沿y向前进了一个像素}}else { //直线走向贴近Y轴方向(adx<=ady)double d=(double)dx/(double)dy; //直线斜率double tx=(double)x;for(int j=1;j<=ady;j++,y+=sy) { //y增加1或者-1个像素myPutPixel(x,y); //调用同类成员函数,设当前定像素颜色tx+=sy*d; //y坐标相应的改变量(像素)if(Math.abs(tx-x)>Math.abs(tx-x-sx))x+=sx; //沿x向前进了一个像素}}/**作成内存图像源**/mis=new MemoryImageSource(pixelWidth,pixelHeight,pixel,0,pixelWidth); //生成内存图像有五个参数image=createImage(mis); //生成图像/**调用显示图像方法,需要四个参数**/myDrawImage(image,leftTopx,leftTopy,this);} //结束Bresenham算法//设定当前像素的颜色public void myPutPixel(int i,int j) {int r=getColor().getRed()&0xff; //获取当前红色值int g=getColor().getGreen()&0xff; //绿色值int b=getColor().getBlue()&0xff; //蓝色值int a=0xff000000|(r<<16)|(g<<8)|b;//组成像素值为32位二进制数,存放到像素数组的相应位置pixel[(pixelHeight-1-(j-yoffset))*pixelWidth+(i-xoffset)]=a;//其它位置为初始设置的透明色,不覆盖原来已显示的像素}//图像的显示public boolean myDrawImage(Image img,double x,double y,ImageObserver observer) {//从用户坐标点转换到Java A WT坐标int ix=getX(x); int iy=getY(y);//调用A WT的图像显示return graphics.drawImage(img,ix,iy,observer);}//******画笔移动方法*******protected double lastX=0; //画笔当前位置X坐标protected double lastY=0; //画笔当前位置Y坐标//抬笔移动到指定位置public void moveTo(double x,double y) {lastX=x; //更新画笔的当前位置lastY=y;}//落笔移动到指定位置public void lineTo(double x,double y) {drawLine(lastX,lastY,x,y); //画直线lastX=x; //更新画笔的当前位置lastY=y;}} //结束MyTest类package first;import first.MyTest; //引入自制包中的类MyTestimport java.applet.Applet;import java.awt.*;//===============测试MyTest类==================//定义主类MyLineDrawAppletpublic class MyLineDraw Applet extends Applet {MyTest m; //定义对象//Applet程序的自动初始化方法public void init(){m=new MyTest(this); //构造方法有参数}//Applet程序的绘图方法public void paint(Graphics g){m.setBackground(new Color(200,200,200)); //背景色灰白m.setColor(Color.black);//设定前景色为黑色m.setWindow(-1,1,-1,1); //设定用户坐标系范围//缺省的视图为m.setV iewport(0,1,0,1)和Java A WT窗口大小一样//画X轴double[] x1={0.95,1.0,0.95}; //箭头三个点的X坐标double[] y1={-0.03,0.0,0.03}; //箭头三个点的Y坐标m.drawLine(-1,0,1,0); //画X轴m.fillPolygon(x1,y1,3); //填充箭头m.drawString("X轴",0.8,-0.1); //X轴写字符串//画Y轴double[] y2={0.95,1.0,0.95}; //箭头三个点的Y坐标double[] x2={-0.03,0.0,0.03}; //箭头三个点的X坐标m.drawLine(0,-1,0,1); //画Y轴m.fillPolygon(x2,y2,3); //填充箭头m.drawString("Y轴",-0.2,0.9); //Y轴写字符串//画线m.setColor(Color.GREEN);m.drawLine(-1,-1,1,1); //画对角直线//利用光栅化Bresenham算法画直线m.setColor(Color.BLUE); //设定前景色为红色//画矩形m.drawRect(-0.5, 0.5, 0.5, -0.5);//画椭圆m.drawOval(-0.5, 0.5, 0.5, 0.3);m.setColor(Color.RED);//写字m.drawString("蔡敏沙作业", 0.5, -0.8);}} //主类MyLineDrawApplet运行结果:(给出运行结果的截屏和说明)第一幅截图中程序只调用了画直线的方法,因此画了一条直线,第二个分别又调用了画矩形和画椭圆的方法。