資源簡介
地理信息系統(gis)中由一些離散點,通過此程序生成所有規則格網點的高程.采用中心點移動擬合法.
代碼片段和文件信息
#include?
#include
#include
#include
#include?
using?namespace?std;
class?point??????????????????????????//點類
{
public:
point(){};
int?ID;
double?x;
double?y;
double?h;
};
vector?pdata;?????????????????????//輸入數據
vector?re;????????????????????//得到的結果即格網點坐標
double?dist(point?p1point?p2)
{
return?sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
}
class?ptRelate?????????????????????????//這個類用于存放在搜索過程中鄰域范圍內的點及與它們對應的距離
{
public:
ptRelate(point?pidouble?r);
point?pt;??????????????????????????//當前點
vector?ptHeight;??????????????//存放鄰域內所有點的高程這里通過向量的編號將高程與距離聯系
vector?distance;???????????//鄰域內各點到該點的距離
double?r;
void?search();
void?calculate();
};
ptRelate::ptRelate(point?pidouble?c)
{
pt=pi;
????r=c;
}
/***
*此函數是從全部點中找出全部符合條件的點
*當給定的點數據很大時這種搜索算法效率就差多了,得改進搜索算法
***/
void?ptRelate::search()
{
????double?temp_dist;
for(int?i=0;i {
temp_dist=dist(ptpdata.at(i));???????
if(temp_dist {
ptHeight.push_back(pdata.at(i).h);
distance.push_back(temp_dist);
}
}
}
/***
*calculate函數的功能是以該點到達搜索半徑之內所有點的距離的平均值為單位權
*然后采用加權平均去求出當前要擬合點的高程
***/
void?ptRelate::calculate()
{??????????????????????????????????????
double?sum=0;
for(int?i=0;i {
sum+=distance.at(i);
}
if(pt
- 上一篇:C/C++語言實現求矩陣的廣義逆
- 下一篇:數據結構c語言版-單鏈表的操作程序代碼
評論
共有 條評論