如何使用Python Turtle判断两个圆是否相交并实现绘制验证
实现逻辑说明
- 先做相交判定:计算两个圆心的欧氏距离,和两个半径的和、半径差的绝对值对比即可得出结果
- Turtle绘制逻辑:移动到对应圆心正下方、距离为半径长度的位置,从该点画圆即可(Turtle的
circle()方法默认圆心在海龟左侧半径距离的位置,调整初始绘制位置后刚好可以让目标坐标成为圆心) - 输入直接用内置的
input()函数实现,转换为数值类型即可,逻辑简单好理解
完整可运行代码
import turtle import math # 1. 输入第一个圆的参数 x1 = float(input("请输入第一个圆的圆心x坐标:")) y1 = float(input("请输入第一个圆的圆心y坐标:")) r1 = float(input("请输入第一个圆的半径:")) # 2. 输入第二个圆的参数 x2 = float(input("请输入第二个圆的圆心x坐标:")) y2 = float(input("请输入第二个圆的圆心y坐标:")) r2 = float(input("请输入第二个圆的半径:")) # 3. 判定两个圆是否相交 # 计算两个圆心的欧氏距离 distance = math.sqrt((x1 - x2)**2 + (y1 - y2)**2) # 如果需要严格相交(排除相切的情况),把下面判定条件的>=改成>、<=改成<即可 if distance > r1 + r2: result = "两个圆外离,不相交" elif distance < abs(r1 - r2): result = "两个圆内含,不相交" else: result = "两个圆相交(包含外切、内切的相切情况)" # 控制台输出判定结果 print(result) # 4. 用Turtle绘制两个圆 t = turtle.Turtle() t.speed(2) # 控制绘制速度,数值越大绘制越快 # 绘制第一个圆 t.penup() t.goto(x1, y1 - r1) # 移动到第一个圆圆心正下方的绘制起点 t.pendown() t.circle(r1) # 绘制第二个圆 t.penup() t.goto(x2, y2 - r2) # 移动到第二个圆圆心正下方的绘制起点 t.pendown() t.circle(r2) # 在画布左上角显示判定结果 t.penup() t.goto(-turtle.window_width()//2 + 20, turtle.window_height()//2 - 40) t.pendown() t.write(result, font=("微软雅黑", 14, "normal")) # 保持绘制窗口不自动关闭,点击窗口即可关闭 turtle.done()
运行说明
- 运行代码后先在控制台按提示依次输入两个圆的参数,输入完成后会自动弹出Turtle绘制窗口
- 相交判定结果会同时在控制台和Turtle窗口左上角显示
- 所有逻辑都加了注释,你可以修改参数测试外离、内含、相交、相切等不同场景,对应看代码的判定逻辑
内容的提问来源于stack exchange,提问作者Lucas Gago
相关产品推荐
相关产品推荐

