Gizem Tepecik
Gizem Tepecik

Reputation: 11

check whether two circle touch each other externally and only at one point

i need to find out whether two circles which are c1 and c2 touch each other externally and at only one point by using Circle class. I created method which is touches. The method should return a boolean value and it needs to be called like this c1.touches(c2)

this formula to check circles touch or intersect with each other formula

this is my code

import math

class Circle:

    def __init__(self, x, y, r):
        self.x = x
        self.y = y
        self.r = r

    def touches(self):

        dist_between_centers = math.sqrt((self.c1.x - self.c2.x)^(2 + (self.c1.y - self.c2.y)^2))
        if dist_between_centers == (self.c1.r + self.c2.r):
            print("True")
        elif dist_between_centers > (self.c1.r + self.c2.r):
            print("False")
        else:
            print("False")


c1 = Circle(2,3,12)
c2 = Circle(15, 28, 10)
c1.touches(c2)

However i am getting error like this, TypeError: touches() takes 1 positional argument but 2 were given

Upvotes: 0

Views: 334

Answers (1)

Yevhen Bondar
Yevhen Bondar

Reputation: 4707

Seems like you mix up with usage self, c1 and c2 in def touches

You should pass c2 as parameter to def touches(circle). Inside method you should refer the first circle as self rather self.c1 and the second as circle rather than self.c2

Final code like this

import math

class Circle:

    def __init__(self, x, y, r):
        self.x = x
        self.y = y
        self.r = r

    def touches(self, circle):

        dist_between_centers = math.sqrt((self.x - circle.x)^2 + (self.y - circle.y)^2)
        if dist_between_centers == (self.r + circle.r):
            print("True")
        elif dist_between_centers > (self.r + circle.r):
            print("False")
        else:
            print("False")


c1 = Circle(2, 3, 12)
c2 = Circle(15, 28, 10)
c1.touches(c2)   

Upvotes: 2

Related Questions