2d数组,计算并存储6个随机连接点

时间:2013-04-23 19:16:46

标签: c++ multidimensional-array random-sample

我正在尝试制作一个80x20的2D阵列,它可以创建6条线,这些线随机连接在阵列周边的两个点之间。我想它看起来就像只画在某些地方的画面。我的问题是,我不知道如何选择和链接阵列周边的两个随机点并显示它们。我做了一个代码选择完全随机的点,但似乎无法解决这个任务。有人能指出我正确的方向吗?

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    const int rows = 80; //declares the amount of rows in the 2d array
    const int cols = 20; //declares the amount of columns in the 2d array
    char sky[rows][cols];

    fill_n(&sky[0][0], 100, '-'); 
    fill_n(&sky[0][0] + 100, rows*cols - 100, ' '); 
    random_shuffle(&sky[0][0], &sky[0][0] + rows*cols); 

    for(int r = 0; r < rows; ++r)
    {
        for(int c = 0; c < cols; ++c)
            cout << sky[r][c];
            cout << " ";
    }

    return 0;
}

2 个答案:

答案 0 :(得分:0)

以简化示例

显示您的数组,如下所示
[0][0], [0][1], [0][2], [0][3]
[1][0], [1][1], [1][2], [1][3]
[2][0], [2][1], [2][2], [2][3]
[3][0], [3][1], [3][2], [3][3]

您可以看到您的周边索引将是第一行和最后一行,以及第一列和最后一列。我将把实现留给您,但您应该能够使用2D数组的这个子集来选择您想要连接的值。

祝你好运!

答案 1 :(得分:0)

如果我正确地阅读你的描述,你想做这样的事情(伪代码):

for i in 1..6
{ pick one of four sides of the rectangle at random
  pick a random point p1 on that side

  pick one of the other three sides at random
  pick a random point p2 on that side

  use a line drawing algorithm (like Bresenham) to connect p1 and p2
}

从填充数组的算法开始并随机地随机播放它可能会......效率低......但是,正如参数所说的那样,最终其中一个随机排列会触及你想要的东西。