如果位置在具有可变宽度的线上的两个点之间

时间:2015-03-02 02:50:21

标签: c# math 2d coordinates

我在2D游戏中有一个坐标网格。 我需要在可变宽度的线上找到特定尺寸的射弹的多个目标。

坐标是绝对整数值。

在我的网格中,根据我的情况,它与典型的X和Y轴不同。 对于北方,它是X-1,Y-1。南,X + 1,Y + 1。钻石图案。

                   0,0
               0,1 1,1 1,0
           0,2 1,2 2,2 2,1 2,0
       0,3 1,3 2,3 3,3 3,2 3,1 3,0
                  etc...

没有负坐标。

Here is a visual example of what I hope to accomplish. 两条黑线表示各个集合的单独目标区域,每个红点表示需要被验证为黑线内的对象的对象。

这是我想要改编或替换的原始功能代码。 它在一条线上的坐标集合具有固定的宽度。我需要能够在需要时制作更广泛的目标坐标的东西。

    List<coords> line(int xa, int ya, int xb, int yb)
    {
        int dx = xb - xa, dy = yb - ya, steps, k;
        float xincrement, yincrement, x = xa, y = ya;

        if (Math.Abs(dx) > Math.Abs(dy)) steps = Math.Abs(dx);
        else steps = Math.Abs(dy);

        xincrement = dx / (float)steps;
        yincrement = dy / (float)steps;
        var thisLine = new List<coords> {new coords(Math.Round(x), Math.Round(y))};

        for (k = 0; k < MaxDistance; k++)
        {
            x += xincrement;
            y += yincrement;
            thisLine.Add(new coords(Math.Round(x), Math.Round(y)));
        }
        return thisLine;
    }

任何答案都应该记住,集合是时间敏感的,性能很重要,因为它将在服务器环境中使用。

0 个答案:

没有答案