C/C++ - Определить тип четырехугольника

Ответить
Аватара пользователя
Hector

C/C++ - Определить тип четырехугольника

Сообщение Hector »

Задача такая, вводятся координаты четырех точек (x;y) и нужно определить вид полученного четырехугольника (квадрат, прямоугольник, трапеция и т. д.). проблема в том, как это сделать т. е. математически определить тип этого четырехугольника (формула нужна)
Аватара пользователя
belk94

Re: C/C++ - Определить тип четырехугольника

Сообщение belk94 »

Проверка на квадрат и прямоугольник делается через скалярное произведение векторов и сравнение их длин. А призма, если не ошибаюсь, - это трёхмерная фигура.
Аватара пользователя
Hector

Re: C/C++ - Определить тип четырехугольника

Сообщение Hector »

Цитата belk94:



А призма, если не ошибаюсь, - это трёхмерная фигура.
C/C++ - Определить тип четырехугольника




да, это я ошибся, имелась ввиду трапеция
Аватара пользователя
Delirium

Re: C/C++ - Определить тип четырехугольника

Сообщение Delirium »

Просчитать длину каждой стороны. Если попарно совпали - прямоугольник. Все 4 одинаковы - квадрат. Ну и так далее Изображение
Аватара пользователя
El Scorpio

Re: C/C++ - Определить тип четырехугольника

Сообщение El Scorpio »

Длины сторон и диагоналей определяются по формуле Пифагора - квадратный корень из суммы квадратов разностей координат по осям ((Xa - Xb)2 + (Ya - Yb)2). Причём сам корень извлекать не обязательно - ведь числа будут только сравниваться между собой.



Квадрат: все стороны равны и диагонали равны.

Ромб: все стороны равны, диагонали не равны

Прямоугольник: стороны попарно равны, диагонали равны.

Параллелограмм: стороны попарно равны, диагонали не равны




Цитата Hector:



А для трапеции?
C/C++ - Определить тип четырехугольника




Трапеция: две стороны (противоположные) равны, а третья больше четвёртой.
Аватара пользователя
lxa85

Re: C/C++ - Определить тип четырехугольника

Сообщение lxa85 »

Hector, ты с векторной математикой знаком?

Коллинеарность
и перпендикулярность векторов говорит о чем либо?

Я бы предложил сравнивать скаляры длин векторов (их нормы) и далее смотреть, как они соотносятся со свойствами известных 4х угольников.

Кстати, попутно вопрос и замечание.

Необходимо отслеживать, откуда и куда идет вектор. Т.е. чтобы не получилась фигура "песочных часов". Ну и вообще отследить, что с чем сравнивается.

Воот еще такая заметка. Тебе надо будет определить Эпсилон минимального расхождения. Т.е. когда начнется непосредственно вычисления, очень малые дробные части будут неизбежно потеряны. И при малых расхождениях векторов фигура будет восприниматься как ромб допустим, не являясь таковым на самом деле.
Цитата El Scorpio:



Трапеция: две стороны (противоположные) равны, а третья больше четвёртой.
C/C++ - Определить тип четырехугольника




2 Стороны параллельны друг другу. Их равенство не обязательно Изображение

Но там предъявляется требование к углам основания. Чтобы отличить от параллелепипеда или в общий 4х угольник.
Аватара пользователя
El Scorpio

Re: C/C++ - Определить тип четырехугольника

Сообщение El Scorpio »

Цитата lxa85:



2 Стороны параллельны друг другу. Их равенство не обязательно
C/C++ - Определить тип четырехугольника




да, перепутал с равнобедренной трапецией.




Цитата lxa85:



Но там предъявляется требование к углам основания.
C/C++ - Определить тип четырехугольника




Углы у одной параллельных сторон должны быть не больше 90 градусов,*а у другой - не меньше.

Определить размер угла можно по косинусу. Точное значение угла вычислять не обязательно - достаточно определить знак косинуса разности углов линий, составляющих данный угол.

http://ru.wikipedia.org/wiki/%D0%A1%...BD.D0.B8.D1.8F
Ответить

Вернуться в «Программирование и базы данных»