C++-空间三维点类型_第1页
C++-空间三维点类型_第2页
C++-空间三维点类型_第3页
C++-空间三维点类型_第4页
C++-空间三维点类型_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+程序设计课程实验 空间三维点类型哈尔滨工业大学计算机科学与技术学院课程实验:空间三维点类型课程名称:算法设计与分析课程类型:必修目录空间三维点类型1一 实验题目3实验1:定义并实现一个平面点类3实验2:从平面点类Point采用继承的方式,派生三维空间点类Point3D3实验3:定义并实现折线类Curve3D3二 实现构思41.平面点类42.三维点类53.三维折线类6三 测试程序14四 实验结果161.缺省构造对象162.设定初始值构造对象163.重载加法164.重载减法175.文本文件读写176.二进制文件读写17五 实验感想181.找到原型182.EOF的含义18一 实验题目实验1:定义

2、并实现一个平面点类1. Point,包含protected类型的数据成员m_x、m_y用于保存x轴、y轴两个坐标值,并具有如下数据成员:2. get_x()、get_y()用于获取x、y轴的坐标值3. set_x()、set_y()用于获取x、y轴的坐标值4. DisplayPoint()函数,用于输出点的全部信息(坐标等)5. 主程序从键盘输入点的坐标值,程序结束前输出点的信息。实验2:从平面点类Point采用继承的方式,派生三维空间点类Point3D1. 增加数据成员m_z(z轴坐标值)2. 增加成员函数set_z()、get_z()用于设定或获取z轴坐标数值3. 采用虚函数的方式重载Di

3、splayPoint输出三维空间点的全部信息。4. 主程序从键盘输入点的三维坐标值,程序结束前输出点的信息。实验3:定义并实现折线类Curve3D1. 该类的对象拥有至少1个空间点(Point3D类型的数据,用指针与动态空间申请实现),以及记录点数量的数据成员2. 编写带默认参数值的构造函数,折线默认的空间点为原点(0,0,0)3. 编写析构函数;4. 成员函数DisplayCurve用于输出折线的各个点的信息;5. 成员函数CurveLen用于计算并输出折线长度;6. 重载加号运算符+,可以将一个Point3D点增加到折线点序列中(表示将折线延长到改点处);7. 重载减号运算符-,可以将一个

4、Point3D点从折线点序列中删除(先在点序列中搜索,如果有要删除的点,就删除,如果没有,返回即可);8. 重载赋值运算符= 解决浅拷贝问题;9. 成员函数write_txt(ofstream &os),实现将折线数据写入文本文件的功能,文本文件每行保存一个点的三个坐标值,有多少个点,就有多少行;10. 成员函数read_txt(ifstream &is),实现从文本文件读入折线数据的功能,文本文件每行保存一个点的三个坐标值,有多少个点,就有多少行;11. 成员函数write_binary(ofstream &os) ,实现将折线数据写入二进制文件的功能;12. 成员函

5、数read_binary(ifstream &is) 实现从二进制文件读入折线数据的功能。二 实现构思为了体现各个类的继承关系,同时也为了减少单独一个头文件的大小,分别使用三个头文件实现平面点类、三维点类以及三维折线类。1.平面点类1. #include <iostream>2. #ifndef Point_h3. #define Point_h4.5. using namespace std;6.7. class Point8. 9. public:10. Point():m_x(0),m_y(0);11. Point(float x, float y):m_x(x),m

6、_y(y);12. Point();13.14. const float getx()15. 16. return m_x;17. 18. const float gety()19. 20. return m_y;21. 22. void setx(float xin)23. 24. m_x = xin;25. cout << "x is updated as " << m_x << endl;26. return;27. 28. void sety(float yin)29. 30. m_y = yin;31. cout <<

7、; "y is updated as " << m_y << endl;32. return;33. 34.35. void DisplayPoint()36. 37. cout << "The position of the point is (" << m_x << ',' << m_y << ")" << endl;38. return;39. 40. protected:41. float m_x, m_y;42.

8、;43. #endif / Point_h2.三维点类增加了成员变量m_z以及相应的设定、读取函数,重载了展示函数。1. #include <iostream>2. #include "Point.h"3. #ifdef Point_h4. #ifndef Point3D_h5. #define Point3D_h6.7. class Point3D:public Point8. 9. protected:10. float m_z;11. public:12. Point3D():m_z(0);13. Point3D(const Point3D&);1

