Автор работы: Пользователь скрыл имя, 06 Марта 2013 в 22:33, курсовая работа
Программа для построения графиков функций. С помощью элементов графического интерфейса пользователя Windows задается вид функции (sin, ln, полиномиальная), коэффициенты и границы области построения графика. График строится в прямоугольной области, поверх графика строятся координатные оси со шкалой. Линии сглаженные.
Задание 3
Построение графика в Microsoft Visual Studio на С# 4
Блок схема. 5
Текст программы. 6
Описание интерфейса 12
Результат выполнения программы 13
Вывод 17
Список источников. 18
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«ИЖЕВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
имени М.Т. КАЛАШНИКОВА»
Факультет «Приборостроительный»
Кафедра «Приборы и методы контроля качества»
КУРСОВАЯ РАБОТА
Графический калькулятор
Направление 200100 Приборостроение
Дисциплина «ПнаЯВУ»
Автор работы: _________________А. М. Бойченко 5-74-1
(подпись, дата)
Руководитель работы: ________________ доцент С.А. Мурашов
(подпись, дата)
Оценка ____________
Ижевск 2012
Оглавление
Задание 3
Построение графика в Microsoft Visual Studio на С# 4
Блок схема. 5
Текст программы. 6
Описание интерфейса 12
Результат выполнения программы 13
Вывод 17
Список источников. 18
Программа для построения графиков функций. С помощью элементов графического интерфейса пользователя Windows задается вид функции (sin, ln, полиномиальная), коэффициенты и границы области построения графика. График строится в прямоугольной области, поверх графика строятся координатные оси со шкалой. Линии сглаженные.
Таблица 1 описание переменных
Идентификатор |
Тип дпнных |
Предполагаемый диапазон значений |
Назначение |
numA |
string |
-39..+38 |
Получение значений А |
numB |
string |
-32768..+32767 |
Получение значений В |
numC |
string |
-32768..+32767 |
Получение значений С |
A |
double |
-32768..+32767 |
Значение переменной А |
B |
double |
-32768..+32767 |
Значение переменной В |
C |
double |
-32768..+32767 |
Значение переменной С |
j |
int |
0..65535 |
Счётчик |
k |
int |
0..65535 |
Счётчик |
gr |
Graphics |
-32768..+32767 |
Холст для рисования |
MyPen
|
Pen |
Color |
Рисование |
MyPen2
|
Pen |
Color |
Рисование |
А2 |
float |
Вычисление | |
В2 |
float |
Вычисление | |
С2 |
float |
Вычисление | |
xmin |
float |
Задание ограничений | |
xmax |
float |
Задание ограничений | |
ymin |
float |
Задание ограничений | |
ymax |
float |
Задание ограничений | |
xstep |
float |
шаг | |
ystep |
float |
шаг | |
kx |
float |
шаг | |
ky |
float |
шаг | |
x |
float |
Вычисление | |
X2 |
float |
Вычисление | |
y |
float |
Вычисление | |
y2 |
float |
Вычисление | |
y3 |
double |
Вычисление | |
xx |
int |
Построение сетки | |
xx1 |
int |
Построение сетки | |
kk |
int |
Построение сетки | |
np |
int |
Номер пикселя | |
isNumber |
bool |
Ввод значений |
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication9
{
public partial class f1 : Form
{
public f1()
{
InitializeComponent();
}
private void PointInGrap_Tick(object sender, EventArgs e)
{
}
private bool isNumber = false;
private void txtFirst_KeyDown(object sender, System.Windows.Forms.KeyEventA
{
isNumber =
e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 // keyboard - основная клавиатура
|| e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9 // keypad - дополнительная клавиатура
|| e.KeyCode == Keys.Back;
}
private void txtFirst_KeyPress(object sender, System.Windows.Forms.KeyPressE
{
TextBox box = (TextBox)sender;// Явное преобразование типов
switch (e.KeyChar) // Переключатель
{
case '-': // Разрешаем минус, если он первый
if (box.Text.Length == 0)
isNumber = true;
break;
case '.':
// Точка не должна быть первой
if (box.Text.Length == 0)
break;
// Точка не должна следовать сразу за минусом
if (box.Text[0] == '-' && box.Text.Length == 1)
break;
// Точка должна быть одна
if (box.Text.IndexOf('.') == -1)
isNumber = true; // Еще не было точек
break;
}
// Запрещаем в текстовом поле лишние символы
if (!isNumber)
e.Handled = true;
}
static string numA, numB, numC;
static double A, B, C;
private void comboBox2_
{
}
private void comboBox3_
{
}
private void comboBox1_
{
}
private void checkBox1_CheckedChanged(objec
{
}
private void checkBox2_CheckedChanged(objec
{
}
private void checkBox3_CheckedChanged(objec
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
public void button1_Click(object sender, EventArgs e)
{
// визуализация графика
Graphics gr; // Создаём переменную gr типа Graphics (холст для рисования)
gr = pictureBox1.CreateGraphics(); // Инициализируем созданную переменную
Pen MyPen;
Pen MyPen2; // Создаем карандш MyPen типа Pen
// Создаем карандш MyPen типа Pen
MyPen = new Pen(Color.Red); // Нашему карандашу присваиваем красный цвет
MyPen2 = new Pen(Color.Black);
float B2 = 0, A2 = 0, C2 = 0;
A = Convert.ToDouble(numA); A2 = (float)A;
B = Convert.ToDouble(numB);
B2 = (float)B;
C = Convert.ToDouble(numC); C2 = (float)C;
double y3;
int ninv = 900, np = 0;
float xmin = -10, xmax = 10, ymin = -10, ymax = 10;
float xstep = (xmax - xmin) / ninv;
float ystep = (ymax - ymin) / ninv;
float kx = pictureBox1.Width / (xmax - xmin), ky = kx;
float x = xmin, y = 0, x2, y2;
for (int i = 0; i < ninv; i++)
{
x2 = x + xstep;
y3 = (A2 * x * x + B2 * x + C2) ; y2 = (float)y3;
gr.DrawLine(MyPen, kx * x + 300, pictureBox1.Height / 2 - ky * y, kx * x2 + 300, pictureBox1.Height / 2 - ky * y2);
x = x2;
y = y2;
}
int xx = 0, yy = 0, xx1 = 0, yy1 = 0, kk;
kk = (int)ky;
for (int n = -300; n < 600; n += kk)
{
xx1 = xx + 900;
yy1 = 0;
gr.DrawLine(MyPen2, xx, pictureBox1.Height / 2 - n + 6, xx1, pictureBox1.Height / 2 - n + 6);
}
for (int n = -500; n < 900; n += kk)
{
xx1 = 0;
yy1 = yy + 900;
gr.DrawLine(MyPen2, n + 18, 0, n + 18, pictureBox1.Height);
}
gr.DrawLine(MyPen, 300, pictureBox1.Height - 0, 300, pictureBox1.Height - 500);
gr.DrawLine(MyPen, 0, pictureBox1.Height / 2, 900, pictureBox1.Height / 2);
gr.DrawString("Y", new Font("Arial", 22), new SolidBrush(Color.Green), 300, 10);
gr.DrawString("X", new Font("Arial", 22), new SolidBrush(Color.Green), 650, 125);
for (int n = -1000; n < 1000; n += kk)
{
x = xmin++ - 28;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), np, pictureBox1.Height / 2 + 5);
x = x2++;
}
for (int n = -1000; n < 1000; n += kk)
{
x = ymin++ - 19;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), 292, pictureBox1.Height / 2 - np - 10);
x = x2++;
}
}
private void kk_01_Load(object sender, EventArgs e)
{
}
private void textA_TextChanged(object sender, EventArgs e)
{
numA = this.textA.Text;
}
private void textB_TextChanged(object sender, EventArgs e)
{
numB = this.textB.Text;
}
private void textC_TextChanged(object sender, EventArgs e)
{
numC = this.textC.Text;
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
Graphics gr; // Создаём переменную gr типа Graphics (холст для рисования)
gr = pictureBox1.CreateGraphics(); // Инициализируем созданную переменную
Pen MyPen;
Pen MyPen2; // Создаем карандш MyPen типа Pen
// Создаем карандш MyPen типа Pen
MyPen = new Pen(Color.Red); // Нашему карандашу присваиваем красный цвет
MyPen2 = new Pen(Color.Black);
float B2 = 0, A2 = 0, C2 = 0;
A = Convert.ToDouble(numA); A2 = (float)A;
B = Convert.ToDouble(numB);
B2 = (float)B;
C = Convert.ToDouble(numC); C2 = (float)C;
double y3;
int ninv = 900, np = 0;
float xmin = -10, xmax = 10, ymin = -10, ymax = 10;
float xstep = (xmax - xmin) / ninv;
float ystep = (ymax - ymin) / ninv;
float kx = pictureBox1.Width / (xmax - xmin), ky = kx;
float x = xmin, y = 0, x2, y2;
for (int i = 0; i < ninv; i++)
{
x2 = x + xstep;
y3 = A * Math.Sin(B2 * x + C2); y2 = (float)y3;
gr.DrawLine(MyPen, kx * x + 300, pictureBox1.Height / 2 - ky * y, kx * x2 + 300, pictureBox1.Height / 2 - ky * y2);
x = x2;
y = y2;
}
int xx = 0, xx1 = 0, kk;
kk = (int)ky;
for (int n = -300; n < 600; n += kk)
{
xx1 = xx + 900;
gr.DrawLine(MyPen2, xx, pictureBox1.Height / 2 - n + 6, xx1, pictureBox1.Height / 2 - n + 6);
}
for (int n = -500; n < 900; n += kk)
{
gr.DrawLine(MyPen2, n + 18, 0, n + 18, pictureBox1.Height);
}
gr.DrawLine(MyPen, 300, pictureBox1.Height - 0, 300, pictureBox1.Height - 500);
gr.DrawLine(MyPen, 0, pictureBox1.Height / 2, 900, pictureBox1.Height / 2);
gr.DrawString("Y", new Font("Arial", 22), new SolidBrush(Color.Green), 300, 10);
gr.DrawString("X", new Font("Arial", 22), new SolidBrush(Color.Green), 650, 125);
for (int n = -1000; n < 1000; n += kk)
{
x = xmin++ - 28;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), np, pictureBox1.Height / 2 + 5);
x = x2++;
}
for (int n = -1000; n < 1000; n += kk)
{
x = ymin++ - 19;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), 292, pictureBox1.Height / 2 - np - 10);
x = x2++;
}
}
private void button4_Click(object sender, EventArgs e)
{
Graphics gr; // Создаём переменную gr типа Graphics (холст для рисования)
gr = pictureBox1.CreateGraphics();
gr.Clear(SystemColors.Window);
}
private void button3_Click_1(object sender, EventArgs e)
{
Graphics gr; // Создаём переменную gr типа Graphics (холст для рисования)
gr = pictureBox1.CreateGraphics(); // Инициализируем созданную переменную
Pen MyPen;
Pen MyPen2; // Создаем карандш MyPen типа Pen
// Создаем карандш MyPen типа Pen
MyPen = new Pen(Color.Red); // Нашему карандашу присваиваем красный цвет
MyPen2 = new Pen(Color.Black);
float B2 = 0, A2 = 0, C2 = 0;
A = Convert.ToDouble(numA); A2 = (float)A;
B = Convert.ToDouble(numB);
B2 = (float)B;
C = Convert.ToDouble(numC); C2 = (float)C;
double y3;
int ninv = 600, np = 0;
float xmin = -10, xmax = 10, ymin = -10, ymax = 10;
float xstep = (xmax - xmin) / ninv;
float ystep = (ymax - ymin) / ninv;
float kx = pictureBox1.Width / (xmax - xmin), ky = kx;
float x = xmin, y = 0, x2=0, y2=0;
for (int i = 0; i < ninv; i++)
{
x2 = x + xstep;
if ((B * x + C) > 0)
{
y3 = A * Math.Log(B * x + C);
y2 = (float)y3;
gr.DrawLine(MyPen, kx * x + 300, pictureBox1.Height / 2 - ky * y, kx * x2 + 300, pictureBox1.Height / 2 - ky * y2);
} x = x2;
y = y2;
}
int xx = 0, yy = 0, xx1 = 0, yy1 = 0, kk;
kk = (int)ky;
for (int n = -300; n < 600; n += kk)
{
xx1 = xx + 900;
yy1 = 0;
gr.DrawLine(MyPen2, xx, pictureBox1.Height / 2 - n + 6, xx1, pictureBox1.Height / 2 - n + 6);
}
for (int n = -500; n < 900; n += kk)
{
xx1 = 0;
yy1 = yy + 900;
gr.DrawLine(MyPen2, n + 18, 0, n + 18, pictureBox1.Height);
}
gr.DrawLine(MyPen, 300, pictureBox1.Height - 0, 300, pictureBox1.Height - 500);
gr.DrawLine(MyPen, 0, pictureBox1.Height / 2, 900, pictureBox1.Height / 2);
gr.DrawString("Y", new Font("Arial", 22), new SolidBrush(Color.Green), 300, 10);
gr.DrawString("X", new Font("Arial", 22), new SolidBrush(Color.Green), 650, 125);
for (int n = -1000; n < 1000; n += kk)
{
x = xmin++ - 28;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), np, pictureBox1.Height / 2 + 5);
x = x2++;
}
for (int n = -1000; n < 1000; n += kk)
{
x = ymin++ - 19;
x2 = x++;
np = n;
gr.DrawString(" " + Math.Round(x2, 1).ToString(), new Font("Arial", 10), new SolidBrush(Color.Green), 292, pictureBox1.Height / 2 - np - 10);