问题:
今有望海岛,立两表齐,高三丈,前后相去千步,令后表与前表相直。从前表却行一百二十三步,人目着地取望岛峰,与表末参合。从后表却行百二十七步,人目着地取望岛峰,亦与表末参合。问岛高及去表各几何?
刘徽的解法:
以表高乘表间为实;相多为法,除之。所得加表高,即得岛高。求前表去岛远近者:以前表却行乘表间为实;相多为法。除之,得岛去表数。
原理:
刘徽通过设立两根立柱(表),利用光直线传播的性质,根据海岛峰顶经过立柱顶端后到地面的投影位置,巧妙的计算出远方海岛的高度。
解法:
若将立柱高度(表高)记作h,后立柱、前立柱间距(表间)记作d,对应的投影距离分别记作d1和d2。
海岛高度H=d * h / (d1-d2) + h =1000*3/(127-123)+3=753(丈)
海岛距离D=d*d2/(d1-d2) =1000*123/(127-123)=30750(步)

# include<iostream> using namespace std; float landHeight(float d1, float d2,float d,float h) {//后表却步、前表却步、表间、表高 float ph = d1 - d2;//二去表相减为相多,以为法 float shi = d*h;//前后表相去为表间,以表高乘之为实 return shi / ph + h;//以法除之,加表高,即是岛高硅步 } float landDistance(float d1, float d2, float d) {//后表却步、前表却步、表间 float shi = d2 * d;//前去表乘表间 float pha = d1 - d2;//以相多为法 return shi / pha;//除之 } int main() { float d1,d2,d,h; cout << "输入前立柱投影长度d1" << endl; cin >> d1; cout << "输入后立柱投影长度d2" << endl; cin >> d2; cout << "输入两立柱之间的距离d" << endl; cin >> d; cout << "输入立柱高度h" << endl; cin >> h; cout << "海岛高度=" << landHeight(d1, d2, d, h) << "丈" << endl; cout << "海岛距离=" << landDistance(d1, d2, d) <<"步" << endl; cin.get(); }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/53076.html