B[o]x Definer 1.0
Программа определяет тип четырехугольника по предложенным координатам
Дата: 10.05.2007
Платформа: Win 98,Me,NT,2k,XP
Программа предназначена для определения вида четырехугольника и может быть использована как демонстрационная модель работы с векторной алгеброй на языке 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=" четырехугольник иного вида ";
Исходники и программа находятся в архиве.
Скачать:
|
Copyright © 2005-2008 by Ткачев Филипп aka ZoonMan.
Все идеи явно или неявно используюшиеся на этом сайте являются
интеллектуальной собственностью автора.
Копирование разрешается без согласия, но ссылка на автора обязательна. |
Cгенерировано за: 0.28 сек 38.103.63.62 38.103.63.62 | ||
| Вверх | WAP версия сайта |
