C++实现一个点到曲线的最近距离求解(遍历法)
#include<iostream>
#include<cstring>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<math.h>
using namespace std;
int main ()
{
struct vechicleState
{
public:
double x;
double y;
double yaw;
double v;
};
struct vechicleState state={7.0,-3.0,0.0,0.0};
vector<double> cx={};
vector<double> cy={};
for(int i=1;i<50;i++)
{
cx.push_back(i);
cy.push_back((i/5.0)*i/2.0);
}
double L=0.0;
double Lf;
Lf=0.1*state.v+2.0;
double min=abs(sqrt(pow(state.x-cx[10],2)+pow(state.y-cy[10],2)));
cout<<min<<endl;
int index=0;
for(int j=0;j<cx.size();j++)
{
double d=abs(sqrt(pow(state.x-cx[j],2)+pow(state.y-cy[j],2)));
if(d<min)
{
min=d;
index=j;
}
}
cout<<index<<endl;
cout<<min<<endl;
while(Lf>L && (index+1)<50)
{
double dx=cx[index+1]-cx[index];
double dy=cy[index+1]-cy[index];
L+=sqrt(pow(dx,2)+pow(dy,2));
index+=1;
}
cout<<index<<endl;
}