我应该如何将形状融入空间?

时间:2015-04-24 20:00:48

标签: java

假设我有以下形状(字符串类型);

..ee
e..e

以下空格:

||..
.|..

我的方法shapeFitsAt()确定给定的形状是否可以放置在指示的行/列位置。 row,col表示左上角的位置 将放置形状的角[块(0,0)]。一个形状会 如果其中一个填充的块与一个冲突,则不适合 空间中现有的填充块或将超出范围 空间。 “|”表示块“/障碍”而“。”意味着一个空的空间。 因此,如果我将上述形状放入空间,它将如下所示:

||ee
e|.e

请smb帮助如何将形状贴合到空间中?提前谢谢!

public class CreateSpace {

    private int height;
    private int width;
    private char[][] space = new char[height][width];
    private Shape originalShape;

    public CreateSpace(int height, int width, char[][] space, Shape shape)
    {
        this.height = height;
        this.width = width;
        this.space = space;
        this.originalShape = shape;
    }
public boolean shapeFitsAt(int row, int col, Shape shape)
    {

        if(row < 0 || row >= height || col < 0 || col >= width)
            throw new FitItException("Oops! Out of bounds in CreateSpace class! Go and check!");

        else if(space[row][col] == '|' || space[row][col] == this.originalShape.getDisplayChar())
            throw new FitItException("The space position is already filled out with a wall or a character. GO CHECK CreateSpace class!");

        else
        {

        }

    }

1 个答案:

答案 0 :(得分:1)

解决方案是将模式“线性化”为2个位组(一个用于形状,一个用于障碍物)。

将1放在必须保留形状位集的位置,将0放在其他位置;把0放在障碍物的位置,把1放在“障碍物”位置的其他地方。

前:

..ee    -->    ..eee..e    -->    00111001
e..e

||..    -->    ||...|..    -->    00111011
.|..

然后AND两个位集,看看结果是否与形状位集相同。 如果是,那么形状合适;如果没有,至少有一个障碍阻碍了。

    Shape : 00111001
Obstacles : 00111011
      AND : 00111001  ==  Shape bitset => OK !

快速高效,您可以重复使用障碍物位集来测试多种形状模式。