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