问题描述
如何有效检查任意线是否与垂直线重叠?如何有效检查任意线是否与水平线重叠?
假设: 行不是平行的,因此不必担心dx = 0或dy = 0并且所有坐标都是无符号整数。
上下文是线到矩形的重叠检查,将针对具有yStart和yEnd的2条垂直线或2条水平线检查一条线 一次使用相同的xStart和xEnd,因此我可以计算dx,dy和a并使用2次。
这是我当前使用线y = ax + b的方程式的解决方案。如您所见,我还没有找到一种利用所有坐标都是无符号整数的方法。有没有更有效的解决方案?
public static bool LinetoVertLine(uint x,uint yStart,uint yEnd,uint x1,uint y1,uint x2,uint y2)
{
int dx = (int)x2 - (int)x1;
int dy = (int)y2 - (int)y1;
float a = dy / (float)dx;
float y = ((x - x1) * a) + y1;
return y >= yStart && y <= yEnd;
}
public static bool LinetoHorzLine(uint y,uint xStart,uint xEnd,uint y2)
{
int dx = (int)x2 - (int)x1;
int dy = (int)y2 - (int)y1;
float a = dy / (float)dx;
float x = ((y - y1) / a) + x1;
return x >= xStart && x <= xEnd;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)