Добрый день.
Помогите пожалуйста мне с задачей начертить график функции. использую VB.NET 2005 но C# читаю.
Я знаю что надо использовать парсер мат. выражений, но как его прикрутить к поставленной задаче не знаю.
А проблемы то какие с прикручиванием парсера?mister-arti писал(а):Добрый день.
Помогите пожалуйста мне с задачей начертить график функции. использую VB.NET 2005 но C# читаю.
Я знаю что надо использовать парсер мат. выражений, но как его прикрутить к поставленной задаче не знаю.
А как ты вообще используещь парсер? А как ты чертишь графики? Если ты это умеешь, тебе остается только чоединить эти два умения вместе.mister-arti писал(а):в проект то я его перенес.
Как его использовать. и вообще как с помощью него график начертить?
График КАКОЙ функции? Где хочешь его отображать? И каким боком тут парсер?Помогите пожалуйста мне с задачей начертить график функции.
Nord777 писал(а):График КАКОЙ функции? Где хочешь его отображать? И каким боком тут парсер?Помогите пожалуйста мне с задачей начертить график функции.
FireFenix писал(а):Судя из логики поста ТС
График + Мат. эвалютер => Прорисовка графика, указанного юзером в текстбоксе или другом текстовом окне
mister-arti писал(а):именно так и надо сделать.
//Модуль эвалютера
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
'объявление переменных и очистка графика
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
mister-arti писал(а):Смотрите я попробовал вот так но чет не могу понять почему не решает, посмотрите пожалуйста в чем проблема
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
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
Сейчас этот форум просматривают: AhrefsBot и гости: 19