效果演示
实验部分简介
- 实验原理
数据处理要求
- 问题
- 公式中绝对值的值不能大于180度,否则应用360度减去该角度后再进行计算。
- 数据要求精确到分,而度和分的换算率是60(这给我编写程序造成了不小的麻烦)。
- 本来十分简单的加减乘除,我却需要创造一个新的数据类型,然后还要给它定义四则运算。
代码实现(C++)
#include<iostream> using namespace std; class jd{ public: int du;//度 int fen;//分 jd():du(0), fen(0){} jd operator+(jd x){ x.du = du + x.du; x.fen = fen + x.fen; if(x.fen >= 60){ x.fen = x.fen - 60; x.du++; } return x; } //当前角度除以x void chu(int x){ fen = fen + du % x * 60; fen = fen / x; du = du / x; } //角度相减并取绝对值,保证不大于180度 jd jian(jd x, jd y){ jd z; z.du = x.du - y.du; z.fen = x.fen - y.fen; if(z.du < 0){ z.du = -z.du; z.fen = -z.fen; } if(z.fen < 0){ z.du = z.du - 1; z.fen = z.fen + 60; } //不能大于180度 if(z.du >= 180){ z.du = 359 - z.du; if(z.fen == 0){ z.du = z.du + 1; } else { z.fen = 60 - z.fen; } } return z; } }; int main(){ int m = 0;//数据的组数 cin >> m; jd t_sum; jd a_sum; for(int i = 0; i < m; i++){ printf("----第 %d 组----\n", i+1); jd x1, x2; jd y1, y2; jd z1, z2; jd a; cout << "第一边:\n"; cin >> x1.du >> x1.fen; cin >> x2.du >> x2.fen; cout << "第二边:\n"; cin >> y1.du >> y1.fen; cin >> y2.du >> y2.fen; z1 = z1.jian(x1, y1); z2 = z2.jian(x2, y2); z1 = z1 + z2; z1.chu(2); t_sum = t_sum + z1; cout << "光学面法线夹角值:" << z1.du << "度 " << z1.fen << "分" << endl; a.du = 180; a = a.jian(a, z1); a_sum = a_sum + a; cout << "顶角值:" << a.du << "度 " << a.fen << "分" << endl << endl; } t_sum.chu(m); a_sum.chu(m); cout << "法线夹角平均值:" << t_sum.du << "度 " << t_sum.fen << "分" << endl; cout << "顶角平均值:" << a_sum.du << "度 " << a_sum.fen << "分" << endl; return 0; } /*测试数据 4 115 4 295 6 235 11 55 5 104 39 284 41 224 37 44 32 95 49 275 55 215 59 35 53 84 20 264 23 204 25 24 12 */
小结
- 实验要求测四组数据,而且是精确到分,我感觉算起来挺麻烦的。于是写bug一年多的我欣然决定写个程序来帮我完成计算任务,谁曾想到,看似简单的计算,我写程序居然花了一个多小时,才写出能跑的屎山式代码(不过好歹能跑)。
- 再一次感觉,自己编码能力的提升空间还很大。😅