Линейные решающие функции. Изучение решающих функций как инструмента для определения принадлежности данного образа данной системе классов

Страницы работы

Содержание работы

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ТУЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра электронных вычислительных машин

«Системы искусственного интеллекта»

Лабораторная работа  № 1

«Линейные решающие функции»

Выполнил:

студент группы

Проверил:

Преподаватель

 

Тула 2008


Цель работы: изучение решающих функций как инструмента для определения принадлежности данного образа данной системе классов.

Тех. задание: реализовать алгоритм определения принадлежности точки треугольнику на основе линейных решающих функций.

1.  Постановка задачи

Программа должна определять принадлежность набора точек заданному треугольнику на основании линейных решающих функций, исходные данные задаются в файле, вывод результатов также осуществляется в файл.

2.  Алгоритмическое описание

Сущность алгоритма определения принадлежности заданной точки рассматриваемому треугольнику заключается в следующем:

Сначала по координатам вершин треугольника строятся уравнения прямых вида Ax + By +C = 0, на которых лежат отрезки, образующие его стороны. Затем вычисляются координаты точки, несомненно лежащей внутри треугольника. Эта точка находится следующим образом: проводится медиана к одной из сторон треугольника, и середина медианы и будет искомой точкой. Далее координаты этой точки подставляются в уравнения прямых и запоминается знак полученного числа. При проверке вхождения точек в треугольник их координаты также подставляются в уравнения прямых, и, если знаки получившихся чисел совпадут с запомненными, выдвигается утверждение о том, что проверяемая точка принадлежит треугольнику.


3.  Приложения.

3.1  Листинг  -  файл Program.cs

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

namespace lab1

{

class Program

{

static void Main(string[] args)

{

StreamReader in1 = new StreamReader("in.txt");

StreamWriter out1 = new StreamWriter("out.txt",false);

double Xa,Xb,Xc,Ya,Yb,Yc,Xm,Ym;

Xa = double.Parse(in1.ReadLine());

Ya = double.Parse(in1.ReadLine());

Xb = double.Parse(in1.ReadLine());

Yb = double.Parse(in1.ReadLine());

Xc = double.Parse(in1.ReadLine());

Yc = double.Parse(in1.ReadLine());

while (!in1.EndOfStream)

{

Xm = double.Parse(in1.ReadLine());

Ym = double.Parse(in1.ReadLine());

double Aab = Ya - Yb;

double Bab = Xb - Xa;

double Cab = Xa * Yb - Ya * Xb;

double Aac = Ya - Yc;

double Bac = Xc - Xa;

double Cac = Xa * Yc - Ya * Xc;

double Abc = Yb - Yc;

double Bbc = Xc - Xb;

double Cbc = Xb * Yc - Yb * Xc;

double Xh = (Xc - Xb) / 2 + Xb;

double Yh = (Yc - Yb) / 2 + Yb;

double Xd = (Xh - Xa) / 2 + Xa;

double Yd = (Yh - Ya) / 2 + Ya;

double Kab = Aab * Xd + Bab * Yd + Cab;

double Kac = Aac * Xd + Bac * Yd + Cac;

double Kbc = Abc * Xd + Bbc * Yd + Cbc;

int signAB = Math.Sign(Kab);

int signAC = Math.Sign(Kac);

int signBC = Math.Sign(Kbc);

Kab = Aab * Xm + Bab * Ym + Cab;

Kac = Aac * Xm + Bac * Ym + Cac;

Kbc = Abc * Xm + Bbc * Ym + Cbc;

if (Math.Sign(Kab) == signAB && Math.Sign(Kac) == signAC && Math.Sign(Kbc) == signBC)

{

Console.WriteLine("Точка с координатами ({0}, {1}) принадлежит треугольнику", Xm, Ym);

out1.WriteLine("Точка с координатами ({0}, {1}) принадлежит треугольнику", Xm, Ym);

out1.Flush();

}

else

{

Console.WriteLine("Точка с координатами ({0}, {1}) не принадлежит треугольнику", Xm, Ym);

out1.WriteLine("Точка с координатами ({0}, {1}) не принадлежит треугольнику", Xm, Ym);

out1.Flush();

}

}

Console.ReadLine();

}

}

}

3.2  Приложение - тестирование.

Содержимое входного файла in.txt

Содержимое выходного файла out.txt

10

2

0

10

10

0

9

2

5

5

Точка с координатами (9, 2) принадлежит треугольнику

Точка с координатами (5, 5) не принадлежит треугольнику

Выводы по работе: ознакомились с примером использования линейных решающих функций.

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
71 Kb
Скачали:
0