二维射线与正方形相交

2 dimensional ray intersect with square

我正在制作光线投射器。射线对象有 Vect2 originVect2 directionorigin 是相机的矢量。方向由这段代码计算

var a = (cam_dir - fov) + (((fov * 2) / width) * x);
// x is the current x position of the screen. width is screen width
var b = a * Math.PI / 180; // radians
ray.direction = new Vect2(Math.sin(b), Math.cos(b));

raycaster 世界是一个数组。每一项为 0 或正数。我遍历这些值,这是我需要帮助的地方。

给定一条如上计算的射线和一个宽度为 1 的框,我如何找到从射线到射线与框相交点的距离?

如果您想要我的大量注释代码,请查看此 pastebin。有一条评论我需要帮助。 https://pastebin.com/vPfGzzdM

此外,您无需添加 Vect2.add 或减去、点或交叉等。我知道该怎么做,而且我做了很多次,所以不要定义它们:)感谢uuuu

如果您需要找到所有与网格的交叉点,请在 Amanatides-Woo 算法中查找 here 链接。

如果只有一个正方形,写出射线的参数方程并求解正方形的边

x = origin.x + direction.x * t
y = origin.y + direction.y * t

找到正方形左边缘或右边缘(取决于 direction.x 符号)以及正方形顶部或底部边缘(取决于 direction.y 符号)的参数 t。检查交点是否在真正的正方形边缘上(而不是在它的延续上),如果有两个有效交点,则选择较小的 t 值。

还有很多算法line clipping