2012-08-21 5 views
1

Я пытаюсь сделать программу Python с черепаховой графикой, которая рисует 2 круга, перекрывающихся (как диаграмма Венна) внутри прямоугольника, и наносит диаграмму случайных точек на диаграмму Венна.Как я могу заставить Черепаха узнать круг?

Я успешно сделал это, но теперь я хочу, чтобы программа распознала, находится ли точка в одном из кругов или на пересечении диаграммы Венна. Затем я хочу изменить цвет точек в зависимости от того, в каком регионе они находятся.

Что я сделал до сих пор для программы, перечислены переменные, определены фигуры и сделаны для цикла для случайного создания точек.

+1

[* Венна * схема] (http://en.wikipedia.org/wiki/Venn_diagram). –

+1

Возможный дубликат [Уравнение для тестирования, если точка находится внутри круга] (http://stackoverflow.com/questions/481144/equation-for-testing-if-a-point-is-inside-a-circle) –

+0

Добро пожаловать в StackOverflow! [«Что вы пробовали?»] (Http://whathaveyoutried.com) является общепринятой статьей здесь. Короче говоря, задавая свой вопрос, вы должны продемонстрировать, что вы приложили усилия для решения своей проблемы. В идеале у вас будет некоторый код для показа и конкретные проблемы с этим кодом. Если вы попытаетесь придерживаться этого, вы получите гораздо больше положительных отзывов! –

ответ

1

turtle - это просто графическая библиотека - она ​​не отслеживает объекты, которые вы нарисовали на экране. Таким образом, чтобы вычислить, если данная точка находится в одном из ваших диаграмм кругов Венна, вам необходимо выполнить следующие шаги:

  1. магазин координаты каждого круга, когда вы называете circle() (классы были бы полезны, но шансы вы еще не изучили их)
  2. Вызвать функцию, чтобы проверить, находится ли точка в сохраненном координатном пространстве круга. Это будет чисто математическая операция по декартовым координатам. Ссылка @Tim (Equation for testing if a point is inside a circle) поможет вам в этом.

мало указаний на шаге 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.

+0

Я взглянул на ссылку, и теперь у меня есть определение pythagorus, которое проверяет, как точки внутри: def in_circle_a (center_x, center_y, circle_radius, circle_x, circle_y): dist ** 2_a = (center_x - circle_x) ** 2 + (center_y - circle_y) ** 2 return dist ** 2_a <круг_радиус ** 2 Я просто не знаю, как хранить координаты каждого круга, и я попытался включить в него утверждения If, но я думаю, что мне нужно чтобы выяснить, шаг 1. – Hayden

+0

Извините за грязный комментарий. – Hayden

+0

Не беспокойтесь об этом! В будущем я предлагаю вам изменить свой вопрос и пинговать меня (или кого бы то ни было) с вашими изменениями. Я отредактировал свой ответ, чтобы помочь вам в этом.Дайте мне знать, если вы все еще застряли. –

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 
+0

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

Смежные вопросы