Определение вида четырехугольника
Главная → Проекты → Определение вида четырехугольника
Программа предназначена для определения вида четырехугольника и может быть использована как демонстрационная модель работы с векторной алгеброй на языке 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
Реклама:
Комментарии:
e-mail (не публикуется):
комментарий:
Вы можете оставить первый комментарий.