⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dianchazhi.cpp

📁 一个点插值程序,我也不太清楚具体用途,好象只和距离及方差有关,不是克里金
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
struct _Node{
    char F;
	long ID; //空间点序号
	float x;
	float y;
	double z; //空间点坐标
	struct _SNum* likEgsPassNode; //经过该结点的边序号
	struct _Node* next; //下一点指针
};
 _Node*   likNodeSet;     //点链表
 _Node* head;
_Node* CreatelikNodeSet()
{  _Node* ps;
   _Node* pEnd;
   cout<<"请输入点的坐标值:x,y,z"<<endl;
    ps=new _Node;
    cin>>ps->x>>ps->y>>ps->z;
	ps->ID=1;
	cout<<"\nx="<<ps->x<<"  y="<<ps->y<<"  z="<<ps->z<<"  ID="<<ps->ID<<endl;
    head=NULL;
    pEnd=ps;
   	
   
   while(ps->F!='Q')
   {if(head==NULL)  head=ps;
    else pEnd->next=ps;
	

    pEnd=ps;
	ps=new _Node;
	ps->ID=pEnd->ID+1;
	cout<<"\n请输入操作信息:(结束Q/否anykey)和"<<ps->ID<<"点的坐标值:x,y,z"<<endl;
   	cin>>ps->F>>ps->x>>ps->y>>ps->z;
	
    cout<<"\nx="<<ps->x<<"  y="<<ps->y<<"  z="<<ps->z<<"  ID="<<ps->ID<<endl;
	

   }  
    
    pEnd->next=NULL;
	
	delete ps;
	return(head);
}
long LenNodelist(_Node* PS)
{   long n=0;
    _Node* ps;
    ps=PS;
    while(ps!=NULL)
	   {ps=ps->next;n++;}
    return(n);
}
void showlist(_Node* PS)
{  cout<<"\n现有的点为:"<<endl;
    while(PS)
	{cout<<"\nx="<<PS->x<<"  y="<<PS->y<<"  z="<<PS->z<<"  ID="<<PS->ID<<endl;
	PS=PS->next;}
}
double Cij(_Node* ps,_Node* PS)
{  double a,b,c;
   a=ps->y-PS->y;
   a=a*a;
   b=ps->x-PS->x;
   b=b*b;
   c=sqrt(a+b);
   return(c);
}

void main()
{ CreatelikNodeSet();
  double c[100][100];
  double c0[100];
  _Node* ps;
  _Node* PS;
  _Node* pt;
  _Node* padd;
  _Node* pEnd;
  _Node* p;
  ps=head;
  PS=head;
  pt=head;
  pEnd=head;
  padd=new _Node;
  while(pEnd){p=pEnd;pEnd=pEnd->next;}
  padd->ID=p->ID+1;
  cout<<"\n请输入插入点的坐标值:x,y"<<endl;
  cin>>padd->x>>padd->y;
  
  long i=0,j=0,k=0;
  while(PS)
  {while(ps)
  {c[i][j]=Cij(ps,PS);
   j++;ps=ps->next;}
   i++;
   k++;
   PS=PS->next;}
  i=0;
  while(pt)
  {c0[i]=Cij(pt,padd);
  pt=pt->next;
  }
  double ch[100];
  for(int a=0;a<10;a++){i=0;
  j=0;
  while(i<k+1)
  {while(i<k+1)while(j<k+1){{if(j!=i)ch[i]=ch[i]+c[i][j]*c0[j];j++;}//j!=i;
  i++;}}}
  for(i=0;i<k+1;i++){ch[i]=ch[i]/c[i][i];}

_Node* pn;
pn=head;
i=0;double z;
while(pn)
{z=ch[i]*pn->z;i++;pn=pn->next;}
cout<<"\n插入点的z="<<z<<endl;
p=padd;
p->z=z;
  padd=new _Node;
  delete padd;  
pEnd=p;
  
  pEnd->next=NULL;
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -