Определить класс Окружность. Реализовать проверку пересечения с другой окружностью в виде метода. Переопределить метод сравнения с учетом радиуса

Создал класс окружности , вроде правмильно написал сравнение двух объектов класса, но я не знаю как написать сравнение двух объектов одного класса в методе этого класса

import math
class Circle:
    def __init__(self,x,y,radius):
        self.x = x
        self.y = y
        self.radius = radius
cir1 = Circle(3,5,2)
cir2 = Circle(7,8,2)
if cir1.x == cir2.x:
    if cir1.radius + cir2.radius > abs(cir1.y - cir2.y):
        print('Окружности пересекаются')
    else:
        print('Окружности не пересекаются')
elif cir1.y == cir2.y:
    if cir1.radius + cir2.radius > abs(cir1.x - cir2.x):
        print('Окружности пересекаются')
    else:
        print('Окружности не пересекаются')
else:
    if (cir1.radius + cir2.radius)**2 > abs((cir1.x - cir2.x)**2 - (cir1.y - cir2.y)**2):
         print('Окружности пересекаются')
    else:
        print('Окружности не пересекаются')

Как реализовать метод и переопределить его , не знаю , нигде по этому поводу ничего не нахожу, и сам додуматься не могу.


Ответы (3 шт):

Автор решения: DGDays

Вот рабочий пример:

import math
class Circle:
    def __init__(self,x,y,radius):
        self.x = x
        self.y = y
        self.radius = radius
    def persechenie(cir1,cir2):
        if cir1.x == cir2.x:
            if cir1.radius + cir2.radius > abs(cir1.y - cir2.y):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')
        elif cir1.y == cir2.y:
            if cir1.radius + cir2.radius > abs(cir1.x - cir2.x):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')
        else:
            if (cir1.radius + cir2.radius)**2 > abs((cir1.x - cir2.x)**2 - (cir1.y - cir2.y)**2):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')

cir1 = Circle(3,5,2)
cir2 = Circle(7,8,2)
Circle.persechenie(cir1,cir2)

Надеюсь я правильно понял ваш вопрос


Вот ещё один вариант, но тут надо вписывать все данные в один вызов класса:

import math
class Circle:
    def __init__(self,x1,y1,radius1,x2,y2,radius2):
        self.x1 = x1
        self.y1 = y1
        self.radius1 = radius1
        self.x2 = x2
        self.y2 = y2
        self.radius2 = radius2
        if self.x1 == self.x2:
            if self.radius1 + self.radius2 > abs(self.y1 - self.y2):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')
        elif self.y1 == self.y2:
            if self.radius1 + self.radius2 > abs(self.x1 - self.x2):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')
        else:
            if (self.radius1 + self.radius2)**2 > abs((self.x1 - self.x2)**2 - (self.y1 - self.y2)**2):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')


Circle(3,4,2,7,8,2)

Вот ещё один пример:

import math

class Circle:
    def __init__(self, x, y, radius):
        self.x = x
        self.y = y
        self.radius = radius

    def persechenie(self,cir):
        if self.x == cir.x:
            if self.radius + cir.radius > abs(self.y - cir.y):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')
        elif self.y == cir.y:
            if self.radius + cir.radius > abs(self.x - cir.x):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')
        else:
            if (self.radius + cir.radius) ** 2 > abs((self.x - cir.x) ** 2 - (self.y - cir.y) ** 2):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')


cir1 = Circle(3, 5, 2)
cir2 = Circle(7, 8, 2)
cir1.persechenie(cir2)
→ Ссылка
Автор решения: Zeka Farzali
import math


class Circle:
    def __init__(self, x, y, radius):
        self.x = x
        self.y = y
        self.radius = radius

    def persechenie(self,cir):
        if self.x == cir.x:
            if self.radius + cir.radius > abs(self.y - cir.y):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')
        elif self.y == cir.y:
            if self.radius + cir.radius > abs(self.x - cir.x):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')
        else:
            if (self.radius + cir.radius) ** 2 > abs((self.x - cir.x) ** 2 - (self.y - cir.y) ** 2):
                print('Окружности пересекаются')
            else:
                print('Окружности не пересекаются')


cir1 = Circle(3, 5, 2)
cir = Circle(7, 8, 2)
cir1.persechenie(cir)
→ Ссылка
Автор решения: Юрий

Квадрат гипотенузы равен сумме квадратов катетов!!! А у Вас разность.

if (self.radius + cir.radius) ** 2 > abs((self.x - cir.x) ** 2 - (self.y - cir.y) ** 2):

→ Ссылка