我正在尝试编写一个小助手类来绘制曼德布罗分形。该类Canvas
有两个二维数组,一个用于存储复平面的坐标,另一个用于|z|
超过 2 所需的迭代次数。
模板参数以像素为单位指定画布的宽度和高度。现在有趣的是,使用 的参数一切正常
<500, 500>
,但是如果我选择例如,<600, 600>
我会遇到分段错误。array.at()
我已经通过使用而不是检查和越界错误,array[]
但仍然没有。
template <std::size_t W, std::size_t H>
class Canvas
{
public:
Canvas(std::complex<double> _origin, std::complex<double> _end);
...
private:
std::complex<double> origin;
std::complex<double> end;
std::array<std::array<std::complex<double>, H>, W> field;
std::array<std::array<std::pair<bool, int>, H>, W> results;
};
template <std::size_t W, std::size_t H>
Canvas<W, H>::Canvas(std::complex<double> _origin,
std::complex<double> _end)
: origin{_origin}, end{_end}
{
double delta_x {end.real() - origin.real()};
double delta_y {end.imag() - origin.imag()};
double step_x {delta_x / static_cast<double>(W-1)};
double step_y {delta_y / static_cast<double>(H-1)};
for (std::size_t w = 0; w < W; ++w)
{
for (std::size_t h = 0; h < H; ++h)
{
field[w][h].real(origin.real() + (step_x*w));
field[w][h].imag(origin.imag() + (step_y*h));
}
}
}