#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double calc(double x1,double y1,double x2,double y2) //计算两点间的距离
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
double x,y,x1,y1;
int n;
double dist;
while(~scanf("%d%lf",&n,&dist))
{
scanf("%lf%lf",&x,&y);
double sum=0; //上一个输出的点到该点的距离
int flag=0;
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&x1,&y1);
double ans=calc(x,y,x1,y1);
sum+=ans;
if(sum>=dist) //浮点数相等不应该直接这样表示,运气好A了。。
{
printf("%.2f,%.2f\n",x+(x1-x)*(dist-(sum-ans))/ans,y+(y1-y)*(dist-(sum-ans))/ans);
flag=1; //只要输出过一次,就存在这样的点
double cost=dist-(sum-ans);
sum-=dist;
while(sum>=dist) //两点间距离比较长,可以输出多个点
{
printf("%.2f,%.2f\n",x+(x1-x)*(cost+dist)/ans,y+(y1-y)*(cost+dist)/ans);
sum-=dist;
cost+=dist;
}
x=x1; y=y1; //(x,y),(x1,y1) 滚动使用
}
else
{
x=x1; y=y1;
}
}
if(!flag) printf("No Such Points.\n");
}
return 0;
}
hnu_13268 Navigition Problem
最新推荐文章于 2019-03-28 12:29:12 发布