version 0.3.1
[PyX/mjg.git] / design / boxalign.py
blob0b6776bd80ef0fbc254cda0934686eb6765a370b
1 #!/usr/bin/env python
2 import sys, math
3 sys.path[:0] = [".."]
4 from pyx import *
6 c = canvas.canvas()
7 t = c.insert(tex.tex())
8 c.stroke(path.line(0, 0, 4, 2), canvas.earrow.Large)
9 graph.textbox(t, r"$\vec p$").linealign(0.1, -2/math.sqrt(20), 4/math.sqrt(20)).printtext(2, 1)
10 c.stroke(path.line(0, 0, 1, 1), canvas.earrow.Large)
11 graph.textbox(t, r"$\vec a$").linealign(0.1, -1/math.sqrt(2), 1/math.sqrt(2)).printtext(0.5, 0.5)
12 c.stroke(path.line(-1, 3, 3, -1), canvas.linestyle.dotted)
13 c.stroke(path.line(1, 1, 1-1/math.sqrt(2), 1+1/math.sqrt(2)), canvas.earrow.Large)
14 graph.textbox(t, r"$\vec b$").linealign(0.1, 1/math.sqrt(2), 1/math.sqrt(2)).printtext(1-1/math.sqrt(8), 1+1/math.sqrt(8))
15 c.writetofile("boxalignpal")
17 ###############################################################################
19 c = canvas.canvas()
20 t = c.insert(tex.tex())
21 c.stroke(path.line(0, 0, 4, 2), canvas.earrow.Large)
22 graph.textbox(t, r"$\vec p$").linealign(0.1, -2/math.sqrt(20), 4/math.sqrt(20)).printtext(2, 1)
23 c.stroke(path.line(0, 0, -1, 1), canvas.earrow.Large)
24 graph.textbox(t, r"$\vec a$").linealign(0.1, -1/math.sqrt(2), -1/math.sqrt(2)).printtext(-0.5, 0.5)
25 c.stroke(path.path(path.arc(0, 0, math.sqrt(2), 0, 360), path.closepath()), canvas.linestyle.dotted)
26 c.writetofile("boxalignpac")
28 ###############################################################################
30 c = canvas.canvas()
31 t = c.insert(tex.tex())
32 c.stroke(path.line(0, 0, 4, 2), canvas.earrow.Large)
33 graph.textbox(t, r"$\vec e$").linealign(0.1, -2/math.sqrt(20), 4/math.sqrt(20)).printtext(2, 1)
34 c.stroke(path.line(0, 0, 6, 2), canvas.earrow.Large)
35 graph.textbox(t, r"$\vec f$").linealign(0.1, 2/math.sqrt(60), -6/math.sqrt(60)).printtext(3, 1)
36 c.stroke(path.line(6, 2, 4, 2), canvas.earrow.Large)
37 graph.textbox(t, r"$\vec g$").linealign(0.1, 0, 1).printtext(5, 2)
38 c.stroke(path.line(0, 0, -1, 1), canvas.earrow.Large)
39 graph.textbox(t, r"$\vec a$").linealign(0.1, -1/math.sqrt(2), -1/math.sqrt(2)).printtext(-0.5, 0.5)
40 c.stroke(path.path(path.arc(0, 0, math.sqrt(2), 0, 360), path.closepath()), canvas.linestyle.dotted)
41 c.stroke(path.line(0, 0, 0, math.sqrt(2)), canvas.earrow.Large)
42 graph.textbox(t, r"$\vec b$").linealign(0.1, -1, 0).printtext(0, 1/math.sqrt(2))
43 c.writetofile("boxalignlac")
45 ###############################################################################
47 def drawexample(canvas, corner, linealign):
48 if corner:
49 b = graph.alignbox((0, 0), (0, 0), (1, 0), (0.5, math.sqrt(3)/2))
50 else:
51 b = graph.alignbox((0.5, math.sqrt(3)/6), (0, 0), (1, 0), (0.5, math.sqrt(3)/2))
52 r = 1.5
53 canvas.stroke(path.path(path.arc(0, 0, r, 0, 360)))
54 phi = 0
55 while phi < 2 * math.pi + 1e-10:
56 if linealign:
57 b.linealign(r, math.cos(phi), math.sin(phi))
58 else:
59 b.circlealign(r, math.cos(phi), math.sin(phi))
60 if round(phi / math.pi * 2 * 100) % 100:
61 canvas.stroke(b.path())
62 else:
63 canvas.stroke(b.path(), color.rgb.red)
64 phi += math.pi / 50
66 d = 6
67 c = canvas.canvas()
68 sc = c.insert(canvas.canvas(trafo.translation(0, d)))
69 drawexample(sc, 0, 0)
70 sc = c.insert(canvas.canvas(trafo.translation(d, d)))
71 drawexample(sc, 0, 1)
72 sc = c.insert(canvas.canvas(trafo.translation(0, 0)))
73 drawexample(sc, 1, 0)
74 sc = c.insert(canvas.canvas(trafo.translation(d, 0)))
75 drawexample(sc, 1, 1)
76 t = c.insert(tex.tex())
77 t.text(0, 1.5*d, "align at a circle", tex.halign.center)
78 t.text(d, 1.5*d, "align at tangents", tex.halign.center)
79 t.text(-0.5*d, d, "reference point at the triangle center", tex.halign.center, tex.direction.vertical)
80 t.text(-0.5*d, 0, "reference point at a triangle corner", tex.halign.center, tex.direction.vertical)
81 c.writetofile("boxalignexample")