【问题标题】:C++ 2D Vector setting a position within the vectorC++ 2D 向量在向量内设置位置
【发布时间】:2014-01-10 22:30:18
【问题描述】:

我的任务是为大学项目制作机器人控制器。目前它进展顺利,但我有一个烦人的小错误,我似乎无法纠正它。

基本上,我必须设计一个对比控制器来实现随机移动,同时避开障碍物。所以,我有一个机器人,它在控制台上显示为“R”,位于 10 x 10 区域内。这是我用来初始化我的 2D 向量,然后绘制网格的代码:

void matrix::init() // init my 2D vector
{
    dot = 10; // 10 by 10 area
    vector2D.resize(dot); 
    for (int i=0; i<dot; i++)
    {
        vector2D[i].resize(dot); 
    }
}

void matrix::draw() // drawing the vector to the screen
{
    for(int i=0; i<dot; i++)
    {
        for(int j=0; j<dot; j++)
        {
            cout <<vector2D[i][j]<<"."; // I being the Y access, J the X access
        }
        cout<<endl;
    }
}

void matrix::update() 
{
    init();
    draw();     
}

这是在它自己的名为matrix.cpp 的类中,然后在main.cpp 中调用它,m.update(); mmatrix 的对象

现在,正在使用matrix.cpp 类中的此代码设置屏幕上的机器人位置

void matrix::robotPosition(int x, int y)
{
    bot = 'R';
    cout << "X Pos"<< x <<endl;
    cout << "Y Pos"<< y <<endl;
    vector2D[x][y] = bot; // Outputting location of robot onto the grid / matrix
}

我已经开发了更多代码来控制屏幕上的位置,但我认为在我的问题的这一点上不需要。

int main()
{
    matrix m;
    robot r;

    while(true)
    {
        m.update(); // vector2D init and draw
        m.robotPosition(r.getX(), r.getY());
        r.update();
        system("pause");
    }
}

每次我的程序循环通过 while 循环时,它都会在屏幕上绘制另一个机器人,但似乎并没有删除旧机器人。该代码通过使用char 'R'(这是我的机器人)在二维向量中分配某个XY 来工作。我的想法是否正确,我必须在每个运动周期后绘制 2D 矩阵?

谢谢

【问题讨论】:

    标签: c++ class robotics 2d-vector


    【解决方案1】:

    当您第一次将机器人位置设置为 (5,5) 时,您会将 vector2D[5][5] 设置为 R。然后,如果将位置设置为 (5,6) 之类的值,则将 vector2D[5][6] 设置为 R。现在[5][5][5][6] 两个元素都设置为R,因此机器人处于两个位置。

    有一些解决方案取决于您的设计方式:

    1. 您可以将当前机器人位置存储在matrix 中,并在robotPosition 的开头将该位置设置为非机器人字符。这将在设置新位置之前清除之前的位置。
    2. 您可以在每一帧的开头清除整个矩阵。您正在在每一帧的开头调用update,这会尝试将向量的大小调整为与它们已经相同的大小 - 这并不能清除它。相反,您应该在构造函数中完成这项工作,并且可以将 init 转换为 clear 函数。
    3. 如果您想为每个时间步使用不同的matrix,则需要将matrix m; 的声明移动到while 循环中。然后每个帧都有一个,应该在构造过程中清除(如果你将 init 东西移到构造函数中)。

    【讨论】:

    • 是的,我的思路是正确的。感谢您用这三种不同的方式解决我的问题。目前我已经通过在每个时间步上创建一个新矩阵来快速修复,但我确实觉得这是一种不好的方法。不过我很喜欢第二种方式,所以我会努力的!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多