Найти - Пользователи
Полная версия: Нужна помощь с задачкой
Начало » Центр помощи » Нужна помощь с задачкой
1
rs5630
Нужна помощь со следующей задачкой. 1) В квадрат 100*100 вписать n окружностей со случайным радиусом и координатами, так чтобы окружности не пересекались и не вылезали за пределы поля. 2) В каждую окружность вписать стрелку, повернутую на случайный угол от 0 до 360 гр.

1-ую часть написал, но в функции proverka, Pyscripter ругается на строчку:

if sqrt((x[i] - x[i+1])**2 + (y[i] - y[i+1])**2) > r[i] + r[i+1]:

Также вопрос со 2-ым пунктом, можно ли как-нибудь в окружности вписать стрелки и повернуть их на угол?

Код для 1-ого пункта:

import matplotlib.pyplot as plt
import random
from math import sqrt
k = 100  # число прогонов
n = 10  # нужное чилсо окружностей
x = [0]*k
y = [0]*k
r = [0]*k
def proverka():
    for i in range(k+1):
        if sqrt((x[i] - x[i+1])**2 + (y[i] - y[i+1])**2) > r[i] + r[i+1]:
            True
        else:
            False
def main():
    ii = 0
    for i in range(k):
        x[i] = random.uniform(0,100)
        y[i] = random.uniform(0,100)
        r[i] = random.uniform(1,15)
        if x[i]+r[i]-100 <= 0 and y[i]+r[i]-100 <= 0 and r[i]-x[i] <= 0 and r[i]-y[i] <= 0:
                if  proverka():
                    circle=plt.Circle((x[i],y[i]),r[i],color='black',fill=False)
                    fig = plt.gcf()
                    fig.gca().add_artist(circle)
                    ii = ii + 1
                if ii == n:
                    break
    plt.axis([0,100,0,100])
    plt.show()
if __name__ == '__main__':
    main()
terabayt
import matplotlib.pyplot as plt
import random
from math import sqrt, sin, cos
n = 10
def proverka(c, x, y, r):
    for i in c:
        if sqrt((i[0] - x)**2 + (i[1] - y)**2) <= i[2] + r: return False
    return True
            
def main():
    c = []
    while len(c) < n:
        x, y = random.uniform(3,93), random.uniform(3,93)
        r = min(x, y, 100-x, 100-y)
        r = random.uniform(3, 15 if r > 15 else r)
        if proverka(c, x, y, r):
            c += [[x, y, r]]
            plt.gcf().gca().add_artist(plt.Circle((x,y),r,color='black',fill=False))
            a = random.uniform(1,360)
            plt.arrow(x, y, r*sin(a), r*cos(a), width = 0.06, edgecolor = 'black', facecolor = 'black', length_includes_head = True)
    plt.axis([0,100,0,100])
    plt.show()
if __name__ == '__main__':
    main()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB