版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实用文档实验一技术开发文档1.需求分析(1)提示输入并显示输入的点的坐标。(2)已知直线上两点的坐标,采用两点式求直线方程,并显示直线长度。(3)输入圆的半径,根据圆周长、面积公式,求取并显示圆的周长、面积。(4)据上已输入两点为坐标求取矩形的面积。(5)以上输入的一点作为抛物线的焦点,再输入任意x值,求取对应的纵坐标与抛物线P值,确定抛物线的标准式。2.概念抽象(1)定义点类,在点类中定义构造函数Point(),析构函数~Point()、virtualShow、doubleGetX()、doubleGetY()五个函数与变量x,y,xx,yy,。(2)定义线类,在线类中定义input()、doubleGetLineLengh()、virtualShow()三个函数与变量Pa、Pb、pa、pb。(3)定义圆类,在圆类中定义Radius变量以及Circle()、~Circle()、doubleGetCircleS()、doubleGetRadius()、virtualShow()五个函数与Radius、Rr变量。(4)定义矩形类,在矩形类中定义Rect()、doubleGetRectS()、virtualShow()三个函数与变量Pc、Pd、pc、pd。(5)定义抛物线类,在抛物线类中定义Parabola()、virtualShow()两个函数与变量Pe、Pf、pe、pf、x、y、p。注:函数定义及功能详见附件。3.类的分析及说明实验二技术开发文档1.需求分析(1)定义AD、DA板卡类,完成对板卡的封装;(2)实现单通道和多通道的单点采集、多点采集、大批量采集;(3)实现单通道和多通道的单点输出、多点输出;2.现实世界(1)AD采集PCI8735板卡AD采集过程为创建设备对象、判断创建设备对象是否成功、用户从键盘选择输入量程、设置硬件参数、初始化AD、判断AD初始化是否成功、数据采集、电压转换并显示。定义AD板卡类,定义了ADinit()、ADSet()、ADRead()、ReleaseAD()四个函数来从而完成对板卡的封装。在主函数中直接调用几个函数即可。注:函数定义及具体应用详见附件3.类的分析及说明附件一点、线、圆、矩形、抛物线的对象定义源代码#include<iostream>usingnamespacestd;#include<cmath>classPoint{public:doublex; doubley; Point(){} Point(doublexx,doubleyy){x=xx;y=yy;} ~Point(){} doubleGetX(){returnx;} doubleGetY(){returny;} virtualShow() { cout<<"点坐标为("<<GetX()<<","<<GetY()<<")"<<endl; }private: doublexx; doubleyy;};//线由点派生classLine:publicPoint{public: PointPa; PointPb; Line(){} Line(Pointpa,Pointpb){Pa=pa;Pb=pb;} doubleGetLineLengh()//获取直线长度 { //doubleLx=(Pb.GetX()-Pa.GetX())*(Pb.GetX()-Pa.GetX()); //doubleLy=(Pb.GetY()-Pa.GetY())*(Pb.GetY()-Pa.GetY()); returnsqrt((Pb.GetX()-Pa.GetX())*(Pb.GetX()-Pa.GetX())+(Pb.GetY()-Pa.GetY())*(Pb.GetY()-Pa.GetY())); } virtualShow() { cout<<"线段ab的长度为"<<GetLineLengh()<<endl; }private: doublepa; doublepb;};//圆由点派生classCircle:publicPoint{ public: doubleRadius; Circle(){} Circle(doubleRr){Radius=Rr;} ~Circle(){} doubleGetCircleS(){return(double)2*3.14*Radius;} doubleGetRadius(){return(double)3.14*Radius*Radius;} virtualShow() { cout<<"圆半径为"<<Radius<<endl; cout<<"圆周长为"<<GetCircleS()<<endl; cout<<"圆面积为"<<GetRadius()<<endl; } private: doubleRr; };//矩形由线派生classRect:publicPoint{public: PointPc; PointPd; Rect(){} Rect(Pointpc,Pointpd){Pc=pc;Pd=pd;} doubleGetRectS() { returnabs((Pd.x-Pc.x)*(Pd.y-Pc.y)); } virtualShow() { cout<<"矩形面积为"<<GetRectS()<<endl; }private: doublepc; doublepd; };/*矩形由线派生classRect:publicPoint{public:}*///抛物线由点派生classParabola:publicPoint{public: PointPe; PointPf; Parabola(){} Parabola(Pointpe,Pointpf){Pe=pe;Pf=pf;} virtualShow(){ cout<<"焦点:("<<Pf.GetX()<<","<<Pf.GetY()<<")"<<endl; cout<<"输入任一点横坐标x的值:x="; cin>>x; y=sqrt(4*Pf.GetX()*x); p=2*Pf.GetX(); cout<<"x对应的两点纵坐标的值为:y="<<"±"<<y<<endl; cout<<"抛物线对应的:p="<<p<<endl; }private: Pointpoint1,point2; doublex; doubley; doublep; doublepf; doublepe;};voidmain(){ Pointp1;Pointp2; Circlecircle; cout<<"请输入p1点坐标"<<endl; cin>>p1.x; cin>>p1.y; p1.Show(); cout<<"请输入p2点坐标"<<endl; cin>>p2.x; cin>>p2.y; p2.Show(); Lineab(p1,p2); ab.Show(); cout<<"请输入圆半径"<<endl; cin>>circle.Radius; circle.Show(); RectRect(p1,p2); Rect.Show(); ParabolaParabola(p1,p2); Parabola.Show();}}附件二AD采集源代码---------------------------------AD.h--------------------------------#ifndef_AD_#define_AD_#include"windows.h"#include"PCI8932.h"classCAD{public: CAD(); intADinit(HANDLEhDevice); voidADSet(HANDLEhDevice); intADRead(HANDLEhDevice); voidReleaseAD(HANDLEhDevice);private: PCI8932_PARA_ADADPara; //doubleVOLTin; //doubleDataout;};#endif---------------------------------AD.cpp------------------------------#ifndef_AD_CPLUSPLUS_#define_AD_CPLUSPLUS_#include"AD.h"#include"windows.h"#include"PCI8932.h"#include"stdio.h"#include"conio.h"#include"math.h"intSelectGroundingMode(void);intSelectInputRange(void);intSelectGains(void);#defineAD_DATA_LEN1024*8USHORTADBuffer[AD_DATA_LEN];DWORDdwError;charstrErrorMsg[256];CAD::CAD(){ memset(&ADPara,0,sizeof(ADPara));}intCAD::ADinit(HANDLEhDevice){ DWORDdwError; charstrErrorMsg[256]; if(hDevice==INVALID_HANDLE_VALUE) { dwError=PCI8932_GetLastErrorEx("PCI8932_CreateDevice",strErrorMsg); printf("dwError=%x,%s\n",dwError,strErrorMsg); return0; } return1;}voidCAD::ADSet(HANDLEhDevice){ memset(&ADPara,0,sizeof(ADPara)); printf("pleaseinputtheNOofthefirstchannelandthelastchannel:\n"); scanf("%d",&ADPara.FirstChannel); scanf("%d",&ADPara.LastChannel); if(ADPara.FirstChannel<0) { printf("thewrongChannel,inputagain\n"); scanf("%d",&ADPara.FirstChannel); } if(ADPara.FirstChannel>ADPara.LastChannel) { printf("theLastChannelmustbemorethantheFirstChannel\n"); scanf("%d",&ADPara.LastChannel); } printf("pleasesettherangeoftheinputvoltage,thegroudingmodeandthegains:\n"); ADPara.InputRange=SelectInputRange(); ADPara.GroundingMode=SelectGroundingMode(); ADPara.Gains=SelectGains(); if(0==ADPara.GroundingMode) { if(ADPara.LastChannel>15) printf("thewronglastchannel,inputagain\n"); } else { if(ADPara.LastChannel>7) printf("thewronglastchannel,inputagain\n"); } if(!PCI8932_InitDeviceAD(hDevice,&ADPara)) { dwError=PCI8932_GetLastErrorEx("PCI8932_CreateDevice",strErrorMsg); printf("dwError=%x,%s\n",dwError,strErrorMsg); getch();// PCI8932_ReleaseDeviceAD(hDevice);// PCI8932_ReleaseDevice(hDevice); }}intCAD::ADRead(HANDLEhDevice){ LONGnReadSizewords; LONGnRetSizewords=0; intReadCount=0; intChannelCount=ADPara.LastChannel-ADPara.FirstChannel+1; BOOLbFirstWait=TRUE; nReadSizewords=512-512%ChannelCount; ReadCount=16*ChannelCount; USHORTADData; floatfVolt; while(!kbhit()) { bFirstWait=TRUE; if(bFirstWait) { printf("请等待,您可以按任意键退出,但请不要直接关闭窗口强制退出...\n"); bFirstWait=FALSE; } if(!PCI8932_ReadDeviceAD(hDevice,ADBuffer,nReadSizewords,&nRetSizewords)) { dwError=PCI8932_GetLastErrorEx("PCI8932_ReadDeviceAD",strErrorMsg); printf("dwError=%x,%s\n",dwError,strErrorMsg); getch(); ReleaseAD(hDevice); } intnADChannel=ADPara.FirstChannel; for(intIndex=0;Index<ReadCount;Index++) { if(kbhit())ReleaseAD(hDevice); ADData=ADBuffer[Index]&0x1FFF; ADData=ADData/pow(2,ADPara.Gains); switch(ADPara.InputRange) { casePCI8932_INPUT_N10000_P10000mV://-10V-+10V fVolt=(float)((20000.00/8192)*ADData-10000.00); break; casePCI8932_INPUT_N5000_P5000mV://-5V-+5V fVolt=(float)((10000.00/8192)*ADData-5000.00); break; casePCI8932_INPUT_N2500_P2500mV://-2.5V-+2.5V fVolt=(float)((5000.00/8192)*ADData-2500.00); break; casePCI8932_INPUT_0_P10000mV://0V-+10V fVolt=(float)((10000.00/8192)*ADData); break; default: printf("InputRangeError...\n"); getch(); return0; } //printf("CH%02d=%6.2f\t",nADChannel,fVolt); printf("CH%02d=%d\t",nADChannel,ADData); nADChannel++; if(nADChannel>ADPara.LastChannel) { nADChannel=ADPara.FirstChannel; printf("\n"); } } Sleep(200); } return0;}voidCAD::ReleaseAD(HANDLEhDevice){ PCI8932_ReleaseDeviceAD(hDevice); PCI8932_ReleaseDevice(hDevice);}intSelectGroundingMode(void){ LONGGMode;Repeat2: printf("\n"); printf("0.thesingle-endedGroudingMode\n"); printf("1.thedoubleendedGroudingMode\n"); printf("PleaseSelectGroudingMode[0-1]:");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国铝合金电缆行业现状态势与应用趋势预测研究报告(2024-2030版)
- 中国钍矿行业运营态势及投资盈利预测研究报告(2024-2030版)
- 中国菊苣市场规模预测与运营模式分析研究报告(2024-2030版)
- 中国芦笋罐头行业消费状况及经营效益预测研究报告(2024-2030版)
- 中国能效管理平台行业市场深度调研及投资前景战略研究报告(2024-2030版)
- 中国聚氨酯弹性体催化剂行业市场现状分析及竞争格局与投资发展研究报告(2024-2030版)
- 中国耐高温蒸汽胶行业市场现状分析及竞争格局与投资发展研究报告(2024-2030版)
- 中国终端模拟器行业市场现状分析及竞争格局与投资发展研究报告(2024-2030版)
- 中国索道缆车行业盈利态势及需求动态预测研究报告(2024-2030版)
- 中国第三方检测服务行业市场深度调研及竞争格局与投资研究报告(2024-2030版)
- 初中语文八年级上册《与朱元思书》作业设计
- 检验科新员工岗前培训
- 化工装置拆除方案
- 小学生国防教育课件
- 基于人工智能的教育评估体系设计
- 【蜜雪冰城的核心竞争力分析及提升策略研究9600字(论文)】
- 中学拔尖创新人才选拔与培养方案
- 2023年国家公务员录用考试《行测》副省级卷(网友回忆版)及答案解析
- 2023年江苏省江都区“乡村振兴好青年”招聘162人笔试参考题库(共500题)答案详解版
- 单片机原理与应用(C51编程+Proteus仿真) 课件全套 刘霞 第1-10章 单片机概述- 单片机应用系统综合设计
- 2023年《高中体育与健康新课标》测评考试题库汇总(含答案)
评论
0/150
提交评论