用于计算以(θ,y)为角度的线与角度为θ的线的交点以及具有共同点(0,0至w,h)的边界矩形的有效算法是什么?假设行原点在框内。
在基本的ascii艺术中(对于从2,6和θ开始的线约为9π/ 8):
h---------------...h,w
. ...
. ...
. ...
7 ...
6 x ...
5 / ...
4 / ...
3/ ...
2 ...
/1 ...
0 1 2 3 4 5 6 7 ... w
除θ外,所有变量都是整数。
答案 0 :(得分:2)
假设我们使用变量t
对行进行参数化,即该行上的每个点都可以写为
[x(t),y(t)] = [x,y] + t * [dx,dy]
使用常量
dx = cos(theta)
dy = sin(theta)
然后你可以先计算垂直边界的切口:
if dx<0 then // line going to the left -> intersect with x==0
t1 = -x/dx
x1 = 0
y1 = y + t1*dy
else if dx>0 then // line going to the right -> intersect with x==w
t1 = (w-x)/dx
x1 = w
y1 = y + t1*dy
else // line going straight up or down -> no intersection possible
t1 = infinity
end
其中t1
是交叉点的距离,[x1,y1]
是点本身。其次,你对上下边界做同样的事情:
if dy<0 then // line going downwards -> intersect with y==0
t2 = -y/dy
x2 = x + t2*dx
y2 = 0
else if dy>0 then // line going upwards -> intersect with y==h
t2 = (h-y)/dy
x2 = x + t2*dx
y2 = h
else
t2 = infinity
end
现在您只需选择与原点[x,y]
距离较短的点。
if t1 < t2 then
xb = x1
yb = y1
else
xb = x2
yb = y2
end
请注意,此算法仅在起点位于边界框内时才有效,即0 <= x <= w
和0 <= y <= h
。