直线经过的网格区域计算(didi)

编程入门 行业动态 更新时间:2024-10-09 00:46:03

直线经过的<a href=https://www.elefans.com/category/jswz/34/1770341.html style=网格区域计算(didi)"/>

直线经过的网格区域计算(didi)

  1. 问题描述:
    在一给定画布场景中,判断线段所经过网格。下图所示分别为线性递增和线性递减时,直线经过的网格路径。
  2. 分析

回归问题本身,直线经过网格,就必然会与网格线产生交点,因此,可考虑此种策略:①先分别遍历直线与网格横纵交点(需考虑沿X轴和Y轴递增递减性质);②根据直线与网格横纵交点求出交点位置跨越的网格序列号,且存在以下规律:

1)当交点在横轴

2)当交点在纵轴

  1. 具体实现
/*** @description: 计算线段与网格线的交点* @param {type} * @return: */
function intersectionCal(startPoint, endPoint) {var dx = endPoint.x - startPoint.x;var dy = endPoint.y - startPoint.y;// 设置数据列表空间var temList = new Array();var gridList = new Array();// 设置增量var increX = dx/Math.abs(dx);var increY = dy/Math.abs(dy);// 直线方程:斜截式var k = dy/dx;var b = -k * startPoint.x + startPoint.y;// 开始计算交点for (var m=0; m<=Math.abs(dx)-1; m++) {// 沿横轴方向遍历,既查询与网格轴轴的交点var temPoint1 = new b2Vec2();temPoint1.x = Math.ceil(startPoint.x) + increX * m;temPoint1.y = k * temPoint1.x + b;temList.push(temPoint1);}// 沿纵轴方向遍历,既查询与网格横轴的交点for (var n=0; n<=Math.abs(dy); n++) {var temPoint2 = new b2Vec2();temPoint2.y = Math.ceil(startPoint.y) + increY * n;temPoint2.x = (temPoint2.y - startPoint.y) / k + startPoint.x;temList.push(temPoint2);}return temList;
}
/*** @description: 计算线段经过网格行列号* @param {type} * @return: */
function lineGridCal(temList) {// 存储网格路径for (var j=0; j<(temList.length);j++) {var temGridUp = new b2Vec2();var temGridDown = new b2Vec2();var temGridLeft = new b2Vec2();var temGridRight = new b2Vec2();// 横轴交点if((temList[j].x !=Math.ceil(temList[j].x)) && (temList[j].y ==Math.ceil(temList[j].y))){temGridUp.x = Math.ceil(temList[j].x);temGridUp.y = Math.ceil(temList[j].y)+1;temGridDown.x = Math.ceil(temList[j].x);temGridDown.y = Math.ceil(temList[j].y);gridList.push(temGridUp, temGridDown);} // 纵轴交点else if((temList[j].y !=Math.ceil(temList[j].y)) && (temList[j].x ==Math.ceil(temList[j].x))) {temGridLeft.x = Math.ceil(temList[j].x);temGridLeft.y = Math.ceil(temList[j].y);temGridRight.x = Math.ceil(temList[j].x)+1;temGridRight.y = Math.ceil(temList[j].y);gridList.push(temGridLeft, temGridRight);}};return gridList;}
}

更多推荐

直线经过的网格区域计算(didi)

本文发布于:2024-03-09 06:05:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1724098.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网格   直线   区域   didi

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!