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

Как нарисовать график функции ctg x (котангенс)?

22.10.2014, 18:55. Показов 3450. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть готовая программа, которая рисует график cos, отображая только ее положительные значения.
Требуется преобразовать ее в график функции котангенс.
Заменив формулу
Код
Function[i] = Math.Cos(i)
На
Код
 if (Math.Sin(i)!=0)  Function[i] = Math.Cos(i)/Math.Sin(i);
Программа выдаете неверное значений.

Весь код:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Lab1MultiMedia
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            System.Console.Beep(800, 1);
            this.Refresh(); // Обновление формы.
            int ImageStart = int.Parse(TextBoxForStart.Text); // Начало функции.
            int ImageFinish = int.Parse(TextBoxForFinish.Text); // Конец функции.
            Bitmap b = new Bitmap(TheMainImage.Width, TheMainImage.Height);  // Изображение.
            // Проверки:
            if (ImageStart < 1)
            {
                ImageStart = 1;
                TextBoxForStart.Text = "1";
            }
            if (ImageStart >= ImageFinish)
            {
                ImageFinish = ImageStart + 3;
                TextBoxForFinish.Text = Convert.ToString(ImageFinish);
            }
            myGraphic Exemp = new myGraphic(ImageStart, ImageFinish, ref b); // Экземпляр класса рисует график котангенса.
            TheMainImage.Image = b; // Картинку в picturebox.
        }
        class myGraphic
        {
            protected
                int startPoint; // Начальная точка.
                int endPoint;  // Конечная точка.
                int startY; // Значение Y.
                double[] Function;   // Массив значений функции.
                int kx;   // Количество точек на х.
                int dx;  // Сколько пикселей в одном шаге.
 
                public myGraphic(int _ClassStart, int _ClassEnd, ref Bitmap b)  // Конструктор.
            {
                startPoint = _ClassStart;
                endPoint = _ClassEnd;
                Function = new double[endPoint + 1]; // Массив значений функции. end+1 чтобы рисовать функцию по end включительно.
                kx = (endPoint - startPoint);  // Количество точек на х.
                dx = b.Width / kx; // Сколько пикселей в одном шаге, ширину делим на кол-во точек.
                for (int i = startPoint; i < endPoint + 1; i++)  // Вычисляем значение функции. end+1 чтобы рисовать функцю по end включительно.
                  if (Math.Sin(i)!=0)  Function[i] = Math.Cos(i)/Math.Sin(i); // ФУНКЦИЯ
                startY = (int)Function[startPoint];
                DrawOs(ref b); // Рисовать оси.
                DrawFun(ref b);// Рисовать функцию.
            }
 
                void DrawOs(ref Bitmap b) // Рисуем ось.
            {
                Graphics g = Graphics.FromImage(b); // Рисовать. 
                Pen GreyPen, BlackPen;
                BlackPen = new Pen(Color.Black, 2);
                GreyPen = new Pen(Color.Gray);
                string drawString;
                SolidBrush drawBrush = new SolidBrush(Color.Gray);
                PointF drawPointF;
                Point P1, P2;
                Font drawFont = new Font("Arial", 10);
 
                // Рисуем сетку.
                // По х.
 
                for (int i = 1, j = startPoint; i <= b.Width; i += dx)
                {
                    // Верхняя точка.
                    P1 = new Point(i, 1);
                    // Нижняя точка.
                    P2 = new Point(i, b.Height);
                    g.DrawLine(GreyPen, P1, P2);
                    drawString = Convert.ToString(j++);
                    drawPointF = new PointF(i, 1);
                    g.DrawString(drawString, drawFont, drawBrush, drawPointF);
                }
                // По у.            
                for (int i = b.Height, j = (int)(Function[startPoint]); i > 0; i -= dx)
                {
                    // Левая точка.
                    P1 = new Point(1, i);
                    // Правая точка.
                    P2 = new Point(b.Width, i);
                    g.DrawLine(GreyPen, P1, P2);
                    drawString = Convert.ToString(j++);
                    drawPointF = new PointF(b.Width - 20, i);
                    g.DrawString(drawString, drawFont, drawBrush, drawPointF);
                }
                // Прорисовка осей
                // Ось X
                // Нижняя левая точка
                P1 = new Point(1, b.Height - 1);
                // Нижняя правая точка
                P2 = new Point(b.Width, b.Height - 1);
                g.DrawLine(BlackPen, P1, P2);
                //Ось Y
                // Верхняя левая точка
                P1 = new Point(1, 1);
                // Нижняя левая точка
                P2 = new Point(1, b.Height);
                g.DrawLine(BlackPen, P1, P2);
                g.Dispose();
            }
                void DrawFun(ref Bitmap b)             // Рисуем функцию.
            {
                Graphics g = Graphics.FromImage(b);
                Pen RedPen = new Pen(Color.Red);
                Point L1, L2;
                int y; // Буфер.
                for (int i = startPoint, j = 0; i < endPoint; i++, j++) // Цикл.
                {
                    y = (int)(Function[i] * dx); // Значение y функции, посчитанное ранее для х.
                   if (y > b.Height) y = y % b.Height;
                    y = b.Height - y;
                    L1 = new Point(j * dx, y);
                    // Значение y функции, посчитанное ранее для х+1.
                    y = (int)(Function[i + 1] * dx);
                    if (y > b.Height) y = y % b.Height;
                    y = b.Height - y;
                    L2 = new Point((j + 1) * dx, y);
                    g.DrawLine(RedPen, L1, L2);
                }
                g.Dispose();
            }
        }
        private void button2_Click(object sender, EventArgs e) // Выход из программного приложения.
        {
            System.Console.Beep(800, 1);
            Close();
        }
 
        private void button3_Click(object sender, EventArgs e) // Очищаем PictureBox
        {
            TheMainImage.Image = null;
        }
    }
}
Вопрос: Что делать? Как быть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2014, 18:55
Ответы с готовыми решениями:

