Пример #1
0
 def draw_2d_arrow_s(draw, r, start_pt=np.array([0,0]),
                     end_pt=np.array([7,-3]), \
                     origin=np.array([4,10]),scale=64, rgba="grey",
                     width=3):
     pt1 = np.dot(r,start_pt)*scale + origin*scale
     pt2 = np.dot(r,end_pt)*scale + origin*scale
     draw.line((pt1[0],pt1[1],pt2[0],pt2[1]), fill=rgba, width=width)
     vec = (pt2-pt1)
     vec = vec/np.sqrt(sum(vec**2))/2
     r1 = planar_rotation(5*np.pi/4)
     arrow_foot = np.dot(r1,vec)*scale + pt2
     draw.line((arrow_foot[0],arrow_foot[1],pt2[0],pt2[1]), fill=rgba, width=width)
     r1 = planar_rotation(3*np.pi/4)
     arrow_foot = np.dot(r1,vec)*scale + pt2
     draw.line((arrow_foot[0],arrow_foot[1],pt2[0],pt2[1]), fill=rgba, width=width)
Пример #2
0
def tst(basedir=".\\"):
    for i in range(11):
        im = Image.new("RGB", (512, 512), (0, 0, 0))
        draw = ImageDraw.Draw(im, 'RGBA')
        end1 = np.array([6.0, 6.0])
        end2 = np.array([4.0, 8.0])
        end = end1 * (1 - i / 10.0) + end2 * (i / 10.0)
        gg=grd.Grid(end=end,\
                        center=np.array([0,0]),origin=np.array([40,256]),
                        rot=planar_rotation(-np.pi/4),scale=32)
        pt2 = gg.get_grid_pt(end[0], end[1])
        gg.draw(draw, width=3)
        ## Draw horizontal line corresponding to the main diagonal.
        pt1 = gg.get_grid_pt(0, 0)
        pt2 = gg.get_grid_pt(6, 6)
        draw.ellipse((pt2[0]-5, pt2[1]-5, pt2[0]+5, \
                        pt2[1]+5),fill='red')
        draw.line((0, pt2[1], 512, pt2[1]), fill="orange", width=3)
        draw.line((0, pt1[1], 512, pt1[1]), fill="purple", width=3)
        draw.ellipse((pt1[0]-5, pt1[1]-5, pt1[0]+5, \
                        pt1[1]+5),fill='blue')

        ## Draw horizontal line corresponding to one above the main diagonal.
        pt1 = gg.get_grid_pt(0, 1)
        pt2 = gg.get_grid_pt(5, 6)
        #draw.line((pt1[0],pt1[1],pt2[0],pt2[1]), fill="orange", width=2)
        im.save(basedir + "im" + str(i) + ".png")
Пример #3
0
def proof_eqn_line(idx, r=planar_rotation(np.pi * 3 / 20.0)):
    mc = MapCoord(im_size=np.array([512, 512]), origin=np.array([4, 4]))
    cnv = Canvas(mc)
    cnv.draw_grid()
    cnv.draw_2d_arrow(np.array([-4, 0]), np.array([4, 0]))
    cnv.draw_2d_arrow(np.array([0, 4]), np.array([0, -4]))
    cnv.draw_point(np.array([0, 0]), fill="yellow", size=5)
    cnv.write_txt(np.array([0, 0]), "O", (255, 255, 0, 200))
    pt1 = np.array([-1, 4])
    pt2 = np.array([3, -2])
    l = Line(pt1, pt2)
    cnv.draw_line(pt1, pt2, fill="purple")
    cnv.draw_line(np.array([0, 0]),
                  l.closest_pt_from_origin * 5,
                  fill="white",
                  width=1)
    cnv.draw_point(l.closest_pt_from_origin, fill="blue", size=4)
    cnv.draw_arrow(np.array([0,0]), l.closest_pt_from_origin*.6,\
    fill="blue",width=3,arr_bk=.9,arr_per=.1)
    cnv.write_txt(l.closest_pt_from_origin + np.array([.1, .1]), "A", "blue")
    arb_pt_1 = pt1 * .2 + pt2 * .8
    arb_pt_2 = pt1 * .9 + pt2 * .1
    cnv.draw_point(arb_pt_1, fill=(3, 252, 53), size=4)
    cnv.draw_point(arb_pt_2, fill=(252, 144, 3), size=4)
    cnv.draw_arrow(np.array([0,0]), arb_pt_1,\
    fill=(3, 252, 53),width=1,arr_bk=.9,arr_per=.1)
    cnv.draw_arrow(np.array([0,0]), arb_pt_2,\
    fill=(252, 144, 3),width=1,arr_bk=.9,arr_per=.1)
    cnv.write_txt(arb_pt_1 + np.array([.1, .1]), "B", (3, 252, 53))
    cnv.write_txt(arb_pt_2 + np.array([.1, .1]), "C", (252, 144, 3))
    basedir = '.\\images\\RotatingCube\\'
    cnv.im.save(basedir + "im" + str(idx) + ".png")
