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)
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")
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")
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")
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")
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
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
## 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)
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)
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")
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\\'