9、4. Point3D(float x,float y,float z):Point(x,y),m_z(z);15. Point3D();16.17. const float getz()18. 19. return m_z;20. 21. void setz(float zin)22. 23. m_z = zin;24. cout << "z is updated as " << m_z << endl;25. return;26. 27.28. virtual void DisplayPoint()29. 30. cout <&l

10、t; "The position of the point is (" << m_x << ',' << m_y << ',' << m_z << ")" << endl;31. return;32. 33. ;34.35.36. #endif / Point3d_h37.38. #endif / Point_h3.三维折线类为类型增加了next指针,构成三维点链表。1. #include <iostream>2. #inclu

11、de <fstream>3. #include "math.h"4. #include "Point3D.h"5. #ifdef Point3D_h6. #ifndef Curve3D_h7. #define Curve3D_h8. using namespace std;9. class Curve3D:public Point3D10. 11. typedef Curve3D* Curveptr;12. protected:13. Curveptr next;14. public:15. Curve3D():next(NULL);16.

12、Curve3D(float inx, float iny, float inz)17. 18. m_x = inx;19. m_y = iny;20. m_z = inz;21. next= NULL;22. ;23. Curve3D(const Curve3D &C0)24. 25. m_x = C0.m_x;26. m_y = C0.m_y;27. m_z = C0.m_z;28. Curveptr temp1 = C0.next, temp2 = this;29. while(temp1 != NULL)30. 31. temp2 = temp2->next = new C

13、urve3D;32. temp2->m_x = temp1->m_x;33. temp2->m_y = temp1->m_y;34. temp2->m_z = temp1->m_z;35. temp1 = temp1->next;36. 37. if(C0.next = NULL)38. 39. next = NULL;40. 41. ;42. Curve3D()43. 44. Curveptr delptr = next;45. while(delptr != NULL)46. 47. next = delptr->next;48. delpt

14、r->next = NULL;49. delete delptr;50. delptr = next;51. 52. ;53.54. void DisplayCurve()55. 56. Curve3D *temp = this;57. int i = 1;58. while(temp != NULL)59. 60. cout << i << ':' << temp->m_x << ',' << temp->m_y << ',' << temp-

15、>m_z << endl;61. temp = temp->next;62. i +;63. 64. return;65. 66.67. inline double Curvelen();68. inline Curve3D operator+(Curve3D& C2);69. inline Curve3D operator-(Curve3D& C2);70. inline Curve3D operator=(Curve3D C1);71. inline void write_txt(ofstream &os);72. inline void r

16、ead_txt(ifstream &is);73. inline void write_binary(ofstream &os);74. inline void read_binary(ifstream &is);75. ;76. inline double Curve3D : Curvelen()77. 78. Curveptr temp = next;79. float length = 0, div = 0;80. double x1,x2,y1,y2,z1,z2;81. x1 = m_x;82. y1 = m_y;83. z1 = m_z;84. while(t

17、emp != NULL)85. 86. x2 = temp->m_x;87. y2 = temp->m_y;88. z2 = temp->m_z;89.90. div = sqrt(x1-x2)*(x1-x2)91. +(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2);92. length += div;93.94. x1 = x2;95. y1 = y2;96. z1 = z2;97. temp = temp->next;98. 99. cout << "length:" << length <<

18、endl;100. return length;101. 102. inline Curve3D Curve3D : operator=(Curve3D C0)103. 104. if(&C0 != this)105. 106. if(next != NULL)107. 108. next->Curve3D();109. next = NULL;110. 111. m_x = C0.m_x;112. m_y = C0.m_y;113. m_z = C0.m_z;114.115. Curveptr temp1 = this, temp2 = C0.next;116. while(t

19、emp2 != NULL)117. 118. temp1 = temp1->next = new Curve3D;119. temp1->m_x = temp2->m_x;120. temp1->m_y = temp2->m_y;121. temp1->m_z = temp2->m_z;122. temp2 = temp2->next;123. 124. 125. return *this;126. ;127. inline Curve3D Curve3D : operator+(Curve3D& C2)128. 129. Curve3D

20、 result = *this;130. Curveptr temp3 = &result;131. while(temp3->next != NULL)132. 133. temp3 = temp3->next;134. 135.136. temp3 = temp3->next = new Curve3D;137. temp3->m_x = C2.m_x;138. temp3->m_y = C2.m_y;139. temp3->m_z = C2.m_z;140. Curveptr temp2 = C2.next;141. while(temp2 !

21、= NULL)142. 143. temp3 = temp3->next = new Curve3D;144. temp3->m_x = temp2->m_x;145. temp3->m_y = temp2->m_y;146. temp3->m_z = temp2->m_z;147. temp2 = temp2->next;148. 149. return result;150. 151. Curve3D Curve3D : operator-(Curve3D &P3d2)152. 153. Curveptr resultptr = ne

