#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

输入起止坐标,返回途径网格。相关推荐

  1. 从浏览器地址栏输入url到请求返回发生了什么(深问)

    问题: 从浏览器地址栏输入url到请求返回发生了什么 你一看这种烂掉牙的问题,小case,但996面试大佬由此延展的问题已经远远超越了这个问题本身了,不信你就接着看. 我回答了首先会进行 url 解析 ...

  2. 写一个函数,输入int型,返回整数逆序后的字符串

    2019独角兽企业重金招聘Python工程师标准>>> 刚刚看到一个面试题:写一个函数,输入int型,返回整数逆序后的字符串.如:输入123,返回"321". 要 ...

  3. 编写程序,输入一个N,返回角谷变换(达到1所需)的次数

    import java.util.Scanner;/*** @author:(LiberHome)* @date:Created in 2019/3/6 17:36* @description:* @ ...

  4. 25 写一个递归函数,输入一个非负整数,返回组成它的数字之和。

    题目描述:写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和, 例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19. 代码如下: #include ...

  5. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和, 例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

    写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和, 例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 以前写排序问题,不懂得可以翻翻看,这个问 ...

  6. 递归学习:写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和;递归实现n的k次方

    写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和. 例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 输入:1729,输出:19 #inclu ...

  7. 【ABAQUS之二次开发】如何利用坐标表达式选择网格节点

    文章目录 1. 讲解 2. 代码 1. 讲解 在编写二次开发的脚本时,通常需要指定边界条件,就不可避免地需要选择某些节点,ABAQUS默认宏的选择代码非常不友好,可以通过以下代码进行修改 sessio ...

  8. python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]

    练习内容:判断多个坐标是否在同一条直线上 完整代码和注释如下 print('请输入几个点的横纵坐标,程序将会返回这几个点是否在同一条直线上') def coor_nums():#获得每个值的横纵坐标 ...

  9. python输入两个坐标求距离_计算python中*多组*地理坐标之间的距离

    编辑: here's a simple notebook example 一般方法,假设您有一个包含点的DataFrame列,并且您想要计算所有这些列之间的距离(例如,如果您有单独的列,则首先将它们组 ...

  10. python坐标点怎么输入_python导入坐标点的具体操作

    小编今天教你们python怎么导入坐标点,解决你在生活中遇到的小问题. 首先下载安装python,打开文本编辑器,将文件保存成 py格式,如果python目录不在usr/bin目录下,则替换成当前py ...

最新文章

  1. 战锤全面战争无法响应服务器,战锤:全面战争打不开 游戏无法启动解决办法...
  2. C++ 类型转换运算符
  3. java应该学的基础东西
  4. android 谷歌邮箱,Android 使用 SMTP 发送邮件 (Gmail)
  5. 一键对频对讲机好吗_挑战传统,新型对讲机展现独特一面--极蜂智能网络对讲机...
  6. python凯撒密码实现_密码:凯撒密码及其Python实现
  7. linux的idle命令,DBA 常用Linux命令
  8. 直面 Jira,Worktile CTO 为何自信满满?
  9. 程序员的大恩人永远地离开了
  10. Base64与MIME和UTF-7
  11. 12306微信小程序上线 提供余票查询暂不支持购票
  12. ryzen linux 搭配显卡,R5 1500X配什么显卡好 适合AMD锐龙5 1500X搭配的显卡推荐
  13. Java SE下载方式
  14. 使用Keras-yolov3来识别滑动验证码
  15. flutter ScrollController attached to multiple scroll views
  16. PythonOcc实战——step文件导入、零件识别、几何属性、爆炸图初步展示
  17. ligerui的使用心得
  18. 鼠标处显示坐标 html,cesium的鼠标事件(最基础的显示鼠标位置坐标)
  19. 时间函数millis( )
  20. matlab在量子力学中的应用,一个关于量子力学中的matlab的问题

热门文章

  1. 如何查计算机配件的配置,如何查看电脑配置信息?教你四种方法
  2. 华为云influxdb+grafana+ prometheus安装和如何外网访问华为云+java环境安装配置+jmeter安装配置+Jmeter后端监听器+非GUI执行jmeter脚本
  3. 二级计算机考试什么最难,计算机二级考试难吗 考试内容是什么
  4. python正态分布函数_Python正态分布概率计算方法
  5. 矩阵平方差公式成立条件的探讨
  6. elementUI兼容ie浏览器问题(笔记)
  7. 【day4】【洛谷算法题】-P5708三角形面积-刷题反思集[入门1顺序结构]
  8. 游戏开发工程师岗位要求
  9. 2021年数字IC岗位职责及岗位要求
  10. 青龙面板2.9,以及wskey自动转换ck配置