ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL.35 두점 사이의 거리 구하기
    TIL 2020. 11. 12. 20:47
    728x90

    ## 두점 사이 거리 구하기

    ## 클래스를 이용하여 2차원 평면의 x, y 점을 구현하고 이 두 점 사이의 거리를 구해보자.

     

    class Point2D:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    
    p1 = Point2D(30, 20)
    
    p2 = Point2D(60, 50)
    
    
    print('p1 {} {}'.format(p1.x, p1.y))
    # p1 30 20
    
    print('p2 {} {}'.format(p2.x, p2.y))
    # p2 60 50

     

    ## 아래 p1 과 p2를 2차원 평면상에 표현하면 아래와 같다.



    ## 두점 사이의 거리를 구하기 위해선 피타고라스의 정의를 이용한다.

    # a2 + b2 = c2

    ## 따라서, a 와 b 의 길이를 구해야한다.

    a = p2.x - p1.x 
    b = p2.y - p1.y
    
    print(a) 
    # 30
    print(b) 
    # 30

    ## 해당 문제에서는 a가 -가 되는 것을 고려하지 않아도 된다. 제곱을해서 어짜피 부호가 +가 되기때문이다.

     

    ## 파이썬에서 루트 구현하기

    # math 모듈의 sqrt 함수를 사용하면 편리합니다. sqrt는 제곱근을 뜻하는 square root에서 따옴.

    # math.sqrt(값)

    # sprt 함수는 n의 제곱근을 반환하며, 음수가 나올 경우 error가 발생한다.

    import math
    
    class Point2D:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    p1 = Point2D(x=30, y=20) # 점1
    
    p2 = Point2D(x=60, y=50) # 점2
    
    a = p2.x - p1.x # 선 a의 길이
    
    b = p2.y - p1.y # 선 b의 길이
    
    c = math.sqrt((a * a) + (b * b)) # (a * a) + (b * b)의 제곱근을 구함
    
    print(c) 
    # 42.42640687119285

     

     

    ## 위식에서 a2, b2 표현하는 방법을 알아보자. ##

    ## 먼저 제곱근을 구하는 math.sqrt(a2 + b2)을 표현해햐한다.

    ## 방법 1. a*a + b*b

    ## 방법 2. a**2 + b**2 (거듭제곱 연산자 ** 사용)

    c = math.sqrt((a ** 2) + (b ** 2))

    ## 방법 3. 거듭제곱(power)을 구하는 pow 함수를 사용해도 됩니다(math 모듈)// math.pow(값, 지수)

    c = math.sqrt(math.pow(a, 2) + math.pow(b, 2))

     


    ## 절대값 함수 알아보기

    # 내장 함수 abs 또는 math 모듈의 fabs 함수를 사용하면 양수 또는 음수를 절댓값(absolute value)으로 만들 수 있다.

     

    ## abs(값)

    # 정수는 절댓값을 정수로 반환, 실수는 절댓값을 실수로 반환

    g = 10 - 50
    
    print(abs(g))
    # 40

    ## math.fabs(값)

    # 절댓값을 실수로 반환

    g = 10 - 50
    
    print(math.fabs(g))
    # 40.0

    ## namedtuple 함수 사용하기

    # 파이썬에서는 각 요소에 이름을 지정해 줄 수 있는 튜플인 namedtuple을 제공합니다( collections 모듈)

     

    # namedtuple을 사용하여 두 점의 거리를 구하기

    import math
    import collections
     
    Point2D = collections.namedtuple('Point2D', ['x', 'y'])    # namedtuple로 점 표현
     
    p1 = Point2D(x=30, y=20)    # 점1
    p2 = Point2D(x=60, y=50)    # 점2
     
    a = p1.x - p2.x    # 선 a의 길이
    b = p1.y - p2.y    # 선 b의 길이
     
    c = math.sqrt((a * a) + (b * b))
    print(c)    # 42.42640687119285
    728x90
Designed by Tistory.