Math 两条线,随机点和向量。如何找到哪一行位于另一行后面

Math 两条线,随机点和向量。如何找到哪一行位于另一行后面,math,vector,line,Math,Vector,Line,我正在开发一个游戏,玩家必须在黑暗的走廊中行走。角色有一个手电筒,相机位于上面(如GTA2)。我有阴影算法的问题 所以我们有一个光源(黄色圆圈)、一堆墙(绿色和蓝色线条)和光矢量(红色箭头)。 我们所知道的: -光源与线之间的距离 -线路长度 -光矢量坐标 -线路没有交叉 -线端点的角度 问题: 如何让程序看到哪一行位于其他行的前面?对于 例如,在图像中,我们可以看到绿线在蓝线的前面 我们可以找到一个向量和一条两条线的交叉点,然后找到光源和交叉点之间的长度,比较它们以找到最近的线,但是这会减慢

我正在开发一个游戏,玩家必须在黑暗的走廊中行走。角色有一个手电筒,相机位于上面(如GTA2)。我有阴影算法的问题

所以我们有一个光源(黄色圆圈)、一堆墙(绿色和蓝色线条)和光矢量(红色箭头)。
我们所知道的:
-光源与线之间的距离
-线路长度
-光矢量坐标
-线路没有交叉
-线端点的角度

问题:
如何让程序看到哪一行位于其他行的前面?对于 例如,在图像中,我们可以看到绿线在蓝线的前面

我们可以找到一个向量和一条两条线的交叉点,然后找到光源和交叉点之间的长度,比较它们以找到最近的线,但是这会减慢程序的速度。此外,可能会出现这样的情况,即蓝线将更靠近光源(如果我们将光源向上移动一点),但程序仍必须看到蓝墙位于绿线后面。
也许我们可以在每一行都标上一些值

编辑:我还尝试使用公式a/alpha+b/beta为每一行创建一个值
其中:
a-光源与直线第一个端点之间的距离
α-直线第一个端点的角度
b-光源和线条第二个端点之间的距离
β-直线第二个端点的角度
必须恢复其中一个角度

但为了使这个公式起作用,似乎必须有一些常数,例如:
A标准/α+b标准/β
也许通过找到这个常数,我可以给每一行一个值

蓝线在绿线后面

这与声明是等价的

光源发出的光线先穿过绿线,然后穿过蓝线

(请注意,这是一条数学射线,而不是光线——它穿过蓝色和绿色障碍物。)

这相当于

来自光源的光线与两条线相交,绿色交叉点比蓝色交叉点更靠近光源


搜索这样一条射线一开始看起来很困难,-有无限多条射线需要测试,-但我认为如果这样一条射线存在,那么一定有这样一条射线通过其中一条线的端点。现在只有四个要测试。

如果只对直线端点进行计算,那么这些计算不会使程序慢很多。我不理解“此外”的问题;通过端点的光向量(或通过两条线的任何向量)将首先通过绿色。@Beta,这意味着如果光向量到达绿线,它将停止在那里,而不会到达它后面的蓝线。谢谢回答。实际上,我们有连接交点两端的光线。我们还知道从光线的起点到端点的距离。以及端点的角度。这些信息能帮助解决这个问题吗?@Olich:“连接交叉点两端的光线”?那是什么意思?我非常抱歉。我的意思是光线连接一条直线的两个端点。@Olich:所以你有四条这样的光线。其中一条线还必须与另一条线相交(否则两条线都不在另一条线后面)。考虑到该光线,可以计算从光源到一条线端点的距离,并且可以计算从光源到另一条线(沿该光线)的距离。比较这些距离,你就完成了。我考虑过了,但是会有很多计算,这会减慢比赛的速度。如果我们有一条未连接到端点的光线(如上图所示),我们能做什么?程序必须以某种方式“意识到”ray到达了绿墙,他无法通过它。