【问题标题】:2d array that calculates and stores 6 random connected points计算和存储 6 个随机连接点的二维数组
【发布时间】:2013-04-23 19:16:45
【问题描述】:

我正在尝试制作一个 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;
}

【问题讨论】:

  • sky 中的连字符和空格('-'' ')有什么意义?另外,您的意思是在同一行上打印所有行吗?
  • 这段代码最初是用来制作一个二维数组,其中有随机放置的星星。所有其他空格都是空白。
  • 我明白了,所以连字符代表星号。您是否尝试扩展此代码以包含所描述的功能,或者只是将其发布为您知道如何做的示例?根据您的描述,听起来整条线必须在周边(不仅仅是端点)。这个对吗?如果是这样,一条“线”可以穿过一个角落还是必须完全在一侧?
  • 是的,整条线都应该在外围。这条线必须是直的,所以我认为它必须在一侧。如果可能,我正在尝试扩展此代码。

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


【解决方案1】:

在一个简化的示例中将您的数组可视化如下

[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]

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

祝你的任务好运!

【讨论】:

  • 但是如何让程序选择并连接周边的两个点?
  • 我们还没有学会这样做。还有其他方法吗?
  • @Trollslayer 你还没有学会怎么做吗?遍历一个数组?
【解决方案2】:

如果我没看错你的描述,你想做这样的事情(伪代码):

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
}

从填充数组并随机打乱它的算法开始可能会......效率低下......虽然,正如争论所言,最终其中一个随机排列会达到你想要的...... .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2017-07-16
    相关资源
    最近更新 更多