zoukankan      html  css  js  c++  java
  • 输入起止坐标,返回途径网格。

    #include<stdio.h>
    #include<iostream>
    #include<math.h>
    using namespace std;


    const double EPS = 1e-6;

    int sign(double d)
    {
    return d < -EPS? -1 :(d > EPS? 1 : 0);
    }

    bool equ(double a,double b)
    {
    return sign(a-b) == 0;
    }

    class XPoint
    {
    public:
    int x,y;
    XPoint* next;
    XPoint(int _x,int _y) :x(_x),y(_y),next(NULL)
    {
    }
    };

    class XLine
    {
    public:
    float a,b,c;
    float len;//st,ed 的 向量长度
    XLine(XPoint* st, XPoint* ed)
    {
    a = ed->y - st->y;
    b = st->x - ed->x;
    c = st->y * ed->x - st->x * ed->y;
    len = sqrt(a*a + b*b);
    }
    };

    float dis_p2_line(XPoint* p, XLine* l)
    {
    return fabs(l->a * p->x + l->b * p->y + l->c) / l->len;
    }

    bool line_cross_grid(XLine* l, XPoint* p)
    {
    float dis = dis_p2_line(p,l);
    return dis < 0.71;

    }

    bool equ(XPoint* a,XPoint* b)
    {
    return (a->x == b->x && a->y == b->y);
    }

    XPoint* GetKey(XPoint* st, XPoint* ed)
    {
    XPoint* p = st;

    XLine* line = new XLine(st,ed);

    int Asign = sign(line->a);
    int Bsign = -sign(line->b);


    while(true)
    {
    int x = p->x;
    int y = p->y;
    XPoint* p1 = new XPoint(x ,y + Asign);
    XPoint* p2 = new XPoint(x + Bsign , y);
    if(Asign)
    {
    if( line_cross_grid( line, p1 ))
    {
    p->next = p1;
    p = p->next;
    }
    if( equ(p1, ed) )break;
    }
    if(Bsign)
    {
    if( line_cross_grid( line, p2 ))
    {
    p->next = p2;
    p = p->next;
    }
    if( equ(p2, ed) )break;
    }

    }

    p = st;
    while(p)
    {
    cout<<p->x <<" " << p->y<<endl;
    p = p->next;
    }

    return st;
    }

    int main()
    {
    XPoint* st = new XPoint(2,4);
    XPoint* ed = new XPoint(2,10);
    GetKey(st, ed);
    return 0;
    }

  • 相关阅读:
    [oracle 使用(1)] win7/10 下Oracle10g的安装与卸载
    [原创]利用爬虫技术获取网页数据,以及想要的指定数据
    [mysql使用(1)] 64位Linux下安装mysql-5.7.13-linux-glibc2.5-x86_64
    aop 常见的问题
    Git技巧:右键菜单怎么去除?
    jrebel激活
    python与mysql连接
    linux下mysql的安装
    Linux下jdk和tomcat安装
    Lotto
  • 原文地址:https://www.cnblogs.com/clover-xuqi/p/8634041.html
Copyright © 2011-2022 走看看