任意线与水平/垂直线重叠检查

问题描述

如何有效检查任意线是否与垂直线重叠?如何有效检查任意线是否与水平线重叠?

假设: 行不是平行的,因此不必担心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 (将#修改为@)