获取两点之间的距离
get distance between two Points
所以我正在尝试检查一个点是否位于一个圆内。
我创建了这些 2 类:
class Point:
def __init__(self, x: int, y: int):
self.x = x
self.y = y
class Circle:
def __init__(self, center, radius):
self.center = Point(x,y)
self.radius = radius
现在我有这个功能了:
def in_circle(circle: Circle, point: Point) -> bool:
我的想法是,当点到圆心的距离大于半径时,它必须在圆外。
我现在的问题是如何获得 Point(x,y) 和中心之间的距离。逻辑上我认为我可以使用毕达哥拉斯来解决问题,但我的问题是我刚开始 Python 并且不太了解语法。
提前致谢。
Python 有一个 math.hypot
函数可以得到三角形的斜边:
import math
def distance(p1: Point, p2: Point) -> float:
return math.hypot(p2.x - p1.x, p2.y - p1.y)
或者,您可以自己使用 math.sqrt
和 **
求幂:
import math
def distance(p1: Point, p2: Point) -> float:
return math.sqrt((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2)
您可以做的是:
def in_circle(circle: Circle, point: Point) -> bool:
if ((point.y-circle.center.y)**2+(point.x-circle.center.x)**2)**(1/2)<=circle.radius:
return true
else:
return false
你可以使用勾股定理。
(x-center_x)^2 + (y - center_y)^2 < radius^2
如果它们的平方和小于半径的平方,center_x
是圆心的X坐标,center_y
是圆心的Y坐标。
然后你必须在 python if
.
中实现它
但是有一个问题,你取一个参数center
,它应该是一个元组或者列表,你应该把它解包给Point
的构造函数class, 使用 *
.
将 in_circle()
作为方法添加到 Circle
class
实施:
class Point:
def __init__(self, x: int, y: int):
self.x = x
self.y = y
class Circle:
def __init__(self, center, radius):
self.center = Point(*center)
self.radius = radius
def in_circle(self, point: Point) -> bool:
if (((point.x-self.center.x)**2+(point.y-self.center.y)**2)<self.radius**2):
return True
else:
return False
如果你想像那样调用,这里是另一个实现:
class Point:
def __init__(self, x: int, y: int):
self.x = x
self.y = y
class Circle:
def __init__(self, center: Point, radius):
self.center = center
self.radius = radius
def in_circle(circle: Circle, point: Point) -> bool:
if (((point.x-circle.center.x)**2+(point.y-circle.center.y)**2)<circle.radius**2):
return True
else:
return False
circle = Circle(Point(0, 0), 2)
print(in_circle(circle, Point(1, 1)))
def in_circle(circle: Circle, point: Point) -> bool:
# If Point is located inside circle, it will return True.
# Pythagoras Theorem
if (pow((point.x-circle.center.x),2)+pow((point.y-circle.center.y),2))<pow((circle.radius),2):
return True
# If Piont is not located inside circle
return False
pow(x,y) 函数returns x 的 y 次方值 (x^y)。
所以我正在尝试检查一个点是否位于一个圆内。 我创建了这些 2 类:
class Point:
def __init__(self, x: int, y: int):
self.x = x
self.y = y
class Circle:
def __init__(self, center, radius):
self.center = Point(x,y)
self.radius = radius
现在我有这个功能了:
def in_circle(circle: Circle, point: Point) -> bool:
我的想法是,当点到圆心的距离大于半径时,它必须在圆外。 我现在的问题是如何获得 Point(x,y) 和中心之间的距离。逻辑上我认为我可以使用毕达哥拉斯来解决问题,但我的问题是我刚开始 Python 并且不太了解语法。 提前致谢。
Python 有一个 math.hypot
函数可以得到三角形的斜边:
import math
def distance(p1: Point, p2: Point) -> float:
return math.hypot(p2.x - p1.x, p2.y - p1.y)
或者,您可以自己使用 math.sqrt
和 **
求幂:
import math
def distance(p1: Point, p2: Point) -> float:
return math.sqrt((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2)
您可以做的是:
def in_circle(circle: Circle, point: Point) -> bool:
if ((point.y-circle.center.y)**2+(point.x-circle.center.x)**2)**(1/2)<=circle.radius:
return true
else:
return false
你可以使用勾股定理。
(x-center_x)^2 + (y - center_y)^2 < radius^2
如果它们的平方和小于半径的平方,center_x
是圆心的X坐标,center_y
是圆心的Y坐标。
然后你必须在 python if
.
但是有一个问题,你取一个参数
center
,它应该是一个元组或者列表,你应该把它解包给Point
的构造函数class, 使用*
.将
in_circle()
作为方法添加到Circle
class
实施:
class Point:
def __init__(self, x: int, y: int):
self.x = x
self.y = y
class Circle:
def __init__(self, center, radius):
self.center = Point(*center)
self.radius = radius
def in_circle(self, point: Point) -> bool:
if (((point.x-self.center.x)**2+(point.y-self.center.y)**2)<self.radius**2):
return True
else:
return False
如果你想像那样调用,这里是另一个实现:
class Point:
def __init__(self, x: int, y: int):
self.x = x
self.y = y
class Circle:
def __init__(self, center: Point, radius):
self.center = center
self.radius = radius
def in_circle(circle: Circle, point: Point) -> bool:
if (((point.x-circle.center.x)**2+(point.y-circle.center.y)**2)<circle.radius**2):
return True
else:
return False
circle = Circle(Point(0, 0), 2)
print(in_circle(circle, Point(1, 1)))
def in_circle(circle: Circle, point: Point) -> bool:
# If Point is located inside circle, it will return True.
# Pythagoras Theorem
if (pow((point.x-circle.center.x),2)+pow((point.y-circle.center.y),2))<pow((circle.radius),2):
return True
# If Piont is not located inside circle
return False
pow(x,y) 函数returns x 的 y 次方值 (x^y)。