Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2017, 03:52   #1
Мёрф
Новичок
Джуниор
 
Регистрация: 11.04.2017
Сообщений: 2
По умолчанию Реализовать график функции.

Лабораторная работа№6.

Реализуем в классе painter метод рисования графика, который можно описать следующим образом:
По оси x откладываются временные интервалы, по оси y откладывается некоторое неизменные значение для каждого интервала. Концы каждого интервала соединяются с помощью вертикальной линии.

Рассуждение:
Из условия задачи видно, что каждый временной интервал- это горизонтальная линия. Каждая разработанная нами фигура, имеет свойство «значение», что позволяет использовать его для определения позиции по оси y. Соединение интервалов с помощью вертикальной линии, ничто иное, как рисование линии, началом и концом которой являются координаты 2-х соседних линий. Таким образом, для того чтобы нарисовать данный график нам необходимо лишь знать количество интервалов (и значения в каждом интервале). А также размер шага в пикселях по оси x и y. Нам не нужно знать координаты точек начала и конца всех линий, так как они могут быть высчитаны с помощью входных данных.
Понятие количества интервалов и значения в каждом интервале. Ни что иное. Как массив значений, где количество элементов в массиве и будет количеством интервалов.

Вывод: Функция рисования, описанного выше графика должна принимать 3 аргумента: массив значений интервалов, шаг по оси х и шаг по оси у.
Перед началом реализации приведем названия функций и переменных к общему виду (Публичные функции и переменный назовем с большой буквы, приватные с маленькой).

Для этого необходимо нажать правой кнопкой мыши на функцию или переменную и в открывшемся списке выбрать пункт Переименовать. Данный способ изменит имя во всех местах вызова данной функции или переменной.

Так же при текущей реализации мы не можем нарисовать ось XY и фигуры одновременно. Необходимо реализовать механизм рисования данной оси, аналогично механизму рисования сетки. Для этого создадим вспомогательный класс oXY, который будет содержать в себе точку начала координат, а также шаги по оси X и Y.
PHP код:
class oXY
    
{
        public 
Point zeroPosition;
        public 
int StepX;
        public 
int StepY;

        public 
oXY(Point zeroPositionint stepXint stepY)
        {
            
this.zeroPosition zeroPosition;
            
this.StepX stepX;
            
this.StepY stepY;
        }
    } 
Добавим в класс painter свойство, которое будет отвечать за отоброжение или не отображение осей X и Y.
PHP код:
public oXY zeroXY getset; } 
Подправим методы init, oXY и draw:
1. init
PHP код:
private void init()
        {
            
this.GridSize 0;
            
this.zeroXY null;
            
this.Image = new Bitmap(this.Widththis.Height);
            
this.Graphics.FromImage(this.Image);
        
        } 
2.oXY
PHP код:
public void oXY ()
        {
            if (
this.zeroXY == null)
            {
                return;
            }

            
g.DrawLine(new Pen(Brushes.Black2), zeroXY.zeroPosition.x0zeroXY.zeroPosition.xthis.Height);
            
g.DrawLine(new Pen(Brushes.Black2), 0zeroXY.zeroPosition.ythis.WidthzeroXY.zeroPosition.y);

            for (
int i zeroXY.zeroPosition.yzeroXY.StepYthis.Height+= zeroXY.StepY)
            {
                
g.DrawLine(Pens.BlackzeroXY.zeroPosition.x-3izeroXY.zeroPosition.x+2i);
            }
            for (
int i zeroXY.zeroPosition.zeroXY.StepY>= 0-= zeroXY.StepY)
            {
                
g.DrawLine(Pens.BlackzeroXY.zeroPosition.3izeroXY.zeroPosition.x+2i);
            }
            for (
int i zeroXY.zeroPosition.xzeroXY.StepXthis.Width+= zeroXY.StepX)
            {
                
g.DrawLine(Pens.BlackizeroXY.zeroPosition.y-3izeroXY.zeroPosition.y+2);

            }
            for (
int i zeroXY.zeroPosition.zeroXY.StepX>= 0-= zeroXY.StepX)
            {
                
g.DrawLine(Pens.BlackizeroXY.zeroPosition.3izeroXY.zeroPosition.2);
            }
        } 
3. draw
PHP код:
public void Draw(bool clear)
        {
            if (
clear)
            {
                
Clear();
            }
            
Grid();
            
oXY();
            foreach (
BaseFigure F in this.figures)
            {
                
F.Draw(g);
            }
            
        } 
Реализуем метод рисования нашего графика:
PHP код:
public void DrawChart(Point startXYint[] dataint xStepint yStep)
        {
            
this.zeroXY = new oXY(startXYxStepyStep);
            for(
int i 0data.Lengthi++)
            {
                
Point start = new Point(startXY.xStepstartXY.yStep data[i]);
                
Point end = new Point(startXY.+ (1) * xStepstartXY.yStep data[i]);
                
Line line null;
                if (
0)
                {
                    
line = new Line((figures.Last() as Line).endstart);
                    
this.Add(line);
                }
                
line = new Line(startend);
                
line.value data[i];
                
this.Add(line);
            }
            
this.Draw(false);
        } 
Важно понимать, что координаты окна формы начинаются в левом верхнем углу. Ось X растет слева направо, а ось Y сверху вниз. Таким образом, чтобы корректно отобразить график нам нужно не только все вычисления делать относительно начала оси XY, но и инвертировать координаты по Y (см. выделенный фрагмент кода).
Задание:
Реализовать график функции из курсовой работы.


Буду очень благодарен тому доброму человек, если кто то сможет помочь конечно же.
Бьюсь с этой лабораторной уже очень долго.
Мёрф вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить график функции y=x^2. График строится из отрезков и алгоритма Брезенхема Robert_ Помощь студентам 0 20.02.2017 22:37
Затабулировать функцию. график указанной функции и график касательной к ней в точке с абсциссой AntonKalinin01 Помощь студентам 0 26.05.2013 07:18
Bывести на экран монитора и напечатать таблицу значений аргумента и функции, а также график функции средствами Exel IgorMyakota Помощь студентам 1 24.11.2012 02:46
Построить график функции F(x) на заданном интервале с заданным шагом и вывести значения х и функции F(x) в таблицу в графическом р Proskurina Паскаль, Turbo Pascal, PascalABC.NET 8 12.11.2012 21:57
График функции russian-stalker Общие вопросы Delphi 2 30.09.2009 14:58