Начертить график функции

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

mister-arti
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.07.2010 (Сб) 21:50

Начертить график функции

Сообщение mister-arti » 24.07.2010 (Сб) 22:10

Добрый день.
Помогите пожалуйста мне с задачей начертить график функции. использую VB.NET 2005 но C# читаю.
Я знаю что надо использовать парсер мат. выражений, но как его прикрутить к поставленной задаче не знаю.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Начертить график функции

Сообщение Viper » 24.07.2010 (Сб) 22:41

mister-arti писал(а):Добрый день.
Помогите пожалуйста мне с задачей начертить график функции. использую VB.NET 2005 но C# читаю.
Я знаю что надо использовать парсер мат. выражений, но как его прикрутить к поставленной задаче не знаю.
А проблемы то какие с прикручиванием парсера?
Весь мир матрица, а мы в нем потоки байтов!

mister-arti
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.07.2010 (Сб) 21:50

Re: Начертить график функции

Сообщение mister-arti » 24.07.2010 (Сб) 22:52

в проект то я его перенес.
Как его использовать. и вообще как с помощью него график начертить?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Начертить график функции

Сообщение Viper » 25.07.2010 (Вс) 9:20

mister-arti писал(а):в проект то я его перенес.
Как его использовать. и вообще как с помощью него график начертить?
А как ты вообще используещь парсер? А как ты чертишь графики? Если ты это умеешь, тебе остается только чоединить эти два умения вместе.
Весь мир матрица, а мы в нем потоки байтов!

mister-arti
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.07.2010 (Сб) 21:50

Re: Начертить график функции

Сообщение mister-arti » 25.07.2010 (Вс) 13:11

а если не умею, но хочу научиться. Просто тупо искать исходник не хочется.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Начертить график функции

Сообщение Nord777 » 25.07.2010 (Вс) 18:56

Помогите пожалуйста мне с задачей начертить график функции.
График КАКОЙ функции? Где хочешь его отображать? И каким боком тут парсер?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Начертить график функции

Сообщение FireFenix » 25.07.2010 (Вс) 18:59

Nord777 писал(а):
Помогите пожалуйста мне с задачей начертить график функции.
График КАКОЙ функции? Где хочешь его отображать? И каким боком тут парсер?

Судя из логики поста ТС

График + Мат. эвалютер => Прорисовка графика, указанного юзером в текстбоксе или другом текстовом окне
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

mister-arti
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.07.2010 (Сб) 21:50

Re: Начертить график функции

Сообщение mister-arti » 25.07.2010 (Вс) 21:34

FireFenix писал(а):Судя из логики поста ТС

График + Мат. эвалютер => Прорисовка графика, указанного юзером в текстбоксе или другом текстовом окне

именно так и надо сделать.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Начертить график функции

Сообщение FireFenix » 25.07.2010 (Вс) 23:16

mister-arti писал(а):именно так и надо сделать.

Что вообще сложного? Не знаете синтаксиса языка? Почему бы тогда не почитать учебников?

У эвалютера в архиве идёт Reаdme, в котором русским Viper всё расписал!
  1. Запихнуть модуль в проект
  2. + Если знания позволяют, то дописываем в эвалютаре поддержку переменных...
    - Ежели нет, то в цикле заменяем нужную нам переменную и высчитываем результат
  3. В каждом цикле отрисовываем пиксель или линию от прошлой позиции до новой

И получаем что-то вроде
Код: Выделить всё
//Модуль эвалютера

Dim Pre as PointF = Nothing 'Предидущая точка
Dim Val as PointF = Nothing 'Текущая точка

Dim btmBack as new Bitmap(100,100) 'Создаём новое полотно размером 100*100 пикселей
Graphics grBack = Graphics.FromImage(btmBack)
PictureBox.BackgroundImage = btmBack

