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;
    }

  • 相关阅读:
    struts1与struts2的防止表单重复提交
    JSTL 笔记
    fiddler的columns添加HTTPMethod
    兼容性测试技巧
    测试基础知识总结
    测试用例的书写方式及测试模板大全【转】
    软件测试的方法分类
    解决vue不支持promise语法问题
    vue-router 导航守卫
    e.target与事件委托简例【转】
  • 原文地址:https://www.cnblogs.com/clover-xuqi/p/8634041.html
Copyright © 2011-2022 走看看