Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 15
1
.NET 4.x

Построить графики Параболу, (Исправить ошибку)

30.06.2011, 15:29. Просмотров 2326. Ответов 5
Метки нет (Все метки)


Помогите плз уже 2 день мучаюсь задание построить графики параболы, синусоиды, и гиперболы.
на PictureBox написала вот такой код но явно не верно строит Не могу не как связать систему координат уравнения с pictureBox1

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        private void grafik(double A, double B, double C, bool bi)
        {
 Graphics gr = pictureBox1.CreateGraphics();
            gr.Clear(pictureBox1.BackColor);
            Pen p = new Pen(Brushes.Black);
            Point P1 = new Point(pictureBox1.Width / 2, 0),
                  P2 = new Point(pictureBox1.Width/2, pictureBox1.Width);
            gr.DrawLine(p, P1, P2);
            P1 = new Point(0, pictureBox1.Height/2);
            P2 = new Point(pictureBox1.Width, pictureBox1.Height/2);
            gr.DrawLine(p, P1, P2);
 
            Point[] parPoints = new Point[51];
            for (int i = 0; i < 50; i++)
            {
                int z = i *20 ;
                parPoints[i].X = z;
                parPoints[i].Y = 136-(int)(A * (i) * (i) + B * (i) + C);
            }
            gr.DrawCurve(p, parPoints);
}
Добавлено через 4 часа 57 минут
Ну хоть кто ни будь помогите

Добавлено через 14 часов 47 минут
Ну люди плз не как не могу подобрать правильную систему координат итд
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2011, 15:29
Ответы с готовыми решениями:

Построить графики функций, исправить код
Задание х нач х кон шаг функция -10 10 0.01 ...

Нужно исправить ошибку в Мепл, почему-то не рисует графики
Не работают графики, помогите исправить

построить параболу
y2=1/8x найти фокус деректриссу и параметр

Построить параболу
Добрый вечер, программа все работает.. но только мне нужно чтобы рисовало не линию, а параболу....

5
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
30.06.2011, 16:31 2
но это все равно не правильно надо брать каждый пиксель пикчабокса допустим 0.1 или даже меньше от единицы на графике, а так 1:1 синус уже будет квадратный
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            Graphics gr = pictureBox1.CreateGraphics();
            gr.Clear(pictureBox1.BackColor);
            Pen p = new Pen(Brushes.Black);
            Point P1 = new Point(pictureBox1.Width / 2, 0),
                  P2 = new Point(pictureBox1.Width / 2, pictureBox1.Width);
            gr.DrawLine(p, P1, P2);
            P1 = new Point(0, pictureBox1.Height / 2);
            P2 = new Point(pictureBox1.Width, pictureBox1.Height / 2);
            gr.DrawLine(p, P1, P2);
 
            Point[] parPoints = new Point[pictureBox1.Width];
            for (int i = 0; i < pictureBox1.Width; i++)
            {
                
                parPoints[i].X = i ;
                int j = i - pictureBox1.Width / 2;
                parPoints[i].Y = pictureBox1.Height / 2 - j*j;
            }
            gr.DrawCurve(p, parPoints);
1
59 / 59 / 13
Регистрация: 23.04.2011
Сообщений: 110
30.06.2011, 18:51 3
для начала стоит изменить координатную систему
C#
1
2
gr.TranslateTransform(pictureBox1.Width /2 , pictureBox1.Height /2);
gr.ScaleTransform(1, -1);
этот код поставит точку (0,0) в центр pictureBox'a и направит ось Oy вверх

Добавлено через 22 минуты
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
        private void grafik(double A, double B, double C, bool bi)
        {
            Graphics gr = pictureBox1.CreateGraphics();
            gr.Clear(pictureBox1.BackColor);
            Pen p = new Pen(Brushes.Black);
            Point P1 = new Point(pictureBox1.Width / 2, 0),
                  P2 = new Point(pictureBox1.Width/2, pictureBox1.Width);
            gr.DrawLine(p, P1, P2);
            P1 = new Point(0, pictureBox1.Height/2);
            P2 = new Point(pictureBox1.Width, pictureBox1.Height/2);
            gr.DrawLine(p, P1, P2);
 
            gr.TranslateTransform(pictureBox1.Width / 2, pictureBox1.Height / 2);
            gr.ScaleTransform(1, -1);
 
            Point[] parPoints = new Point[pictureBox1.Width];
            int j = -pictureBox1.Width / 2;
            for (int i = 0; i < pictureBox1.Width; i++) 
            {
                parPoints[i].X = j;
                parPoints[i].Y = (int)(A * j * j + B * j + C);
                j++;
            }
            gr.DrawCurve(p, parPoints);
        }
