0

我有一个二维空间和该空间中的一条射线。

带射线的网格

我需要按数字顺序获取红色矩形的坐标。

我的尝试:我有一个双射线的起点。
我有一个值偏航,它是以弧度为单位的方向。
我这样做是为了得到下一个红色方块的坐标。

double tanyaw = Math.tan(yaw);
if ((int) (x + 1/tanyaw) == (int) x) {
    x += 1/tanyaw;
    z += Math.signum(tanyaw);
} else {
    x += Math.signum(tanyaw);
    z += tanyaw;
}

然而:
网格

那是 yaw =3*pi/8请注意,这条线是在绘图程序中制作的,并且只是大致正确的。

4

1 回答 1

0

线方程为:

x = x0 + t*xd
y = y0 + t*yd

为简单起见,定义镜头在 t=0 开始,最后要测试的位置在 t=1。然后您可以简单地定义步长(假设您可以简单地计算结束位置 x1,y1):

xstep = 1/(x1 - x0)
ystep = 1/(y1 - y0)
xpos = x0
ypos = y0

然后简单循环,直到你到达交叉路口或结束使用:

while(!hitsomething()) {
    if (xpos + xstep - x0 < ypos + ystep - y0) {
           xpos += xstep;
           visit(xpos, ypos);
    } else {
           ypos += ystep;
           visit(xpos, ypos);
    }
}
于 2014-08-24T13:59:33.380 回答