Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <algorithm> // для функции sin
- #define PI 3.14159265
- using namespace std;
- struct Point
- {
- float x;
- float y;
- };
- struct Figure
- { int count_Point;
- Point *Points = new Point[count_Point];
- };
- struct ArrayFigure
- {
- int count_Figure=0;
- Figure *Figures = new Figure[count_Figure];
- };
- template<typename T>
- T max_of_array(T *array)
- {
- int max=0;
- int size = sizeof(arr);
- for(int i=0;i<size;i++)
- {
- if (array[i]>array[max])
- max=i;
- }
- return array[max];
- }
- Point input_Point()
- {
- Point A;
- cout<<"Write x"<<endl;
- cin>>A.x;
- cout<<"Write y"<<endl;
- cin>>A.y;
- return A;
- }
- void print_Point(Point A)
- {
- cout<<"["<<A.x<<";"<<A.y<<"]"<<endl;
- }
- Figure input_Figure()
- {
- Figure A;
- cout<<"Write count of Point"<<endl;
- cin>>A.count_Point;
- for (int i = 0; i < A.count_Point; i++) {
- cout<<"Point "<<i+1<<":"<<endl;
- A.Points[i]=input_Point();
- }
- return A;
- }
- ArrayFigure input_ArrayFigure()
- {
- ArrayFigure A;
- cout<<"Write count of Figure"<<endl;
- cin>>A.count_Figure;
- for (int i = 0; i < A.count_Figure; i++) {
- cout<<"Figure "<<i+1<<":"<<endl;
- A.Figures[i]=input_Figure();
- }
- return A;
- }
- void print_ArrayFigure(ArrayFigure array)
- {
- for(int i =0;i<array.count_Figure;i++)
- print_Figure(array.Figures[i]);
- }
- void print_Figure(Figure A)
- {
- for(int i =0;i<A.count_Point;i++)
- print_Point(A.Points[i]);
- }
- void rotate(Figure a,int angle)
- {
- double x=0,y=0;
- for (int i = 0; i < a.count_Point; i++) {
- x=a.Points[i].x*cos(angle * PI / 180)-a.Points[i].y*sin(angle * PI / 180);
- y=a.Points[i].x*sin(angle * PI / 180)+a.Points[i].y*cos(angle * PI / 180);
- a.Points[i].x=x;
- a.Points[i].y=y;
- }
- cout<<"Rotate Figure"<<endl;
- print_Figure(a);
- }
- float distace(Point a,Point b)
- {
- return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2))
- }
- float *get_y_array_from_figure(Figure figure)
- {
- float *result = new float[figure.count_Point];
- for(int i;i<figure.count_Point;i++)
- {
- result[i]=figure.Points[i].y;
- }
- return result
- }
- float max_y_figure(Figure figure)
- {
- return max_of_array(get_y_array(figure))
- }
- Point search_top(ArrayFigure array)
- {
- float *tmp = new float[array.count_Figure];
- for(int i;i<array.count_Figure;i++)
- {
- tmp[i]=max_y_figure(array[i]);
- }
- Point max;
- max.x=0;
- max.y=max_of_array(tmp)
- return max;
- }
- float min_distance_from_figure(Figure figure,Point top)
- {
- float min=0
- for(int i=0;i<figure.count_Point;i++)
- {
- float tmp=distace(figure.Points[i],top);
- if(tmp<min)
- {
- min=tmp;
- }
- }
- return min;
- }
- void ArrayFigureSort(ArrayFigure array) // сортировка пузырьком
- {
- int length_array=array.count_Figure
- Figure temp; // временная переменная для хранения элемента массива
- bool exit = false; // болевая переменная для выхода из цикла, если массив отсортирован
- Point top = search_top(array)
- while (!exit) // пока массив не отсортирован
- {
- exit = true;
- for (int i = 0; i < (length_array - 1); i++) // внутренний цикл
- float a=min_distance_from_figure(array.Figures[i],top)
- float b=min_distance_from_figure(array.Figures[i+1],top)
- if (a < b) // сравниваем два соседних элемента
- {
- // выполняем перестановку элементов массива
- temp = array.Figures[i];
- array.Figures[i] = array.Figures[i + 1];
- array.Figures[i + 1] = temp;
- exit = false; // на очередной итерации была произведена перестановка элементов
- }
- }
- }
- int main(){
- ArrayFigure arr=input_ArrayFigure();
- print_ArrayFigure(arr);
- ArrayFigureSort(arr);
- print_ArrayFigure(arr);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement