Python 如何检查圆是否重叠或在第二个圆内,以及点是否在第二个圆内?

Python 如何检查圆是否重叠或在第二个圆内,以及点是否在第二个圆内?,python,Python,设计并实现一个名为Circle2D的类,该类包含: 指定圆心的两个名为x和y的数据字段 使用get/set方法创建数据字段半径。方法getRadius()返回 半径的值,而setRadius()为半径设置新值 创建具有指定x、y和半径的圆的构造函数(即init方法)。对所有参数使用默认值0 一种str方法,返回一个字符串表示形式“圆心(x,y)和半径圆”,其中x,y和半径将替换为圆心和半径的实际值。例如,在圆心为(2,3)且半径为10的圆对象上,此方法将返回字符串“圆心为(2,3)且半径为10的

设计并实现一个名为Circle2D的类,该类包含:

指定圆心的两个名为x和y的数据字段

使用get/set方法创建数据字段半径。方法getRadius()返回 半径的值,而setRadius()为半径设置新值

创建具有指定x、y和半径的圆的构造函数(即init方法)。对所有参数使用默认值0

一种str方法,返回一个字符串表示形式“圆心(x,y)和半径圆”,其中x,y和半径将替换为圆心和半径的实际值。例如,在圆心为(2,3)且半径为10的圆对象上,此方法将返回字符串“圆心为(2,3)且半径为10的圆”

A getX()和getY()方法

返回圆的面积的方法getArea()

返回圆周长的方法getPermiture()

一种包含点(x,y)的方法,如果指定的点(x,y)为 在这个圈子里

方法包含(circle2D),如果指定的圆在此圆内,该方法将返回True

如果指定的圆与此圆重叠,则返回True的方法重叠(circle2D)

实现uContains(self,anotherCircle)方法,如果此圆中包含另一个圆,该方法将返回True。_uu包含u(self,item)特殊方法用于实现中的成员资格测试操作符。如果项在self中,则返回true,否则返回false

实施lt uu、le uu、gt uu、ge uu、eq uu和ne u方法,根据两个圆的半径对其进行比较

到目前为止,我的代码是:

import math


class Circle2D(object):

def __init__(self, x = 0, y = 0, r = 0):
    """Creates a circle with specified x, y, and radius."""
    self._x = x
    self._y = y
    self._r = r

def __str__(self):
    """Returns the string representation."""
    return  ("Circle with center" + "(" + "%0.0f" % (self._x) + ", "
    + "%0.0f" % (self._y) + ")" + "and radius " + "%0.0f" % (self._r))

def getX(self):
    """Returns the X value."""
    return self._x

def getY(self):
    """Returns the Y value."""
    return self._y

def getRadius(self):
    """Returns the value of the radius"""
    return self._r

def setRadius(self):
    """Sets a new value for the radius."""
    pass

def getArea(self):
    """Returns the area of the circle."""
    return math.pi * self._r * self._r

def getPerimeter(self):
    """Returns the perimeter of the circle."""
    return 2 * math.pi * self._r

def containsPoint(x,y):
    """Returns True if the specified point (x, y) is inside this circle."""
    if (self._x)^2 + (self._y)^2 <= (self._r)^2:
        return True
    else:
        return False

def contains(circle2D):
    pass

def overlaps(circle2D):
    pass

def main():
x = float(input("Enter x coordinate for the center of circle 1: "))
y = float(input("Enter y coordinate for the center of circle 1: "))
r = float(input("Enter the radius of circle 1: "))
c1 = Circle2D(x, y, r)
print(c1)

x = float(input("\nEnter x coordinate for the center of circle 2: "))
y = float(input("Enter y coordinate for the center of circle 2: "))
r = float(input("Enter the radius of circle 2: "))
c2 = Circle2D(x, y, r)
print(c2)

#Test the getArea() and getPerimeter() methods
print("\nArea of a %s is %0.2f" % (c1, c1.getArea()))
print("Perimeter of a %s is %0.2f" % (c1, c1.getPerimeter()))

print("\nArea of a %s is %0.2f" % (c2, c2.getArea()))
print("Perimeter of a %s is %0.2f" % (c2, c2.getPerimeter()))
#-------------------