22、w Curve3D;154. resultptr->next = new Curve3D;155. *(resultptr->next) = *this;156. / cout << "result pre-display" << endl;157. /cout << "resultptr" << endl;158.159. Curveptr temp2, temp3, delptr;160. temp3 = resultptr;161. delptr = NULL;162. /cout <

23、;< "temp2, temp3, delptr" << endl;163.164. while(temp3->next != NULL)165. 166. if(temp3 = resultptr)167. 168. temp3 = temp3->next;169. continue;170. 171. if(temp3->next->m_x - P3d2.m_x < 1e-6)172. &&(temp3->next->m_y - P3d2.m_x < 1e-6)173. &&

24、;(temp3->next->m_z - P3d2.m_x < 1e-6)174. 175. delptr = temp3->next;176. temp3->next = delptr->next;177. delptr->next = NULL;178. delete delptr;179. break;180. 181. temp3 = temp3->next;182. 183. / cout << "loop 1" << endl;184. temp2 = P3d2.next;185. whil

25、e(temp2 != NULL)186. 187. temp3 = resultptr;188. while(temp3->next != NULL)189. 190. if(temp3->next->m_x - temp2->m_x < 1e-6)191. &&(temp3->next->m_y - temp2->m_y < 1e-6)192. &&(temp3->next->m_z - temp2->m_z < 1e-6)193. 194. delptr = temp3->n

26、ext;195. temp3->next = delptr->next;196. delptr->next = NULL;197. delete delptr;198. break;199. 200. temp3 = temp3->next;201. 202.203. temp2 = temp2->next;204. 205.206. if(resultptr->next = NULL)207. 208. resultptr->next = new Curve3D;209. resultptr->next->m_x = 0;210. res

27、ultptr->next->m_y = 0;211. resultptr->next->m_z = 0;212. 213. temp3 = resultptr->next;214. delptr= resultptr;215. delptr->next = NULL;216. delete delptr;217. resultptr = temp3;218. / cout << "temp2: " << temp2 << endl;219. / cout << "temp3: &q

28、uot; << temp3 << endl;220. / cout << "delptr:" << delptr << endl;221. temp2 = NULL;222. temp3 = NULL;223. delptr= NULL;224. / cout << "temp2: " << temp2 << endl;225. / cout << "temp3: " << temp3 << endl;2

29、26. / cout << "delptr:" << delptr << endl;227. / cout << "loop L2" << endl;228. / resultptr->display();229.230. Curve3D result = *resultptr;231. delete resultptr;232. / cout << "resultptr:" << resultptr << endl;233. res

30、ultptr = NULL;234. / result.display();235. return result;236. 237.238. inline void Curve3D : write_txt(ofstream &os)239. 240. Curve3D *temp = this;241. int i = 1;242. while(temp != NULL)243. 244. os << temp->getx() << ' ' << temp->gety() << ' ' <&

31、lt; temp->getz() << endl;245. cout << i << ':' << temp->getx() << ',' << temp->gety() << ',' << temp->getz() << endl;246. temp = temp->next;247. i +;248. 249. return;250. ;251. inline void Curve3D : read_txt

32、(ifstream &is)252. 253. if(next != NULL)254. 255. next->Curve3D();256. next = NULL;257. 258. Curveptr temp = this;259. int num = 1;260. if(is.eof() != 1)261. 262. while(is.eof() != 1)263. 264. temp = temp->next = new Curve3D;265. is >> temp->m_x >> temp->m_y >> temp

33、->m_z;266. cout << num << ':' << temp->m_x << ',' << temp->m_y << ',' << temp->m_z << endl;267. num +;268. 269. 270. else271. 272. m_x = 0;273. m_y = 0;274. m_z = 0;275. next= NULL;276. 277.278. return;279. ;280. inl

34、ine void Curve3D : write_binary(ofstream &os)281. 282. Curveptr temp = this;283. int num = 1;284. while(temp != NULL)285. 286. os.write(char*)&m_x,sizeof(float);287. os.write(char*)&m_y,sizeof(float);288. os.write(char*)&m_z,sizeof(float);289. cout << num << ':' &

35、lt;< temp->m_x << ',' << temp->m_y << ',' << temp->m_z << endl;290. temp = temp->next;291. num +;292. 293. return;294. ;295. inline void Curve3D : read_binary(ifstream &is)296. 297. if(next != NULL)298. 299. next->Curve3D();300. nex

