-
TIL.35 두점 사이의 거리 구하기TIL 2020. 11. 12. 20:47728x90
## 두점 사이 거리 구하기
## 클래스를 이용하여 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'TIL' 카테고리의 다른 글
TIL.37 예외처리하기(try, except) (0) 2020.11.14 TIL.36 selenium을 이용한 이미지 크롤링 자동화 (2) 2020.11.13 TIL.34 클래스 상속(오버라이딩 및 추상클래스) (0) 2020.11.11 TIL.33 클래스 상속(기반 클래스 및 파생클래스) (0) 2020.11.10 TIL.32 클래스의 속성과 메서드 (0) 2020.11.09