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

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

4 страницы (Word-файл)

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

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

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

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

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

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

Лабораторная работа  № 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