c++ 围绕2D矩阵的特定点生成圆[闭合]

qltillow  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(159)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

2天前关闭。
Improve this question
我正在尝试用C++在控制台中随机生成一个高度图。我有一个数组[50,50],初始化为全0。

matrix = new int[rows * columns];
        for (int i = 0; i < rows; i++) {
            for (int k = 0; k < columns; k++) {
                matrix[i * columns + k] = 0;
            }
        }

我使用循环在数组中生成随机点,并将这些点的位置存储在向量中。

std::vector<int> sprinklePeaks(int peakDensity, int dimension) {
    int count = 0;
    std::vector<int> peaks;
    for (int i = 0; i < peakDensity; i++) {
        int peakIndex = randomize(0, dimension);
        matrix[peakIndex] = randomize(69, 99);
        peaks.push_back(peakIndex);
    }
    return peaks;
}

问题:我试图围绕这些点生成一个半径随机的圆,并使用随机生成的值填充圆,这些值随着接近中心而增加,我生成的圆似乎具有正确的中心坐标,但距离错误,没有值添加到矩阵中。

void circleGen(std::vector<int> peaks, int dimensions) {
    for (int i = 0; i < peaks.size(); i++) {
        int radius = randomize(5, 15);
        int area = 3.14159 * radius * radius;
        int index = peaks[i];
        int x = index / 50;
        int y = index % 50;
        // std::cout << "Peak: " << peaks[i] << "\n";
        // std::cout << "Peak Coordinates: [" << x << ", " << y << "]\n";
        int peakHeight = matrix[peaks[i]];
        for (int k = 0; k < radius * 2; k++) {
            for (int j = 0; j < radius * 2; j++) {
                int distance = sqrt((i - radius) * (i - radius) + (j - radius) * (j - radius));
                matrix[x - j * columns + y - k] = randomize(10, 20);
            }
        }
    }
}
9jyewag0

9jyewag01#

第一个问题可能是你没有边界检查,我假设你不应该改变矩阵(更重要的是周围的内存),如果坐标超出了边界。
我看到的第二个问题是,您计算distance,但没有使用该值。
第三个问题可能是,您希望将add添加到矩阵单元格中,而不是replace值。在matrix[x - j * columns + y - k] = randomize(10, 20);行中,可能应该是+=而不是=。并且distance应该参与右侧。或者,您希望进行替换,但仅当新值大于现有值时。
第四,正如Andrej在注解中提到的,计算矩阵中索引的数学是错误的。应该使用括号(x - j) * columns + y - k

相关问题