본문 바로가기

코드이야기/R

[R프로그래밍] 헤론의 공식으로 삼각형의 넓이를 구하는 함수 정의하기

 

R은 통계분석, 수치계산, 그래픽에 특화된 프로그래밍 언어입니다. 기본적으로 제공하는 함수들 역시 다양합니다. 기본적으로 제공하는 함수가 없을 경우에는 사용자가 직접 함수를 만들어 문제를 해결할 수 있습니다. 모든 프로그래밍 언어는 이런 기능을 제공하고 각 언어마다 독특한 문법을 가지고 있습니다.


R프로그래밍에서 사용자 정의 함수를 작성하기 위한 문법을 살펴보고 헤론의 공식을 이용해 삼각형의 면적을 구하는 사용자 정의 함수를 작성해 보겠습니다.

R에서 함수를 정의하는 법

어떤 두 집합 X, Y에서 X의 각 원소에 Y의 원소가 하나씩만 대응할 때, 우리는 이것을 X에서 Y로의 함수라고 정의합니다. Y = 2X + 1라는 함수를 생각해 보겠습니다. X에 1을 대입하면 Y는 5가 됩니다. X에 어떤 값을 대입해도 그에 대응하는 Y의 값을 구할 수 있습니다. 즉 함수란 어떤 입력 값을 함수라는 처리과정에서 결과 값을 출력해 내는 것입니다.


R에서 이러한 함수를 정의하기 위해서는 함수명, 인수, 함수 처리 정의, 결과 값 반환이라는 과정이 필요합니다. R에서 함수정의를 위한 기본문법은 아래와 같습니다. 다만, 인수는 생략될 수 있습니다. 예를 들면, date()라는 함수는 인수가 없지만 현재 날짜와 시간을 표시합니다.


함수명 <- function(인수) {

    함수 처리 정의

    ...

    return(반환할 값)

}

헤론의 공식을 이용해 삼각형의 넓이를 구하는 함수 작성하기

밑변과 높이를 알고 있을 때 삼각형의 넓이를 구하는 식은 '밑변*높이/2'라는 것은 다들 잘 알고 계실겁니다. 만약, 밑변과 높이를 모르고 세 변의 길이만 알고 있다면 삼각형의 면적을 어떻게 구할 수 있을까요? '헤론의 공식'을 이용하면 됩니다. 먼저 헤론의 공식에 대해 알아보겠습니다.

 

<헤론의 공식>

길이가 각 a, b, c인 선분으로 이루어진 삼각형이 있을 때, 면적을 S라고 하면,

 

 

단, s = (a+b+c) / 2

 

직선으로 둘러싸인 도형은 아무리 복잡한 형태를 가지고 있더라도 반드시 삼각형으로 쪼개집니다. 이 공식을 사용하면 높이를 따로 구할 필요가 없기 때문에 실생활에서 유용하게 사용할 수 있습니다. 헤론의 공식과 관련한 자세한 내용은 위키피디아를 참조하시기 바랍니다.


이제 함수를 정의 하겠습니다. 함수명을 Heron이라고 정의합니다. 지난 포스팅에 설명하였듯이 R은 변수명에서 대소문자를 구분합니다.

Heron <- function(a, b, c) {        # Heron이라는 이름의 함수 정의
  s <- (a + b + c)/2               # 세 변의 합에 2를 나눈 값인 s를 정의
  S <- sqrt(s*(s-a)*(s-b)*(s-c))     # 삼각형의 면적을 계산
  return(S)                        # 계산된 삼각형의 면적을 반환
}

이제 이 함수를 사용해 몇가지 삼각형의 면적을 구해 보겠습니다.

> Heron(2, 3, 4)
[1] 2.904738
> Heron(10, 11, 12)
[1] 51.52123
> Heron(6, 6, 8)
[1] 17.88854

사용자 정의 함수 작성법만 알면, R에서 기본적으로 제공하는 함수와 기존지식을 활용해 어떤 함수라도 만들어 사용할 수 있습니다. 사진: zeevveez