Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';我的2D光线跟踪功能有什么问题?_Javascript_Raytracing - Fatal编程技术网

Javascript 什么';我的2D光线跟踪功能有什么问题?

Javascript 什么';我的2D光线跟踪功能有什么问题?,javascript,raytracing,Javascript,Raytracing,我编写了一个简单的函数,它使用DDA算法来实现2D光线跟踪(名为findCollision),但是在某些情况下它的行为似乎很奇怪 函数findCollision(位置、方向、世界、最大距离=10){ const steps=Math.max( 数学abs(方向x), 数学abs(方向y), ); 常数增量={ x:方向。x/步, y:方向。y/步数, }; 设x=位置x; 设y=位置y; for(设i=0;i

我编写了一个简单的函数,它使用DDA算法来实现2D光线跟踪(名为
findCollision
),但是在某些情况下它的行为似乎很奇怪

函数findCollision(位置、方向、世界、最大距离=10){
const steps=Math.max(
数学abs(方向x),
数学abs(方向y),
);
常数增量={
x:方向。x/步,
y:方向。y/步数,
};
设x=位置x;
设y=位置y;
for(设i=0;idocument.body.appendChild(画布)您的函数似乎很好

第一个问题是你的世界没有中心。我添加了一列和一行。这样的话,图片应该是对称的,漂亮的

第二个问题是画墙。始终为正的宽度和高度会导致墙在一个方向上从中心传播,在其他方向上从中心传播。我根据方向添加了宽度和高度符号计算(但这样一来,部分墙超出了画布边界)

更新

我扩展了世界,使墙壁可见。这个算法似乎有一个精度问题。如果我将观察者设置为不在中心,则在拐角处存在看起来不太好的点。对于延迟求解,可以使算法中的步骤比网格步骤短得多

当前,一个算法只步进到下一条垂直或水平网格线。您可以尝试更改算法,使其步进到下一条最近的网格线

函数findCollision(位置、方向、世界、最大距离=10){
const steps=Math.max(
数学abs(方向x),
数学abs(方向y),
);
常数增量={
x:方向。x/步,
y:方向。y/步数,
};
设x=位置x;
设y=位置y;
for(设i=0;i