#Test containsPoint() method
print("\nResult of c1.containsPoint(c2.getX( ), c2.getY( )) is",
      c1.containsPoint(c2.getX( ), c2.getY( )))

#Test contains() method
if c1.contains(c2):
    print("\n%s contains %s" % (c1, c2))
else: 
    print("\n%s does not contain %s" % (c1, c2))

print("\nResult of c2.contains(c1) is",
       c2.contains(c1))
#----------------

#Test overlap() method
if c1.overlaps(c2):
    print("\n%s overlaps with %s" % (c1,c2))
else: 
    print("\n%s does not overlap with %s" % (c1,c2))
#--------------

#Test overloaded in operator                                     
print("\nResult of c2 in c1 is", c2 in c1)                     

#Testing overloaded comparison and equality operators
#Something similar to this
print("\nTesting overloaded comparison operators...")
print("c1 == c2?", c1 == c2)
print("c1 != c2?", c1 != c2)
print("c1 < c2?", c1 < c2)
print("c1 <= c2?", c1 <= c2)
print("c1 > c2?", c1 > c2)
print("c1 >= c2?", c1 >= c2)
print('c1 == "Hello"?', c1 == "Hello")
print('c1 != "Hello"?', c1 != "Hello")

main()
导入数学
类Circle2D(对象):
定义初始化(self,x=0,y=0,r=0):
“”“创建具有指定x、y和半径的圆。”“”
自我。x=x
自我。_y=y
自我。_r=r
定义(自我):
“”“返回字符串表示形式。”“”
返回(“以“+”为中心的圆”(“+%0.0f”%(自)+”,”
+%0.0f“%(自):
def getX(自我):
“”“返回X值。”“”
返回自我
def getY(自我):
“”“返回Y值。”“”
回归自我
def getRadius(自):
“”“返回半径的值”“”
返回自我
def设置半径(自):
“”“为半径设置一个新值。”“”
通过
def getArea(自):
“”“返回圆的面积。”“”
返回math.pi*self.\r*self.\r
def GetPermission(自我):
“”“返回圆的周长。”“”
返回2*math.pi*self.\u r
def containsPoint(x,y):
“”“如果指定的点(x,y)在此圆内,则返回True。”“”
如果(自我)^2+(自我)^2 c2)
打印(“c1>=c2?”,c1>=c2)
打印('c1==“你好”?,c1==“你好”)
打印('c1!=“你好”?,c1!=“你好”)
main()
现在,我主要关注containsPoint、contains和overlaps方法。我尝试了containsPoint,但得到了一个错误,该错误表示:“containsPoint()接受2个位置参数,但给出了3个”

任何帮助都将不胜感激


-谢谢

containsPoint
是一种方法,因此需要将
self
作为其第一个参数:

def containsPoint(self, x, y):
你显然知道,如果你需要知道圆心和点之间的距离,你需要使用毕达哥拉斯定理。在这种情况下,边将是点坐标和圆中心坐标的差异(即x轴和y轴的距离),您想要的距离将形成斜边:

dist^2 = (x - self._x)^2 + (y - self._y)^2 # Note: not valid Python code
请注意,由于减法结果是平方的,因此不需要考虑顺序(减法结果可以是负数,并且仍然会产生正确的结果)

如果该距离小于或等于半径,则该点位于圆内:

(x - self._x)^2 + (y - self._y)^2 <= self._r^2

(x-self.\ux)^2+(y-self.\uy)^2所以。。。您可以像
def containsPoint(self,x,y)
一样定义它,并像
c1一样使用它。containtsPoint(x,y)
其中
c1
被隐式传递为
self
。如果我们用一种简单(不是很准确,只是为了理解)的方式来解释:当您调用
c1.containtsPoint(x,y)时
所调用的实际上是-
Circle2D.containsPoint(self=c1,x,y)
。。。请参见三个参数。噢,哇!我都没注意到!非常感谢。那么,我如何才能找到第二个圆中是否包含一个圆,以及是否有一个圆重叠??这让我很困惑,我也补充了解释。