Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Новичёк
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 8
#1

Класс для работы со списком - C++

17.05.2009, 02:02. Просмотров 1741. Ответов 3
Метки нет (Все метки)

разработать класс для работы со списком, включив в него конструктор, деструктор и методы для создания и просмотра элементов списка, а также :
Создать список, в информационной части элементов которого нахо-дятся координаты вершин многоугольника плоскости. Определить, находит-ся ли точка с заданными координатами на одной из сторон многоугольника


Некоторые моменты понимаю, но как сделать всё это через классы и как определить, находится точка в многоугольнике или нет я не знаю

Добавлено через 2 часа 35 минут 1 секунду
Всё создал, но не знаю как определить находится точка на однйо из сторон или нет
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2009, 02:02     Класс для работы со списком
Посмотрите здесь:
C++ Построить класс для работы со списком
Построить класс для работы с односвязным списком C++
C++ Построить класс для работы с односвязным списком
C++ Построить класс для работы с односвязным списком
Построить класс для работы с односвязным списком C++
Построить класс для работы с односвязным списком C++
Построить класс для работы с односвязным списком C++
Создать класс ListInt для работы со списком целых чисел C++
C++ Класс для работы со списком, содержащим информацию о поездах дальнего следования
Построить класс для работы со списком. Элемент списка содержит информацию о заявке на авиабилет C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xardas
15 / 15 / 0
Регистрация: 08.05.2009
Сообщений: 81
17.05.2009, 02:11     Класс для работы со списком #2
находится ли точка на одной из сторон многоугольника...
необходимо проверить принадлежность точки некоторой прямой... составляется уравнение прямой, и, подставляя координаты заданной точки в это уравнение, определяется, принадлежит точка прямой, или нет. Но это не всё. Нужно проверить еще, лежит ли она на отрезке этой прямой. Отрезок - сторона многоугольника, заданная, как я понимаю из описания задачи, своими координатами.

что не понятно?
Новичёк
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 8
17.05.2009, 02:15  [ТС]     Класс для работы со списком #3
А что за уравнение прямой?
Xardas
15 / 15 / 0
Регистрация: 08.05.2009
Сообщений: 81
17.05.2009, 02:44     Класс для работы со списком #4
Как сделать через классы?

элементарно.

допустим такой примерно класс. в реализацию я углубляться не буду.
C++
1
2
3
4
5
6
7
8
9
10
11
12
class PointList
{
public:
PointList();
PointList(const PointList& pl);
virtual ~Point();
 
void AddPoint(Point pt);
Point getPoint(int index)const;
 
virtual void clear();
}
Далее, в основной программе создаем этот список точек. В цикле вводим откуда-либо координаты вершин многоугольника (лучше последовательно, то есть обязательно, чтобы соседние по вводу вершины многоугольника были соседними и в многоугольнике - то есть имели бы ребро, сторону).

А дальше - собственно алгоритм.

можно реализовать функцию ,которая принимает многоугольник, хранящийся в списке PointList и координаты точки, принадлежность которой к сторонам многоугольника необходимо проверить. Например:

C++
1
2
3
4
bool IsPointOnPolygon(const PointList& pl, const Point& a)
{
...
}
Подразумевается, что первая и последняя точка в списке также соединены ребром. То есть это не набор отрезков, заданных своими координатами, а именно ЗАМКНУТЫЙ многоугольник.

Добавлено через 10 минут 22 секунды
Уравнение прямой, проходящей через 2 заданные точки:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1)
где (x1,y1) и (x2,y2) - координаты двух точек, через которые проходит прямая.
(кажется так)
лучше перепроверить. можно в нете поискать. но вроде я не ошибся.

на бумажке привести подобные и получить уравнение вида:
y=kx+b. Математика, школьный курс.

а далее - подставляем заданную точку в полученное уравнение (в результате приведения подобных мы будем иметь значение коэффициентов k и b). Пусть точка A имеет координаты A(ax,ay). Если подстановка в уравнение прямой вместо x и y координат точки A дает верное равенство, то точка A лежит на этой прямой.

А вот как проверить, лежит ли эта точка на заданном отрезке - сходу сказать не могу. надо немного подумать.

-------
ну и в цикле перебираются попарно вершины многоугольника. как только встречаем соответствие (то есть нашли какую-то сторону, на которой лежит точка), то поиск завершен. можно прямо из цикла вернуть ответ. Ну или можно немного усложнить задачу. Возвратить из функции структуру из двух номеров точек, которые (эти номера) образуют сторону, на которой лежит точка.

Добавлено через 13 минут 0 секунд
А еще можно сделать дополнительную функцию, которая определяет, принадлежит ли точка отрезку.

Мне кажется, что точка O(x,y) принадлежит отрезку AB, если:
1) она принадлежит прямой, проходящей через отрезок AB (через две точки - A и B);
2) ox > = min(ax,bx) и ox < = max(ax,bx). Аналогично и для координаты y: oy > = min(ay,by) и oy < = max(ay,by). То есть координаты этой точки лежат в пределах координат концов отрезка.
Yandex
Объявления
17.05.2009, 02:44     Класс для работы со списком
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru