#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个错误,让我死了吧……