1

我正在尝试使用 Turtle Graphics 制作一个 Python 程序,该程序在一个矩形内绘制 2 个重叠的圆圈(如维恩图),并将随机点绘制到维恩图上。

我已经成功地做到了这一点,但现在我想让程序识别一个点是在一个圆圈中还是在维恩图的交点中。然后我想根据它们所在的区域更改点的颜色。

到目前为止,我为该程序所做的是列出变量、定义形状并创建一个 for 循环以随机生成点。

4

2 回答 2

1

turtle只是一个图形库 - 它不会跟踪您在屏幕上绘制的对象。因此,要计算给定点是否在您的维恩图圆圈之一内,您需要采取以下步骤:

  1. 调用时存储每个圆圈的坐标circle() (课程会很有帮助,但您可能还没有学过这些)
  2. 调用一个函数来测试该点是否在存储的圆坐标空间中。这将是对笛卡尔坐标的纯数学运算。@Tim 给出的链接(用于测试点是否在圆圈内的方程式)将帮助您实现这一目标。

第 1 步的一点指导:

当你画一个圆时,你有它的中心(当前海龟位置)和一个半径。从那里,获得该圆内的所有点只是几何(如果您无法得出公式,快速搜索将帮助您)。我建议您制作一个绘制维恩图圆的函数,以及一个返回圆内点的函数。像这样的东西:

def venn_circle(circle_color, circle_radius):
    """ Draws a colored circle, returns the points within. """
    turtle.color(circle_color)
    # <fill in: code to move, orient the turtle>
    center = turtle.position()
    # <fill in: code to draw the circle>
    return circle_coords(center, circle_radius)


def circle_coords(center, radius):
    """ Return the set of pixels within the circle. """
    raise NotImplementedError()

一个简短的说明 - 你永远不应该这样做from package import *。在某些情况下没关系,但通常只会导致麻烦。在我的示例代码中,我假设您已将此习惯用法替换为import turtle.

于 2012-08-21T10:42:53.867 回答
0

我有非常相似的任务,试图以简单的方式解决它:

import tkinter
import random

canvas = tkinter.Canvas(width = 300, height = 200, bg = "white")
canvas.pack()

n = 500

for i in range(n):
    x = random.randrange(0, 300)
    y = random.randrange(0, 200)
    bod = canvas.create_oval(x+3, y+3, x-3, y-3, fill = "black")
    if (x - 100)**2+(y - 100)**2 < 80**2:       #for dot in circle1 fill red
        canvas.itemconfig(bod, fill = "red")
    if (x - 180)**2+(y - 100)**2 < 90**2:       #for dot in circle2 fill blue
        canvas.itemconfig(bod, fill = "blue")
    if (x - 100)**2+(y - 100)**2 < 80**2 and (x - 180)**2+(y - 100)**2 < 90**2:
        canvas.itemconfig(bod, fill = "green")  #overlapping of circle1 and 2
于 2017-12-09T22:46:21.693 回答