Пример #4
0
def eqn_of_line(idx=0, r=planar_rotation(np.pi * 3 / 20.0)):
    mc = MapCoord(im_size=np.array([512, 512]), origin=np.array([4, 4]))
    cnv = Canvas(mc)
    cnv.draw_grid()
    cnv.draw_2d_arrow(np.array([-4, 0]), np.array([4, 0]))
    cnv.draw_2d_arrow(np.array([0, 4]), np.array([0, -4]))
    cnv.draw_2d_arrow(np.array([0, 0]), np.array([0, -2]), rgba="orange", r=r)
    cnv.draw_2d_arrow(np.array([-4, 0]), np.array([4, 0]), rgba="grey", r=r)
    basedir = '.\\images\\RotatingCube\\'
    cnv.im.save(basedir + "im" + str(idx) + ".png")
Пример #5
0
def scaling_w(idx=0, r=planar_rotation(np.pi*3/20.0)):
    mc = MapCoord(im_size=np.array([512,512]),origin=np.array([4,4]))
    cnv = Canvas(mc)
    cnv.draw_grid()
    cnv.draw_2d_arrow(np.array([-4,0]), np.array([4,0]))
    cnv.draw_2d_arrow(np.array([0,4]), np.array([0,-4]))
    eps = zigzag2(idx,0,5,-5)/5
    cnv.draw_2d_arrow(np.array([0,0]), np.array([0,-2*(1+eps)]),rgba="orange",r=r)
    cnv.draw_2d_arrow(np.array([-4,0]), np.array([4,0]),rgba="white",r=r)
    basedir = '.\\images\\RotatingCube\\'
    cnv.im.save(basedir + "im" + str(idx) + ".png")
Пример #6
0
 def __init__(self,pt1,pt2):
     """
     """
     self.pt1 = pt1
     self.pt2 = pt2
     self.vec_along = (pt2-pt1)
     r = planar_rotation(np.pi/2)
     self.w = np.dot(r,self.vec_along)
     mod_w_sq = np.dot(self.w,self.w)
     self.w = self.w/np.sqrt(mod_w_sq)
     # Eqn of line is assumed to be w^T x+b=0
     self.b = -np.dot(self.w,self.pt1)
     self.closest_pt_from_origin = -self.b*self.w
Пример #7
0
def basic_grid():
    im = Image.new("RGB", (512, 512), (0, 0, 0))
    draw = ImageDraw.Draw(im, 'RGBA')
    gg=grd.Grid(end=np.array([6.0,6.0]),\
                    center=np.array([0,0]),origin=np.array([40,256]),
                    rot=planar_rotation(-np.pi/4),scale=32)
    gg.draw(draw, width=3)
    ## Draw horizontal line corresponding to the main diagonal.
    pt1 = gg.get_grid_pt(0, 0)
    pt2 = gg.get_grid_pt(6, 6)
    draw.line((pt1[0], pt1[1], pt2[0], pt2[1]), fill="purple", width=3)
    draw.ellipse((pt1[0]-5, pt1[1]-5, pt1[0]+5, \
                    pt1[1]+5),fill='blue')
    draw.ellipse((pt2[0]-5, pt2[1]-5, pt2[0]+5, \
                    pt2[1]+5),fill='red')
    ## Draw horizontal line corresponding to one above the main diagonal.
    pt1 = gg.get_grid_pt(0, 1)
    pt2 = gg.get_grid_pt(5, 6)
    draw.line((pt1[0], pt1[1], pt2[0], pt2[1]), fill="orange", width=2)

    return im, draw, gg
Пример #8
0
        ## Draw horizontal line corresponding to one above the main diagonal.
        pt1 = gg.get_grid_pt(0, 1)
        pt2 = gg.get_grid_pt(5, 6)
        #draw.line((pt1[0],pt1[1],pt2[0],pt2[1]), fill="orange", width=2)
        im.save(basedir + "im" + str(i) + ".png")


#######
for i in range(13):
    im = Image.new("RGB", (512, 512), (0, 0, 0))
    draw = ImageDraw.Draw(im, 'RGBA')
    end2 = np.array([4.0, 8.0])
    gg=grd.Grid(end=end2,\
                    center=np.array([2,-4]),origin=np.array([90,280]),
                    rot=planar_rotation(-np.pi/4-np.pi*(i/12.0)),scale=32)
    gg.draw(draw, width=3)
    pt2 = gg.get_grid_pt(end2[0], end2[1])
    draw.ellipse((pt2[0]-5, pt2[1]-5, pt2[0]+5, \
                    pt2[1]+5),fill='red')
    draw.line((0, pt2[1], 512, pt2[1]), fill="orange", width=3)
    ## Draw horizontal line corresponding to the main diagonal.
    pt1 = gg.get_grid_pt(0, 0)
    pt2 = gg.get_grid_pt(6, 6)
    draw.line((0, pt1[1], 512, pt1[1]), fill="purple", width=3)
    draw.ellipse((pt1[0]-5, pt1[1]-5, pt1[0]+5, \
                    pt1[1]+5),fill='blue')

    ## Draw horizontal line corresponding to one above the main diagonal.
    pt1 = gg.get_grid_pt(0, 1)
    pt2 = gg.get_grid_pt(5, 6)
