hnu_13268 Navigition Problem

来源:互联网 发布:音视频编辑软件 编辑:程序博客网 时间:2024/06/05 19:41
#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;}

0 0
原创粉丝点击