#include<iostream>
#include<cmath>
using namespace std;
class Point{
private:
int x;
int y;
public:
Point(){
x=0;
y=0;
}
Point(int _x,int _y){
x=_x;
y=_y;
}
void setX(int _x){
x=_x;
}
int getX(){
return x;
}
void setY(int _y){
y=_y;
}
int getY(){
return y;
}
void print(){
cout<<"("<<x<<","<<y<<")";
}
};
class Rectangle{
private:
Point *point1;
Point *point2;
Point *point3;
Point *point4;
public:
Rectangle(){
point1=NULL;
point2=NULL;
point3=NULL;
point4=NULL;
}
void setPoint1(Point *p){
point1=p;
}
void setPoint2(Point *p){
point2=p;
}
void setPoint3(Point *p){
point3=p;
}
void setPoint4(Point *p){
point4=p;
}
Point* getPoint1(){
return(point1);
}
Point* getPoint2(){
return(point2);
}
Point* getPoint3(){
return(point3);
}
Point* getPoint4(){
return(point4);
}
double area(){
double w=sqrt(pow(point1->getX()-point2->getX(),2)+pow(point1->getY()-point2->getY(),2));
double l=sqrt(pow(point1->getX()-point4->getX(),2)+pow(point1->getY()-point4->getY(),2));
return (w*l);
}
void print(){
point1->print();
cout<<" , ";
point2->print();
cout<<" , ";
point3->print();
cout<<" , ";
point4->print();
cout<<"\tArea is "<<area()<<endl;
}
};
void generateRect(Rectangle *rect,int n){
for(int i=0;i<n;i++){
cout<<"Enter top point of rectangle "<<(i+1)<<" : ";
int x;
cin>>x;
cout<<"Enter left point of rectangle "<<(i+1)<<" : ";
int y;
cin>>y;
cout<<"Enter width of rectangle "<<(i+1)<<" : ";
int w;
cin>>w;
cout<<"Enter length of rectangle "<<(i+1)<<" : ";
int l;
cin>>l;
Point *point1=new Point(x,y);
Point *point2=new Point(x+w,y);
Point *point3=new Point(x+w,y+l);
Point *point4=new Point(x,y+l);
rect[i].setPoint1(point1);
rect[i].setPoint2(point2);
rect[i].setPoint3(point3);
rect[i].setPoint4(point4);
cout<<"Rectangle "<<(i+1)<<" created\n\n";
}
}
void printAreaOfRectangle(Rectangle *rect,int n){
for(int i=0;i<n;i++){
cout<<"Area of Rectangle "<<(i+1)<<" is "<<rect[i].area()<<endl;
}
}
void printRectangles(Rectangle *rect,int n){
for(int i=0;i<n;i++){
rect[i].print();
}
}
void sort(Rectangle *rect,int n){
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (rect[j].area() > rect[j+1].area()) {
Rectangle tmp=rect[j];
rect[j]=rect[j+1];
rect[j+1]=tmp;
}
}
}
}
bool isOverlap(Rectangle rect1,Rectangle rect2){
Point *l1=rect1.getPoint4();
Point *r1=rect1.getPoint2();
Point *l2=rect2.getPoint4();
Point *r2=rect2.getPoint2();
if (l1->getX() == r1->getX() || l1->getY() == r2->getY() || l2->getX() == r2->getX() || l2->getY() == r2->getY()) {
return false;
}
if (l1->getX() >= r2->getX() || l2->getX() >= r1->getX()){
return false;
}
if (l1->getY() <= r2->getY() || l2->getY() <= r1->getY()){
return false;
}
return true;
}
void calcOverlaps(Rectangle *rect,int *lst,int n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i!=j){
if(isOverlap(rect[i],rect[j])==true){
lst[i]++;
}
}
}
}
}
int main(){
int n;
cout<<"Enter the value of N : ";
cin>>n;
Rectangle *rect=new Rectangle[n];
int *overlaps=new int[n];
for(int i=0;i<n;i++){
overlaps[i]=0;
}
generateRect(rect,n);
cout<<"Display rectangles---\n";
printRectangles(rect,n);
sort(rect,n);
cout<<"Display rectangles after sorting ---\n";
printRectangles(rect,n);
calcOverlaps(rect,overlaps,n);
for(int i=0;i<n;i++){
cout<<"Number of overlaps of rectangle "<<(i+1)<<" is "<<overlaps[i]<<endl;
}
return 0;
}
Comments
Leave a comment