For i = 0 to 100
    Val = New PointF(i, Parser(TextBox.Text.Replace("x", i)) 'Заменяем x перебираемой величиной и вычисляем значение
   
    If i > 0 Then
        grBack.DrawLine(Pens.Black, Pre, Val) 'Рисуем линию
        PictureBox1.Refresh() 'Обновляем пикчебокс
    End If

    Pre = Val
Next i
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

mister-arti
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.07.2010 (Сб) 21:50

Re: Начертить график функции

Сообщение mister-arti » 25.07.2010 (Вс) 23:54

Не ну синтаксис и вообще VB.NET я знаю, не профи но все же.
Попробую разобраться.
Спасибо.

DRU
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 16.11.2008 (Вс) 23:26
Откуда: Беларусь, Гомель

Re: Начертить график функции

Сообщение DRU » 26.07.2010 (Пн) 16:07

А MS Chart не проще использовать?

mister-arti
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.07.2010 (Сб) 21:50

Re: Начертить график функции

Сообщение mister-arti » 26.07.2010 (Пн) 18:37

Смотрите я попробовал вот так но чет не могу понять почему не решает, посмотрите пожалуйста в чем проблема
Код: Выделить всё
        'объявление переменных и очистка графика
        Dim Graph1 As Graphics
        Dim Pen1 As New Pen(Color.Black, 2)
        Dim drawBrush As New SolidBrush(Color.Black)
        Dim drawFont As New Font("Arial", 10)
        Dim X, Y As Single
        Dim M As Integer
        Graph1 = Me.picGraph.CreateGraphics()
        Graph1.Clear(Color.White)
        'Печать шкал математической системы координат в компьютернеой системе координат
        For X = -150 To 150 Step 50
            Graph1.DrawString(X / trbMashtab.Value, drawFont, drawBrush, X + 150, 80) 'Делим на масштаб
        Next
        For Y = 0 To 200 Step 50
            Graph1.DrawString((Y - 100) / trbMashtab.Value, drawFont, drawBrush, 150, 180 - Y) 'Делим на масштаб
        Next
        'Преобразование компьютерной системы координат в математическую систему координат
        Graph1.ScaleTransform(1, -1) 'Поворот оси Y
        Graph1.TranslateTransform(150, -100) 'Сдвиг осей
        'Рисум оси
        Graph1.DrawLine(Pen1, -150, 0, 300, 0) 'Ось Х
        Graph1.DrawLine(Pen1, 0, -100, 0, 100)  'Ось Y
        For X = -150 To 150 Step 50 'Засечки на оси Х
            Graph1.DrawLine(Pen1, X, -5, X, 5)
        Next
        For Y = -100 To 100 Step 50 'Засечки на Y
            Graph1.DrawLine(Pen1, -5, Y, 5, Y)
        Next
        'График функции
        Try 'Отлавливаем ошибки
            M = trbMashtab.Value 'М - масштаб
            For X = -1.5 * (100 / trbMashtab.Value) To 1.5 * (100 / trbMashtab.Value) Step 10 / TrackBar2.Value 'Шаг в знач. качества
                Y = Parser(TextBox1.Text)
                Graph1.DrawEllipse(Pens.Aqua, X * M, Y * M, 1, 1)
            Next X
        Catch 'Если произошла ошибка то делаем следующее:
            MsgBox("Произошла ошибка. Извините за неудобства", 48, "Ошибка!")
        End Try


но если участок
For X = -1.5 * (100 / trbMashtab.Value) To 1.5 * (100 / trbMashtab.Value) Step 10 / TrackBar2.Value 'Шаг в знач. качества
Y = Parser(TextBox1.Text)
Graph1.DrawEllipse(Pens.Aqua, X * M, Y * M, 1, 1)
Next X

изменить на
For X = -1.5 * (100 / trbMashtab.Value) To 1.5 * (100 / trbMashtab.Value) Step 10 / TrackBar2.Value 'Шаг в знач. качества
Y = Parser(math.sin(x)+(3*math.log(x)))
Graph1.DrawEllipse(Pens.Aqua, X * M, Y * M, 1, 1)
Next X

то все вроде как нормально

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Начертить график функции

Сообщение FireFenix » 26.07.2010 (Пн) 18:47

mister-arti писал(а):Смотрите я попробовал вот так но чет не могу понять почему не решает, посмотрите пожалуйста в чем проблема

Где-то скопипастенный код без понятия о том как работает...

Моск моде On!

Твоё
Код: Выделить всё
Y = Parser(TextBox1.Text)

И из моего примера
Код: Выделить всё
Val = New PointF(i, Parser(TextBox.Text.Replace("x", i))

Чуешь разницу в вызове функе?

Код: Выделить всё
For X = -1.5 * (100 / trbMashtab.Value) To 1.5 * (100 / trbMashtab.Value) Step 10 / TrackBar2.Value
Next

Говнокод детектед! Такие фитчи делаются через While, типа
Код: Выделить всё
Dim x as Double = -1.5 * (100 / trbMashtab.Value)
Dim x_delta as Double = 10 / TrackBar2.Value
Dim x_End as Double = 1.5 * (100 / trbMashtab.Value) + x_delta/2

While x < x_End
    'Код

    x += x_delta
End While


вместо
Код: Выделить всё
Graph1.DrawEllipse

лучше юзать Graph1.DrawLine
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList