栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在访问所有单元格的3D体素空间中的两点之间走一条线

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在访问所有单元格的3D体素空间中的两点之间走一条线

提出来,或参见:http :
//jsfiddle.net/wivlaro/mkaWf/6/

function visitAll(gx0, gy0, gz0, gx1, gy1, gz1, visitor) {    var gx0idx = Math.floor(gx0);    var gy0idx = Math.floor(gy0);    var gz0idx = Math.floor(gz0);    var gx1idx = Math.floor(gx1);    var gy1idx = Math.floor(gy1);    var gz1idx = Math.floor(gz1);    var sx = gx1idx > gx0idx ? 1 : gx1idx < gx0idx ? -1 : 0;    var sy = gy1idx > gy0idx ? 1 : gy1idx < gy0idx ? -1 : 0;    var sz = gz1idx > gz0idx ? 1 : gz1idx < gz0idx ? -1 : 0;    var gx = gx0idx;    var gy = gy0idx;    var gz = gz0idx;    //Planes for each axis that we will next cross    var gxp = gx0idx + (gx1idx > gx0idx ? 1 : 0);    var gyp = gy0idx + (gy1idx > gy0idx ? 1 : 0);    var gzp = gz0idx + (gz1idx > gz0idx ? 1 : 0);    //only used for multiplying up the error margins    var vx = gx1 === gx0 ? 1 : gx1 - gx0;    var vy = gy1 === gy0 ? 1 : gy1 - gy0;    var vz = gz1 === gz0 ? 1 : gz1 - gz0;    //Error is normalized to vx * vy * vz so we only have to multiply up    var vxvy = vx * vy;    var vxvz = vx * vz;    var vyvz = vy * vz;    //Error from the next plane accumulators, scaled up by vx*vy*vz    // gx0 + vx * rx === gxp    // vx * rx === gxp - gx0    // rx === (gxp - gx0) / vx    var errx = (gxp - gx0) * vyvz;    var erry = (gyp - gy0) * vxvz;    var errz = (gzp - gz0) * vxvy;    var derrx = sx * vyvz;    var derry = sy * vxvz;    var derrz = sz * vxvy;    do {        visitor(gx, gy, gz);        if (gx === gx1idx && gy === gy1idx && gz === gz1idx) break;        //Which plane do we cross first?        var xr = Math.abs(errx);        var yr = Math.abs(erry);        var zr = Math.abs(errz);        if (sx !== 0 && (sy === 0 || xr < yr) && (sz === 0 || xr < zr)) { gx += sx; errx += derrx;        }        else if (sy !== 0 && (sz === 0 || yr < zr)) { gy += sy; erry += derry;        }        else if (sz !== 0) { gz += sz; errz += derrz;        }    } while (true);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号