我试图画一条线。避免行长变为零
是否有人开发了一个图形环境,并知道如何避免行长度为零时的NaN值?
在二维环境中,用户可能会移动一条线或调整它的大小......我在这个区域遇到问题,在运行期间长度变得无效,导致形状消失或行为异常,例如变成点。
我该如何正确做到这一点?
我试图画一条线。避免行长变为零
是否有人开发了一个图形环境,并知道如何避免行长度为零时的NaN值?
在二维环境中,用户可能会移动一条线或调整它的大小......我在这个区域遇到问题,在运行期间长度变得无效,导致形状消失或行为异常,例如变成点。
我该如何正确做到这一点?
看一看Bresenham's line algorithm。例如,这种伪不使用部门,因此它不能导致NaN的:(维基百科)
function line(x0, y0, x1, y1)
dx := abs(x1-x0)
dy := abs(y1-y0)
if x0 < x1 then sx := 1 else sx := -1
if y0 < y1 then sy := 1 else sy := -1
err := dx-dy
loop
setPixel(x0,y0)
if x0 = x1 and y0 = y1 exit loop
e2 := 2*err
if e2 > -dy then
err := err - dy
x0 := x0 + sx
end if
if e2 < dx then
err := err + dx
y0 := y0 + sy
end if
end loop
它也将以此为限,其中在同一坐标的起点和终点。根据你的定义,这是一条长度为0或1的线。
另一个问题可能在于矢量在旋转后需要标准化,否则它们可能会在每次旋转时一点一点地收缩,直到变得可见。 – 2013-03-22 23:38:35
嗨Virtlink,感谢您的链接和示例。但是,此算法用于绘制给出2个端点的线段。就我而言,我们正在使用Windows API提供的内置DrawLine方法。 当开始点和结束点相同,然后计算返回NaN时,会发生该问题。那么我们正在使用的起点和终点已经变成了NaN,这怎么可能有用呢? – 2013-03-26 19:06:43
我不认为你问了一个问题。 – wRAR 2013-03-22 23:36:44
但是一条长度为0的线实际上是一个点!你会期待什么? – 2013-03-22 23:36:47
至少不要太过分,并不断增加负面分数(这是没有用的),你能否把我引荐给其他论坛,我可以问这个问题?我的意思是强迫人们不要说话是一回事,但要求在另一个论坛上分享我的问题是另一回事。 – 2013-03-26 19:11:40