Масштабирование графика SFML
надо сделать масштабирование графика, что я имею: пользователь задает интервал графика с помощью from и to. расположение координат я считаю с помощью этих границ. pos_x - положение по х координаты ОУ. down_y - положение по у координаты ОХ.
Моя идея была в том, что я считаю изначальное положение координат, а потом, нажимая на кнопки, смещаю их. То есть если нажимаю на А -- значение pos_x уменьшается на 1 и тд.
Проблема в том, что координаты стоят на месте. Возможно кто-то может помочь реализовать эту или подсказать что-то лучше. Важно то, что при смещения графика вправо/влево и тд, границы рисовки должны оставаться такими же.
Width - ширина окна. Height - высота. one_cell - одна клетка графика. Ymax - максимальное значение У.
int main()
{
int from, to;
cout << "Enter the graphic limits:" << endl;
cout << "From: ";
cin >> from;
cout << "To: ";
cin >> to;
double x, y, Ymax;
for (double x = from; x <= to; x = x + 1)
{
y = sqrt(pow(x, 4) + 1);
if (y < Ymin)
Ymin = y;
else
Ymax = y;
}
ContextSettings settings;
settings.antialiasingLevel = 8;
RenderWindow window(VideoMode(Width, Height), "Graphics", Style::Default, settings);
int down_y, pos_x, one_cell = 100;
pos_x = abs(from * one_cell);
down_y = Height - Height / ((Ymax * one_cell) / Height);
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
}
if (Keyboard::isKeyPressed(Keyboard::A)) {
pos_x --;
}
if (Keyboard::isKeyPressed(Keyboard::D)) {
pos_x ++;
}
if (Keyboard::isKeyPressed(Keyboard::W)) {
down_y ++;
}
if (Keyboard::isKeyPressed(Keyboard::S)) {
down_y --;
}
window.clear(Color::White);
//-------------Координата-ОХ------------------------
VertexArray OX(Lines, 2);
OX[0].position = Vector2f(0, down_y);
OX[1].position = Vector2f(Width, down_y);
OX[0].color = Color::Black;
OX[1].color = Color::Black;
window.draw(OX);
VertexArray OX_arrow_up(Lines, 2);
OX_arrow_up[0].position = Vector2f(Width - 13, down_y - 5);
OX_arrow_up[1].position = Vector2f(Width, down_y);
OX_arrow_up[0].color = Color::Black;
OX_arrow_up[1].color = Color::Black;
window.draw(OX_arrow_up);
VertexArray OX_arrow_down(Lines, 2);
OX_arrow_down[0].position = Vector2f(Width - 13, down_y + 5);
OX_arrow_down[1].position = Vector2f(Width, down_y);
OX_arrow_down[0].color = Color::Black;
OX_arrow_down[1].color = Color::Black;
window.draw(OX_arrow_down);
//---------------------------------------------------
//-------------Координата-ОУ-------------------------
VertexArray OY(Lines, 2);
OY[0].position = Vector2f(pos_x, 0);
OY[1].position = Vector2f(pos_x, Height);
OY[0].color = Color::Black;
OY[1].color = Color::Black;
window.draw(OY);
VertexArray OY_arrow_left(Lines, 2);
OY_arrow_left[0].position = Vector2f(pos_x, 0);
OY_arrow_left[1].position = Vector2f(pos_x + 5, 13);
OY_arrow_left[0].color = Color::Black;
OY_arrow_left[1].color = Color::Black;
window.draw(OY_arrow_left);
VertexArray OY_arrow_right(Lines, 2);
OY_arrow_right[0].position = Vector2f(pos_x, 0);
OY_arrow_right[1].position = Vector2f(pos_x - 5, 13);
OY_arrow_right[0].color = Color::Black;
OY_arrow_right[1].color = Color::Black;
window.draw(OY_arrow_right);
//---------------------------------------------------
window.display();
}
return 0;
}
Ответы (1 шт):
Вопрос решился, надо было прописать
int down_y, pos_x, one_cell = 100;
перед main()