1
38 / 39 / 10
Регистрация: 07.01.2010
Сообщений: 148
01.07.2011, 01:43 4
Вот! Рисует изящную синусойду!
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication7
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            int wX;
            int hX;
            double xF, yF;
            double step;
            string drawString = "F(x) = Sin(x)";
            string drawX = "X";
            string drawY = "Y";
            string g = "Pi";
 
 
            wX = pictureBox1.Width;
            hX = pictureBox1.Height;
 
            // Система Координат
            Bitmap flag = new Bitmap(pictureBox1.Width, pictureBox1.Height);
 
            Graphics flagGraphics = Graphics.FromImage(flag);
            Font drawFont = new Font("Arial", 10);
            Font drawFont2 = new Font("Arial", 5);
            SolidBrush drawBrush = new SolidBrush(Color.Black);
            System.Drawing.Pen myPen;
            myPen = new System.Drawing.Pen(System.Drawing.Color.Blue);
           
            flagGraphics.DrawLine(myPen, 0, (int)(hX / 2), wX, (int)(hX / 2));
            flagGraphics.DrawLine(myPen, (int)(wX / 2), 0, (int)(wX / 2), hX);
 
 
 
            // Подписали
            flagGraphics.DrawString(drawString, drawFont, drawBrush, 10, 10);
            flagGraphics.DrawString(drawX, drawFont, drawBrush, 370, (int)(hX / 2));
            flagGraphics.DrawString(drawY, drawFont, drawBrush, (int)(wX / 2), 0);
            flagGraphics.DrawString(g, drawFont, drawBrush, 250, (int)(hX / 2));
 
 
 
            // График
            for (step = 0; step <= 2 * Math.PI; step += 0.001)
            {
                xF = (step * 25) + (int)(wX / 2);
                double tmp = Math.Sin(step);
                tmp *= 50;
                yF = (int)(hX / 2) - tmp;
                flag.SetPixel((int)xF, (int)yF, Color.Red);
            }
 
 
            //Передали на BOX
            pictureBox1.Image = flag;
 
 
 
        }
В принципе там тока еще пару циклов дописать и будет рисовать еще и параболу и гиперболу!
1
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 15
01.07.2011, 18:58  [ТС] 5
попробовала построить
но прога вываливается в переполнение буфера
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
        private void grafik(double A, double B, double C, bool bi)
        {
            Graphics gr = pictureBox1.CreateGraphics();
            gr.Clear(pictureBox1.BackColor);
            Pen p = new Pen(Brushes.Black);
            Point P1 = new Point(pictureBox1.Width / 2, 0),
                  P2 = new Point(pictureBox1.Width/2, pictureBox1.Width);
            gr.DrawLine(p, P1, P2);
            P1 = new Point(0, pictureBox1.Height/2);
            P2 = new Point(pictureBox1.Width, pictureBox1.Height/2);
            gr.DrawLine(p, P1, P2);
 
            gr.TranslateTransform(pictureBox1.Width / 2, pictureBox1.Height / 2);
            gr.ScaleTransform(1, -1);
 
            Point[] parPoints = new Point[pictureBox1.Width];
            int j = -pictureBox1.Width / 2;
            for (int i = 0; i < pictureBox1.Width; i++) 
                           for (int i = 0; i < pictureBox1.Width; i++)
                {
                    parPoints[i].X = j * (int)(20 / scale1);
                    parPoints[i].Y = (int)((koof[0] * (j * j * j * j)) + (koof[1] * (j * j)) + koof[2]) * (int)(20 / scale1);
                    }
                    j++;
            gr.DrawCurve(p, parPoints);
        }
0
433 / 298 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
01.07.2011, 21:12 6
TanuFFka,
Все верно если у вас ширина или высота объекта где вы рисуете допустим 200 на 200
то уже https://www.cyberforum.ru/cgi-bin/latex.cgi? A*200^4+B*200^2 не влазиет в int попробуйте
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
        private void grafik(double A, double B, double C, bool bi)
        {
            Graphics gr = pictureBox1.CreateGraphics();
            gr.Clear(pictureBox1.BackColor);
            Pen p = new Pen(Brushes.Black);
            Point P1 = new Point(pictureBox1.Width / 2, 0),
                  P2 = new Point(pictureBox1.Width/2, pictureBox1.Width);
            gr.DrawLine(p, P1, P2);
            P1 = new Point(0, pictureBox1.Height/2);
            P2 = new Point(pictureBox1.Width, pictureBox1.Height/2);
            gr.DrawLine(p, P1, P2);
 
            gr.TranslateTransform(pictureBox1.Width / 2, pictureBox1.Height / 2);
            gr.ScaleTransform(1, -1);
 
            Point[] parPoints = new Point[pictureBox1.Width/16];
            int j = -pictureBox1.Width / 8;
                           for (int i = 0; i < pictureBox1.Width/8; i++)
                {
                    parPoints[i].X = j * (int)(20 / scale1);
                    parPoints[i].Y = (int)((koof[0] * (j * j * j * j)) + (koof[1] * (j * j)) + koof[2]) * (int)(20 / scale1);
                    }
                    j++;
            gr.DrawCurve(p, parPoints);
        }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2011, 21:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как построить параболу?
Просто дайте мне любой код, где написан как строиться парабола

Построить параболу в эксель
Помогите пожалуйста построить график в эксель: построить параболу дана система уравнений...

Как построить такую параболу ?
Как построить параболу, у которой поперечный разрез будет 60 см в ширину, и 25 см в длину. И еще...

Как построить график, например, параболу
Как построить график в ворде? Параболу например. Добавлено через 30 минут ну или хоть в чем...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.