Масштабирование графика 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 шт):

Автор решения: Korostev

Вопрос решился, надо было прописать

int down_y, pos_x, one_cell = 100;

перед main()

→ Ссылка