利用一张A4纸和卡西欧图形计算器进行建筑高度的测量 利用一张A4纸和卡西欧图形计算器进行建筑高度的测量
2018年04月28日下面介绍只利用一张A4纸和卡西欧图形计算器fx-CG50进行建筑高度的测量的两种方法:
一.三角法
原理:利用三角形相似中相应边的比值相等,由已知A4纸高度及可测量出人到纸的距离和人到建筑的距离,进而计算得出建筑的高度。
操作步骤:以测量京东大厦为例
第一步:在远离京东大厦的位置,将A4纸竖直置于眼前,前后平移,使得恰好挡住大厦,如下图(考虑到想要让图像比较清晰,图中线段的比例有些失真。比如人的高度及纸张的高度位失真)其中B点为眼睛所在位置,B'点为脚所站立处地面的点,则BB'约为观测员身高,EH为A4纸(长度为297毫米),H'点为竖直放置的A4纸的正下方地面的点,A为大厦顶部,D为大厦底部.
第二步:利用A4纸的长度(整张长度及折叠后的长度),测量B'点到H'点的距离即人的眼睛到纸的距离BH和B'点到D点的距离即约为人的眼睛到大厦的距离BD.
其中:
1.测得BH大约两张A4纸长,记作600毫米.
2.由于此时观察者距离大楼较远,用A4纸测量费时费力.故选择先测量自己步长值,再用步长去度量观察者距离大楼的距离.为了尽量获得相对精确的距离,进行如下操作:
(1)确定自己的步长.为了保证数据尽量准确,选择多次试验得到数据取平均的方法。每次试验均匀的走10步,然后测量长度。实测20组数据如下:
(2)用步长测量观察者到大厦距离B'D,实测约为405步,故用209385毫米估计.
二.自由落体法
操作步骤:以测量京东大厦为例
第一步:利用卡西欧图形计算器fx-CG50的程序功能,编制时间测定插件,使计算器具备计时功能。
第二步:将A4揉成小纸团(减小空气阻力),在京东大厦尽量最高楼处,让其初速度为0自由下落。重复多次,测得平均时间。
第三步:将多次测得的时间进行数据分析,计算出平均时间。实际测得平均用时约5秒。
附程序源代码:
1.#include "fxlib.h"
2.#include "stdlib.h"
3.#include "stdio.h"
4.#include "string.h"
5.
6.int second;/*总秒数*/
7.unsigned char str[21];/*显示字符串变量*/
8.void timeadd(){
9. char ssec[2],smin[2],shour[2],showstr[21];/*showstr为要显示的时间字符串*/
10. int sec,min,hour;
11. second++;/*总秒数自加*/
12. sec=second%60;
13. min=(int)(second/60)%60;/*根据总秒数算出时间*/
14. hour=(int)(second/3600)%24;
15. if(sec<10){sprintf(ssec,"0%d",sec);}else{sprintf(ssec,"%d",sec);}
16. if(min<10){sprintf(smin,"0%d",min);}else{sprintf(smin,"%d",min);}/*进位*/
17. if(hour<10){sprintf(shour,"0%d",hour);}else{sprintf(shour,"%d",hour);}
18. strcpy(showstr,shour);
19. strcat(showstr,":");
20. strcat(showstr,smin);
21. strcat(showstr,":");
22. strcat(showstr,ssec);/*连接各个字符串(时分秒)*/
23.
24. locate(1,1);
25. PrintRev((unsigned char*)showstr);
26. Bdisp_PutDisp_DD();
27.}
28.
29.int AddIn_main(int isAppli, unsigned short OptionNum) {
30. unsigned int key;
31. int i,j,timerrun=0;/*timerrun是计时器状态*/
32. locate(1,1);
33. Print((unsigned char*)"Sandyzhang's timer");
34. for(i=0;i<=100;i++)
35. {
36. Sleep(5);/*延迟5ms*/
37.sprintf(str,"loading...%d%%",i);
38.locate(1,2);
39. Print((unsigned char*)str);
40. Bdisp_PutDisp_DD();
41. }
42. Bdisp_AllClr_DDVRAM();
43. locate(1,3);Print((unsigned char*)"F1:Start/Stop");
44. locate(1,4);Print((unsigned char*)"F2:Clear");
45. locate(1,1);Print((unsigned char*)"00:00:00");
46. while(1){
47. GetKey(&key);
48. if(key==30009){
49. if(!timerrun){SetTimer(1,1000,timeadd);timerrun=1;}else{KillTimer(1);timerrun=0;}/*30009是F1键的键代码,按下后计时器计时状态取反*/
50. }
51. if(key==30010){
52. KillTimer(1);
53. timerrun=0;
54. locate(1,1);Print((unsigned char*)"00:00:00");/*清零*/
55. second=0;/*总秒数清零*/
56. }
57. }
58. return 1;
59.}
60.
61.
62.#pragma section _BR_Size
63.unsigned long BR_Size;
64.#pragma section
65.#pragma section _TOP
66.int InitializeSystem(int isAppli, unsigned short OptionNum){
67. return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
68.}
69.#pragma section
本文产品
留学适用计算器
查看详情