from pylab import *
from math import sqrt, cos, acos, sin, asin, radians, degrees, pi

def rect(n, s, w, e, r=0):
    xhalf = (e-w) / 2.0
    yhalf = (n-s) / 2.0
    if xhalf == 0 or yhalf == 0:
        return
    xcenter = w + xhalf
    ycenter = s + yhalf
    radius = sqrt( (abs(xhalf))**2.0 + (abs(yhalf))**2.0 ) # Pythagorean theorem

    plot([xcenter, xcenter+radius], [ycenter, ycenter],'m')
    #plot([xcenter], [ycenter], 'ro')
    plot([w,e],[n,n],'g')
    plot([e,e],[n,s],'g')
    plot([e,w],[s,s],'g')
    plot([w,w],[s,n],'g')

    rr = r/180.0 * pi
    rangle = acos( xhalf / radius )
    hsin1 = sin( rr + rangle ) * radius
    hcos1 = cos( rr + rangle ) * radius
    hsin2 = sin( rr - rangle ) * radius
    hcos2 = cos( rr - rangle ) * radius

    plot([xcenter + hcos1, xcenter+hcos2],[ycenter+hsin1,ycenter+hsin2],'r')
    plot([xcenter + hcos2, xcenter-hcos1],[ycenter+hsin2, ycenter-hsin1],'r')
    plot([xcenter - hcos1, xcenter-hcos2],[ycenter-hsin1, ycenter-hsin2],'r')
    plot([xcenter - hcos2, xcenter+hcos1],[ycenter-hsin2, ycenter+hsin1],'r')

    ####
    sradius = radius / 2 # Pythagorean theorem
    ssin1 = sin( rr + rangle ) * sradius
    scos1 = cos( rr + rangle ) * sradius
    ssin2 = sin( rr - rangle ) * sradius
    scos2 = cos( rr - rangle ) * sradius

    #plot([xcenter - scos2],[ycenter-ssin2],'ro') ####### Tohle je stred
    
    basecenter = [xcenter - scos2, ycenter - ssin2]
    xvector = [ scos1 + scos2, -(ssin1 + ssin2) ]
    yvector = [ -(scos1 - scos2), -(ssin2 - ssin1) ]

    #print basecenter, 

    xcenterpoint = lambda x, y: [ basecenter[0] + xvector[0]*x + yvector[0]*y ]
    ycenterpoint = lambda x, y: [ basecenter[1] - xvector[1]*x - yvector[1]*y ]
   
    plot( xcenterpoint(0,0), ycenterpoint(0,0), 'r+')
    plot( xcenterpoint(1,0), ycenterpoint(1,0), 'g+')
#    plot( xcenterpoint(2,0), ycenterpoint(2,0), 'g+')
    plot( xcenterpoint(0,1), ycenterpoint(0,1), 'g+')
    plot( xcenterpoint(1,1), ycenterpoint(1,1), 'g+')

#    plot([xcenter + scos1],[ycenter+ssin1],'go') 
#    plot([xcenter + scos2],[ycenter+ssin2],'bo')
##    plot([xcenter - scos1],[ycenter-ssin1],'bo')
#    plot([xcenter - scos2],[ycenter-ssin2],'ro')

#    plot([xcenter - scos2],[ycenter-ssin2],'ro')
    rect( basecenter[1]+yhalf/2.0, basecenter[1]-yhalf/2.0, basecenter[0] - xhalf/2.0, basecenter[0] + xhalf/2.0, r)

rect(22,2,3,7,70)
axis([-10, 18, 0, 25])

#rect(10,-10,-10,10, 10)
#axis([-25, 25, -25, 25])

#a = axis()
#pad = 1
#axis([a[0]-pad,a[1]+pad,a[2]-pad,a[3]+pad])
grid(True)
show()