Пример #9
0
import pyray.grid as grd
#from importlib import reload

###

basedir = '.\\Images\\RotatingCube\\'
gg0=grd.Grid(end=np.array([12.0,12.0]),origin=np.array([256,256]),\
                center=np.array([3,3]),scale=64/np.sqrt(2))
pt = gg0.get_grid_pt(6, 0)

for i in range(11):
    im = Image.new("RGB", (1024, 1024), (0, 0, 0))
    draw = ImageDraw.Draw(im, 'RGBA')
    gg=grd.Grid(end=np.array([6.0,6.0]),origin=pt,\
                center=np.array([0,0]),
                rot=planar_rotation(-np.pi*10/10/4))
    gg0.draw(draw, fill=(252, 0, 0, 90), width=1)
    gg.draw(draw)
    im.save(basedir + "im" + str(i) + ".png")

###

basedir = '.\\Images\\RotatingCube\\'
gg=grd.Grid(end=np.array([6.0,6.0]),\
                center=np.array([0,0]),origin=np.array([40,430]))
pts = [
    gg.get_grid_pt(i, j) for i, j in [(0, 0), (0, 2), (3, 2), (3, 6), (6, 6)]
]
pt1 = gg.get_grid_pt(0, 0)
pt2 = gg.get_grid_pt(6, 6)
Пример #10
0
import pyray.grid as grd


for i in range(11):
    im=Image.new("RGB", (512, 512), (0,0,0))
    draw = ImageDraw.Draw(im,'RGBA')
    end1=np.array([6.0,6.0])
    end2=np.array([4.0,8.0])
    end=end1*(1-i/10.0)+end2*(i/10.0)
    pt2=gg.get_grid_pt(end[0],end[1])
    draw.ellipse((pt2[0]-5, pt2[1]-5, pt2[0]+5, \
                    pt2[1]+5),fill='red') 
    draw.line((0,pt2[1],512,pt2[1]), fill="orange", width=3)
    gg=grd.Grid(end=end,\
                    center=np.array([0,0]),origin=np.array([40,256]),
                    rot=planar_rotation(-np.pi/4),scale=32)
    gg.draw(draw,width=3)
    ## Draw horizontal line corresponding to the main diagonal.
    pt1=gg.get_grid_pt(0,0)
    pt2=gg.get_grid_pt(6,6)    
    draw.line((0,pt1[1],512,pt1[1]), fill="purple", width=3)
    draw.ellipse((pt1[0]-5, pt1[1]-5, pt1[0]+5, \
                    pt1[1]+5),fill='blue')
       
    ## Draw horizontal line corresponding to one above the main diagonal.
    pt1=gg.get_grid_pt(0,1)
    pt2=gg.get_grid_pt(5,6)
    #draw.line((pt1[0],pt1[1],pt2[0],pt2[1]), fill="orange", width=2)
    im.save(basedir + "im" + str(i) + ".png")

Пример #11
0

def eqn_of_line(idx=0, r=planar_rotation(np.pi * 3 / 20.0)):
    mc = MapCoord(im_size=np.array([512, 512]), origin=np.array([4, 4]))
    cnv = Canvas(mc)
    cnv.draw_grid()
    cnv.draw_2d_arrow(np.array([-4, 0]), np.array([4, 0]))
    cnv.draw_2d_arrow(np.array([0, 4]), np.array([0, -4]))
    cnv.draw_2d_arrow(np.array([0, 0]), np.array([0, -2]), rgba="orange", r=r)
    cnv.draw_2d_arrow(np.array([-4, 0]), np.array([4, 0]), rgba="grey", r=r)
    basedir = '.\\images\\RotatingCube\\'
    cnv.im.save(basedir + "im" + str(idx) + ".png")


for i in range(10):
    eqn_of_line(i, r=planar_rotation(2 * np.pi * i / 10.0))


def scaling_w(idx=0, r=planar_rotation(np.pi * 3 / 20.0)):
    mc = MapCoord(im_size=np.array([512, 512]), origin=np.array([4, 4]))
    cnv = Canvas(mc)
    cnv.draw_grid()
    cnv.draw_2d_arrow(np.array([-4, 0]), np.array([4, 0]))
    cnv.draw_2d_arrow(np.array([0, 4]), np.array([0, -4]))
    eps = zigzag2(idx, 0, 5, -5) / 5
    cnv.draw_2d_arrow(np.array([0, 0]),
                      np.array([0, -2 * (1 + eps)]),
                      rgba="orange",
                      r=r)
    cnv.draw_2d_arrow(np.array([-4, 0]), np.array([4, 0]), rgba="white", r=r)
    basedir = '.\\images\\RotatingCube\\'