Генерация и размещение случайных точек внутри круга - PullRequest
1 голос
/ 19 июня 2019

У меня есть задача, в которой я должен создать круг и нарисовать в нем несколько случайных точек.Я новичок в Python и библиотеки Python.Мне нужны некоторые предложения по поводу другого программного обеспечения или пакетов, которые могут помочь мне с моей задачей.

Я видел несколько видео на YouTube, но они не относились к моей теме.Вот код, который я видел в руководстве по созданию круга:

from graphics import *

def main():
        win = GraphWin("my window",500,500)
        pt = Point(250,250)
        win.setBackground(color_rgb(255,255,255))
        cir = Circle(pt,50)
        cir.draw(win)
        win.getMouse()
        win.close()
main()

Могу ли я продолжить работу с этим классом графики, чтобы завершить свою задачу?Если нет, то, пожалуйста, предложите хорошую библиотеку или программное обеспечение.

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

Вы можете использовать tkinter и виджет canvas.

В следующем примере на холсте отображается круг с центром в 200, 200.При щелчке мыши рассчитывается расстояние от центра, и если оно меньше радиуса, на холсте рисуется точка.

import tkinter as tk


def distance_to_center(x, y):
    return ((x-200)**2 + (y-200)**2)**0.5

def place_point(e):
    if distance_to_center(e.x, e.y) < 100:
        canvas.create_oval(e.x-2, e.y-2, e.x+2, e.y+2)


root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.create_oval(100, 100, 300, 300)
canvas.pack()

canvas.bind('<1>', place_point)

root.mainloop()
0 голосов
/ 22 июня 2019

Вот мое переопределение примера tkinter в @ ReblochonMasque с использованием графики черепах:

import turtle

LARGE_RADIUS, SMALL_DIAMETER = 100, 4

def place_point(x, y):
    turtle.goto(x, y)

    if turtle.distance(0, 0) < LARGE_RADIUS:
        turtle.dot(SMALL_DIAMETER)

turtle.setup(width=400, height=400)

turtle.hideturtle()
turtle.speed('fastest')
turtle.penup()
turtle.sety(-LARGE_RADIUS)  # center circle at (0, 0)
turtle.pendown()
turtle.circle(LARGE_RADIUS)
turtle.penup()

turtle.onscreenclick(place_point)
turtle.mainloop()

Хотя, как и в Zelle graphics.py, графика черепах реализована поверх tkinter, она использует другую систему координат. С точки зрения сложности и возможностей:

Zelle graphics.py < turtle < tkinter

Если вам кажется, что tkinter слишком сложен для ваших нужд, а Zelle graphics.py недостаточно, рассмотрите графику черепах, которая, как и tkinter, поставляется с Python.

Могу ли я продолжить работу с этим классом графики для выполнения своей задачи?

Возможно. Вот пример следующего шага, с которого вы остановились:

from graphics import *

WIDTH, HEIGHT = 500, 500
LARGE_RADIUS, SMALL_RADIUS = 50, 2
CENTER = Point(WIDTH/2, HEIGHT/2)

def distance_to_center(point):
    return ((point.getX() - CENTER.getX())**2 + (point.getY()- CENTER.getY())**2) ** 0.5

win = GraphWin("My Window", WIDTH, HEIGHT)
circle = Circle(CENTER, LARGE_RADIUS)
circle.draw(win)

while True:
    point = win.getMouse()

    if distance_to_center(point) < LARGE_RADIUS:
        dot = Circle(point, SMALL_RADIUS)
        dot.draw(win)
...