36、t = NULL;301. 302.303. Curveptr extra = new Curve3D, temp = extra;304. extra->next = this;305.306. int num = 1;307. float x,y,z;308. while(is.eof() != 1)309. 310. is.read(char*)&x,sizeof(float);311. is.read(char*)&y,sizeof(float);312. is.read(char*)&z,sizeof(float);313. if(is.eof() =

37、1)314. 315. if(temp->next != this)316. 317. temp->next->Curve3D();318. temp->next = NULL;319. 320. break;321. 322. else323. 324. temp = temp->next;325. temp->m_x = x;326. temp->m_y = y;327. temp->m_z = z;328. cout << num << ':' << temp->m_x <&l

38、t; ',' << temp->m_y << ',' << temp->m_z << endl;329. temp->next = new Curve3D;330. num +;331. 332. 333. return;334. ;335. #endif / Curve3D_h336. #endif / Point3D_h三 测试程序此处仅展示针对实验三的测试程序。1. #include <iostream>2. #include "curve3D.h"3.4.

39、using namespace std;5.6. int main()7. 8. cout << "lab2_3" << endl;9. cout << "C0:default" << endl;10. Curve3D C0;11. C0.DisplayCurve();12. cout << "length: " << C0.Curvelen() << endl;13.14. cout << "C1:3,4,5" <

40、;< endl;15. Curve3D C1(3,4,5);16. Curve3D &Curve1 = C1;17. Curve1.DisplayCurve();18.19. cout << "C2:5,12,13" << endl;20. Curve3D C2(5,12,13);21. Curve3D &Curve2 = C2;22. Curve2.DisplayCurve();23.24. cout << "C3=C1+C2" << endl;25. Curve3D C3 = C1

41、+C2;26. Curve3D &Curve3 = C3;27. Curve3.DisplayCurve();28. Curve3.Curvelen();29.30. cout << "C4=C0+C2" << endl;31. Curve3D C4 = C0+C2;32. Curve3D &Curve4 = C4;33. Curve4.DisplayCurve();34. Curve4.Curvelen();35.36. cout << "C5=C3-C4" << endl;37. Cur

42、ve3D C5 = C3-C4;38. Curve3D &Curve5 = C5;39. Curve5.DisplayCurve();40. Curve5.Curvelen();41.42. cout << "C6=C5+C3" << endl;43. Curve3D C6 = C5+C3;44. Curve3D &Curve6 = C6;45. Curve6.DisplayCurve();46. Curve6.Curvelen();47.48. cout << "file operation:C3out&quo

43、t; << endl;49. ofstream file1("testout.txt"), &f1 = file1;50. Curve3.write_txt(f1);51. f1.close();52.53. cout << "file operation:inC0" << endl;54. ifstream file2("testin.txt"), &f2 = file2;55. C0.read_txt(f2);56. f2.close();57.58. cout <<

44、 "binary operation:C3out" << endl;59. ofstream bin1("testout.bin"), &b1 = bin1;60. Curve3.write_binary(b1);61. b1.close();62.63. cout << "binary operation:inC0" << endl;64. ifstream bin2("testin.bin"), &b2 = bin2;65. C0.read_binary(b2

45、);66. b2.close();67.68. return 0;四 实验结果此处仅展示实验三的测试结果1.缺省构造对象1. cout << "C0:default" << endl;2. Curve3D C0;3. C0.DisplayCurve();4. cout << "length: " << C0.Curvelen() << endl;如图,说明成功地构造了一个没有初始值的三维折线对象;该对象只包含(0,0,0)一个点。2.设定初始值构造对象1. cout << "

46、;C1:3,4,5" << endl;2. Curve3D C1(3,4,5);3. Curve3D &Curve1 = C1;4. Curve1.DisplayCurve();1. cout << "C2:5,12,13" << endl;2. Curve3D C2(5,12,13);3. Curve3D &Curve2 = C2;4. Curve2.DisplayCurve();如图,说明成功地构造了一个有初始值的三维折线对象;该对象只包含(3,4,5)一个点3.重载加法1. cout << &q

47、uot;C3=C1+C2" << endl;2. Curve3D C3 = C1+C2;3. Curve3D &Curve3 = C3;4. Curve3.DisplayCurve();5. Curve3.Curvelen();6.7. cout << "C4=C0+C2" << endl;8. Curve3D C4 = C0+C2;9. Curve3D &Curve4 = C4;10. Curve4.DisplayCurve();11. Curve4.Curvelen();4.重载减法1. cout << "C5=C3-C4" << endl;2. Curve3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论