生成随机点并将其放置在圆圈内
Generate and place random points inside a circle
我有一个任务,我应该创建一个圆并在其中绘制一些随机点。
我是 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()
我可以继续使用此图形 class 来完成我的任务吗?
如果没有,那么请推荐一个好的图书馆或 s/w。
您可以使用 tkinter
和 canvas
小部件。
以下示例在 canvas 上描绘了一个以 200、200 为中心的圆。单击鼠标,计算距中心的距离,如果小于半径,则在 canvas.
上绘制一个点
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()
这是我使用海龟图形重新实现的@ReblochonMasque 的 tkinter 示例 (+1):
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 不够用,请考虑 turtle graphics,它与 tkinter 一样,Python.
Can I continue with this graphics class to complete my task?
可能吧。这是您上次中断的下一步示例:
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)
我有一个任务,我应该创建一个圆并在其中绘制一些随机点。 我是 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()
我可以继续使用此图形 class 来完成我的任务吗? 如果没有,那么请推荐一个好的图书馆或 s/w。
您可以使用 tkinter
和 canvas
小部件。
以下示例在 canvas 上描绘了一个以 200、200 为中心的圆。单击鼠标,计算距中心的距离,如果小于半径,则在 canvas.
上绘制一个点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()
这是我使用海龟图形重新实现的@ReblochonMasque 的 tkinter 示例 (+1):
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 不够用,请考虑 turtle graphics,它与 tkinter 一样,Python.
Can I continue with this graphics class to complete my task?
可能吧。这是您上次中断的下一步示例:
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)