[C++] ALGOSPOT : DRAWRECT


이미지 11

사각형의 3가지 점을 받으면

3가지 X값과 Y값중 한개만 있는 값을 가지고 있는 좌표가 4번째 점의 좌표이다.
(5, 5) (5,7) (7 5) : (7, 7)

 

이전까진 C언어만 하다가

최근들어 C++를 한거라 연습좀 할 겸 객체지향적으로 작성하였는데

쓸데없이 길게 쓴 느낌이 없지 않아 있다.

#include <iostream>
using namespace std;

class Point{
    public:
        int x;
        int y;
        Point();
        void set(int a, int b);
};

Point :: Point(){
    x = 0;
    y = 0;
}

void Point::set(int a, int b){
    x = a;
    y = b;
}

class Rectangle{
    public:
        Point *p;
        Rectangle();
        ~Rectangle();
        void setPoint(int index, int x, int y);
        void procPoint();
        void printPoint(int index);
};

Rectangle::Rectangle(){
    p = new Point[4];
}

Rectangle::~Rectangle(){
    delete [] p;
}
    
void Rectangle::setPoint(int index, int x, int y){
    p[index].set(x, y);
}

void Rectangle::procPoint(){
    int x, y;
    int i, j, k;

    for(i=0;i<3;i++){
        j = (i==2) ? 0 : i+1;
        k = (j==2) ? 0 : j+1;
        
        if((p[i].x!=p[j].x) && (p[i].x!=p[k].x)){
            x = p[i].x;
        }


        if((p[i].y!=p[j].y) && (p[i].y!=p[k].y)){
            y = p[i].y;
        }
    }

    setPoint(3, x, y);
    printPoint(3);
}

void Rectangle::printPoint(int index){
    cout << p[index].x << " " << p[index].y << endl;
}

int main(){
    Rectangle *r;
    int t;

    cin >> t;
    r = new Rectangle[t];

    for(int i=0; i<t; i++){
        for(int j=0; j<3; j++){
            int x, y;
            cin >> x >> y;
            r[i].setPoint(j, x, y);
        }
    }
    
    for(int i=0; i<t; i++){
        r[i].procPoint();
    }

    delete [] r;
}