Автор работы: Пользователь скрыл имя, 29 Января 2013 в 10:53, курсовая работа
Написать программу, рисующую фигуру по заданным точкам и координатам. Построить алгоритм нахождения внутренних линий, на основе которого обвести внутренние треугольники другим цветом.
Федеральное Государственное Бюджетное Общеобразовательное Учреждение Высшего Профессионального Образования
Дальневосточный Государственный Университет Путей Сообщения
Кафедра: «Информационные Технологии и Системы»
Курсовая работа
На тему: «Программирование на C#»
090900.62 гр.21Б
Выполнил: Cвирин М.В.
Проверил: Водолажский А.А.
Хабаровск-2012
Задание
Написать программу, рисующую фигуру по заданным точкам и координатам. Построить алгоритм нахождения внутренних линий, на основе которого обвести внутренние треугольники другим цветом.
Геометрияобласти:
Входные данные:
Координаты
6
240;80
160;200
320;200
80;320
240;320
400;320
Узлы
4
0;1;2
3;4;1
4;2;1
5;2;4
Выходные данные:
Координаты внутреннего
треугольника
156;163
302;316
156;163
Узлы внутреннего треугольника
1;2
4;2
1;4
Текст программы
Класс Mesh
using System;
usingSystem.Collections.
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
using System.IO;
namespaceКурсовая
{
Class Mesh
{
Public int[,] mesh = null;
Int CountElem = 0;
Public int[,] Read()
{
string Name = @"C:\Users\Cheburashka\
StreamReader file = newStreamReader(Name);
string line = file.ReadLine();
CountElem = int.Parse(line);
mesh = newint[CountElem, 3];
int k = 0;
for (line = file.ReadLine(); line != null; line = file.ReadLine())
{
string[] elem = line.Split(';');
for (int i = 0; i <elem.Length; i++)
{
mesh[k, i] = int.Parse(elem[i]);
}
k++;
}
file.Close();
return mesh;
}
Public int[,] koor = null;
Public int[,] Read_1()
{
string Name = @"C:\Users\Cheburashka\
StreamReader file = newStreamReader(Name);
string line = file.ReadLine();
CountElem = int.Parse(line);
koor = newint[CountElem, 2];
int k = 0;
for (line = file.ReadLine(); line != null; line = file.ReadLine())
{
string[] elem = line.Split(';');
for (int i = 0; i <elem.Length; i++)
{
koor[k, i] = int.Parse(elem[i]);
}
K++;
}
file.Close();
return koor;
}
}
}
Класс Line
using System;
usingSystem.Collections.
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
namespace Курсовая
{
classLine
{
Public int a, b;
public Line()
{
}
public Line(int A, int B)
{
a = A;
b = B;
}
}
}
Класс Form1
usingSystem;
usingSystem.Collections.
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
using System.IO;
namespaceКурсовая
{
publicpartialclassForm1 : Form
{
public Form1()
{
InitializeComponent();
}
privatevoid Form1_Paint(object sender, PaintEventArgs e)
{
Mesh piramide = new Mesh();
Graphics g = e.Graphics;
Pen p = new Pen(Color.DeepSkyBlue, 3);
piramide.Read_1();
int ni = piramide.koor.GetLength(0);
int nj = piramide.koor.GetLength(1);
piramide.Read();
int ki = piramide.mesh.GetLength(0);
int kj = piramide.mesh.GetLength(1);
Point[] a = new Point[ni];
int[] x = new int[ni];
int[] y = new int[ni];
for (int i = 0; i <ni; i++)
{
a[i].X = piramide.koor[i,0];
a[i].Y = piramide.koor[I,1];
}
Int max_x = a[0].X;
Int min_x = a[0].X;
for (int i = 1; i <ni; i++)
{
if (a[0].X >max_x)
{
max_x = a[0].X;
}
if (a[0].X <min_x)
{
min_x = a[0].X;
}
}
Int max_y = a[0].Y;
Int min_y = a[0].Y;
for (int i = 1; i <ni; i++)
{
if (a[0].Y >max_y)
{
max_y = a[0].Y;
}
if (y[i] <min_y)
{
min_y = a[0].Y;
}
}
int width = this.Size.Width - 100;
int hight = this.Size.Height - 100;
Point[] b = new Point[x.Length];
for (int i = 0; i <ni ; i++)
{
b[i].X = 10 + width * (a[i].X - min_x) / (max_x - min_x);
b[i].Y = 10 + hight * (a[i].Y - min_y) / (max_y - min_y);
}
for (int i = 0; i <ki; i++)
{
int j = 0;
g.DrawLine(p, b[piramide.mesh[i, j]], b[piramide.mesh[i, j + 1]]);
g.DrawLine(p, b[piramide.mesh[i, j + 1]], b[piramide.mesh[i, j + 2]]);
g.DrawLine(p, b[piramide.mesh[i, j + 2]], b[piramide.mesh[i, j]]);
}
Line[] line=new Line[ki*kj];
int k = 0;
for(int i = 0; i<ki;i++)
{
for (int j = 0; j < 3; j++)
{
line[k] = new Line(piramide.mesh[i, j], piramide.mesh[i, (j + 1)%3]);
k++;
}
}
Line[] maskoor = new Line[0];
for (int m = 0; m <ki*kj; m++)
{
for (int u = 0; u <ki*kj; u++)
{
if ((m!=u) && (line[m].a==line[u].b && line[m].b==line[u].a))
{
Array.Resize(refmaskoor, maskoor.Length + 1);
maskoor[maskoor.Length-1] = new Line();
maskoor[maskoor.Length-1].a = line[m].a;
maskoor[maskoor.Length-1].b = line[m].b;
}
}
}
Pen r = new Pen(Color.Fuchsia, 5);
string Name = @"C:\Users\Cheburashka\
StreamWriter file = newStreamWriter(Name);
string Name1 = @"C:\Users\Cheburashka\
StreamWriter file1 = newStreamWriter(Name1);
for (int i = 0; i <maskoor.Length - 1; i = i + 2)
{
g.DrawLine(r, b[maskoor[i].a], b[maskoor[i].b]);
file.WriteLine(maskoor[i].a + ";" + maskoor[i].b);
file1.WriteLine(b[maskoor[i].
}
file.Close();
file1.Close();
}
}
}