Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Класс многоугольник на С++

Автор: Sharkova
Дата сообщения: 23.11.2009 17:38
Помогите пожалуйста, кому не сложно! Нужно определить класс многоугольник. Для него определить конструктор по умолчанию, конструктор копирования и конструктор инициализации. (Polygon (Point & points [], int n)) Опр. операцию "[]" для доступа к вершинам многоугольника , опрератор "<<" для вывода в поток координат вершин многоугольника, операцию приведения типа к float, которая возвращает периметр многоугольника. Я понимаю что задача не совсем простая но буду благодарна за любую помощь!
Автор: data man
Дата сообщения: 24.11.2009 10:01
Sharkova
Есть библиотека Wykobi http://www.wykobi.com/features.html
Может и пригодится.
Автор: MoscowTeaParty
Дата сообщения: 25.11.2009 20:49
Вот, например, реализация класса по вашему описанию.
Компилировал компиляторами Mingw и Borland от 6 Билдера.

Заголовок с определением класса, файл Polygon.h :


Код:
#ifndef __POLYGON_H
#define __POLYGON_H

#include <ostream>

typedef int Coordinate; //тип значения координаты

//класс точка, она же вершина многоугольника
class Point
{
public:
Coordinate x;
Coordinate y;

//конструкторы для точки - с ними легче жить

Point() {} //конструктор по умолчанию
Point(Coordinate c1, Coordinate c2) //конструктор точки по двум значениям координат
: x(c1), y(c2)
{}
};


//класс многоугольник
class Polygon
{
public:
Polygon() //конструктор по умолчанию, создаёт пустой мн-к с 0 вершин
: n_(0), points_(0)
{}

Polygon(Polygon const& p); //конструктор копирования
Polygon(Point const* points, int n); //конструктор из массива точек
~Polygon(); //деструктор

Point & operator[](int i) //операция произвольного доступа к вершинам по индексу
{ return points_[i]; }

//вывод в поток лучше делать френдом, а не методом класса
friend std::ostream& operator <<(std::ostream & os, Polygon const & poly);

operator float(); //приведение типа к float - возвращает периметр

private:
int n_;
Point *points_;

float edge_length(int i); //вспомогательная функция - длина i-го ребра
};

#endif __POLYGON_H
Автор: derelict
Дата сообщения: 25.11.2009 20:54
MoscowTeaParty
Все уже было решено тут: Ссылка
Реализация почти совпала.
Автор: Sharkova
Дата сообщения: 25.11.2009 21:42
Ой, спасибо огромное обоим за помощь, тут еще и комментари)) Мы правда пишем в Code Gear но думаю проблем не будет)
Автор: DELICEocean
Дата сообщения: 13.02.2010 18:42
Увидел код для описания класса многоугольник.Помогите пожалуйста дополнить его функцией для нахождения площади и рисования на форме(Просто соединить точки через LineTo?).Буду преогромно блогадарен за помощь
Автор: karakurt2
Дата сообщения: 13.02.2010 19:02

Цитата:

Subject 2.01: How do I find the area of a polygon?

The signed area can be computed in linear time by a simple sum.
The key formula is this:

If the coordinates of vertex v_i are x_i and y_i,
twice the signed area of a polygon is given by

2 A( P ) = sum_{i=0}^{n-1} (x_i y_{i+1} - y_i x_{i+1}).

Here n is the number of vertices of the polygon, and index
arithmetic is mod n, so that x_n = x_0, etc. A rearrangement
of terms in this equation can save multiplications and operate on
coordinate differences, and so may be both faster and more
accurate:

2 A(P) = sum_{i=0}^{n-1} ( x_i (y_{i+1} - y_{i-1}) )

Here again modular index arithmetic is implied, with n=0 and -1=n-1.
This can be avoided by extending the x[] and y[] arrays up to [n+1]
with x[n]=x[0], y[n]=y[0] and y[n+1]=y[1], and using instead

2 A(P) = sum_{i=1}^{n} ( x_i (y_{i+1} - y_{i-1}) )


References: [O' Rourke (C)] Thm. 1.3.3, p. 21; [Gems II] pp. 5-6:
"The Area of a Simple Polygon", Jon Rokne. Dan Sunday's explanation:
http://GeometryAlgorithms.com/Archive/algorithm_0101/ where

To find the area of a planar polygon not in the x-y plane, use:

2 A(P) = abs(N . (sum_{i=0}^{n-1} (v_i x v_{i+1})))

where N is a unit vector normal to the plane. The `.' represents the
dot product operator, the `x' represents the cross product operator,
and abs() is the absolute value function.

[Gems II] pp. 170-171:
"Area of Planar Polygons and Volume of Polyhedra", Ronald N. Goldman.
Автор: DELICEocean
Дата сообщения: 14.02.2010 09:47
Спасибо.думаю мне это поможет.Помогите пжлста еще задать минимальным способом 6-угольник через класс(возможно через центр окружности и 1вершину?!),описать функцию поворота и перемещения.все через класс

Страницы: 1

Предыдущая тема: Отследить снятие защиты листа


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.