티스토리 뷰

지난 시간에 이어서 구조체를 활용한 다각형 둘레 구하기를 해보자. 구현에 필요한 조건은 다음과 같다.

 

1. 2차원 정수 좌표(x, y)를 요소로 갖는 point struct를 선언

2. 각 꼭짓점의 좌표 배열과 꼭짓점의 개수를 담은 polygon struct를 선언

3. polygon 내 배열의 좌표를 순차적으로 접근하며 변의 길이를 구하는 함수 구현

 

point

struct point { double x, y; };

좌표는 정수로 받지만 변의 길이는 실수가 나올 수 있으니 double로 선언한다.

polygon

struct polygon { point points[20]; size_t vertex; };

최대 이십각형까지로 한다. vertex는 다각형의 꼭짓점의 개수를 의미한다.

 

두 좌표 간 거리

double diff(point const* a, point const* b) {
	double dx = a->x - b->x;
    double dy = a->y - b->y;
    return sqrt(dx * dx + dy * dy);
}

구조체의 메모리 주소로 요소에 접근하여 꼭짓점 사이의 거리를 구한다.

변의 합

double perimeter(polygon const* p) {
	double ans = diff(&p->points[0], &p->points[p->vertex - 1]);
    for (size_t i = 0; i < p->vertex - 1; i++) {
    	ans += diff(&p->points[i], &p->points[i + 1]);
    }
    return ans;
}

polygon struct에는 모든 데이터가 들어 있으니 메모리 주소만 인자로 받아오면 된다.  다각형의 마지막 좌표와 첫 번째 좌표를 잇는 변의 길이로 초기화해 주고, 이웃하는 변의 길이를 순차적으로 더해준다.

 

사용 예시

int main()
{
    using namespace std;
    polygon triangle = { .points = {{2, -2}, {-1, -2}, {-1, 2}}, .vertex = 3 };

    cout << perimeter(&triangle) << endl;
    return 0;
}

// output: 12

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함