计量地理-最优点的位置

el/2024/3/2 12:19:35

输入如下:每一行是居民点位置和人口数

5 5 2 

10 10 2.5 
5 35 2 
10 27.5 2.5 
15 5 2 
15 15 3 
15 40 2 
17.5 25 3.5 
20 15 4 
25 30 4 
25 45 2 
30 10 4 
35 20 5 
40 5 3 
42.5 25 6 
45 35 5 
52.5 42.5 5.5 
55 35 4.5 
55 5 4 

57.5 10 3

输出如下:

Step=0.10L=1347.483601m_best.x=33.90m_best.y=21.60


// BestCenter.cpp : Defines the entry point for the console application.
//
#include "stdio.h"
#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
struct RESIDENCE{	//存储每一个居民点的坐标和人口数float x;float y;float p;};
struct POINT{float x;float y;};void main()
{//重要变量RESIDENCE *m_data;POINT m_best;	float m_xmin, m_xmax, m_ymin, m_ymax;		//居民点坐标中的最值int m_count;		        //居民点的个数double L = 99999999.9;		//距离与人口数乘积的累加和float step;				//控制循环的步长//其它变量float temp1,temp2,temp3;int i;	char m_file[]="best.txt";float j,k;FILE *fp;//部分变量初始化double temp=0.0;	i=0;m_count=0;j=k=temp1=temp2=temp3=0.0;m_xmin=m_xmax=m_ymin=m_ymax=0.0;//提示用户输入循环的步长printf("Please intput step= ");scanf("%f",&step);/*  读文件,将数据存入m_data中  */if((fp=fopen(m_file,"r"))==NULL){printf("Can not open this file.\n");exit(0);}while(!feof(fp)){fscanf(fp,"%f %f %f",&temp1,&temp2,&temp3);m_count++;}m_data=(RESIDENCE*)malloc(sizeof(RESIDENCE)*m_count);rewind(fp);while(!feof(fp)){fscanf(fp,"%f %f %f",&m_data[i].x,&m_data[i].y,&m_data[i].p);i++;}fclose(fp);//将m_data中数据输出到屏幕for(i=0;i<m_count;i++)printf("%3d  %5.1f,%5.1f,%5.1f\n",i+1,m_data[i].x,m_data[i].y,m_data[i].p);//寻找m_data中坐标x和y的最大值及最小值m_xmax=m_xmin=m_data[0].x;		//min and max	m_ymax=m_ymin=m_data[0].y;for(i=1;i<m_count;i++){if(m_xmin>m_data[i].x)m_xmin=m_data[i].x;if(m_xmax<m_data[i].x)m_xmax=m_data[i].x;if(m_ymin>m_data[i].y)m_ymin=m_data[i].y;if(m_ymax<m_data[i].y)m_ymax=m_data[i].y;}	//三重循环,寻找最优点的位置及L的最小值for(j=m_xmin;j<m_xmax;j+=step){for(k=m_ymin;k<m_ymax;k+=step){for(i=0;i<m_count;i++){				temp+=m_data[i].p*sqrt(pow(m_data[i].x-j,2)+pow(m_data[i].y-k,2));}//for(i=0;i<m_count;i++)if(temp<L){L=temp;m_best.x=j;m_best.y=k;}//if(temp<L)temp=0.0;}//for(k=m_ymin;k<m_ymax;k=k+5)}printf("L=%.5f  ;m_best.x=%.1f;  m_best.y=%.1f\n",L,m_best.x,m_best.y);char m_out[]="result.txt";if((fp=fopen(m_out,"w"))==NULL){printf("Can not open this file.\n");exit(0);}fprintf(fp,"Step=%.2fL=%.6fm_best.x=%.2fm_best.y=%.2f\n",step,L,m_best.x,m_best.y);	fclose(fp);free(m_data);}


http://www.ngui.cc/el/4465887.html

相关文章

C#-交互式绘图

结果如图所示&#xff1a; using System;using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms;namespace 交互式绘…

测绘-编写数字高程模型(DEM)内插程序

一、 实习目的 掌握移动曲面法数字高程模型内插原理及其内插子程序的设计方法&#xff0c;了解其它逐点高程内插方法的基本原理。 二、 实习内容 根据提供的10个数据点的坐标&#xff08;Xn,Yn,Zn&#xff09;和待求点的平面坐标&#xff08;Xp,Yp&#xff09;&#xff0…

C-链表

上图为效果图 #include <stdio.h>#include <stdlib.h> #include <malloc.h> typedef struct Node{ int data;struct Node *next;} SLIST;void inlist(SLIST *l,int a){SLIST *p,*q;int i;p(SLIST *)malloc(sizeof(SLIST));l->nextp;for(ia;i&…

获取MFC主框架

在MainFrm里面定义的是主框架的东西&#xff0c;也就是一启动就会运行的&#xff0c;所以在后面要加东西的话得获得一开始定义的框架 CMainFrame* pFrame (CMainFrame*)AfxGetApp()->m_pMainWnd; pFrame->m_wndFileView.FillFileView(); MFC一个程序只会有一个从头到尾的…

C++ listCtrl点击列头自动排序

一个函数; void CDialogTableSum::OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult) {NM_LISTVIEW* pNMListView (NM_LISTVIEW*)pNMHDR;int selectcol pNMListView->iSubItem;//获得当前所选列int listcount;//总行数listcount m_listCtrl->GetItemCount();CString t…

C++-MFC Office风格的界面,ListCtrl点击选中后高亮

一个函数就可以搞定&#xff1a; void CListCtrlView::OnCustomdrawList( NMHDR *pNMHDR, LRESULT *pResult ) {NMLVCUSTOMDRAW* pLVCD reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );*pResult CDRF_DODEFAULT;if ( CDDS_PREPAINT pLVCD->nmcd.dwDrawStage ){*pRes…

MFC Office风格的界面,在下图红色部分创建一个listCtrl,是在view里面直接创建,不是写死坐标

只要一步&#xff0c;在View文件里面&#xff0c;新建一个函数&#xff0c;然后把他创建就行了 代码如下&#xff1a;m_listCtrl new CListCtrl;//新建CRect rectDlg;this->GetClientRect(rectDlg);//这两句是获得整个活动窗口的大小m_listCtrl->Create(LVS_REPORT |WS_…

C++MFC Office风格的界面,修改状态栏信息

参考网址&#xff1a;点击打开链接首先&#xff0c;要使用到两个文件&#xff0c;一个是MainFrm&#xff0c;一个是你自己命名的那一组里面带View的那个文件。 其次按如下步骤&#xff1a; 1. 在View里面要创建一个函数&#xff0c;可以是点击事件函数&#xff0c;也可以是别的…

C++ 路径问题

程序.exe的路径&#xff1a; CString strPath; GetModuleFileName( NULL, strPath.GetBuffer(MAX_PATH), MAX_PATH ); //NULL 返回应用程序的全路径strPath.ReleaseBuffer(); //清空缓冲区strPath strPath.Left(strPath.ReverseFind(_T(\\))); //获取整个路径 获取程序的工…

C++ 读写文件总结

.建文件夹int iNumber GetCurrentDirectoryW(0,NULL); WCHAR dir[100]; GetCurrentDirectory(iNumber,dir);//这三句的意思见后12CString csPath;if (i0){CString str1_T("\\滚动勘探&油藏评价");csPathdirstr1;if (!PathIsDirectory(csPath)){Cr…