C++ для начинающих Рисование графика функции

  Сразу предупрежу — материал очень сырой и некоторые моменты я пропущу. Но это скорее всего все я дополню позднее. Во всяком случае надеюсь, что все получится.

Итак. Я с этим не сталкивался, но наверное в Универах могут давать лабораторные построения графиков по разным формулам. По большому счету неважно как выглядит формула, все сводится к однообразному построению и у начинающих не такие уж сложные задачи.

  Я выбрал простой график y=x*x Короткая формула, всем известная кривая (всем кто хоть чуть-чуть учился в школе)

Код C++ Рисование графика

  Что ж. Сразу скажу — Я не знаю почему x увеличивается на дробное число. При моих попытках увеличивать его на единицу график получался очень даже не гладким и это было плохо, поэтому оставил так как отыскал в просторах интернета. Чтобы начать рисовать линию из какой-то точки имеет смысл определить первоначальную точку, для чего была использована функция moveto Сам график строится с помощью циклического вычисления, ведь для каждого значения x нужно получить соответствующий ему y, значит, чтобы не писать все эти выражения вручную нужно использовать цикл.

  Внутри цикла вызывается функция lineto, внутри которой написаны такие параметры, которые могут сбить с толку бедного новичка, но пугаться не стоит.

  • lineto чертит линию от текущей позиции до, но не включая в нее, указанной точки.

  Другими словами при вычислении значения y мы будем получать некоторые точки, а чтобы получить график, нужно эти точки соединять линиями.
x*50+getmaxx()/2 Обозначает, что первоначальная точка x смещена к центру экрана по оси x. Цифра 50 здесь нужна только для того чтобы расширить рисуемый график. Нетрудно попробовать её изменить или убрать, чтобы увидеть эффект.Когда я пытался убрать эту 50 и прибавлять к x единицу вместо 0.02 график рисовался ужасно, хотя если подумать, то то что написано здесь или то что хотел написать я сводится к тому что x прибавляется на единицу, но что-то вот в этом есть чего я понять пока что увы не могу. Точнее понимаю, но понимаю как-то туманно, не полностью и сложно для разъяснений

  Не буду скрывать, надеюсь на помощь кого-нибудь из читателей, благодаря критике, благодарностям, указанию моих ошибок этот материал может стать намного легче и понятнее. Проверку на ошибки я убрал, чтобы не отвлекало глаза от описываемого кода

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

14 комментариев: C++ для начинающих Рисование графика функции

  • Anonymous говорит:

    Спасибо! пишите дальше

  • Вова говорит:

    Материал гавно

  • Аноним говорит:

    😳 😳 😳 ❓ ❓ ❓ ❓

  • Сергей говорит:

    Чем меньше у нас Х , тем больше точек на линии мы получаим, соответсвенно больше точек = точнее график =)

    • Максим говорит:

      вернее больше точек с координатами (x*50+getmaxx()/2, getmaxy()/2-(y*20)) поместятся на мониторе.

      тут выбрано что в единичном отрезке по Ox помещается 50 пикселей. а шаг по параметру выбран таким образом чтобы для каждого пиксела оси х (0.02*50=1 пиксел) рассчитывался y.

  • Аноним говорит:

    #include не находит пишет то ошибка что делать ??? 😥

  • Иван говорит:

    Не работает. Много ошибок.

  • Иван говорит:

    Вот например, вы обьявили переменную флоат. И передаете ее значение в функцию moveto(), но эта функция может принимать только целые значения. Тоже самое с функцией lineto()

    • admin говорит:

      Здесь выдается предупреждение, обозначающее возможную потерю данных. Переменная будет преобразована в целочисленную и просто всю дробную часть у нее убьет. Вам надо про преобразования типов читать. (Здесь неявное)

  • Morose говорит:

    Удобный код. И для Dev-C сгодился (версия  4.9.9.2)

    Позволю себе дать пояснения по коду:

    Помним, нам нужен график функции y=x*x, и в коде выполняется вычисление y=x*x.

    Но при организации рисования графика, вместо lineto(x,y), имеем

    lineto(x*50+getmaxx()/2, getmaxy()/2-(y*20)).

    Что это за «дополнительные элементы»?

    Дело в том, что система координат графического окна строго фиксирована, она соответствует только первой четверти математической декартовой системе. Это значит что на экране, без «дополнительных элементов» мы сможем смотреть только на одну ветвь графика – в положительной части оси ОХ. ( Привычный, математический центр системы декартовых координат на экране размещается в верхнем левом углу графического окна).

    И при этом график будет зеркально отображён вниз – по той причине, что у мониторов считается обратное (по сравнению с математической) направление оси ОУ.

    Итак: чтобы преодолеть технические ограничения «компьютерной системы координат» нужно:

    1) повернуть ось ОУ в обратную сторону (просто умножить У на -1)

    2)сдвинуть центр в середину экрана (прибавить к Х и У половину от ширины и высоты окна)

    3)задать масштаб построения графика (применить коэффициенты умножения для Х и У).

    Вот теперь думаю всё понятно:

    getmaxx() – функция, которая определяет ширину графического окна ,

    getmaxy() – функция, которая определяет высоту графического окна.

    50 – множитель масштаба по оси ОХ,

    20 – множитель масштаба по ОУ.

    А знак минус, перед значением (у*20), ориентирует график на экране в привычном для человека направлении.

    Может автору поста это уже не актуально — но кто-то же ищет подобную инфу.. я же вот искал…

     

     

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Девушка-программист едет в трамвае, читает книгу. Старушка смотрит на девушку, смотрит на книгу, крестится и в ужасе выбегает на следующей остановке. Девушка читала книгу "Язык Ада"

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок