diff options
Diffstat (limited to 'graphics/sketch/Doc/manexamples.sk')
-rw-r--r-- | graphics/sketch/Doc/manexamples.sk | 341 |
1 files changed, 341 insertions, 0 deletions
diff --git a/graphics/sketch/Doc/manexamples.sk b/graphics/sketch/Doc/manexamples.sk new file mode 100644 index 0000000000..80414d6cfa --- /dev/null +++ b/graphics/sketch/Doc/manexamples.sk @@ -0,0 +1,341 @@ +def x000 { + def O (0,0,0) + def I [1,0,0] + def J [0,1,0] + def K [0,0,1] + def eye (18,12,10) + put { view( (eye) ) + then perspective(|(eye)-(O)|) + then scale(3/8) } { + def R 3 + def N 16 + def degrees_per_seg 15 + def pitch 1/7 + def darc degrees_per_seg / 360 * 2 * 3.14159 * R + def dy darc * pitch + def n_segs 114 + line[linecolor=red,linewidth=2pt](0,-1,0)(0, n_segs * dy + 1, 0) + sweep { n_segs, rotate( degrees_per_seg, (O), [J] ) then translate([0, dy, 0]) } + put { translate([R,0,0]) then rotate(atan2(dy, darc), (O), [I]) } + sweep[fillcolor=lightgray] { N<>, rotate(360/N, (O), [K]) } (1,0) + + } +} + +def x010 { + put { view((5,4,8)) } { + def L 1.5 + line[arrows=<->](L,0,0)(0,0,0)(0,L,0) + line[arrows=->](0,0,0)(0,0,L) + special|\uput[r]#1{$x$} + \uput[u]#2{$y$} + \uput[l]#3{$z$}| + (L,0,0) % 1 + (0,L,0) % 2 + (0,0,L) % 3 + } +} + +def x020 { + polygon(0,0,1)(1,0,0)(0,1,0) + line(-1,-1,-1)(2,2,2) + special|\psline[linecolor=lightgray]{<->}#1#2#3 + \pscircle*[linecolor=lightgray,fillcolor=lightgray]#2{2pt} + \pscircle[linecolor=lightgray]#2{4pt}| + [lay=under](0,2,0)(0,0,0)(2,0,0) +} + +def x030 { + polygon[fillcolor=lightgray,linewidth=3pt](0,0,1)(1,0,0)(0,1,0) + line[linestyle=dotted](-1,-1,-1)(2,2,2) +} + +def x040 { + % vertices of the tetrahedron + def p1 (0,0,1) + def p2 (1,0,0) + def p3 (0,1,0) + def p4 (-.3,-.5,-.8) + + % faces of the tetrahedron. + polygon(p1)(p2)(p3) % original front polygon + polygon(p1)(p4)(p2) % bottom + polygon(p1)(p3)(p4) % left + polygon(p3)(p2)(p4) % rear + + % line to pierce the tetrahedron + line[linecolor=red](-1,-1,-1)(2,2,2) +} + +def x042 { + % vertices of the tetrahedron + def p1 (0,0,1) + def p2 (1,0,0) + def p3 (0,1,0) + def p4 (-.3,-.5,-.8) + + % faces of the tetrahedron. + polygon(p1)(p2)(p3) % original front polygon + polygon(p1)(p4)(p2) % bottom + polygon(p1)(p3)(p4) % left + polygon(p3)(p2)(p4) % rear + + % line to pierce the tetrahedron + line[linecolor=red](-1,-1,-1)(2,2,2) + + % labels + special |\footnotesize + \uput{2pt}[ur]#1{$P1$}\uput[r]#2{$P2$} + \uput[u]#3{$P3$}\uput[d]#4{$P4$}| + (p1)(p2)(p3)(p4) +} + +def x045 { + def O (0,0,0) + def K [0,0,1] + def n_segs 60 + def degrees_per_seg 20 + def pitch 3 + put { view((20,7,4)) then perspective(22) } { + sweep[cull=false] { n_segs, rotate(10, (O), [K]) then translate(pitch * degrees_per_seg / 360 * [K]) } line[cull=false](-1,0)(1,0) + put { translate([0,2.5,0]) } + sweep[cull=true] { n_segs, rotate(10, (O), [K]) then translate(pitch * degrees_per_seg / 360 * [K]) } line[cull=false](-1,0)(1,0) + } +} + +def x050 { + + def pierced_tetrahedron { + def p1 (0,0,1) def p2 (1,0,0) + def p3 (0,1,0) def p4 (-.3,-.5,-.8) + % faces of the tetrahedron. + polygon(p1)(p2)(p3) % original + polygon(p1)(p4)(p2) % bottom + polygon(p1)(p3)(p4) % left + polygon[fillcolor=lightgray](p3)(p2)(p4) % rear + line[linecolor=red](-1,-1,-1)(2,2,2) + } + + {pierced_tetrahedron} % tetrahedron in original position + + put { rotate(90, (0,0,0), [1,0,0]) % copy in new position + then translate([2.5,0,0]) } {pierced_tetrahedron} +} + +def x060 { + + def pierced_tetrahedron { + def p1 (0,0,1) def p2 (1,0,0) + def p3 (0,1,0) def p4 (-.3,-.5,-.8) + % faces of the tetrahedron. + polygon(p1)(p2)(p3) % original + polygon(p1)(p4)(p2) % bottom + polygon(p1)(p3)(p4) % left + polygon[fillcolor=lightgray](p3)(p2)(p4) % rear + line[linecolor=red](-1,-1,-1)(2,2,2) + } + + repeat { 7, rotate(15, (0,0,0), [1,0,0]) % copy in new position + then translate([1.8,0,0]) } {pierced_tetrahedron} +} + +def x070 { + def n_segs 8 + sweep { n_segs, rotate(180 / n_segs, [0,0,1]) } (1,0,0) +} + +def x080 { + def n_segs 8 + sweep { n_segs<>, rotate(180 / n_segs, [0,0,1]) } (1,0,0) +} + +% toroid +def x090 { + put { view((4,5,10)) } { + def n_toroid_segs 20 + def n_circle_segs 16 + def r_minor 1 + def r_major 1.5 + sweep { n_toroid_segs, rotate(360 / n_toroid_segs, [0,1,0]) } + sweep { n_circle_segs, rotate(360 / n_circle_segs, (r_major,0,0)) } + (r_major + r_minor, 0) + def al 1.5 + line[linecolor=red,arrows=->](0,0,0)(r_major + r_minor + al,0,0) + line[linecolor=red,arrows=->](0,0,0)(0,r_minor + al,0) + line[linecolor=red,arrows=->](0,0,0)(0,0,r_major + r_minor + al) + special|\uput[r]#1{$x$} + \uput[u]#2{$y$} + \uput[dl]#3{$z$}|(r_major + r_minor + al,0,0)(0,r_minor + al,0)(0,0,r_major + r_minor + al) + } +} + +% triangle with normal +def x100 { + def p1 (1,0,0) + def p2 (0,0.5,0) + def p3 (-0.5,-1,2) + def O (0,0,0) + def N unit( ((p3) - (p2)) * ((p1) - (p2)) ) + def n1 ((p1) - (O) + (p2) - (O) + (p3) - (O)) / 3 + (O) + def n2 (n1)+[N] + polygon(p1)(p2)(p3) + line[arrows=*->](n1)(n2) +} + +% views of cylinder +def x110 { + def n_cyl_segs 20 + def n_views 5 + def I [1,0,0] + repeat { n_views, rotate(180/n_views, [I]) then translate([I] * 2.1) } + sweep[fillcolor=lightgray]{ n_cyl_segs<>, rotate(360/n_cyl_segs, [0,1,0]) } + line[fillcolor=white](1,-1)(1,1) +} + +% mobius strip +def x120 { + put { view ((3,5,10)) } { + + def R 4 + def N 64 + def T .3 + sweep[cull=false] { + N, + rotate(180/N, (R,0,0)), + rotate(360/N, [0,1,0]) + } line(R - 1,-T)(R + 1,-T)(R + 1,T)(R - 1,T)(R - 1,-T) + + } +} + +def x130_200 { + % useful common defs + def O (0,0,0) + + % right side (outside to right) + def ht 2 % height of peak of house + def R1 (1,1,1) def R2 (1,-1,1) def R3 (1,-1,-1) def R4 (1,1,-1) + def R5 (1,ht,0) + + % left side (outside to right--backward) + def W [2,0,0] + def L1 (R1)-[W] def L2 (R2)-[W] def L3 (R3)-[W] def L4 (R4)-[W] + def L5 (R5)-[W] + + % door + def e .01 + def D1 (0,-1,1+e) def D2 (.5,-1,1+e) def D3 (.5,0,1+e) def D4 (0,0,1+e) + + def hp <ex130> scale(1) + <ex140> scale(1) + <> rotate(-40, [0,1,0]) then translate([0,0,-12]) % house positioner + def pR1 [[hp]]*(R1) def pR2 [[hp]]*(R2) def pR3 [[hp]]*(R3) + def pR4 [[hp]]*(R4) def pR5 [[hp]]*(R5) + def pL1 [[hp]]*(L1) def pL2 [[hp]]*(L2) def pL3 [[hp]]*(L3) + def pL4 [[hp]]*(L4) def pL5 [[hp]]*(L5) + def pD1 [[hp]]*(D1) def pD2 [[hp]]*(D2) def pD3 [[hp]]*(D3) + def pD4 [[hp]]*(D4) + + % house + def rgt polygon (pR1)(pR2)(pR3)(pR4)(pR5) + def lft polygon (pL5)(pL4)(pL3)(pL2)(pL1) + def frt polygon (pR2)(pR1)(pL1)(pL2) + def bck polygon (pR4)(pR3)(pL3)(pL4) + def tfr polygon (pR1)(pR5)(pL5)(pL1) + def tbk polygon (pR5)(pR4)(pL4)(pL5) + def bot polygon (pR2)(pL2)(pL3)(pR3) + def door polygon[fillcolor=brown] (pD1)(pD2)(pD3)(pD4) + def house { {rgt}{lft}{frt}{bck}{tfr}{tbk}{bot}{door} } + + % perspective system + def axes { + def sz 1 + line [arrows=<->] (sz,0,0)(O)(0,sz,0) + line [arrows=->] (O)(0,0,sz) + line [linewidth=.2pt,linecolor=blue,linestyle=dashed] (O)(0,0,-12) + special |\uput[r]#1{$x$}\uput[u]#2{$y$}\uput[l]#3{$z$}| + (sz,0,0)(0,sz,0)(0,0,sz) + } + def p 5 % projection distance (plane at z=-p) + def projection_plane { + def sz 1.5 + polygon (-sz,-sz,-p)(sz,-sz,-p)(sz,sz,-p)(-sz,sz,-p) + special |\rput[b]#1-2#3{\footnotesize\sf projection plane}| + [lay=over](-sz,-sz,-p)(sz,-sz,-p)(0,-sz+.1,-p) + } + def projection_rays { + def ray [linewidth=.3pt,linecolor=lightgray] + % right + line [ray](O)(pR1) line [ray](O)(pR2) line[ray](O)(pR3) + line [ray](O)(pR4) line [ray](O)(pR5) + % left + line [ray](O)(pL1) line [ray](O)(pL2) line[ray](O)(pL5) + %door + line [ray](O)(pD1) line [ray](O)(pD2) + line [ray](O)(pD3) line [ray](O)(pD4) + } + def projection { + put { project(p) then translate([0,0,e]) } {house} + put { project(p) then translate([0,0,2*e]) } {door} + } + def eye (5,2,2.5) + def look_at (0,0,-5) + def all + <ex130> + {house} + <ex140> + put { scale(.3) } repeat { 13, rotate(30, [1,2,3]), translate([3,0,0]) } {house} + <ex150> + put { view((eye), (look_at)) } { + {house} + {axes} + } + <ex160> + put { view((eye), (look_at)) } { + {house} + {axes} + {projection_plane} + } + <ex170> + put { view((eye), (look_at)) } { + {house} + {axes} + {projection_plane} + {projection_rays} + } + <ex180> + put { view((eye), (look_at)) } { + {house} + {axes} + {projection_plane} + {projection_rays} + {projection} + } + <ex190> + put { view((eye), (look_at)) then perspective(9)} { + {house} + {axes} + {projection_plane} + {projection_rays} + {projection} + } + <> {house} + {all} +} + +def x210 { input {hand.sk} } +def x220 { def fist <> input {hand.sk} } +def x230 { def ok <> input {hand.sk} } +def x240 { def spread <> input {hand.sk} } +def x250 { input {truncatedcone.sk} } +def x260 { def labeled <> input {truncatedcone.sk} } + +def tomake + input{tags.sk} + <> special|No case was selected!| + +{tomake} + +global { + set [linewidth=.3pt] +} |