RandSquare/Votintsev-Alexey
RandSquare/alexejbag208
t1import randomt1import random
2import math2import math
3from math import sqrt3from math import sqrt
44
55
6def randsquare(a, b):6def randsquare(a, b):
7    def seach(a, b):7    def seach(a, b):
8        m = (((max(a[0], b[0]) - min(a[0], b[0]))**2 +8        m = (((max(a[0], b[0]) - min(a[0], b[0]))**2 +
9              (max(a[1], b[1]) - min(a[1], b[1]))**2)**(1/2)) / 29              (max(a[1], b[1]) - min(a[1], b[1]))**2)**(1/2)) / 2
10        xc = a[0] + (b[0] - a[0])/210        xc = a[0] + (b[0] - a[0])/2
11        yc = a[1] + (b[1] - a[1])/211        yc = a[1] + (b[1] - a[1])/2
12        if a[0] == b[0]:12        if a[0] == b[0]:
13            c = (a[0] - m, yc)13            c = (a[0] - m, yc)
14            d = (a[0] + m, yc)14            d = (a[0] + m, yc)
15        elif a[1] == b[1]:15        elif a[1] == b[1]:
16            c = (xc, a[1] - m)16            c = (xc, a[1] - m)
17            d = (xc, a[1] + m)17            d = (xc, a[1] + m)
18        else:18        else:
19            u = math.atan((b[1] - yc)/(b[0] - xc))19            u = math.atan((b[1] - yc)/(b[0] - xc))
20            c = (20            c = (
21                xc +21                xc +
22                m *22                m *
23                math.cos(23                math.cos(
24                    u +24                    u +
25                    math.pi /25                    math.pi /
26                    2),26                    2),
27                yc +27                yc +
28                m *28                m *
29                math.sin(29                math.sin(
30                    u +30                    u +
31                    math.pi /31                    math.pi /
32                    2))32                    2))
33            d = (33            d = (
34                xc +34                xc +
35                m *35                m *
36                math.cos(36                math.cos(
37                    u -37                    u -
38                    math.pi /38                    math.pi /
39                    2),39                    2),
40                yc +40                yc +
41                m *41                m *
42                math.sin(42                math.sin(
43                    u -43                    u -
44                    math.pi /44                    math.pi /
45                    2))45                    2))
46        return c, d46        return c, d
4747
48    def f(i, j, random):48    def f(i, j, random):
49        l = (random - i[0]) / (j[0] - i[0])49        l = (random - i[0]) / (j[0] - i[0])
50        return (j[1] - i[1]) * l + i[1]50        return (j[1] - i[1]) * l + i[1]
5151
52    def fun(s, v, n, m, rand1):52    def fun(s, v, n, m, rand1):
53        # print(s,v,n,m)53        # print(s,v,n,m)
54        if rand1 < n[0] and rand1 > s[0]:54        if rand1 < n[0] and rand1 > s[0]:
55            u1 = f(s, n, rand1)55            u1 = f(s, n, rand1)
56        else:56        else:
57            u1 = f(n, v, rand1)57            u1 = f(n, v, rand1)
58        if rand1 < m[0] and rand1 > s[0]:58        if rand1 < m[0] and rand1 > s[0]:
59            u2 = f(s, m, rand1)59            u2 = f(s, m, rand1)
60        else:60        else:
61            u2 = f(m, v, rand1)61            u2 = f(m, v, rand1)
62        #print(rand1 , u1, u2)62        #print(rand1 , u1, u2)
63        return u1, u263        return u1, u2
6464
65    c, d = seach(a, b)65    c, d = seach(a, b)
66    x = max(max(a[0], b[0]) - min(a[0], b[0]),66    x = max(max(a[0], b[0]) - min(a[0], b[0]),
67            max(c[0], d[0]) - min(c[0], d[0]))67            max(c[0], d[0]) - min(c[0], d[0]))
68    xmin = min(a[0], b[0], c[0], d[0])68    xmin = min(a[0], b[0], c[0], d[0])
69    xrandom = random.uniform(xmin, xmin + x)69    xrandom = random.uniform(xmin, xmin + x)
70    if xmin == a[0]:70    if xmin == a[0]:
71        l1, l2 = fun(a, b, c, d, xrandom)71        l1, l2 = fun(a, b, c, d, xrandom)
72        yrandom = random.uniform(l1, l2)72        yrandom = random.uniform(l1, l2)
73    elif xmin == b[0]:73    elif xmin == b[0]:
74        l1, l2 = fun(b, a, c, d, xrandom)74        l1, l2 = fun(b, a, c, d, xrandom)
75        yrandom = random.uniform(l1, l2)75        yrandom = random.uniform(l1, l2)
76    elif xmin == c[0]:76    elif xmin == c[0]:
77        l1, l2 = fun(c, d, a, b, xrandom)77        l1, l2 = fun(c, d, a, b, xrandom)
78        yrandom = random.uniform(l1, l2)78        yrandom = random.uniform(l1, l2)
79    else:79    else:
80        l1, l2 = fun(d, c, a, b, xrandom)80        l1, l2 = fun(d, c, a, b, xrandom)
81        yrandom = random.uniform(l1, l2)81        yrandom = random.uniform(l1, l2)
82    return xrandom, yrandom82    return xrandom, yrandom
8383
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op