Помогите пожалуйста, кому не сложно! Нужно определить класс многоугольник. Для него определить конструктор по умолчанию, конструктор копирования и конструктор инициализации. (Polygon (Point & points [], int n)) Опр. операцию "[]" для доступа к вершинам многоугольника , опрератор "<<" для вывода в поток координат вершин многоугольника, операцию приведения типа к float, которая возвращает периметр многоугольника. Я понимаю что задача не совсем простая но буду благодарна за любую помощь!
» Класс многоугольник на С++
Вот, например, реализация класса по вашему описанию.
Компилировал компиляторами 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
Компилировал компиляторами 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
Ой, спасибо огромное обоим за помощь, тут еще и комментари)) Мы правда пишем в Code Gear но думаю проблем не будет)
Увидел код для описания класса многоугольник.Помогите пожалуйста дополнить его функцией для нахождения площади и рисования на форме(Просто соединить точки через LineTo?).Буду преогромно блогадарен за помощь
Цитата:
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.
Спасибо.думаю мне это поможет.Помогите пжлста еще задать минимальным способом 6-угольник через класс(возможно через центр окружности и 1вершину?!),описать функцию поворота и перемещения.все через класс
Страницы: 1
Предыдущая тема: Отследить снятие защиты листа
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.