С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
78 / 78 / 11
Регистрация: 02.12.2011
Сообщений: 296
1

Одновременный вывод двух графиков

10.05.2012, 07:26. Показов 1761. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос:
Доброго времени суток, уважаемый форум!
Возникла такая проблема:
1. Имеется: Win-форма с помещенным ней PictureBox-ом.
2. Нужно: одновременно вывести графики (разным цветом) двух функций (x = cos^3 и y = sin^3) и сохранить всю картинку в файл. По отдельности – выводятся (и сохраняются) без проблем.
3. Проблема: вот код обработки, но не могу сообразить как одновременно «нарисовать» графики обеих функций. Может у кого-нибудь возникала такая проблема и может помочь?

Вот код на C#:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* Нарисовать графики двух функций: x = cos^3(t) - график и подпись
 * красным цветом и y = sin^3 (t) - график и подпись синим цветом.
 * Пока рисует только один график. */ 
   private void Form1_Load(object sender, EventArgs e)
    {
       int bHeight = 600;
       int bWidth = 600;
       this.ClientSize = new Size(bWidth, bHeight);
       Bitmap bm = new Bitmap(bHeight, bWidth);
       Graphics g = Graphics.FromImage(bm);
       this.pictureBox1.Image = bm;
       Brush b = new LinearGradientBrush(new Point(1, 1), new Point(bHeight, bWidth), Color.White, Color.Yellow);
       g.FillRectangle(b, g.ClipBounds);
       Pen p = new Pen(Color.Black, 5);
       p.EndCap = LineCap.ArrowAnchor;
       g.DrawLine(p, 20, bHeight / 2, bWidth - 20, bHeight / 2);
       g.DrawLine(p, bWidth / 2, bHeight - 20, bWidth / 2, 20);
    /* Объявляем целочисленные переменные. В помещаются значения
     * функций по осям "X" и "Y" соответственно. */ 
       int x1, x2, y1, y2;
      for (double i = (-2) * Math.PI; i <= 2 * Math.PI; i += 0.0001)
       {
       // Это первая функция
          x1 = bHeight / 2 + Convert.ToInt32(200 * (Math.Pow(Math.Cos(i), 3)));
          y1 = bWidth / 2 - Convert.ToInt32(40 * i);
       // Это вторая функция
          x2 = bWidth / 2 - Convert.ToInt32(40 * i);
          y2 = bHeight / 2 + Convert.ToInt32(200 * (Math.Pow(Math.Cos(i), 3)));
 
       // Выводим график
       /* В этом месте не могу сообразить, как одновременно выводить
        * значения x1, x2, y1 и y2. */
          bm.SetPixel(x1, y1, Color.Red);
       }
       Font f = new Font("Arial", 22, FontStyle.Bold);
       StringFormat sfl = new StringFormat(StringFormatFlags.NoClip);
       sfl.Alignment = StringAlignment.Near;
    // Это подпись для первой функции
       g.DrawString("x = cos^3(t)", f, Brushes.Red, new RectangleF(20, 20, 500, 100), sfl);
    // Это подпись для второй функции
       g.DrawString("y = sin^3 (t)", f, Brushes.Blue, new RectangleF(400, 20, 500, 100), sfl);
    // Подписи для координатных осей
       g.DrawString("x", f, Brushes.Black, new RectangleF(550, bHeight / 2, 600, bHeight / 2), sfl);
       g.DrawString("y", f, Brushes.Black, new RectangleF(bWidth / 2, 0, bWidth / 2, 50), sfl);
    // Всю эту "красоту" сохранить в файл
       bm.Save("bm.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.05.2012, 07:26
Ответы с готовыми решениями:

Одновременный доступ к коллекции из двух потоков
Здравствуйте. В программе открываю UDP-сокет, в который приходят данные с устройства. Вкратце, у...

Одновременный вывод в разные строки richtextBox
Имеется richtextbox в который нужно вывести символы для каждого объекта port в соответствующей...

Некорректное отображение двух графиков (Zedgraph)
Собственно вот такая ошибка на оси х два раза повторяется 1 и 3 раза 2. это код, который...

Построение двух графиков в одних осях в Chart
Добрый вечер! Подскажите пожалуйста способ реализации данной задачи: необходимо в одних осях (Х и...

2
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
10.05.2012, 11:45 2
Может я чего не понимаю, но попробуйте заменить строки на такие:
C#
1
2
3
4
5
6
          x1 = bHeight / 2 + Convert.ToInt32(200 * (Math.Pow(Math.Cos(i), 3)));
          y1 = bWidth / 2 - Convert.ToInt32(40 * i);
          bm.SetPixel(x1, y1, Color.Blue);
          x2 = bWidth / 2 - Convert.ToInt32(40 * i);
          y2 = bHeight / 2 + Convert.ToInt32(200 * (Math.Pow(Math.Cos(i), 3)));
          bm.SetPixel(x2, y2, Color.Red);
1
78 / 78 / 11
Регистрация: 02.12.2011
Сообщений: 296
10.05.2012, 13:03  [ТС] 3
...спасибо большое, я о таком решении - как-то не подумал...
0
10.05.2012, 13:03
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.05.2012, 13:03
Помогаю со студенческими работами здесь

Вывод графиков в формах
нужно сделать как на скрине

Вывод одновременно несколько графиков в MS Chart
Добрый вечер. Нужна помощь, как вывести сразу несколько графиков одновременно, при нажатии на одну...

Одновременный вывод сразу двух графиков
Добрый день, комрады! Случилась такая проблема: есть программа в Matlab по поиску минимума функции...

Вывод двух графиков в одном окне
Написал и отредактировал программу. Всё получилось. Строится график решения диффура (выходного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Администрирован­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru