091008am


#include "iostream.h"
#include "math.h"

int Lfit(int a[])//线段拟合
{int i,j;
int temp;
int la[65535];
int l_a[22000][3];

for(;!(a[i]=='/0');i+=3,j+=3)
{
 la[j]=a[i];
 la[j+2]=a[i+2];
    la[j+1]=(la[j]+la[j+2]);
 
 //la[]中,每三个横坐标(i/3),(i/3+1),(i/3+2)及其代表的纵坐标组成一个线段。
 temp=j/3;
 l_a[temp][0]=la[j];
    l_a[temp][1]=la[j+1];
 l_a[temp][2]=la[j+2];
}

return l_a[22000][3];
}

int dist(int a[], int b[]) //求曲线距离
{ int l_a[65535];
int eu[22000][3];
int eumin[22000];
int h;

l_a[][]=lfit(int a[]);//拟合
eu[][]=euf(int b[65535],int l_a[22000][3]);//计算欧式距离
eumin[]=minarr(eu[22000][3]);//取最小值
h=maxarr(eumin);

return h;
}

maxarr(int e[])//最大值
{
 int i;
 int h;

 h=e[0];
 for(i=0;e[i-1]!=0;i++)
  if(h<e[i])
   h=e[i];

 return h;
}

minarr(int e[][])//最小值
{
 int d[22000];
 int i,j;
 
 for(j=0;e[j][])!='/0';j++)
  for(i=0;e[j][i]!='/0';i++)
  {
   d[j]=e[j][i];
   if(d[j]<e[j][i])
    d[j]=e[j][i];
  }
 
 return d[22000];
}


euf(int b[],int l_a[][])// distance from b[i] to l_a[j][]
{
int eu[][];
int dis1,dis2,dis3;
int xdis,ydis;

//b[j]中每一点到a[i]的距离
//a[j]是la上第j段线段,点横坐标为j*3,j*3+1,j*3+2
for(int x=0,y=0;!(b[y-1]==0),x++,y++)
{
 
 //若垂足在线段上则取垂足,这时垂线段最短;若垂足在延长线上则取相应点到端点间的距离。
 //拟合后的每一线段只有三个点,离垂足最近的端点与相应点的距离最短。
    //即求点到直线的最短距离

 //到左端点的距离
    xdis=abs(x*3-y);
 ydis=abs(l_a[x][0]-b[y]);
 dis1=aqrt(xdis*xdis+ydis+ydis);
 
 //到右端点的距离
    xdis=abs(x*3+2-y);
 ydis=abs(l_a[x][2]-b[y]);
 dis1=aqrt(xdis*xdis+ydis+ydis);

 //到中点的距离
    xdis=abs(x*3-y+1);
 ydis=abs(l_a[x][1]-b[y]);
 dis1=aqrt(xdis*xdis+ydis+ydis);
 
 //最短距离
 eu[y][x]=leasttri(int dis1,int dis2,int dis3);
}
}

leasttri(int num1,int num2,int num3)
{
    if(num1>num2)
  num1=num2;
 if(num1>num3)
  num1=num3;

 return num1;
}

void main( ) 
{
 int a[65535], b[65535]; // 待比较的曲线
 int h1,h2,h;

 cout<<"input a[]"<<endl;
 cin>>a[];
 cout<<"input b[]"<<endl;
 cin>>b[]; // 从键盘输入两个数组数据
 
 h1=dist(a[],b[]);
 h2=dist(b[],a[]);

 h=h1;
 if(h<h2)
  h=h2;

  cout<<h<<endl; 
}

 

22个错误,让我死了吧……

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值