一条直线上经过的格子
来源:互联网 发布:阿里云产品设计理念 编辑:程序博客网 时间:2024/04/20 09:58
这是最近在项目中遇到的,本来想着很简单的,但是结果并不是那样的,首先根据直线的斜率划分
前提条件是每个单元格的单位为1。.
第一种情况是,斜率的绝对值小于1的情况
第二种情况是,斜率的绝对值大于1的情况
首先让我来说说第一种情况
这条线段的两个点分别在两种不同颜色的格子中
我先把在紫色格子中(左边的格子)的点定义为firstPoint,线段的另一个点定义为secondPoint
首先计算一下firstPoint所在格子的索引
我把格子的索引分为行索引和列索引:
//计算firstPoint所在格子的行列索引
firstPoint_index_x = (int)firstPoint.x ;
firstPoint_index_y = (int)firstPoint.y ;
//计算secondPoint所在格子的行列索引
secondPoint_index_x = (int)secondPoint.x;
secondPoint_index_y = (int)secondPoint.y;
//接下来就是计算firstPoint和secondPoint所在格子的索引
firstPoint_grid_index = firstPoint_index_y * mapWidth + firstPoint_index_x;
secondPoint_grid_index = secondPoint_index_y * mapWidth + secondPoint_index_x;
//计算该线段所在直线的斜率
deltaX = fabs( firstPoint.x - secondPoint.x);
deltaY = fabs( firstPoint.y - secondPoint.y);
//当线段的斜率的绝对值小于1的情况
if( deltaX > deltaY)
{
float k = deltaY/deltaX;
for(int x = firstPoint_index_x + girdSize; x <= second_index_x ; x += gridSize)
{
int y = (x - firstPoint.x) * k + firstPoint.y;
//第一次执行完了循环之后,x,y即为所求紫色格子右边第一个格子的行列索引
int nextGridndex = y * mapWidth + x;
//第一次循环后nextGridIndex 左边的格子索引(紫色格子索引)为
int frontGridIndex = y * mapWidth + x - 1
//这两个格子都是直线所经过的格子
}
}
//有的同学肯定会很疑惑,为什么在一次循环里面会一下子计算两个格子索引呢,这个问题我先不回答,你可以自己先试试当上面的循环体进行第二次循环的时候
//会是什么情况
今天有点累了,先写到这里吧,明天接着把后面的给写完。虽然说这个也算不上什么很牛逼的技术点吧,但是记录了我的一个脚印,也希望给大家一点帮助!
- 一条直线上经过的格子
- 计算网格中直线经过的格子
- java 平面上在一条直线上最多的点数
- 求一条直线经过一个直角坐标系里m个点最多点的点数
- EOJ 1084 一条直线上?
- 实现一组点,在一条直线上最大的点数
- UVA Lining Up (一条直线上最多的点数)
- 寻找散点中在一条直线上点的个数最大值
- poj3304 判断是否存在一条直线经过n条线段
- 获取直线经过的像素
- 这些点,有的近似在一条直线上,有的近似在另一条直线上,有的不在直线上,如何找出近似在一条直线上的点,并求出直线方程?
- 画一条简单的直线
- 在对话框上画一条三维直线
- 求平面上在一条直线上的点的个数
- 1.10 找经过点最多的直线
- 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进
- 求一条直线上能包含的最多数量的点
- 一个点在一条直线上往返做运动的代码。
- 进程上下文和中断上下文
- IAR编译duplicate definitions for IAR报错解决办法
- FreeBSD 8.0 Samba 文件共享
- oracle导入数据
- 几招怎样有效防止邮件病毒的侵入
- 一条直线上经过的格子
- 静态数据成员
- POI 2453 你水的过吗?仅以此献给HYC小牛......
- js关联数组长度为0
- 如何安装JBuilder2005
- Linux生产者消费者问题编程实例
- flex 类不能嵌套 错误
- 学习scrum
- 深入理解send/recv系统调用!