2 jjt1018489501 jjt1018489501 于 2015.07.11 22:16 提问

求大神解决VC++等值线插值程序无输出问题

本人C++水平一般,编了一个小程序,调试已过,具体算法就是输进一组由两条等值线数值及坐标构成的数组,然后取三个点找外接圆圆心,再从圆心0-180度内每隔45度引射线与原等值线想交,再找出交点的中点并输出。。。目前测试过数组能正常读入。。。但是输出无结果,求指教,主程序如下
#include
#include
#include
#include
#define shuliang 10000
#define gaodu 1024
#define kuandu 1024
using namespace std;
static int yuanxinx = 0;
static int yuanxiny = 0;
static int jiaodianax = 0;
static int jiaodianay = 0;
static int jiaodianbx = 0;
static int jiaodianby = 0;
static int count1 = 0;
const double pi = 3.1415927;
int juli(int a, int b,int c , int d)//输入两个点的坐标,计算两点间距离
{

return sqrt(pow((a - c), 2) + pow((b - d), 2));
}
bool yuanxin(int ax, int ay, int bx, int by, int cx, int cy)//输入三个点坐标,计算圆心
{
int a, b, c;
bool i=1;
for (int x = 0; x <= gaodu; x++)
{
for (int y = 0; y <= kuandu; y++)
{
a = pow((x - ax), 2) + pow((y - ay), 2);
b = pow((x - bx), 2) + pow((y - by), 2);
c = pow((x - cx), 2) + pow((y - cy), 2);
if (fabs(a-b)<exp(-5)&&fabs(c-b)<exp(-5))
{
yuanxinx = x;
yuanxiny = y;
return i;
break;
}
else i = 0;
return i;
}
}

}
bool zhaojiaodian(int ax, int ay, int a[shuliang][3],int qiyaa,int qiyab)//输入圆心和所有点,寻找所需焦点
{

int d, e, f;
double g1;
double g2;
double h1;
double h2;
int angle;
bool p=1;

for (int n = 0; n <= shuliang; n++)
{

for(int dx = 0;dx<=kuandu;dx++)
{

for(int ex = 0;ex <= kuandu;ex++)
{
for (int dy = 0;dy <= gaodu; dy++)
{

for(int ey =0 ;ey <= gaodu; ey++)
{
if ((a[n][1] == ex && a[n][2] == ey)||(a[n][1] == dx && a[n][2] == dy))
{

d = sqrt(pow(ax-dx,2) + pow(ay-dy,2));
e = sqrt(pow(ax-ex,2) + pow(ay-ey,2));
f = sqrt(pow(dx-ex,2) + pow(dy-ey,2));
if (fabs(e-f-d)<exp(-5))
{
for(int i = 0 ;i <= 4 ; i++)
{
g1 = (ay-dy)/(ax-dx);
g2 = 0;
h1 = atan(g1);
h2 = atan(g2);
angle = fabs(h1 - h2);
if (fabs(angle- i*pi/4)<exp(-5))
{
jiaodianax = dx;
jiaodianay = dy;
jiaodianbx = ex;
jiaodianby = ey;
return p;
break;
}
else p = 0;
return p;
}
}
}
}
}
}
}
}
}
int zhongzhidianx(int ax, int bx)
{
return ax + (bx - ax) / 2;
}
int zhongzhidiany(int ay,int by)
{
return ay + (by - ay) / 2;
}
void main()
{
int a[shuliang][3]; //建立二维数组

ifstream infile("input.txt", ios::in);  //打开已存在的输入文件input.txt
if (!infile)
{
    cout << "输入文件input.txt不存在\n";
    exit(0);
}
ofstream outfile;                              //创建输出文件,若存在则清除该文件内容
outfile.open("output.txt", ios::out);
if (!outfile)
{
    cout << "不能建立输出文件output.txt\n";
    exit(0);
}
char str[2000][20];
int i = 0;
while (!infile.eof())
{
    infile.getline(str[i], 20);
    i++;
}
count1 = i;
int flag = 0;
int value = 0;
for (int k = 0; k <= count1; k++)
{
    flag = 0;
    value = 0;
    for (int l = 0; str[k][l] != '\0'; l++)
    {
        if (str[k][l] != '\t')
        {
            value = value * 10 + (str[k][l] - '0');
        }
        if (str[k][l] == '\t' || str[k][l + 1] == '\0')
        {
            a[k][flag] = value;
            value = 0;
            flag++;
        }
    }

}

//cout< /******************主要算法**************************/
int m =0;
for (int b = 0; b {
if(a[b][0] == a[b+10][0])
{ m++;
if (juli(a[b][1], a[b][2], a[b+5][1], a[b+5][2]) >= 50 && juli(a[b+5][1], a[b+5][2], a[b+10][1], a[b+10][2]) >= 50)
{
if (yuanxin(a[b][1], a[b][2], a[b+5][1], a[b+5][2], a[b+10][1], a[b+10][2]) == 1)
{
if (zhaojiaodian(yuanxinx, yuanxiny, a, a[b][0], a[b][0] + 60) == 1)
{
outfile << a[0][0] + 60 << '\t' << zhongzhidianx(jiaodianax, jiaodianbx) << '\t' << zhongzhidiany(jiaodianay, jiaodianby) << '\n';
}
}
}

    }
}
infile.close();
outfile.close();

}

3个回答

devmiao
devmiao   Ds   Rxr 2015.07.11 22:20
jjt1018489501
jjt1018489501 这个我之前已经看过了。。对我这程序帮助并不大。。现在就把我上面程序改到outfile出结果就可以了。。
大约 3 年之前 回复
jjt1018489501
jjt1018489501   2015.07.11 22:24

头文件复制上来就不见了。。。。



oyljerry
oyljerry   Ds   Rxr 2015.07.11 23:45

如果你算法数据已经正确,那么输出文件,就是可以把结果组成i一个字符串,然后out一次性写入文件。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA实现百度地图上绘制离散点等值线——离散点插值+等值线算法+BaiduMap绘制
最近希望在android上实现在百度地图绘制重力异常图(地形图),查了一下官方提供了一个热力图绘制方法,效果很好,但只能显示官方提供的人员流量数据,所以退一步试着实现简单的等值线图绘制,不难,着急的朋友完全可以仿照下例修改使用:主要方法:①对离散点构造矩形区域并插值:insertValue(List longitude,List latitude ,List value,int row ,int ...
将EXCEL中的数据导入到ArcGIS, 插值生成等值线( 超详细,附原理说明)
1. 将EXCEL中的数据导入到ArcGIS, 插值生成等值线(等高线,等压线,等温线) 1. 1数据和地图准备 2.2 数据关联(注意:关联前,EXCEL里的NAME名称要和MAP里的属性表里的名称完全一致) (1)地图数据,应该用点数据。(便于后面生成栅格表面。) (2)依次加载,县城驻地, 省级行政区,国界线(后两个,在后面用得到)。
arcgis 空间插值与等值线制作
arcgis 空间插值与等值线制作过程介绍
根据离散点内插生成等值线(c#+ArcGIS Engine )完整
几点说明: 根据离散点生成等值线: 1.可判断等值线shapefile图层临时存放路径是否存在,如果不存在则创建,如果存在并不为空则删除重建; 2.可加【降雨量】字段并赋值,生成等值线后删除所加的字段; 3.根据所选的字段利用IDW内插生成raster,再设定间距生成co
克里金插值算法在等高线绘制中的应用
介绍了普通克里金插值方法的原理及步骤,利用普通克里金插值法对离散的数字高程模型(DEM)数据进行了插值加密;在Windows环境下,以Visual C++6.0为开发平台,以OpenGL为工具,建立了基于DEM的等高线模型;对克里金插值法与距离反比插值法做了比较,结果表明,克里金插值后生成的等高线模型比距离反比插值后生成的等高线模型精度高、误差小.
离散点生成等值线的流程和实现方法
离散点生成等值线是空间插值中的一种常用方法,基本需求是(以2维为例):1,点是离散的,非规则网格,具体不同的XY坐标;2,点具有不同的权值,可能不止一个权,权与权之间也可能有关联关系,最简单的情况是单权值;3,需求是指定一定的值间隔,来生成等值线,也就是说根据值求插值坐标;4,也有可能是求某个坐标处的插值数值。基本思路是:1,建立网格,求每个网格点的数值。2,选定一个矩形开始,追踪等值线,等值线一定是连续的,所以在相邻矩形边界上的一个数值点,肯定会在下一个矩形中找到后续点。而且,一定是成对出现的,也就是说,
Arcgis Server通过发布GP服务实现等值线(实践经验)
arcgis通过发布GP服务实现等值线 本人测试的GP服务模型图: 运行后的结果: 以下是网上实现等值面的GP服务模型图: IDW:是反距离权重法。 Int:整型运算。 Raster To Polygon:栏格转面。 Clip:剪切 这些都是基本的实现,还有很多细节上的问题,比如说: 1. 等值线
格点数据等值线分析--C#源码
格点数据等值线分析--C#源码 说明: http://blog.csdn.net/HZGJF/archive/2009/05/31/4230109.aspx
浅谈WebGIS等值线模态前端展示生成绘制(算法经验)
摘要:等值线是GIS制图中常见的功能,一般有两种思路:一种是先进行插值生成等值面栅格图,然后将等值面提取成等值线;另一种是进行插值后,直接再根据算法进行插值点连接生成一条尽量闭合以及平滑的曲线。在进行插值中,有很多算法可以选择,各种算法中也会有不同的参数需要调试,并且更具实际情况,比如地理环境因素等进行微调,最后建模。这里我们要讨论的是忽略一切外在因素,只根据坐标、等值字段值进行插值和展示的探讨。
利用反距离权重插值法实现等值线
1.用arcmap打开示例数据中GeostatisticalAnalyst下的数据,如下图:   2.  打开modelbuilder开始构建模型,我构建的思路是:利用反距离权重插值工具对数据进行插值后生产地统计图层如下图: 3.  之后用ga layer to contour工具把等值面转为等值线,如下图: 4.  最后用clip工具把等值线已一定的范围进行切割,如下