C/C++ - Определить тип четырехугольника
-
Hector
C/C++ - Определить тип четырехугольника
Задача такая, вводятся координаты четырех точек (x;y) и нужно определить вид полученного четырехугольника (квадрат, прямоугольник, трапеция и т. д.). проблема в том, как это сделать т. е. математически определить тип этого четырехугольника (формула нужна)
-
belk94
Re: C/C++ - Определить тип четырехугольника
Проверка на квадрат и прямоугольник делается через скалярное произведение векторов и сравнение их длин. А призма, если не ошибаюсь, - это трёхмерная фигура.
-
Hector
Re: C/C++ - Определить тип четырехугольника
Цитата belk94:
А призма, если не ошибаюсь, - это трёхмерная фигура.
да, это я ошибся, имелась ввиду трапеция
А призма, если не ошибаюсь, - это трёхмерная фигура.
C/C++ - Определить тип четырехугольника
да, это я ошибся, имелась ввиду трапеция
-
Delirium
Re: C/C++ - Определить тип четырехугольника
Просчитать длину каждой стороны. Если попарно совпали - прямоугольник. Все 4 одинаковы - квадрат. Ну и так далее 

-
El Scorpio
Re: C/C++ - Определить тип четырехугольника
Длины сторон и диагоналей определяются по формуле Пифагора - квадратный корень из суммы квадратов разностей координат по осям ((Xa - Xb)2 + (Ya - Yb)2). Причём сам корень извлекать не обязательно - ведь числа будут только сравниваться между собой.
Квадрат: все стороны равны и диагонали равны.
Ромб: все стороны равны, диагонали не равны
Прямоугольник: стороны попарно равны, диагонали равны.
Параллелограмм: стороны попарно равны, диагонали не равны
Цитата Hector:
А для трапеции?
Трапеция: две стороны (противоположные) равны, а третья больше четвёртой.
Квадрат: все стороны равны и диагонали равны.
Ромб: все стороны равны, диагонали не равны
Прямоугольник: стороны попарно равны, диагонали равны.
Параллелограмм: стороны попарно равны, диагонали не равны
Цитата Hector:
А для трапеции?
C/C++ - Определить тип четырехугольника
Трапеция: две стороны (противоположные) равны, а третья больше четвёртой.
-
lxa85
Re: C/C++ - Определить тип четырехугольника
Hector, ты с векторной математикой знаком?
Я бы предложил сравнивать скаляры длин векторов (их нормы) и далее смотреть, как они соотносятся со свойствами известных 4х угольников.
Кстати, попутно вопрос и замечание.
Необходимо отслеживать, откуда и куда идет вектор. Т.е. чтобы не получилась фигура "песочных часов". Ну и вообще отследить, что с чем сравнивается.
Воот еще такая заметка. Тебе надо будет определить Эпсилон минимального расхождения. Т.е. когда начнется непосредственно вычисления, очень малые дробные части будут неизбежно потеряны. И при малых расхождениях векторов фигура будет восприниматься как ромб допустим, не являясь таковым на самом деле.
Цитата El Scorpio:
Трапеция: две стороны (противоположные) равны, а третья больше четвёртой.
2 Стороны параллельны друг другу. Их равенство не обязательно
Но там предъявляется требование к углам основания. Чтобы отличить от параллелепипеда или в общий 4х угольник.
Коллинеарность
и перпендикулярность векторов говорит о чем либо?Я бы предложил сравнивать скаляры длин векторов (их нормы) и далее смотреть, как они соотносятся со свойствами известных 4х угольников.
Кстати, попутно вопрос и замечание.
Необходимо отслеживать, откуда и куда идет вектор. Т.е. чтобы не получилась фигура "песочных часов". Ну и вообще отследить, что с чем сравнивается.
Воот еще такая заметка. Тебе надо будет определить Эпсилон минимального расхождения. Т.е. когда начнется непосредственно вычисления, очень малые дробные части будут неизбежно потеряны. И при малых расхождениях векторов фигура будет восприниматься как ромб допустим, не являясь таковым на самом деле.
Цитата El Scorpio:
Трапеция: две стороны (противоположные) равны, а третья больше четвёртой.
C/C++ - Определить тип четырехугольника
2 Стороны параллельны друг другу. Их равенство не обязательно
Но там предъявляется требование к углам основания. Чтобы отличить от параллелепипеда или в общий 4х угольник.
-
El Scorpio
Re: C/C++ - Определить тип четырехугольника
Цитата lxa85:
2 Стороны параллельны друг другу. Их равенство не обязательно
да, перепутал с равнобедренной трапецией.
Цитата lxa85:
Но там предъявляется требование к углам основания.
Углы у одной параллельных сторон должны быть не больше 90 градусов,*а у другой - не меньше.
Определить размер угла можно по косинусу. Точное значение угла вычислять не обязательно - достаточно определить знак косинуса разности углов линий, составляющих данный угол.
2 Стороны параллельны друг другу. Их равенство не обязательно
C/C++ - Определить тип четырехугольника
да, перепутал с равнобедренной трапецией.
Цитата lxa85:
Но там предъявляется требование к углам основания.
C/C++ - Определить тип четырехугольника
Углы у одной параллельных сторон должны быть не больше 90 градусов,*а у другой - не меньше.
Определить размер угла можно по косинусу. Точное значение угла вычислять не обязательно - достаточно определить знак косинуса разности углов линий, составляющих данный угол.
http://ru.wikipedia.org/wiki/%D0%A1%...BD.D0.B8.D1.8F