Разработка сайтов и программного обеспечения, системное администрирование, обучение программированию и работе с СУБД MySQL

in english

Определение вида четырехугольника

Главная Проекты Определение вида четырехугольника

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

Алгоритм работы
 Сначала получаем координаты точек.
 После этого получаем координаты векторов образующих четырехугольник.

 Затем производим проверку на наличие нуль-векторов, 
	если таковые обнаружены
		прекращаем выполнение фукнции и выводим сообщение о том, 
		что четырехугольник не существует
 после этого 
 
 проверяем на прямоугольник:
	если несмежные векторы коллинеарны и смежные ортогональны, 
		то
		  выводим сообщение "прямоугольник"
	иначе
		если все несмежные векторы коллинеарны,	
			то "паралллелограмм"
		иначе
		 если два несмежных векторы коллинеарны, 
			то "трапеция"
		 иначе выводим "произвольный 4угольник"

В этой программе нет никаких особенностей, простая реализация математического алгоритма, построенного на знаниях математики школьного уровня.

Реализация алгоритма

Приложение разработано в среде Borland C++ Builder 6.

Базовой частью программы является структура sPoint:

struct sPoint
{
  double x;
  double y;
};

Она представляет собой простую точку. Ее надо пописать в заголовчном модуле проекта.

Далее потребуется небольшой набор функций для работы с векторами:

double le(sPoint a1,sPoint a2)	// подсчет длины отрезка
{
 return sqrt((a1.x-a2.x)*(a1.x-a2.x) + (a1.y-a2.y)*(a1.y-a2.y) );
};
// координаты вектора  ---------------------------------------------------------
sPoint coord_vector(sPoint begin, sPoint end)
{
 sPoint v;
 v.x=end.x-begin.x;
 v.y=end.y-begin.y;
 return v;
}
// векторы ортогональны --------------------------------------------------------
bool ortogonal_vectors(sPoint v1,sPoint v2)
{
 if ((v1.x*v2.x+v1.y*v2.y) == 0) return true;
 else return false;
}
// векторы коллинеарны ---------------------------------------------------------
bool collinear_vectors(sPoint v1,sPoint v2)
{
 if ((v1.x==0.0 && v2.x==0.0) ||(v1.y==0.0 && v2.y==0.0))
 {
  return true;
 }
 else
 {
  if (v2.x==0.0 || v2.y ==0.0) return false;
  else
  {
   if ( (v1.x/v2.x) == (v1.y/v2.y)) return true;
   else return false;
  }
 }
}

Также не забудьте объявить прототипы этих функций в заголочном файле.

Теперь разместите на форме 8 компонентов TEdit и назовите их так: Editax, Editay, Editbx, Editby, Editcx, Editcy, Editdx, Editdy. Разместите метку ResultLabel класса TLabel и кнопку класса TButton. Теперь дело за малым, написать обработчик для кнопки:

sPoint A,B,C,D;
 // получаем данные
 A.x=Editax->Text.ToDouble(); A.y=Editay->Text.ToDouble();
 B.x=Editbx->Text.ToDouble(); B.y=Editby->Text.ToDouble();
 C.x=Editcx->Text.ToDouble(); C.y=Editcy->Text.ToDouble();
 D.x=Editdx->Text.ToDouble(); D.y=Editdy->Text.ToDouble();
 // считаем стороны 
 sPoint AB,BC,CD,AD;
 AB=coord_vector(A,B);
 BC=coord_vector(B,C);
 CD=coord_vector(C,D);
 AD=coord_vector(A,D);
 if (  //проверка на нуль-вектор
 (AB.x==0 && AB.y==0)||
 (BC.x==0 && BC.y==0)||
 (CD.x==0 && CD.y==0)||
 (AD.x==0 && AD.y==0))
 {
  ShowMessage("Введенная фигура не является четырехугольником");
  return;
 }
 // определение вида четырехгольника
 if (collinear_vectors(AB,CD) && collinear_vectors(BC,AD) && ortogonal_vectors(AB,BC))
 ResultLabel->Caption=" прямоугольник ";
 else
 if (collinear_vectors(AB,CD) && collinear_vectors(BC,AD) )
 ResultLabel->Caption=" параллелограмм ";
 else
 if (collinear_vectors(AB,CD) || collinear_vectors(BC,AD) )
 ResultLabel->Caption=" трапеция ";
 else
 ResultLabel->Caption=" четырехугольник иного вида "; 

Исходники и программа находятся в архиве.

May 10, 2007

Реклама:

Метки: проекты, C++ Builder, исходник, векторы, алгоритмизация.

Комментарии:

Вы можете оставить первый комментарий.

имя:

e-mail (не публикуется):

комментарий:

© Ткачев Филипп, 2005—2017
Программист, веб-разработка и прикладное ПО.
Все права защищены.