热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用python生成随机矩形_如何在我的海龟圆和矩形内生成随机点?

在矩形内部生成随机点,很简单。您只需生成一个随机的x坐标,范围从原点位置(-75,在您的例子中),直到它的结束,

在矩形内部生成随机点,很简单。您只需生成一个随机的x坐标,范围从原点位置(-75,在您的例子中),直到它的结束,这将是原点+宽度(-75+100)。

然后,对y坐标做同样的处理。然后,移动到生成的位置并绘制一个点。

我的代码:# draw random dots inside of rectangle

# @param origin: is a touple, containing `x` and `y` coordinates

# @param number_of_dots: int, number of dots

# @param size: is a touple, containing `width` and `height` of rectangle

def draw_random_dots_in_rectangle(origin, number_of_dots, size=RECTANGLE_SIZE):

# loops number_of_dots times

for _ in range(number_of_dots):

# generate a random position inside of given rectangle

# using min/max, because of possible negative coordinates

# weakness - does also place dots on the edges of the rectangle

rand_x = randint(min(origin[0], origin[0] + size[0]), max(origin[0], origin[0] + size[0]))

rand_y = randint(min(origin[1], origin[1] + size[1]), max(origin[1], origin[1] + size[1]))

# moves to the random position

move_turtle_to((rand_x, rand_y))

# creates a dot

t.dot(DOT_DIAMETER)

但是,对circle做同样的事情是不可能的。它要复杂得多,并且需要analytic geometry的知识。在您的例子中,您需要equation of circles。用它你可以计算,如果生成的位置是,或不在给定圆内。在

我的代码:

^{pr2}$

从本质上讲,这一过程与以前相同,但有等式检验。

我希望这至少能帮上一点忙。我自己也曾多次努力弄清楚如何在计算机科学中做某些事情,而且很多时候我发现,解析几何是答案。所以我强烈建议你至少检查一下。

我的孔代码:#!/usr/bin/env python3

import turtle

from random import randint

RECTANGLE_SIZE = 60, 80

CIRCLE_RADIOUS = 10

DOT_DIAMETER = 3

t = turtle.Turtle() # turtle object

t.speed(0) # set the fastest drawing speed

# move turtle to position without drawing

# @param: position is a touple containing `x` and `y` coordinates

def move_turtle_to(position):

t.up() # equivalent to .penuo()

t.goto(position[0], position[1])

t.down() # equivalent to .pendown()

# draws a rectangle from given origin with given size

# @param origin: is a touple, containing `x` and `y` coordinates

# @param size: is a touple, containing `width` and `height` of rectangle

def draw_rectangle(origin, size=RECTANGLE_SIZE):

# movese to the origin

move_turtle_to(origin)

# simple way of drawing a rectangle

for i in range(4):

t.fd(size[i % 2])

t.left(90)

# draws a circle from given origin with given radious

# @param origin: is a touple, containing `x` and `y` coordinates

# @param radious: int, radious of circle

def draw_circle(origin, radius=CIRCLE_RADIOUS):

# moves to the origin

move_turtle_to(origin)

# draws the circle

t.circle(radius)

# Now to what you asked

# draw random dots inside of rectangle

# @param origin: is a touple, containing `x` and `y` coordinates

# @param number_of_dots: int, number of dots

# @param size: is a touple, containing `width` and `height` of rectangle

def draw_random_dots_in_rectangle(origin, number_of_dots, size=RECTANGLE_SIZE):

# loops number_of_dots times

for _ in range(number_of_dots):

# generate a random position inside of given rectangle

# using min/max, because of possible negative coordinates

# weakness - does also place dots on the edges of the rectangle

rand_x = randint(min(origin[0], origin[0] + size[0]), max(origin[0], origin[0] + size[0]))

rand_y = randint(min(origin[1], origin[1] + size[1]), max(origin[1], origin[1] + size[1]))

# moves to the random position

move_turtle_to((rand_x, rand_y))

# creates a dot

t.dot(DOT_DIAMETER)

# draw random dot inside of circle

# @param origin: is a touple, containing `x` and `y` coordinates

# @param number_of_dots: int, number of dots

# @param radious: int, radious of circle

def draw_random_dots_in_circle(origin, number_of_dots, radius=CIRCLE_RADIOUS):

# loops number_of_dots times

for _ in range(number_of_dots):

# loops until finds position inside of the circle

while True:

# generates random x position

# subtracting radious and adding double of radious to simulate bounds of square

# which would be large enought to fit the circle

rand_x = randint(min(origin[0] - radius, origin[0] + radius * 2),

max(origin[0] - radius, origin[0] + radius * 2))

# generated random y position

# adding double of radious to sumulate bounds of square

# which would be large enought to fit the circle

rand_y = randint(min(origin[1], origin[1] + radius * 2),

max(origin[1], origin[1] + radius * 2))

# test if the generated position is in the radious

if (origin[0] - rand_x) ** 2 + (origin[1] + radius - rand_y) ** 2

# if it is, move to the position

move_turtle_to((rand_x, rand_y))

# draw dot

t.dot(DOT_DIAMETER)

# break out from the infinite loops

break

# example code

draw_rectangle((0, 0))

draw_random_dots_in_rectangle((0, 0), 50)

draw_circle((-20, -20))

draw_random_dots_in_circle((-20, -20), 20)

input()



推荐阅读
author-avatar
豪哥帅366
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有