Как нарисовать график функции?
Здравствуйте. Приведите пожалуйста пример кода на С# Windows Form который рисует простой график...

Как нарисовать анимированный график функции
Подскажите пожалуйста, как нарисовать анимированный график функции sqrt(ln(x)+x^2)+1/x? Буду очень...

Нарисовать график функции
Задача состоит в том,что нужно нарисовать график заданной функции. Рисунок должен быть на форме....

Нарисовать график функции
Здравствуйте, нужно нарисовать график функции на pictureBox1, по следующему уравнению y = X3 + 2 *...

4
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
23.10.2014, 04:00 2
Поточнее, что требуется? Просто построить график по заданному промежутку?
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
23.10.2014, 07:28 3
Цитата Сообщение от Shekloford Посмотреть сообщение
Программа выдаете неверное значений.
Конкретно где, что и при каких начальных условиях неверно?
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 53
23.10.2014, 11:24  [ТС] 4
Проблема в том, что я не могу обойти точки разрыва. Ctg ведь не существует в некоторых местах. Вместо этого программа рисует график одной сплошной линией. Он становится похожим на кардиограмму.
0
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
23.10.2014, 11:38 5
Цитата Сообщение от Shekloford Посмотреть сообщение
что я не могу обойти точки разрыва
Поставьте ограничения. Например пусть |Y| < 10. Если это условие не выполняется значит прерываем график.
0
23.10.2014, 11:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2014, 11:38
Помогаю со студенческими работами здесь

Нарисовать график функции
надо нарисовать График функции y=5*x^2+6. Число вводится в TextBox.

Нарисовать график функции
Нужно нарисовать график функции у(х) если x изменяется от x1 до x2 с шагом dx Вот условие : ...

Нарисовать график функции
Задание. Построить график функции y=2-x, x&lt;=3 y=pow(x,2), x&gt;3 Собсно вот что получилось. Не...

Необходимо попиксельно нарисовать графики ctg и tg в PictireBox
Необходимо попиксельно нарисовать графики ctg и tg.. У меня такой вопрос - как обойти точки...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru