获取两点之间的距离

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)。