博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输入起止坐标,返回途径网格。
阅读量:4571 次
发布时间:2019-06-08

本文共 1482 字,大约阅读时间需要 4 分钟。

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

转载于:https://www.cnblogs.com/clover-xuqi/p/8634041.html

你可能感兴趣的文章
vijos1776:关押罪犯
查看>>
坐标转换
查看>>
[YTU]_2918( Shape系列-4)
查看>>
LeetCode sort-list
查看>>
结构化编程 —— 顺序、分支(选择)、循环
查看>>
Python 辨异 —— __init__ 与 __new__
查看>>
算法 Tricks(六)—— 判断一个数是否为完全平方数
查看>>
数组适配器的简单配置
查看>>
WEB UI基础八:链接跳转到标准的工单界面
查看>>
ExtJS动态设置表头
查看>>
深度(Depth)概念
查看>>
linux - camera capture
查看>>
架构设计之Spring-Session分布式集群会话管理【转】
查看>>
给HTML拍个照(如何将html元素转成图片)
查看>>
接口测试测什么?
查看>>
数据库构架设计中的Shared Everthting、Shared Nothing、和Shared Disk
查看>>
小程序调用支付报错:jsapi缺少参数: total_fee
查看>>
地址总线、数据总线、控制总线详解
查看>>
Android BroadcastReceiver(一)
查看>>
复制目录下所有文件(隐藏文件与非隐藏文件)
查看>>