%%%% sphrmd03.ldf %%%% Created by Laurence D. Finston (LDF) Fri Jul 16 18:24:36 CEST 2010 %%%% $Id: sphrmd03.ldf,v 1.53 2022/12/16 14:05:14 lfinsto1 Exp $ %% * (1) Copyright and License. %%%% This file is part of GNU 3DLDF, a package for three-dimensional drawing. %%%% Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 The Free Software Foundation, Inc. %%%% GNU 3DLDF is free software; you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by %%%% the Free Software Foundation; either version 3 of the License, or %%%% (at your option) any later version. %%%% GNU 3DLDF is distributed in the hope that it will be useful, %%%% but WITHOUT ANY WARRANTY; without even the implied warranty of %%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %%%% GNU General Public License for more details. %%%% You should have received a copy of the GNU General Public License %%%% along with GNU 3DLDF; if not, write to the Free Software %%%% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA %%%% GNU 3DLDF is a GNU package. %%%% It is part of the GNU Project of the %%%% Free Software Foundation %%%% and is published under the GNU General Public License. %%%% See the website http://www.gnu.org %%%% for more information. %%%% GNU 3DLDF is available for downloading from %%%% http://www.gnu.org/software/3dldf/LDF.html. %%%% Please send bug reports to Laurence.Finston@gmx.de %%%% The mailing list help-3dldf@gnu.org is available for people to %%%% ask other users for help. %%%% The mailing list info-3dldf@gnu.org is for sending %%%% announcements to users. To subscribe to these mailing lists, send an %%%% email with ``subscribe '' as the subject. %%%% The author can be contacted at: %%%% Laurence D. Finston %%%% c/o Free Software Foundation, Inc. %%%% 51 Franklin St, Fifth Floor %%%% Boston, MA 02110-1301 %%%% USA %%%% Laurence.Finston@gmx.de %% Created: July 16, 2010 %% Last updated: August 18, 2010 %% Run like this: %% 3dldf sphrmd03.ldf %% mpost sphrmd03.mp %% tex sphrmd03.txt %% dvips -o sphrmd03.ps sphrmd03.dvi %% ps2pdf sphrmd03.ps %% All on one line: if false: 3dldf sphrmd03.ldf && mpost sphrmd03.mp && tex sphrmd03.txt && \ dvips -o sphrmd03.ps sphrmd03.dvi \ && ps2pdf sphrmd03.ps fi; %% View the PostScript file using Ghostview like this: %% gv sphrmd03.ps & %% or with GNU Ghostview like this: %% ggv sphrmd03.ps & %% View the PDF file with Acrobat Reader like this: %% acroread sphrmd03.pdf & %% * (1) Beginning of 3DLDF code. %% ** (2) Plans for a paper or cardboard model of a sphere (Sphere Model 3) verbatim_metapost "verbatimtex \font\large=cmr17 etex;"; verbatim_metapost "verbatimtex \font\small=cmr7 etex;"; verbatim_metapost "prologues := 3;"; % verbatim_metapost "verbatimtex \font\large=cmr12 scaled \magstep2 etex;"; % verbatim_metapost "verbatimtex \font\Large=cmr17 scaled \magstep2 etex;"; %% *** (3) Declarations point p[]; path q[]; transform t[]; picture v[]; picture tab_picture; pen dashed_pen; pen border_pen; r := 5.375cm; %% Radius of sphere string s; ang_0 := 15; %% Arcs of (2 * ang_0 == 30) degrees are used to find the points %% on the sphere that represent the corners of the trapezoids %% into which the surface of the sphere is divided. %% LDF 2010.08.06. focus f[]; set f0 with_position (3, 10, -20) with_direction (3, 10, 10) with_distance 20; boolean do_triangle_labels; boolean do_tabs; boolean do_double_tabs; boolean do_thick_pens; %% *** (3) Set boolean values %% These can be used for testing. LDF 2010.08.04. do_triangle_labels := false; % true % true for testing do_thick_pens := false; % true % true for testing do_tabs := true; % false % false for testing. Runs faster when false. do_double_tabs := true; % false % LDF 2010.08.04. if do_triangle_labels: message "Making triangle labels"; else: message "Not making triangle labels"; fi; if do_tabs: message "Making tabs"; if do_double_tabs: message "Making double tabs"; else: message "Not making double tabs"; fi; else: message "Not making tabs"; do_double_tabs := false; fi; if do_thick_pens: message "Using thick pens"; dashed_pen := pencircle scaled (.75mm, .75mm, .75mm); border_pen := pencircle scaled (.75mm, .75mm, .75mm); else: message "Not using thick pens"; dashed_pen := pencircle scaled (.5mm, .5mm, .5mm); border_pen := pencircle scaled (.5mm, .5mm, .5mm); fi; % message "dashed_pen:"; % show dashed_pen; % message "border_pen:"; % show border_pen; %% *** (3) Macros %% **** (4) crosshair macro crosshair; def crosshair (vv) {point aa, numeric offset, point bb, point cc} = transform tt; point A[]; A0 := aa shifted (0, 1); A1 := (offset * unit_vector(cc - bb)) shifted by aa; A2 := A1 rotated_around (aa, A0) 90; A3 := A1 rotated_around (aa, A0) 180; A4 := A1 rotated_around (aa, A0) 270; draw A1 -- A3 with_pen pencircle scaled (.25mm, .25mm, .25mm) on_picture vv; draw A2 -- A4 with_pen pencircle scaled (.25mm, .25mm, .25mm) on_picture vv; enddef; %% **** (4) tab macro tab; numeric tab_x_offset; numeric tab_z_offset; numeric tab_ctr; tab_ctr := 0; tab_x_offset := 0; tab_z_offset := 0; def tab {triangle t, numeric j, numeric k, numeric n, numeric r, numeric u, triangle a, numeric b, numeric c, numeric crosshair_ctr} := %% ***** (5) point P[]; numeric m; if j + k == 2: % message "j + k == 2:"; m := 1; elseif j + k == 1: % message "j + k == 1:"; m := 2; else: % message "j + k == 3:"; m := 0; fi; P0 := mediate(get_point (j) t, get_point (k) t, n); P1 := mediate(get_point (k) t, get_point (j) t, n); P3 := mediate(P0, P1); P12 := P3 shifted (0, 1); P13 := (unit_vector(P1 - P0) shifted P3) rotated_around (P3, P12) -90; P14 := (unit_vector(P1 - P0) shifted P3) rotated_around (P3, P12) 90; numeric mag[]; mag0 := magnitude(P13 - get_point(m) t); mag1 := magnitude(P14 - get_point(m) t); if mag0 < mag1: P2 := P13; else: P2 := P14; fi; P4 := u * unit_vector(P2 - P3); shift P4 by P3; P5 := mediate(get_point (j) t, get_point (k) t, r) shifted by (P4 - P3); P6 := mediate(get_point (k) t, get_point (j) t, r) shifted by (P4 - P3); %draw P0 -- P1 with_pen pencircle scaled (.5mm, .5mm, .5mm) with_color red; P7 := mediate(P3, P4); P9 := (P7 - P3) shifted P0; P10 := (P0 -- P5) intersection_point (P7 -- P9); P11 := (P1 -- P6) intersection_point (P7 -- P9); draw P0 -- P5 -- P6 -- P1 -- cycle with_color dark_gray; draw P10 -- P11 with_color dark_gray; draw P3 -- P4 with_color dark_gray; %% ****** (6) Double tabs on tab picture if do_double_tabs: P15 := P0; P16 := P1; P17 := P5; P18 := P6; P19 := P3; P20 := P4; P21 := P10; P22 := P11; transform tt[]; tt0 := identity shifted by (P0 * -1); ang_1 := (P1 - P0) angle (1, 0, 0); rotate tt0 (0, ang_1); P15 *= P16 *= P17 *= P18 *= P19 *= P20 *= P21 *= P22 *= tt0; if zpart(P16 - P15) <> 0: tt3 := identity rotated (0, -2 * ang_1); P15 *= P16 *= P17 *= P18 *= P19 *= P20 *= P21 *= P22 *= tt3; fi; if zpart(P17) < zpart(P15): tt1 := identity rotated (180, 0); P15 *= P16 *= P17 *= P18 *= P19 *= P20 *= P21 *= P22 *= tt0 *= tt1; fi; tt4 := identity shifted (tab_x_offset, 0, tab_z_offset); P15 *= P16 *= P17 *= P18 *= P19 *= P20 *= P21 *= P22 *= tt4; draw P15 -- P16 -- P18 -- P17 -- cycle on_picture tab_picture; draw P19 -- P20 with_color dark_gray on_picture tab_picture; draw P21 -- P22 with_color dark_gray on_picture tab_picture; tt2 := identity rotated_around (P15, P16); P23 := P17 * tt2; P24 := P18 * tt2; P25 := P19 * tt2; P26 := P20 * tt2; P27 := P21 * tt2; P28 := P22 * tt2; draw P15 -- P23 -- P24 -- P16 -- cycle on_picture tab_picture; draw P19 -- P26 with_color dark_gray on_picture tab_picture; draw P27 -- P28 with_color dark_gray on_picture tab_picture; % dotlabel.lft("$P_{15}$", P15) tab_picture; % dotlabel.rt("$P_{16}$", P16) tab_picture; % dotlabel.ulft("$P_{17}$", P17) tab_picture; % dotlabel.urt("$P_{18}$", P18) tab_picture; % dotlabel.top("$P_{19}$", P19) tab_picture; % dotlabel.top("$P_{20}$", P20) tab_picture; % dotlabel.lft("$P_{21}$", P21) tab_picture; % dotlabel.rt("$P_{22}$", P22) tab_picture; % dotlabel.llft("$P_{23}$", P23) tab_picture; % dotlabel.lrt("$P_{24}$", P24) tab_picture; % label("$P_{25}$", P25) tab_picture; % dotlabel.bot("$P_{26}$", P26) tab_picture; % dotlabel.lft("$P_{27}$", P27) tab_picture; % dotlabel.rt("$P_{28}$", P28) tab_picture; tab_x_offset += magnitude(P16 - P15) + .5cm; fi; %% if do_double_tabs %% ****** (6) for i = 1 upto crosshair_ctr: crosshair (current_picture) {mediate(P10, P11, i/(crosshair_ctr + 1)), .1cm, P10, P11}; if do_double_tabs: crosshair (tab_picture) {mediate(P21, P22, i/(crosshair_ctr + 1)), .1cm, P21, P22}; crosshair (tab_picture) {mediate(P27, P28, i/(crosshair_ctr + 1)), .1cm, P27, P28}; fi; %% if do_double_tabs endfor; % message "unit_vector(P10 - P11):"; % show unit_vector(P10 - P11); % message "unit_vector(P0 - P1):"; % show unit_vector(P0 - P1); % dotlabel.top("$P_0$", P0); % dotlabel.rt("$P_1$", P1); % dotlabel.top("$P_2$", P2); % dotlabel.top("$P_3$", P3) with_text_color red with_dot_color red; % dotlabel.llft("$P_4$", P4); % dotlabel.ulft("$P_5$", P5); % dotlabel.bot("$P_6$", P6); % dotlabel.rt("$P_7$", P7); % dotlabel.top("$P_9$", P9); % dotlabel.ulft("$P_{10}$", P10); % dotlabel.bot("$P_{11}$", P11); %% ***** (5) The matching tab on the second triangle point Q[]; numeric d; if b + c == 2: % message "b + c == 2:"; d := 1; elseif b + c == 1: % message "b + c == 1:"; d := 2; else: % message "b + c == 3:"; d := 0; fi; Q0 := mediate(get_point (b) a, get_point (c) a); Q1 := (magnitude(P0 - P3) * unit_vector(get_point (b) a - Q0)) shifted Q0; Q2 := (magnitude(P0 - P3) * unit_vector(get_point (c) a - Q0)) shifted Q0; Q10 := Q0 shifted (0, 1); Q11 := ((unit_vector(Q1 - Q2) * magnitude (P4 - P3)) shifted Q0) rotated_around (Q0, Q10) 90; Q12 := ((unit_vector(Q1 - Q2) * magnitude (P4 - P3)) shifted Q0) rotated_around (Q0, Q10) -90; mag0 := magnitude(get_point (d) a - Q11); mag1 := magnitude(get_point (d) a - Q12); if mag0 < mag1: Q3 := Q11; else: Q3 := Q12; fi; Q4 := (unit_vector(Q2 - Q0) * magnitude(P6 - P4)) shifted Q3; Q5 := (unit_vector(Q1 - Q0) * magnitude(P6 - P4)) shifted Q3; Q6 := mediate(Q0, Q3); Q7 := (unit_vector(Q5 - Q1) * magnitude(P10 - P0)) shifted Q1; Q8 := (unit_vector(Q4 - Q2) * magnitude(P10 - P0)) shifted Q2; draw Q1 -- Q5 -- Q4 -- Q2 -- cycle with_color dark_gray; draw Q0 -- Q3 with_color dark_gray; draw Q7 -- Q8 with_color dark_gray; for i = 1 upto crosshair_ctr: crosshair (current_picture) {mediate(Q7, Q8, i/(crosshair_ctr + 1)), .1cm, Q7, Q8}; endfor; % message "unit_vector(Q8 - Q7):"; % show unit_vector(Q8 - Q7); % message "unit_vector(Q4 - Q5):"; % show unit_vector(Q4 - Q5); % dotlabel.lft("$Q_{0}$", Q0); % dotlabel.bot("$Q_{1}$", Q1); % dotlabel.lft("$Q_{2}$", Q2); % dotlabel.rt("$Q_{3}$", Q3); % dotlabel.top("$Q_{4}$", Q4) with_text_color red with_dot_color red; % dotlabel.lrt("$Q_{5}$", Q5); % dotlabel.top ("$Q_{6}$", Q6) with_text_color blue with_dot_color blue; % dotlabel.bot("$Q_{7}$", Q7); % dotlabel.top ("$Q_{8}$", Q8); %% ***** (5) enddef; %% **** (4) tab_single macro tab_single; def tab_single {triangle t, numeric j, numeric k, numeric n, numeric r, numeric u, numeric crosshair_ctr} := %% ***** (5) point P[]; numeric m; if j + k == 2: % message "j + k == 2:"; m := 1; elseif j + k == 1: % message "j + k == 1:"; m := 2; else: % message "j + k == 3:"; m := 0; fi; P0 := mediate(get_point (j) t, get_point (k) t, n); P1 := mediate(get_point (k) t, get_point (j) t, n); P3 := mediate(P0, P1); P12 := P3 shifted (0, 1); P13 := (unit_vector(P1 - P0) shifted P3) rotated_around (P3, P12) -90; P14 := (unit_vector(P1 - P0) shifted P3) rotated_around (P3, P12) 90; numeric mag[]; mag0 := magnitude(P13 - get_point(m) t); mag1 := magnitude(P14 - get_point(m) t); if mag0 < mag1: P2 := P13; else: P2 := P14; fi; P4 := u * unit_vector(P2 - P3); shift P4 by P3; P5 := mediate(get_point (j) t, get_point (k) t, r) shifted by (P4 - P3); P6 := mediate(get_point (k) t, get_point (j) t, r) shifted by (P4 - P3); %draw P0 -- P1 with_pen pencircle scaled (.5mm, .5mm, .5mm) with_color red; P7 := mediate(P3, P4); P9 := (P7 - P3) shifted P0; P10 := (P0 -- P5) intersection_point (P7 -- P9); P11 := (P1 -- P6) intersection_point (P7 -- P9); draw P0 -- P5 -- P6 -- P1 -- cycle with_color dark_gray; draw P10 -- P11 with_color dark_gray; draw P3 -- P4 with_color dark_gray; %% ****** (6) for i = 1 upto crosshair_ctr: crosshair (current_picture) {mediate(P10, P11, i/(crosshair_ctr + 1)), .1cm, P10, P11}; endfor; %% ****** (6) enddef; %% ***** (5) handle_blob macro handle_blob; def handle_blob {point P, point Q, numeric A, numeric B} = draw P -- mediate(P, Q, A) dashed evenly with_pen dashed_pen; draw mediate(P, Q, A) -- mediate(P, Q, B) dashed evenly with_pen dashed_pen with_color gray; enddef; %% ***** (5) End of macro definitions %% **** (4) pickup pencircle scaled (.5mm, .5mm, .5mm); %% *** (3) Figure 1 beginfig(1); %% **** (4) p0 := origin; p1 := (0, 1, 0); p2 := (r, 0); p3 := p2 rotated (0, 0, ang_0); p4 := p2 rotated (0, 0, -ang_0); rotate p3 (0, ang_0); rotate p4 (0, ang_0); p5 := p2 rotated (0, 0, ang_0); p6 := p2 rotated (0, 0, -ang_0); rotate p5 (0, -ang_0); rotate p6 (0, -ang_0); % message "p2:"; % show p2; % message "p3:"; % show p3; % message "p4:"; % show p4; % message "p5:"; % show p5; % message "p6:"; % show p6; % draw p0 -- p2; % draw p0 -- p3; % draw p0 -- p4; % draw p0 -- p5; % draw p0 -- p6; % dotlabel.top("$p_{0}$", p0); % dotlabel.rt("$p_{2}$", p2); % dotlabel.rt("$p_{3}$", p3); draw p5 -- p3 -- p2 -- cycle; % with_color red; draw p5 -- p2 -- p6 -- cycle; % with_color blue; draw p6 -- p4 -- p2 -- cycle; % with_color green;; draw p4 -- p3 -- p2 -- cycle; % with_color cyan; %% **** (4) p7 := p2 rotated (0, 0, 3ang_0); rotate p7 (0, ang_0); p8 := p2 rotated (0, 0, 3ang_0); rotate p8 (0, -ang_0); p9 := p2 rotated (0, 0, 2ang_0); % message "magnitude (p9 - p7):"; % show magnitude (p9 - p7); % message "magnitude (p9 - p8):"; % show magnitude (p9 - p8); % message "p7:"; % show p7; % message "p8:"; % show p8; % message "p9:"; % show p9; draw p8 -- p9 -- p7 -- cycle; % with_color red; draw p8 -- p9 -- p5 -- cycle; % with_color blue; draw p5 -- p9 -- p3 -- cycle; % with_color green;; draw p3 -- p9 -- p7 -- cycle; % with_color cyan; % draw p5 -- p3 -- p2 -- cycle; % with_color red; % draw p5 -- p2 -- p6 -- cycle; % with_color blue; % draw p6 -- p4 -- p2 -- cycle; % with_color green;; % draw p4 -- p3 -- p2 -- cycle; % with_color cyan; % %% **** (4) p10 := p2 rotated (0, 0, -3ang_0); rotate p10 (0, ang_0); p11 := p2 rotated (0, 0, -3ang_0); rotate p11 (0, -ang_0); p12 := p2 rotated (0, 0, -2ang_0); % message "magnitude (p12 - p10):"; % show magnitude (p12 - p10); % message "magnitude (p12 - p11):"; % show magnitude (p12 - p11); % message "p10:"; % show p10; % message "p11:"; % show p11; % message "p12:"; % show p12; draw p6 -- p12 -- p11 -- cycle; % with_color red; draw p11 -- p12 -- p10 -- cycle; % with_color blue; draw p10 -- p12 -- p4 -- cycle; % with_color green;; draw p4 -- p12 -- p6 -- cycle; % with_color cyan; % %% **** (4) p13 := p2 rotated (0, 0, 5ang_0); rotate p13 (0, ang_0); p14 := p2 rotated (0, 0, 5ang_0); rotate p14 (0, -ang_0); p15 := p2 rotated (0, 0, 4ang_0); % message "magnitude (p15 - p13):"; % show magnitude (p15 - p13); % message "magnitude (p15 - p14):"; % show magnitude (p15 - p14); % message "p13:"; % show p13; % message "p14:"; % show p14; % message "p15:"; % show p15; draw p14 -- p15 -- p8 -- cycle; % with_color red; draw p8 -- p15 -- p7 -- cycle; % with_color blue; draw p7 -- p15 -- p13 -- cycle; % with_color green;; draw p13 -- p15 -- p14 -- cycle; % with_color cyan; % %% **** (4) p16 := p2 rotated (0, 0, -5ang_0); rotate p16 (0, ang_0); p17 := p2 rotated (0, 0, -5ang_0); rotate p17 (0, -ang_0); p18 := p2 rotated (0, 0, -4ang_0); % message "magnitude (p18 - p16):"; % show magnitude (p18 - p16); % message "magnitude (p18 - p17):"; % show magnitude (p18 - p17); % message "p16:"; % show p16; % message "p17:"; % show p17; % message "p18:"; % show p18; draw p17 -- p18 -- p11 -- cycle; % with_color red; draw p10 -- p18 -- p11 -- cycle; % with_color blue; draw p10 -- p18 -- p16 -- cycle; % with_color green;; draw p16 -- p18 -- p17 -- cycle; % with_color cyan; % %% **** (4) p19 := (0, r); p20 := (0, -r); draw p14 -- p19 -- p13 ; draw p16 -- p20 -- p17; %% **** (4) v1 := current_picture; clear current_picture; v2 := v1; v0 := v1; if true: %% false for i = 1 upto 11: rotate v2 (0, 2ang_0); v0 += v2; endfor; fi; current_picture := v0; endfig with_projection parallel_x_z no_sort; %% *** (3) Figure 2 beginfig(2); current_picture := v0; endfig with_projection parallel_x_y no_sort; %% *** (3) %% *** (3) Figure 3 beginfig(3); current_picture := v0; %dotlabel.top("$p_{0}$", p0); % dotlabel.top("$p_{2}$", p2); % dotlabel.rt("$p_{3}$", p3); % dotlabel.rt("$p_{4}$", p4); % dotlabel.rt("$p_{5}$", p5); % dotlabel.rt("$p_{6}$", p6); % dotlabel.rt("$p_{7}$", p7); % dotlabel.rt("$p_{8}$", p8); % dotlabel.rt("$p_{9}$", p9); % dotlabel.rt("$p_{10}$", p10); % dotlabel.rt("$p_{11}$", p11); % dotlabel.rt("$p_{12}$", p12); p137 := mediate(p13, p14); % dotlabel.bot("$p_{137}$", p137); % dotlabel.rt("$p_{13}$", p13); % dotlabel.lft("$p_{14}$", p14); % dotlabel.rt("$p_{15}$", p15); % dotlabel.rt("$p_{16}$", p16); % dotlabel.rt("$p_{17}$", p17); % dotlabel.rt("$p_{18}$", p18); % dotlabel.rt("$p_{19}$", p19); % dotlabel.rt("$p_{20}$", p20); p52 := mediate(p3, p5); p64 := mediate(p7, p8); % dotlabel.top("$p_{52}$", p52); % dotlabel.top("$p_{64}$", p64); %% **** (4) %label.rt(magnitude (p3 - p4), mediate(p3, p4)); % label.lft(magnitude (p5 - p6), mediate(p5, p6)); % label.bot(magnitude (p3 - p5), mediate(p3, p5)); % label.top(magnitude (p6 - p4), mediate(p6, p4)); % label.lft(magnitude (p2 - p5), mediate(p2, p5)); % label.lft(magnitude (p2 - p6), mediate(p2, p6)); p53 := mediate(p6, p4); p54 := mediate(p53, p2); %dotlabel.top("$p_{54}$", p54); %% **** (4) p68 := mediate(p3, p4); p69 := mediate(p68, p2); %dotlabel.rt("$p_{68}$", p68); %dotlabel.rt("$p_{69}$", p69); %% **** (4) endfig with_projection parallel_z_y no_sort; %% *** (3) Figure 4 beginfig(4); current_picture := v0; endfig with_focus f0 no_sort; %% *** (3) % w5 Row 1, Type 1 % w8 Row 1, Type 2 % w63 Row 2, Type 1 % w64 Row 2, Type 2 % w65 Row 2, Type 3 % w103 Row 3, Type 1 % w104 Row 3, Type 2 % w105 Row 3, Type 3 %% *** (3) Figure 5 --- The plans beginfig(5); %% **** (4) triangle w[]; set w4 with_points (p6, p4, p2); p55 := (get_normal w4) shifted by p54; t16 := (align (p54 -- p55) with_axis y_axis) rotated (0, 180); w5 := w4 * t16; p56 := get_point 0 w5; p57 := get_point 1 w5; p58 := get_point 2 w5; %dotlabel.lft("$p_{56}$", p56); %dotlabel.urt("$p_{57}$", p57); %dotlabel.lrt("$p_{58}$", p58); %% **** (4) w6 := w5 rotated_around (p56, p57); p65 := get_point 0 w6; p66 := get_point 1 w6; p67 := get_point 2 w6; %% **** (4) set w7 with_points (p3, p2, p4); p70 := (get_normal w7) shifted by p69; t17 := ((align (p69 -- p70) with_axis y_axis) rotated (0, -90)); w8 := w7 * t17; p71 := get_point 0 w8; p72 := get_point 1 w8; p73 := get_point 2 w8; % message "(p58 - p57) angle (p72 - p73):"; % show (p58 - p57) angle (p72 - p73); ang_1 := (p58 - p57) angle (p72 - p73); t18 := identity rotated (0, -ang_1); w8 *= p71 *= p72 *= p73 *= t18; % message "After rotation: (p58 - p57) angle (p72 - p73):"; % show (p58 - p57) angle (p72 - p73); % message "(p72 - p73):"; % show (p72 - p73); % message "(p58 - p57):"; % show (p58 - p57); t19 := identity shifted by (p58 - p72); w8 *= p71 *= p72 *= p73 *= t19; %dotlabel.lrt("$p_{71}$", p71); %dotlabel.urt("$p_{72}$", p72); %dotlabel.lrt("$p_{73}$", p73); %% **** (4) % message "(p66 - p67):"; % show (p66 - p67); % message "(p71 - p72):"; % show (p71 - p72); % message "(p71 - p72) angle (p66 - p67):"; % show (p71 - p72) angle (p66 - p67); ang_1 := (p71 - p72) angle (p66 - p67); t20 := identity rotated (0, -ang_1); w6 *= p65 *= p66 *= p67 *= t20; % message "After rotation: (p71 - p72) angle (p66 - p67):"; % show (p71 - p72) angle (p66 - p67); % message "(p66 - p67):"; % show (p66 - p67); % message "(p71 - p72):"; % show (p71 - p72); t21 := identity shifted by (p72 - p67); w6 *= p65 *= p66 *= p67 *= t21; % dotlabel.llft("$p_{65}$", p65); % dotlabel.urt("$p_{66}$", p66); % dotlabel.lft("$p_{67}$", p67); s := "$" & decimal (magnitude (p56 - p57)) & "\rm{cm}$"; %label.bot(s, mediate(p56, p57)); s := "$" & decimal (magnitude (p71 - p73)) & "\rm{cm}$"; %label.rt(s, mediate(p71, p73)); %% **** (4) p74 := mediate(p65, p66); %dotlabel.top("$p_{74}$", p74); w9 := w8 rotated_around (p72, p74); p75 := get_point 2 w9; %dotlabel.ulft("$p_{75}$", p75); %% **** (4) draw (get_point 0 w5) -- (get_point 1 w5) with_pen border_pen; draw (get_point 0 w5) -- (get_point 2 w5) with_pen border_pen; draw (get_point 1 w5) -- (get_point 2 w5) dashed evenly with_pen dashed_pen; draw (get_point 0 w6) -- (get_point 1 w6) dashed evenly with_pen dashed_pen; draw (get_point 0 w6) -- (get_point 2 w6) dashed evenly with_pen dashed_pen; draw (get_point 0 w8) -- (get_point 1 w8) dashed evenly with_pen dashed_pen; draw (get_point 0 w8) -- (get_point 2 w8) dashed evenly with_pen dashed_pen; draw (get_point 0 w9) -- (get_point 1 w9) dashed evenly with_pen dashed_pen; draw (get_point 0 w9) -- (get_point 2 w9) dashed evenly with_pen dashed_pen; draw (get_point 1 w9) -- (get_point 2 w9) with_pen border_pen; % label("w5", get_center w5 shifted (0, 0, 0)); % label("w6", get_center w6 shifted (0, 0, 0)); % label("w8", get_center w8 shifted (0, 0, 0)); % label("w9", get_center w9 shifted (0, 0, 0)); label("\vbox{\hbox{Row 1,}\hbox{Type 1}}", get_center w5 shifted (0, 0, .125)); label("\vbox{\hbox{Row 1,}\hbox{Type 1}}", get_center w6 shifted (0, 0, -.125)); label("\vbox{\hbox{Row 1,}\hbox{Type 2}}", get_center w8 shifted (0, 0, 0)); label("\vbox{\hbox{Row 1,}\hbox{Type 2}}", get_center w9 shifted (0, 0, 0)); %% **** (4) t22 := identity rotated_around (p66, p57); p76 := p65 * t22; p77 := p75 * t22; w10 := w5 * t22; w11 := w6 * t22; w12 := w8 * t22; w13 := w9 * t22; % for i = 10 upto 13: % %draw w[i] with_color gray; % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % endfor; % dotlabel.rt("$p_{76}$", p76); % dotlabel.rt("$p_{77}$", p77); draw (get_point 0 w10) -- (get_point 1 w10) dashed evenly with_pen dashed_pen; draw (get_point 0 w10) -- (get_point 2 w10) with_pen border_pen; draw (get_point 1 w10) -- (get_point 2 w10) dashed evenly with_pen dashed_pen; draw (get_point 0 w11) -- (get_point 1 w11) with_pen border_pen; draw (get_point 0 w11) -- (get_point 2 w11) dashed evenly with_pen dashed_pen; draw (get_point 1 w11) -- (get_point 2 w11) dashed evenly with_pen dashed_pen; draw (get_point 0 w13) -- (get_point 2 w13) dashed evenly with_pen dashed_pen; draw (get_point 1 w13) -- (get_point 2 w13) with_pen border_pen; %% **** (4) t23 := identity rotated_around (p65, p75); p78 := p66 * t23; p79 := p57 * t23; w14 := w5 * t23; w15 := w6 * t23; w16 := w8 * t23; w17 := w9 * t23; for i = 14 upto 17: %draw w[i] with_color gray; if do_triangle_labels: s := "$w_{" & decimal i & "}$"; label(s, get_center w[i]); fi; endfor; % dotlabel.rt("$p_{78}$", p78); % dotlabel.rt("$p_{79}$", p79); draw (get_point 0 w14) -- (get_point 1 w14) dashed evenly with_pen dashed_pen; draw (get_point 0 w14) -- (get_point 2 w14) with_pen border_pen; draw (get_point 1 w14) -- (get_point 2 w14) dashed evenly with_pen dashed_pen; draw (get_point 0 w15) -- (get_point 1 w15) with_pen border_pen; draw (get_point 0 w15) -- (get_point 2 w15) dashed evenly with_pen dashed_pen; draw (get_point 1 w15) -- (get_point 2 w15) dashed evenly with_pen dashed_pen; draw (get_point 0 w16) -- (get_point 2 w16) dashed evenly with_pen dashed_pen; draw (get_point 1 w17) -- (get_point 2 w17) with_pen border_pen; if do_triangle_labels: forsuffixes i = 5, 6, 8, 9: s := "$w_{" & decimal i & "}$"; label(s, get_center w[i]); endfor; fi; %% **** (4) t24 := identity rotated_around (p76, p77); p80 := p66 * t24; p81 := p57 * t24; %% Triangles 18 -- 21 for i = 10 upto 13: w[i + 8] := w[i] * t24; %draw w[i + 8] with_color gray; if do_triangle_labels: s := "$w_{" & decimal (i + 8) & "}$"; label(s, get_center w[i + 8]); fi; endfor; % dotlabel.rt("$p_{80}$", p80); % dotlabel.rt("$p_{81}$", p81); draw (get_point 0 w18) -- (get_point 1 w18) with_pen border_pen; draw (get_point 0 w18) -- (get_point 2 w18) with_pen border_pen; draw (get_point 1 w18) -- (get_point 2 w18) dashed evenly with_pen dashed_pen; draw (get_point 0 w19) -- (get_point 1 w19) with_pen border_pen; draw (get_point 0 w19) -- (get_point 2 w19) dashed evenly with_pen dashed_pen; draw (get_point 1 w19) -- (get_point 2 w19) dashed evenly with_pen dashed_pen; draw (get_point 0 w20) -- (get_point 2 w20) dashed evenly with_pen dashed_pen; draw (get_point 1 w21) -- (get_point 2 w21) with_pen border_pen; %% **** (4) Triangles w26 -- w37 t25 := identity rotated_around (p80, p81); p82 := p78 * t25; p83 := p79 * t25; w22 := w5 * t25; w23 := w6 * t25; w24 := w8 * t25; w25 := w9 * t25; for i = 10 upto 21: %% Triangles w26 -- w37 w[i + 16] := w[i] * t25; endfor; for i = 22 upto 37: %draw w[i] with_color gray; if do_triangle_labels: s := "$w_{" & decimal i & "}$"; label(s, get_center w[i]); fi; endfor; % dotlabel.rt("$p_{82}$", p82); % dotlabel.rt("$p_{83}$", p83); draw (get_point 0 w22) -- (get_point 1 w22) with_pen border_pen; draw (get_point 0 w22) -- (get_point 2 w22) with_pen border_pen; draw (get_point 1 w22) -- (get_point 2 w22) dashed evenly with_pen dashed_pen; draw (get_point 0 w23) -- (get_point 1 w23) with_pen border_pen; draw (get_point 0 w23) -- (get_point 2 w23) dashed evenly with_pen dashed_pen; draw (get_point 1 w23) -- (get_point 2 w23) dashed evenly with_pen dashed_pen; draw (get_point 0 w24) -- (get_point 2 w24) dashed evenly with_pen dashed_pen; draw (get_point 0 w25) -- (get_point 2 w25) dashed evenly with_pen dashed_pen; draw (get_point 1 w25) -- (get_point 2 w25) with_pen border_pen; draw (get_point 0 w26) -- (get_point 1 w26) with_pen border_pen; draw (get_point 0 w26) -- (get_point 2 w26) with_pen border_pen; draw (get_point 1 w26) -- (get_point 2 w26) dashed evenly with_pen dashed_pen; draw (get_point 0 w27) -- (get_point 1 w27) with_pen border_pen; draw (get_point 0 w27) -- (get_point 2 w27) dashed evenly with_pen dashed_pen; draw (get_point 1 w27) -- (get_point 2 w27) dashed evenly with_pen dashed_pen; draw (get_point 0 w29) -- (get_point 2 w29) dashed evenly with_pen dashed_pen; draw (get_point 1 w29) -- (get_point 2 w29) with_pen border_pen; draw (get_point 0 w30) -- (get_point 1 w30) with_pen border_pen; draw (get_point 0 w30) -- (get_point 2 w30) with_pen border_pen; draw (get_point 1 w30) -- (get_point 2 w30) dashed evenly with_pen dashed_pen; draw (get_point 0 w31) -- (get_point 1 w31) with_pen border_pen; draw (get_point 0 w31) -- (get_point 2 w31) dashed evenly with_pen dashed_pen; draw (get_point 1 w31) -- (get_point 2 w31) dashed evenly with_pen dashed_pen; draw (get_point 0 w32) -- (get_point 2 w32) with_pen border_pen; draw (get_point 1 w33) -- (get_point 2 w33) with_pen border_pen; draw (get_point 0 w34) -- (get_point 1 w34) with_pen border_pen; draw (get_point 0 w34) -- (get_point 2 w34) with_pen border_pen; draw (get_point 1 w34) -- (get_point 2 w34) dashed evenly with_pen dashed_pen; draw (get_point 0 w35) -- (get_point 1 w35) with_pen border_pen; draw (get_point 0 w35) -- (get_point 2 w35) dashed evenly with_pen dashed_pen; draw (get_point 1 w35) -- (get_point 2 w35) dashed evenly with_pen dashed_pen; draw (get_point 1 w37) -- (get_point 2 w37) with_pen border_pen; %% **** (4) Triangles w38 -- w53 t26 := identity rotated_around (p78, p79); p84 := p80 * t26; p85 := p81 * t26; w38 := w5 * t26; w39 := w6 * t26; w40 := w8 * t26; w41 := w9 * t26; for i = 10 upto 21: w[i + 32] := w[i] * t26; endfor; for i = 38 upto 53: %draw w[i] with_color gray; if do_triangle_labels: s := "$w_{" & decimal i & "}$"; label(s, get_center w[i]); fi; endfor; % dotlabel.rt("$p_{84}$", p84); % dotlabel.rt("$p_{85}$", p85); draw (get_point 0 w38) -- (get_point 1 w38) with_pen border_pen; draw (get_point 0 w38) -- (get_point 2 w38) with_pen border_pen; draw (get_point 1 w38) -- (get_point 2 w38) dashed evenly with_pen dashed_pen; draw (get_point 0 w39) -- (get_point 1 w39) with_pen border_pen; draw (get_point 0 w39) -- (get_point 2 w39) dashed evenly with_pen dashed_pen; draw (get_point 1 w39) -- (get_point 2 w39) dashed evenly with_pen dashed_pen; draw (get_point 0 w40) -- (get_point 2 w40) dashed evenly with_pen dashed_pen; draw (get_point 0 w41) -- (get_point 2 w41) dashed evenly with_pen dashed_pen; draw (get_point 1 w41) -- (get_point 2 w41) with_pen border_pen; draw (get_point 0 w42) -- (get_point 1 w42) with_pen border_pen; draw (get_point 0 w42) -- (get_point 2 w42) with_pen border_pen; draw (get_point 1 w42) -- (get_point 2 w42) dashed evenly with_pen dashed_pen; draw (get_point 0 w43) -- (get_point 1 w43) with_pen border_pen; draw (get_point 0 w43) -- (get_point 2 w43) dashed evenly with_pen dashed_pen; draw (get_point 1 w43) -- (get_point 2 w43) dashed evenly with_pen dashed_pen; draw (get_point 0 w45) -- (get_point 2 w45) dashed evenly with_pen dashed_pen; draw (get_point 1 w45) -- (get_point 2 w45) with_pen border_pen; draw (get_point 0 w46) -- (get_point 1 w46) with_pen border_pen; draw (get_point 0 w46) -- (get_point 2 w46) with_pen border_pen; draw (get_point 1 w46) -- (get_point 2 w46) dashed evenly with_pen dashed_pen; draw (get_point 0 w47) -- (get_point 1 w47) with_pen border_pen; draw (get_point 0 w47) -- (get_point 2 w47) dashed evenly with_pen dashed_pen; draw (get_point 1 w47) -- (get_point 2 w47) dashed evenly with_pen dashed_pen; draw (get_point 1 w49) -- (get_point 2 w49) with_pen border_pen; draw (get_point 0 w50) -- (get_point 1 w50) with_pen border_pen; draw (get_point 0 w50) -- (get_point 2 w50) with_pen border_pen; draw (get_point 1 w50) -- (get_point 2 w50) dashed evenly with_pen dashed_pen; draw (get_point 0 w51) -- (get_point 1 w51) with_pen border_pen; draw (get_point 0 w51) -- (get_point 2 w51) dashed evenly with_pen dashed_pen; draw (get_point 1 w51) -- (get_point 2 w51) dashed evenly with_pen dashed_pen; draw (get_point 0 w52) -- (get_point 2 w52) with_pen border_pen; draw (get_point 1 w53) -- (get_point 2 w53) with_pen border_pen; %% **** (4) v3 := current_picture; clear current_picture; %% Get code for second row out of atemp.ldf. LDF 2010.07.07. %% **** (4) Second row set w54 with_points (p3, p9, p5); p91 := mediate(p52, p9); p92 := (get_normal w54) shifted by p91; t27 := (align (p91 -- p92) with_axis y_axis) rotated (0, -90); w54 *= t27; % message "w54:"; % show w54; p93 := get_point 0 w54; p94 := get_point 1 w54; p95 := get_point 2 w54; ang_1 := (p66 - p65) angle (p93 - p95); % message "(p66 - p65) angle (p93 - p95):"; % show (p66 - p65) angle (p93 - p95); t28 := identity rotated (0, -ang_1); w54 *= p93 *= p94 *= p95 *= t28; t29 := identity shifted by (p66 - p93); w54 *= p93 *= p94 *= p95 *= t29; % message "After rotation and shifting: (p66 - p65) angle (p93 - p95):"; % show (p66 - p65) angle (p93 - p95); % message "(p66 - p65):"; % show (p66 - p65); % message "(p93 - p95):"; % show (p93 - p95); %draw w54 with_color gray; draw (get_point 0 w54) -- (get_point 1 w54) dashed evenly with_pen dashed_pen; draw (get_point 1 w54) -- (get_point 2 w54) with_pen border_pen; % label("$w_{54}$", get_center w54); % dotlabel.lrt("$p_{93}$", p93); % dotlabel.rt("$p_{94}$", p94); %dotlabel.ulft("$p_{95}$", p95); %% ***** (5) set w56 with_points (p7, p9, p3); p101 := mediate(p7, p3); p102 := mediate(p101, p9); p103 := get_normal w56; shift p103 by p102; t31 := (align (p102 -- p103) with_axis y_axis) rotated (0, -90); w56 *= t31; p104 := get_point 0 w56; p105 := get_point 1 w56; p106 := get_point 2 w56; ang_1 := (p94 - p93) angle (p105 - p106); t32 := identity rotated (0, ang_1); p104 *= p105 *= p106 *= w56 *= t32; t33 := identity shifted by (p66 - p106); p104 *= p105 *= p106 *= w56 *= t33; %draw w56 with_color gray; draw (get_point 0 w56) -- (get_point 1 w56) dashed evenly with_pen dashed_pen; draw (get_point 0 w56) -- (get_point 2 w56) dashed evenly with_pen dashed_pen; if do_triangle_labels: label("$w_{56}$", get_center w56); fi; % dotlabel.lrt("$p_{104}$", p104); % dotlabel.llft("$p_{105}$", p105); % dotlabel.lft("$p_{106}$", p106); %% ***** (5) set w57 with_points (p7, p8, p9); p96 := mediate(p64, p9); p97 := get_normal w57; shift p97 by p96; t30 := ((align (p96 -- p97) with_axis y_axis) rotated (0, -90)); w57 *= t30; % message "w57:"; % show w57; p98 := get_point 0 w57; p99 := get_point 1 w57; p100 := get_point 2 w57; ang_1 := (p104 - p94) angle (p98 - p100); % message "show (p104 - p94) angle (p98 - p100):"; % show (p104 - p94) angle (p98 - p100); t34 := identity rotated (0, -ang_1); w57 *= p98 *= p99 *= p100 *= t34; % message "After rotation: show (p104 - p94) angle (p98 - p100):"; % show (p104 - p94) angle (p98 - p100); % message "(p104 - p94):"; % show (p104 - p94); % message "(p98 - p100):"; % show (p98 - p100); t35 := identity shifted by (p104 - p98); w57 *= p98 *= p99 *= p100 *= t35; %draw w57 with_color gray; draw (get_point 0 w57) -- (get_point 1 w57) with_pen border_pen; draw (get_point 1 w57) -- (get_point 2 w57) dashed evenly with_pen dashed_pen; if do_triangle_labels: label("$w_{57}$", get_center w57); fi; %dotlabel.urt("$p_{98}$", p98); % dotlabel.lft("$p_{99}$", p99); % dotlabel.top("$p_{100}$", p100); %% ***** (5) p107 := mediate(p98, p99); %dotlabel.bot("$p_{107}$", p107); w58 := w56; p108 := p66; t36 := identity rotated_around (p94, p107); p108 *= w58 *= t36; %draw w58 with_color gray; if do_triangle_labels: label("$w_{58}$", get_center w58); fi; draw (get_point 0 w58) -- (get_point 2 w58) dashed evenly with_pen dashed_pen; draw (get_point 1 w58) -- (get_point 2 w58) with_pen border_pen; %dotlabel.lft("$p_{108}$", p108); %% ***** (5) t37 := identity rotated_around (p99, p108); p109 := p104 * t37; p110 := p66 * t37; %dotlabel.lft("$p_{109}$", p109); %dotlabel.lft("$p_{110}$", p110); w59 := w54 * t37; w60 := w56 * t37; w61 := w57 * t37; w62 := w58 * t37; for i := 59 upto 62: % draw w[i] with_color gray; if do_triangle_labels: s := "$w_{" & decimal i & "}$"; label(s, get_center w[i]); fi; endfor; draw (get_point 0 w59) -- (get_point 1 w59) dashed evenly with_pen dashed_pen; draw (get_point 0 w59) -- (get_point 2 w59) with_pen border_pen; draw (get_point 1 w59) -- (get_point 2 w59) with_pen border_pen; draw (get_point 0 w60) -- (get_point 2 w60) dashed evenly with_pen dashed_pen; draw (get_point 0 w61) -- (get_point 1 w61) with_pen border_pen; draw (get_point 0 w61) -- (get_point 2 w61) dashed evenly with_pen dashed_pen; draw (get_point 1 w61) -- (get_point 2 w61) dashed evenly with_pen dashed_pen; draw (get_point 1 w62) -- (get_point 2 w62) dashed evenly with_pen dashed_pen; %% ***** (5) t38 := identity rotated_around (p98, p66); p111 := p109 * t38; p112 := p110 * t38; %dotlabel.rt("$p_{111}$", p111); %dotlabel.rt("$p_{112}$", p112); w63 := w54 * t38; w64 := w56 * t38; w65 := w57 * t38; w66 := w58 * t38; w67 := w59 * t38; w68 := w60 * t38; w69 := w61 * t38; w70 := w62 * t38; for i := 63 upto 70: %draw w[i] with_color gray; if do_triangle_labels: s := "$w_{" & decimal i & "}$"; label(s, get_center w[i]); fi; endfor; draw (get_point 0 w63) -- (get_point 1 w63) dashed evenly with_pen dashed_pen; draw (get_point 0 w63) -- (get_point 2 w63) with_pen border_pen; draw (get_point 1 w63) -- (get_point 2 w63) with_pen border_pen; draw (get_point 0 w64) -- (get_point 1 w64) dashed evenly with_pen dashed_pen; draw (get_point 0 w65) -- (get_point 1 w65) with_pen border_pen; draw (get_point 1 w65) -- (get_point 2 w65) dashed evenly with_pen dashed_pen; draw (get_point 0 w66) -- (get_point 2 w66) dashed evenly with_pen dashed_pen; draw (get_point 1 w66) -- (get_point 2 w66) with_pen border_pen; draw (get_point 0 w67) -- (get_point 1 w67) dashed evenly with_pen dashed_pen; draw (get_point 0 w67) -- (get_point 2 w67) with_pen border_pen; draw (get_point 1 w67) -- (get_point 2 w67) with_pen border_pen; draw (get_point 0 w68) -- (get_point 2 w68) dashed evenly with_pen dashed_pen; draw (get_point 0 w69) -- (get_point 1 w69) with_pen border_pen; draw (get_point 0 w69) -- (get_point 2 w69) dashed evenly with_pen dashed_pen; draw (get_point 1 w69) -- (get_point 2 w69) dashed evenly with_pen dashed_pen; draw (get_point 1 w70) -- (get_point 2 w70) with_pen border_pen; label("\vbox{\hbox{Row 2,}\hbox{Type 1}}", get_center w63 shifted (0, 0, .125)); label("\vbox{\hbox{Row 2,}\hbox{Type 2}}", get_center w64 shifted (0, 0, 0)); label("\vbox{\hbox{Row 2,}\hbox{Type 2}}", get_center w66 shifted (0, 0, 0)); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w65); % endfor; p179 := mediate(get_point 2 w65, mediate(get_point 0 w65, get_point 1 w65)); label("\vbox{\hbox{Row 2,}\hbox{Type 3}}", p179 shifted (0, 0, .25)); %% ***** (5) t39 := identity rotated_around (p111, p112); w71 := w54 * t39; w72 := w56 * t39; w73 := w57 * t39; w74 := w58 * t39; w75 := w59 * t39; w76 := w60 * t39; w77 := w61 * t39; w78 := w62 * t39; w79 := w63 * t39; w80 := w64 * t39; w81 := w65 * t39; w82 := w66 * t39; w83 := w67 * t39; w84 := w68 * t39; w85 := w69 * t39; w86 := w70 * t39; for i := 71 upto 86: %draw w[i] with_color gray; if do_triangle_labels: s := "$w_{" & decimal i & "}$"; label(s, get_center w[i]); fi; endfor; draw (get_point 0 w71) -- (get_point 1 w71) dashed evenly with_pen dashed_pen; draw (get_point 0 w71) -- (get_point 2 w71) with_pen border_pen; draw (get_point 1 w71) -- (get_point 2 w71) with_pen border_pen; draw (get_point 0 w72) -- (get_point 2 w72) dashed evenly with_pen dashed_pen; draw (get_point 0 w73) -- (get_point 1 w73) with_pen border_pen; draw (get_point 0 w73) -- (get_point 2 w73) dashed evenly with_pen dashed_pen; draw (get_point 1 w73) -- (get_point 2 w73) dashed evenly with_pen dashed_pen; draw (get_point 0 w74) -- (get_point 2 w74) dashed evenly with_pen dashed_pen; draw (get_point 1 w74) -- (get_point 2 w74) with_pen border_pen; draw (get_point 0 w75) -- (get_point 1 w75) dashed evenly with_pen dashed_pen; draw (get_point 0 w75) -- (get_point 2 w75) with_pen border_pen; draw (get_point 1 w75) -- (get_point 2 w75) with_pen border_pen; draw (get_point 0 w76) -- (get_point 2 w76) with_pen border_pen; draw (get_point 0 w77) -- (get_point 1 w77) with_pen border_pen; draw (get_point 0 w77) -- (get_point 2 w77) dashed evenly with_pen dashed_pen; draw (get_point 1 w77) -- (get_point 2 w77) dashed evenly with_pen dashed_pen; draw (get_point 1 w78) -- (get_point 2 w78) with_pen border_pen; draw (get_point 0 w79) -- (get_point 1 w79) dashed evenly with_pen dashed_pen; draw (get_point 0 w79) -- (get_point 2 w79) with_pen border_pen; draw (get_point 1 w79) -- (get_point 2 w79) with_pen border_pen; draw (get_point 0 w81) -- (get_point 1 w81) with_pen border_pen; draw (get_point 0 w81) -- (get_point 2 w81) dashed evenly with_pen dashed_pen; draw (get_point 1 w81) -- (get_point 2 w81) dashed evenly with_pen dashed_pen; draw (get_point 0 w82) -- (get_point 2 w82) dashed evenly with_pen dashed_pen; draw (get_point 1 w82) -- (get_point 2 w82) with_pen border_pen; draw (get_point 0 w83) -- (get_point 1 w83) dashed evenly with_pen dashed_pen; draw (get_point 0 w83) -- (get_point 2 w83) with_pen border_pen; draw (get_point 1 w83) -- (get_point 2 w83) with_pen border_pen; draw (get_point 0 w85) -- (get_point 1 w85) with_pen border_pen; draw (get_point 0 w85) -- (get_point 2 w85) dashed evenly with_pen dashed_pen; draw (get_point 1 w85) -- (get_point 2 w85) dashed evenly with_pen dashed_pen; draw (get_point 1 w86) -- (get_point 2 w86) with_pen border_pen; %% ***** (5) t40 := identity rotated_around (p109, p110); w87 := w54 * t40; w88 := w56 * t40; w89 := w57 * t40; w90 := w58 * t40; w91 := w59 * t40; w92 := w60 * t40; w93 := w61 * t40; w94 := w62 * t40; w95 := w63 * t40; w96 := w64 * t40; w97 := w65 * t40; w98 := w66 * t40; w99 := w67 * t40; w100 := w68 * t40; w101 := w69 * t40; w102 := w70 * t40; for i := 87 upto 102: %draw w[i] with_color gray; if do_triangle_labels: s := "$w_{" & decimal i & "}$"; label(s, get_center w[i]); fi; endfor; draw (get_point 0 w87) -- (get_point 1 w87) dashed evenly with_pen dashed_pen; draw (get_point 0 w87) -- (get_point 2 w87) with_pen border_pen; draw (get_point 1 w87) -- (get_point 2 w87) with_pen border_pen; draw (get_point 0 w88) -- (get_point 2 w88) dashed evenly with_pen dashed_pen; draw (get_point 0 w89) -- (get_point 1 w89) with_pen border_pen; draw (get_point 0 w89) -- (get_point 2 w89) dashed evenly with_pen dashed_pen; draw (get_point 1 w89) -- (get_point 2 w89) dashed evenly with_pen dashed_pen; draw (get_point 0 w90) -- (get_point 2 w90) dashed evenly with_pen dashed_pen; draw (get_point 1 w90) -- (get_point 2 w90) with_pen border_pen; draw (get_point 0 w91) -- (get_point 1 w91) dashed evenly with_pen dashed_pen; draw (get_point 0 w91) -- (get_point 2 w91) with_pen border_pen; draw (get_point 1 w91) -- (get_point 2 w91) with_pen border_pen; draw (get_point 0 w93) -- (get_point 1 w93) with_pen border_pen; draw (get_point 0 w93) -- (get_point 2 w93) dashed evenly with_pen dashed_pen; draw (get_point 1 w93) -- (get_point 2 w93) dashed evenly with_pen dashed_pen; draw (get_point 1 w94) -- (get_point 2 w94) with_pen border_pen; draw (get_point 0 w95) -- (get_point 1 w95) dashed evenly with_pen dashed_pen; draw (get_point 0 w95) -- (get_point 2 w95) with_pen border_pen; draw (get_point 1 w95) -- (get_point 2 w95) with_pen border_pen; draw (get_point 0 w97) -- (get_point 1 w97) with_pen border_pen; draw (get_point 0 w97) -- (get_point 2 w97) dashed evenly with_pen dashed_pen; draw (get_point 1 w97) -- (get_point 2 w97) dashed evenly with_pen dashed_pen; draw (get_point 0 w98) -- (get_point 2 w98) dashed evenly with_pen dashed_pen; draw (get_point 1 w98) -- (get_point 2 w98) with_pen border_pen; draw (get_point 0 w99) -- (get_point 1 w99) dashed evenly with_pen dashed_pen; draw (get_point 0 w99) -- (get_point 2 w99) with_pen border_pen; draw (get_point 1 w99) -- (get_point 2 w99) with_pen border_pen; draw (get_point 0 w100) -- (get_point 2 w100) with_pen border_pen; draw (get_point 0 w101) -- (get_point 1 w101) with_pen border_pen; draw (get_point 0 w101) -- (get_point 2 w101) dashed evenly with_pen dashed_pen; draw (get_point 1 w101) -- (get_point 2 w101) dashed evenly with_pen dashed_pen; draw (get_point 1 w102) -- (get_point 2 w102) with_pen border_pen; %% **** (4) Third row. %% ***** (5) set w103 with_points (p7, p8, p15); p113 := mediate(p64, p15); p114 := (get_normal w103) shifted by p113; t41 := (align (p113 -- p114) with_axis y_axis) rotated (0, 90); w103 *= t41; p115 := get_point 0 w103; p116 := get_point 1 w103; p117 := get_point 2 w103; % message "w103:"; % show w103; % message "(p104 - p99):"; % show (p104 - p99); % message "(p116 - p115):"; % show (p116 - p115); % message "magnitude(p104 - p99):"; % show magnitude(p104 - p99); % message "magnitude(p116 - p115):"; % show magnitude(p116 - p115); % message "(p104 - p99) angle (p116 - p115):"; % show (p104 - p99) angle (p116 - p115); ang_1 := (p104 - p99) angle (p116 - p115); t42 := identity rotated (0, -ang_1); w103 *= p115 *= p116 *= p117 *= t42; % message "After rotation: (p104 - p99):"; % show (p104 - p99); % message "(p116 - p115):"; % show (p116 - p115); % message "magnitude(p104 - p99):"; % show magnitude(p104 - p99); % message "magnitude(p116 - p115):"; % show magnitude(p116 - p115); % message "(p104 - p99) angle (p116 - p115):"; % show (p104 - p99) angle (p116 - p115); t43 := identity shifted by (p104 - p116) shifted (0, 0, 1); w103 *= p115 *= p116 *= p117 *= t43; %dotlabel.ulft("$p_{115}$", p115); %dotlabel.urt("$p_{116}$", p116); %dotlabel.bot("$p_{117}$", p117); p118 := mediate(p107, p117); %% ***** (5) set w104 with_points (p13, p15, p7); p119 := mediate(p13, p7); p120 := mediate(p119, p15); p121 := (get_normal w104) shifted by p120; t44 := (align (p120 -- p121) with_axis y_axis) rotated (0, -90); w104 *= t44; % message "w104:"; % show w104; p122 := get_point 0 w104; p123 := get_point 1 w104; p124 := get_point 2 w104; % message "(p123 - p124):"; % show (p123 - p124); % message "(p117 - p116):"; % show (p117 - p116); % message "(p123 - p124) angle (p117 - p116):"; % show (p123 - p124) angle (p117 - p116); ang_1 := (p123 - p124) angle (p117 - p116); t45 := identity rotated (0, ang_1); w104 *= p122 *= p123 *= p124 *= t45; t46 := identity shifted by (p117 - p123); w104 *= p122 *= p123 *= p124 *= t46; % message "After rotation and shifting: w104:"; % show w104; % message "(p123 - p124):"; % show (p123 - p124); % message "(p117 - p116):"; % show (p117 - p116); % message "(p123 - p124) angle (p117 - p116):"; % show (p123 - p124) angle (p117 - p116); %dotlabel.lrt("$p_{122}$", p122); %dotlabel.rt("$p_{123}$", p123); %dotlabel.bot("$p_{124}$", p124); %% ***** (5) set w105 with_points (p13, p14, p15); p125 := mediate(p13, p14); p126 := mediate(p15, p125); p127 := (get_normal w105) shifted p126; t47 := (align (p126 -- p127) with_axis y_axis) rotated (0, -90); w105 *= t47; p128 := get_point 0 w105; p129 := get_point 1 w105; p130 := get_point 2 w105; ang_1 := (p128 - p130) angle (p122 - p117); t48 := identity rotated (0, -ang_1); w105 *= p128 *= p129 *= p130 *= t48; t49 := identity shifted by (p122 - p128); w105 *= p128 *= p129 *= p130 *= t49; % message "After rotation and shifting: w105:"; % show w105; % message "(p128 - p130):"; % show (p128 - p130); % message "(p122 - p117):"; % show (p122 - p117); % message "(p128 - p130) angle (p122 - p117):"; % show (p128 - p130) angle (p122 - p117); %dotlabel.lrt("$p_{128}$", p128); %dotlabel.llft("$p_{129}$", p129); %dotlabel.rt("$p_{130}$", p130); p131 := mediate(p122, p129); %dotlabel.top("$p_{131}$", p131); %% ***** (5) w106 := w104 rotated_around (p131, p117); %% This doesn't place the labels correctly for all the triangles, %% but it doesn't really matter. %% LDF 2010.08.13. if do_triangle_labels: for i = 103 upto 106: p178 := mediate(get_point 2 w[i], mediate(get_point 0 w[i], get_point 1 w[i])); %draw w[i] with_color gray; s := "$w_{" & decimal i & "}$"; label(s, p178); endfor; fi; % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w103) with_text_color blue; % dotlabel.top(i, get_point (i) w104) with_text_color red; % dotlabel.top(i, get_point (i) w105) with_text_color green; % dotlabel.top(i, get_point (i) w106) with_text_color cyan; % endfor; draw (get_point 0 w103) -- (get_point 1 w103) with_pen border_pen; draw (get_point 0 w103) -- (get_point 2 w103) with_pen border_pen; draw (get_point 1 w103) -- (get_point 2 w103) dashed evenly with_pen dashed_pen; draw (get_point 0 w104) -- (get_point 2 w104) dashed evenly with_pen dashed_pen; draw (get_point 0 w105) -- (get_point 1 w105) with_pen border_pen; draw (get_point 0 w105) -- (get_point 2 w105) dashed evenly with_pen dashed_pen; draw (get_point 1 w105) -- (get_point 2 w105) dashed evenly with_pen dashed_pen; draw (get_point 0 w106) -- (get_point 2 w106) dashed evenly with_pen dashed_pen; draw (get_point 1 w106) -- (get_point 2 w106) with_pen border_pen; p179 := mediate(get_point 2 w103, mediate(get_point 0 w103, get_point 1 w103)); label("\vbox{\small{\hbox{Row 3,}\vskip-.2cm\hbox{Type 1}}}", p179 shifted (0, 0, -.125cm)); label("\vbox{\small{\hbox{Row 3,}\vskip-.2cm\hbox{Type 2}}}", get_center w104 shifted (0, 0, 0)); label("\vbox{\small{\hbox{Row 3,}\vskip-.2cm\hbox{Type 2}}}", get_center w106 shifted (0, 0, 0)); p179 := mediate(get_point 2 w105, mediate(get_point 0 w105, get_point 1 w105)); label("\vbox{\small{\hbox{Row 3,}\vskip-.2cm\hbox{Type 3}}}", p179 shifted (0, 0, .25cm)); %% ***** (5) p132 := get_point 2 w106; %dotlabel.ulft("$p_{132}$", p132); t50 := identity rotated_around (p122, p116); w107 := w103 * t50; w108 := w104 * t50; w109 := w105 * t50; w110 := w106 * t50; % for i := 107 upto 110: % %draw w[i] with_color gray; % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % endfor; draw (get_point 0 w107) -- (get_point 1 w107) with_pen border_pen; draw (get_point 0 w107) -- (get_point 2 w107) with_pen border_pen; draw (get_point 1 w107) -- (get_point 2 w107) dashed evenly with_pen dashed_pen; draw (get_point 0 w109) -- (get_point 1 w109) with_pen border_pen; draw (get_point 0 w109) -- (get_point 2 w109) dashed evenly with_pen dashed_pen; draw (get_point 1 w109) -- (get_point 2 w109) dashed evenly with_pen dashed_pen; draw (get_point 0 w110) -- (get_point 2 w110) dashed evenly with_pen dashed_pen; draw (get_point 1 w110) -- (get_point 2 w110) with_pen border_pen; %% ***** (5) p133 := get_point 0 w110; p134 := get_point 2 w110; %dotlabel.lrt("$p_{133}$", p133); %dotlabel.top("$p_{134}$", p134); t51 := identity rotated_around (p133, p134); w111 := w103 * t51; w112 := w104 * t51; w113 := w105 * t51; w114 := w106 * t51; w115 := w107 * t51; w116 := w108 * t51; w117 := w109 * t51; w118 := w110 * t51; % for i := 111 upto 118: % %draw w[i] with_color gray; % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % endfor; draw (get_point 0 w111) -- (get_point 1 w111) with_pen border_pen; draw (get_point 0 w111) -- (get_point 2 w111) with_pen border_pen; draw (get_point 1 w111) -- (get_point 2 w111) dashed evenly with_pen dashed_pen; draw (get_point 0 w112) -- (get_point 2 w112) dashed evenly with_pen dashed_pen; draw (get_point 0 w113) -- (get_point 1 w113) with_pen border_pen; draw (get_point 0 w113) -- (get_point 2 w113) dashed evenly with_pen dashed_pen; draw (get_point 1 w113) -- (get_point 2 w113) dashed evenly with_pen dashed_pen; draw (get_point 0 w114) -- (get_point 2 w114) dashed evenly with_pen dashed_pen; draw (get_point 1 w114) -- (get_point 2 w114) with_pen border_pen; draw (get_point 0 w115) -- (get_point 1 w115) with_pen border_pen; draw (get_point 0 w115) -- (get_point 2 w115) with_pen border_pen; draw (get_point 1 w115) -- (get_point 2 w115) dashed evenly with_pen dashed_pen; draw (get_point 0 w117) -- (get_point 1 w117) with_pen border_pen; draw (get_point 0 w117) -- (get_point 2 w117) dashed evenly with_pen dashed_pen; draw (get_point 1 w117) -- (get_point 2 w117) dashed evenly with_pen dashed_pen; draw (get_point 1 w118) -- (get_point 2 w118) with_pen border_pen; %% ***** (5) p135 := get_point 0 w114; p136 := get_point 2 w114; % dotlabel.top("$p_{135}$", p135); % dotlabel.top("$p_{136}$", p136); t52 := identity rotated_around (p135, p136); w119 := w107 * t52; w120 := w108 * t52; w121 := w109 * t52; w122 := w110 * t52; w123 := w111 * t52; w124 := w112 * t52; w125 := w113 * t52; w126 := w114 * t52; w127 := w115 * t52; w128 := w116 * t52; w129 := w117 * t52; w130 := w118 * t52; % for i := 119 upto 130: % %draw w[i] with_color gray; % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % endfor; draw (get_point 0 w119) -- (get_point 1 w119) with_pen border_pen; draw (get_point 0 w119) -- (get_point 2 w119) with_pen border_pen; draw (get_point 1 w119) -- (get_point 2 w119) dashed evenly with_pen dashed_pen; draw (get_point 0 w120) -- (get_point 2 w120) with_pen border_pen; draw (get_point 0 w121) -- (get_point 1 w121) with_pen border_pen; draw (get_point 0 w121) -- (get_point 2 w121) dashed evenly with_pen dashed_pen; draw (get_point 1 w121) -- (get_point 2 w121) dashed evenly with_pen dashed_pen; draw (get_point 0 w122) -- (get_point 2 w122) dashed evenly with_pen dashed_pen; draw (get_point 1 w122) -- (get_point 2 w122) with_pen border_pen; draw (get_point 0 w123) -- (get_point 1 w123) with_pen border_pen; draw (get_point 0 w123) -- (get_point 2 w123) with_pen border_pen; draw (get_point 1 w123) -- (get_point 2 w123) dashed evenly with_pen dashed_pen; draw (get_point 0 w124) -- (get_point 2 w124) dashed evenly with_pen dashed_pen; draw (get_point 0 w125) -- (get_point 1 w125) with_pen border_pen; draw (get_point 0 w125) -- (get_point 2 w125) dashed evenly with_pen dashed_pen; draw (get_point 1 w125) -- (get_point 2 w125) dashed evenly with_pen dashed_pen; draw (get_point 0 w126) -- (get_point 2 w126) dashed evenly with_pen dashed_pen; draw (get_point 1 w126) -- (get_point 2 w126) with_pen border_pen; draw (get_point 0 w127) -- (get_point 1 w127) with_pen border_pen; draw (get_point 0 w127) -- (get_point 2 w127) with_pen border_pen; draw (get_point 1 w127) -- (get_point 2 w127) dashed evenly with_pen dashed_pen; draw (get_point 0 w129) -- (get_point 1 w129) with_pen border_pen; draw (get_point 0 w129) -- (get_point 2 w129) dashed evenly with_pen dashed_pen; draw (get_point 1 w129) -- (get_point 2 w129) dashed evenly with_pen dashed_pen; draw (get_point 1 w130) -- (get_point 2 w130) with_pen border_pen; %% ***** (5) Left side t53 := identity rotated_around (p129, p132); w131 := w103 * t53; w132 := w104 * t53; w133 := w105 * t53; w134 := w106 * t53; w135 := w107 * t53; w136 := w108 * t53; w137 := w109 * t53; w138 := w110 * t53; w139 := w111 * t53; w140 := w112 * t53; w141 := w113 * t53; w142 := w114 * t53; w143 := w115 * t53; w144 := w116 * t53; w145 := w117 * t53; w146 := w118 * t53; w147 := w123 * t53; w148 := w124 * t53; w149 := w125 * t53; w150 := w126 * t53; % for i := 131 upto 150: % %draw w[i] with_color gray; % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % endfor; draw (get_point 0 w131) -- (get_point 1 w131) with_pen border_pen; draw (get_point 0 w131) -- (get_point 2 w131) with_pen border_pen; draw (get_point 1 w131) -- (get_point 2 w131) dashed evenly with_pen dashed_pen; draw (get_point 0 w132) -- (get_point 2 w132) dashed evenly with_pen dashed_pen; draw (get_point 0 w133) -- (get_point 1 w133) with_pen border_pen; draw (get_point 0 w133) -- (get_point 2 w133) dashed evenly with_pen dashed_pen; draw (get_point 1 w133) -- (get_point 2 w133) dashed evenly with_pen dashed_pen; draw (get_point 1 w134) -- (get_point 2 w134) with_pen border_pen; draw (get_point 0 w135) -- (get_point 1 w135) with_pen border_pen; draw (get_point 0 w135) -- (get_point 2 w135) with_pen border_pen; draw (get_point 1 w135) -- (get_point 2 w135) dashed evenly with_pen dashed_pen; draw (get_point 0 w137) -- (get_point 1 w137) with_pen border_pen; draw (get_point 0 w137) -- (get_point 2 w137) dashed evenly with_pen dashed_pen; draw (get_point 1 w137) -- (get_point 2 w137) dashed evenly with_pen dashed_pen; draw (get_point 0 w138) -- (get_point 2 w138) dashed evenly with_pen dashed_pen; draw (get_point 1 w138) -- (get_point 2 w138) with_pen border_pen; draw (get_point 0 w139) -- (get_point 1 w139) with_pen border_pen; draw (get_point 0 w139) -- (get_point 2 w139) with_pen border_pen; draw (get_point 1 w139) -- (get_point 2 w139) dashed evenly with_pen dashed_pen; draw (get_point 0 w140) -- (get_point 2 w140) dashed evenly with_pen dashed_pen; draw (get_point 0 w141) -- (get_point 1 w141) with_pen border_pen; draw (get_point 0 w141) -- (get_point 2 w141) dashed evenly with_pen dashed_pen; draw (get_point 1 w141) -- (get_point 2 w141) dashed evenly with_pen dashed_pen; draw (get_point 0 w142) -- (get_point 2 w142) dashed evenly with_pen dashed_pen; draw (get_point 1 w142) -- (get_point 2 w142) with_pen border_pen; draw (get_point 0 w143) -- (get_point 1 w143) with_pen border_pen; draw (get_point 0 w143) -- (get_point 2 w143) with_pen border_pen; draw (get_point 1 w143) -- (get_point 2 w143) dashed evenly with_pen dashed_pen; draw (get_point 0 w145) -- (get_point 1 w145) with_pen border_pen; draw (get_point 0 w145) -- (get_point 2 w145) dashed evenly with_pen dashed_pen; draw (get_point 1 w145) -- (get_point 2 w145) dashed evenly with_pen dashed_pen; draw (get_point 1 w146) -- (get_point 2 w146) with_pen border_pen; draw (get_point 0 w147) -- (get_point 1 w147) with_pen border_pen; draw (get_point 0 w147) -- (get_point 2 w147) with_pen border_pen; draw (get_point 1 w147) -- (get_point 2 w147) dashed evenly with_pen dashed_pen; draw (get_point 0 w148) -- (get_point 2 w148) with_pen border_pen; draw (get_point 0 w149) -- (get_point 1 w149) with_pen border_pen; draw (get_point 0 w149) -- (get_point 2 w149) dashed evenly with_pen dashed_pen; draw (get_point 1 w149) -- (get_point 2 w149) dashed evenly with_pen dashed_pen; draw (get_point 1 w150) -- (get_point 2 w150) with_pen border_pen; %% **** (4) Poles %% ***** (5) First triangle % message "(p19 - p137):"; % show (p19 - p137); % message "magnitude(p19 - p137):"; % show magnitude(p19 - p137); p138 := mediate(p129, p122); %dotlabel.bot("$p_{138}$", p138); p139 := ((magnitude(p19 - p137) * unit_vector (p122 - p138)) rotated (0, 90)) shifted by p138; % message "p139:"; % show p139; % message "magnitude(p139 - p138):"; % show magnitude(p139 - p138); % message "(p122 - p129) angle (p139 - p138):"; % show (p122 - p129) angle (p139 - p138); %dotlabel.rt("$p_{139}$", p139); %pause; set w151 with_points (p122, p129, p139); t54 := identity shifted by (p84 - p129) shifted (1, 0, 1); w151 *= t54; p140 := get_point 0 w151; p141 := get_point 1 w151; p142 := get_point 2 w151; % dotlabel.rt("$p_{140}$", p140); % dotlabel.lft("$p_{141}$", p141); % dotlabel.rt("$p_{142}$", p142); %% ***** (5) t55 := identity rotated_around (p141, p142); p143 := p140 * t55; w152 := w151 * t55; %dotlabel.lft("$p_{143}$", p143); t56 := identity rotated_around (p142, p143); p144 := p140 * t56; w153 := w151 * t56; w154 := w152 * t56; %dotlabel.lft("$p_{144}$", p144); %% ***** (5) t56 := identity rotated_around (p142, p144); p145 := p140 * t56; w155 := w151 * t56; w156 := w152 * t56; w157 := w153 * t56; w158 := w154 * t56; %dotlabel.lft("$p_{145}$", p145); %% ***** (5) t57 := identity rotated_around (p142, p145); p146 := p140 * t57; w159 := w155 * t57; w160 := w156 * t57; w161 := w157 * t57; w162 := w158 * t57; %dotlabel.lft("$p_{146}$", p146); t67 := identity shifted (1.25, 0); %% This separates the triangles for the pyramids that make up the poles %% into two halves. This was necessary because otherwise the gap between %% the two triangles at the ends is too small. (The pyramid is very nearly %% flat). %% !! If I need the points that were used to make the triangles, I will have %% transform them, too. %% LDF 2010.07.16. w155 *= w156 *= w159 *= w160 *= w161 *= w162 *= t67; for i := 151 upto 162: % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % draw w[i] with_color gray; draw (get_point 0 w[i]) -- (get_point 1 w[i]) with_pen border_pen; endfor; handle_blob {(get_point 1 w151), (get_point 2 w151), .80, 1.4}; handle_blob {(get_point 0 w152), (get_point 2 w152), .80, 1.4}; handle_blob {(get_point 0 w153), (get_point 2 w153), .80, 1.4}; handle_blob {(get_point 1 w158), (get_point 2 w158), .80, 1.4}; draw (get_point 2 w154) -- mediate((get_point 1 w154), (get_point 2 w154), 1.4) dashed evenly with_pen dashed_pen with_color gray; draw (get_point 0 w151) -- (get_point 2 w151) with_pen border_pen; draw (get_point 1 w154) -- (get_point 2 w154) dashed evenly with_pen dashed_pen; draw (get_point 0 w158) -- (get_point 2 w158) with_pen border_pen; handle_blob {(get_point 0 w155), (get_point 2 w155), .80, 1.4}; handle_blob {(get_point 1 w156), (get_point 2 w156), .80, 1.4}; draw (get_point 2 w159) -- mediate((get_point 1 w159), (get_point 2 w159), 1.4) dashed evenly with_pen dashed_pen with_color gray; handle_blob {(get_point 0 w160), (get_point 2 w160), .80, 1.4}; handle_blob {(get_point 1 w161), (get_point 2 w161), .80, 1.4}; % draw (get_point 0 w160) -- (get_point 2 w160) dashed evenly with_pen dashed_pen; % draw (get_point 1 w161) -- (get_point 2 w161) dashed evenly with_pen dashed_pen; draw (get_point 0 w156) -- (get_point 2 w156) with_pen border_pen; draw (get_point 1 w159) -- (get_point 2 w159) dashed evenly with_pen dashed_pen; draw (get_point 0 w161) -- (get_point 2 w161) with_pen border_pen; label("Pole 2", (get_point 1 w153) shifted (-.5, 0)); %% ***** (5) Pole 1 t58 := identity shifted (0, 0, 4.5); w163 := w151 * t58; w164 := w152 * t58; w165 := w153 * t58; w166 := w154 * t58; w167 := w155 * t58; w168 := w156 * t58; w169 := w157 * t58; w170 := w158 * t58; w171 := w159 * t58; w172 := w160 * t58; w173 := w161 * t58; w174 := w162 * t58; for i := 163 upto 174: % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % draw w[i] with_color gray; draw (get_point 0 w[i]) -- (get_point 1 w[i]) with_pen border_pen; endfor; handle_blob {(get_point 1 w163), (get_point 2 w163), .80, 1.4}; handle_blob {(get_point 0 w164), (get_point 2 w164), .80, 1.4}; handle_blob {(get_point 0 w165), (get_point 2 w165), .80, 1.4}; handle_blob {(get_point 1 w170), (get_point 2 w170), .80, 1.4}; handle_blob {(get_point 0 w167), (get_point 2 w167), .80, 1.4}; handle_blob {(get_point 1 w168), (get_point 2 w168), .80, 1.4}; handle_blob {(get_point 1 w171), (get_point 2 w171), .80, 1.4}; handle_blob {(get_point 0 w172), (get_point 2 w172), .80, 1.4}; handle_blob {(get_point 1 w173), (get_point 2 w173), .80, 1.4}; draw (get_point 0 w163) -- (get_point 2 w163) with_pen border_pen; draw (get_point 0 w170) -- (get_point 2 w170) with_pen border_pen; draw (get_point 0 w168) -- (get_point 2 w168) with_pen border_pen; draw (get_point 0 w173) -- (get_point 2 w173) with_pen border_pen; draw (get_point 1 w166) -- (get_point 2 w166) dashed evenly with_pen dashed_pen; draw (get_point 2 w166) -- mediate((get_point 1 w166), (get_point 2 w166), 1.4) dashed evenly with_pen dashed_pen with_color gray; p147 := p140 * t58; p148 := p141 * t58; label("Pole 1", (get_point 1 w165) shifted (-.5, 0)); %% ***** (5) Extra poles %% ****** (6) Extra pole 2 t68 := identity shifted (0, 0, -17); k := 271; %% up to 294. for i := 151 upto 174: w[k] := w[i] * t68; % draw w[k] with_color gray; % s := "$w_{" & decimal k & "}$"; % label(s, get_center w[k]); k += 1; endfor; for i := 271 upto 282: draw (get_point 0 w[i]) -- (get_point 1 w[i]) with_pen border_pen; endfor; handle_blob {(get_point 1 w271), (get_point 2 w271), .80, 1.4}; handle_blob {(get_point 0 w272), (get_point 2 w272), .80, 1.4}; handle_blob {(get_point 0 w273), (get_point 2 w273), .80, 1.4}; handle_blob {(get_point 1 w278), (get_point 2 w278), .80, 1.4}; draw (get_point 2 w274) -- mediate((get_point 1 w274), (get_point 2 w274), 1.4) dashed evenly with_pen dashed_pen with_color gray; draw (get_point 0 w271) -- (get_point 2 w271) with_pen border_pen; draw (get_point 1 w274) -- (get_point 2 w274) dashed evenly with_pen dashed_pen; draw (get_point 0 w278) -- (get_point 2 w278) with_pen border_pen; handle_blob {(get_point 0 w275), (get_point 2 w275), .80, 1.4}; handle_blob {(get_point 1 w276), (get_point 2 w276), .80, 1.4}; draw (get_point 2 w279) -- mediate((get_point 1 w279), (get_point 2 w279), 1.4) dashed evenly with_pen dashed_pen with_color gray; handle_blob {(get_point 0 w280), (get_point 2 w280), .80, 1.4}; handle_blob {(get_point 1 w281), (get_point 2 w281), .80, 1.4}; % draw (get_point 0 w280) -- (get_point 2 w280) dashed evenly with_pen dashed_pen; % draw (get_point 1 w281) -- (get_point 2 w281) dashed evenly with_pen dashed_pen; draw (get_point 0 w276) -- (get_point 2 w276) with_pen border_pen; draw (get_point 1 w279) -- (get_point 2 w279) dashed evenly with_pen dashed_pen; draw (get_point 0 w281) -- (get_point 2 w281) with_pen border_pen; % for i := 0 upto 2: % dotlabel.top(i, get_point (i) w274) with_text_color blue; % endfor; label("Extra Pole 2", (get_point 1 w274) shifted (-.5, 0)); %% ****** (6) Extra Pole 1 for i := 283 upto 294: draw (get_point 0 w[i]) -- (get_point 1 w[i]) with_pen border_pen; endfor; handle_blob {(get_point 1 w283), (get_point 2 w283), .80, 1.4}; handle_blob {(get_point 0 w284), (get_point 2 w284), .80, 1.4}; handle_blob {(get_point 0 w285), (get_point 2 w285), .80, 1.4}; handle_blob {(get_point 1 w290), (get_point 2 w290), .80, 1.4}; handle_blob {(get_point 0 w287), (get_point 2 w287), .80, 1.4}; handle_blob {(get_point 1 w288), (get_point 2 w288), .80, 1.4}; handle_blob {(get_point 1 w291), (get_point 2 w291), .80, 1.4}; handle_blob {(get_point 0 w292), (get_point 2 w292), .80, 1.4}; handle_blob {(get_point 1 w293), (get_point 2 w293), .80, 1.4}; draw (get_point 0 w283) -- (get_point 2 w283) with_pen border_pen; draw (get_point 0 w290) -- (get_point 2 w290) with_pen border_pen; draw (get_point 0 w288) -- (get_point 2 w288) with_pen border_pen; draw (get_point 0 w293) -- (get_point 2 w293) with_pen border_pen; draw (get_point 1 w286) -- (get_point 2 w286) dashed evenly with_pen dashed_pen; draw (get_point 2 w286) -- mediate((get_point 1 w286), (get_point 2 w286), 1.4) dashed evenly with_pen dashed_pen with_color gray; % for i := 0 upto 2: % dotlabel.top(i, get_point (i) w286) with_text_color blue; % endfor; label("Extra Pole 1", (get_point 1 w286) shifted (-.5, 0)); %% ****** (6) End of extra poles %% ***** (5) End of Poles %% **** (4) The lower half, Second row, lower %% ***** (5) t59 := identity rotated_around (p65, p106) shifted (0, 0, -5); w175 := w54 * t59; w176 := w56 * t59; w177 := w57 * t59; w178 := w58 * t59; p149 := get_point 0 w175; p150 := get_point 2 w175; p151 := get_point 0 w10; % message "(p151 - p57) angle (p149 - p150):"; % show (p151 - p57) angle (p149 - p150); % message "(p151 - p57):"; % show (p151 - p57); % message "(p149 - p150):"; % show (p149 - p150); %show (p151 - p57) angle (p149 - p150); t60 := identity shifted by (p151 - p149); p149 *= p150 *= w175 *= w176 *= w177 *= w178 *= t60; %dotlabel.bot("$p_{149}$", p149); %dotlabel.bot("$p_{150}$", p150); %dotlabel.bot("$p_{151}$", p151); % for i = 175 upto 178: % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % % draw w[i] with_color gray; % endfor; draw (get_point 0 w175) -- (get_point 1 w175) dashed evenly with_pen dashed_pen; draw (get_point 1 w175) -- (get_point 2 w175) with_pen border_pen; draw (get_point 0 w176) -- (get_point 2 w176) dashed evenly with_pen dashed_pen; draw (get_point 0 w177) -- (get_point 1 w177) with_pen border_pen; draw (get_point 0 w177) -- (get_point 2 w177) dashed evenly with_pen dashed_pen; draw (get_point 1 w177) -- (get_point 2 w177) dashed evenly with_pen dashed_pen; draw (get_point 0 w178) -- (get_point 2 w178) dashed evenly with_pen dashed_pen; draw (get_point 1 w178) -- (get_point 2 w178) with_pen border_pen; %% ***** (5) % dotlabel.top(0, get_point 0 w178); % dotlabel.top(1, get_point 1 w178); % dotlabel.top(2, get_point 2 w178); p152 := get_point 0 w176; %dotlabel.lrt("$p_{152}$", p152); p153 := get_point 0 w178; %dotlabel.llft("$p_{153}$", p153); p154 := get_point 2 w178; %dotlabel.llft("$p_{154}$", p154); t61 := identity rotated_around (p151, p152); p155 := p153 * t61; p156 := p154 * t61; w179 := w175 * t61; w180 := w176 * t61; w181 := w177 * t61; w182 := w178 * t61; % for i = 179 upto 182: % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % %draw w[i] with_color gray; % endfor; % dotlabel.rt("$p_{155}$", p155); % dotlabel.rt("$p_{156}$", p156); draw (get_point 0 w179) -- (get_point 1 w179) dashed evenly with_pen dashed_pen; draw (get_point 0 w179) -- (get_point 2 w179) with_pen border_pen; draw (get_point 1 w179) -- (get_point 2 w179) with_pen border_pen; draw (get_point 0 w181) -- (get_point 1 w181) with_pen border_pen; draw (get_point 0 w181) -- (get_point 2 w181) dashed evenly with_pen dashed_pen; draw (get_point 1 w181) -- (get_point 2 w181) dashed evenly with_pen dashed_pen; draw (get_point 0 w182) -- (get_point 2 w182) dashed evenly with_pen dashed_pen; draw (get_point 1 w182) -- (get_point 2 w182) with_pen border_pen; %% ***** (5) t62 := identity rotated_around (p155, p156); p157 := p153 * t62; p158 := p154 * t62; w183 := w175 * t62; w184 := w176 * t62; w185 := w177 * t62; w186 := w178 * t62; w187 := w179 * t62; w188 := w180 * t62; w189 := w181 * t62; w190 := w182 * t62; % for i = 183 upto 190: % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % %draw w[i] with_color gray; % endfor; % dotlabel.rt("$p_{157}$", p157); % dotlabel.rt("$p_{158}$", p158); draw (get_point 0 w183) -- (get_point 1 w183) dashed evenly with_pen dashed_pen; draw (get_point 0 w183) -- (get_point 2 w183) with_pen border_pen; draw (get_point 1 w183) -- (get_point 2 w183) with_pen border_pen; draw (get_point 0 w184) -- (get_point 2 w184) dashed evenly with_pen dashed_pen; draw (get_point 0 w185) -- (get_point 1 w185) with_pen border_pen; draw (get_point 0 w185) -- (get_point 2 w185) dashed evenly with_pen dashed_pen; draw (get_point 1 w185) -- (get_point 2 w185) dashed evenly with_pen dashed_pen; draw (get_point 0 w186) -- (get_point 2 w186) dashed evenly with_pen dashed_pen; draw (get_point 1 w186) -- (get_point 2 w186) with_pen border_pen; draw (get_point 0 w187) -- (get_point 1 w187) dashed evenly with_pen dashed_pen; draw (get_point 0 w187) -- (get_point 2 w187) with_pen border_pen; draw (get_point 1 w187) -- (get_point 2 w187) with_pen border_pen; draw (get_point 0 w189) -- (get_point 1 w189) with_pen border_pen; draw (get_point 0 w189) -- (get_point 2 w189) dashed evenly with_pen dashed_pen; draw (get_point 1 w189) -- (get_point 2 w189) dashed evenly with_pen dashed_pen; draw (get_point 1 w190) -- (get_point 2 w190) with_pen border_pen; %% ***** (5) t63 := identity rotated_around (p157, p158); p159 := p155 * t63; p160 := p156 * t63; w191 := w183 * t63; w192 := w184 * t63; w193 := w185 * t63; w194 := w186 * t63; w195 := w187 * t63; w196 := w188 * t63; w197 := w189 * t63; w198 := w190 * t63; % for i = 191 upto 198: % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % %draw w[i] with_color gray; % endfor; % dotlabel.rt("$p_{159}$", p159); % dotlabel.rt("$p_{160}$", p160); draw (get_point 0 w191) -- (get_point 1 w191) dashed evenly with_pen dashed_pen; draw (get_point 0 w191) -- (get_point 2 w191) with_pen border_pen; draw (get_point 1 w191) -- (get_point 2 w191) with_pen border_pen; draw (get_point 0 w192) -- (get_point 2 w192) dashed evenly with_pen dashed_pen; draw (get_point 0 w193) -- (get_point 1 w193) with_pen border_pen; draw (get_point 0 w193) -- (get_point 2 w193) dashed evenly with_pen dashed_pen; draw (get_point 1 w193) -- (get_point 2 w193) dashed evenly with_pen dashed_pen; draw (get_point 1 w194) -- (get_point 2 w194) with_pen border_pen; draw (get_point 0 w195) -- (get_point 1 w195) dashed evenly with_pen dashed_pen; draw (get_point 0 w195) -- (get_point 2 w195) with_pen border_pen; draw (get_point 1 w195) -- (get_point 2 w195) with_pen border_pen; draw (get_point 0 w197) -- (get_point 1 w197) with_pen border_pen; draw (get_point 0 w197) -- (get_point 2 w197) dashed evenly with_pen dashed_pen; draw (get_point 1 w197) -- (get_point 2 w197) dashed evenly with_pen dashed_pen; draw (get_point 0 w198) -- (get_point 2 w198) with_pen border_pen; draw (get_point 1 w198) -- (get_point 2 w198) with_pen border_pen; %% ***** (5) t64 := identity rotated_around (p153, p154); p161 := p159 * t64; p162 := p160 * t64; w199 := w175 * t64; w200 := w176 * t64; w201 := w177 * t64; w202 := w178 * t64; w203 := w179 * t64; w204 := w180 * t64; w205 := w181 * t64; w206 := w182 * t64; w207 := w183 * t64; w208 := w184 * t64; w209 := w185 * t64; w210 := w186 * t64; w211 := w187 * t64; w212 := w188 * t64; w213 := w189 * t64; w214 := w190 * t64; w215 := w191 * t64; w216 := w192 * t64; w217 := w193 * t64; w218 := w194 * t64; w219 := w195 * t64; w220 := w196 * t64; w221 := w197 * t64; w222 := w198 * t64; % for i = 199 upto 222: % s := "$w_{" & decimal i & "}$"; % label(s, get_center w[i]); % %draw w[i] with_color gray; % endfor; % dotlabel.lft("$p_{161}$", p161); % dotlabel.lft("$p_{162}$", p162); draw (get_point 0 w199) -- (get_point 1 w199) dashed evenly with_pen dashed_pen; draw (get_point 0 w199) -- (get_point 2 w199) with_pen border_pen; draw (get_point 1 w199) -- (get_point 2 w199) with_pen border_pen; draw (get_point 0 w200) -- (get_point 2 w200) dashed evenly with_pen dashed_pen; draw (get_point 0 w201) -- (get_point 1 w201) with_pen border_pen; draw (get_point 0 w201) -- (get_point 2 w201) dashed evenly with_pen dashed_pen; draw (get_point 1 w201) -- (get_point 2 w201) dashed evenly with_pen dashed_pen; draw (get_point 1 w202) -- (get_point 2 w202) with_pen border_pen; draw (get_point 0 w203) -- (get_point 1 w203) dashed evenly with_pen dashed_pen; draw (get_point 0 w203) -- (get_point 2 w203) with_pen border_pen; draw (get_point 1 w203) -- (get_point 2 w203) with_pen border_pen; draw (get_point 0 w205) -- (get_point 1 w205) with_pen border_pen; draw (get_point 0 w205) -- (get_point 2 w205) dashed evenly with_pen dashed_pen; draw (get_point 1 w205) -- (get_point 2 w205) dashed evenly with_pen dashed_pen; draw (get_point 0 w206) -- (get_point 2 w206) dashed evenly with_pen dashed_pen; draw (get_point 1 w206) -- (get_point 2 w206) with_pen border_pen; draw (get_point 0 w207) -- (get_point 1 w207) dashed evenly with_pen dashed_pen; draw (get_point 0 w207) -- (get_point 2 w207) with_pen border_pen; draw (get_point 1 w207) -- (get_point 2 w207) with_pen border_pen; draw (get_point 0 w208) -- (get_point 2 w208) dashed evenly with_pen dashed_pen; draw (get_point 0 w209) -- (get_point 1 w209) with_pen border_pen; draw (get_point 0 w209) -- (get_point 2 w209) dashed evenly with_pen dashed_pen; draw (get_point 1 w209) -- (get_point 2 w209) dashed evenly with_pen dashed_pen; draw (get_point 0 w210) -- (get_point 2 w210) dashed evenly with_pen dashed_pen; draw (get_point 1 w210) -- (get_point 2 w210) with_pen border_pen; draw (get_point 0 w211) -- (get_point 1 w211) dashed evenly with_pen dashed_pen; draw (get_point 0 w211) -- (get_point 2 w211) with_pen border_pen; draw (get_point 1 w211) -- (get_point 2 w211) with_pen border_pen; draw (get_point 0 w213) -- (get_point 1 w213) with_pen border_pen; draw (get_point 0 w213) -- (get_point 2 w213) dashed evenly with_pen dashed_pen; draw (get_point 1 w213) -- (get_point 2 w213) dashed evenly with_pen dashed_pen; draw (get_point 1 w214) -- (get_point 2 w214) with_pen border_pen; draw (get_point 0 w215) -- (get_point 1 w215) dashed evenly with_pen dashed_pen; draw (get_point 0 w215) -- (get_point 2 w215) with_pen border_pen; draw (get_point 1 w215) -- (get_point 2 w215) with_pen border_pen; draw (get_point 0 w216) -- (get_point 2 w216) dashed evenly with_pen dashed_pen; draw (get_point 0 w217) -- (get_point 1 w217) with_pen border_pen; draw (get_point 0 w217) -- (get_point 2 w217) dashed evenly with_pen dashed_pen; draw (get_point 1 w217) -- (get_point 2 w217) dashed evenly with_pen dashed_pen; draw (get_point 1 w218) -- (get_point 2 w218) with_pen border_pen; draw (get_point 0 w219) -- (get_point 1 w219) dashed evenly with_pen dashed_pen; draw (get_point 0 w219) -- (get_point 2 w219) with_pen border_pen; draw (get_point 1 w219) -- (get_point 2 w219) with_pen border_pen; draw (get_point 0 w221) -- (get_point 1 w221) with_pen border_pen; draw (get_point 0 w221) -- (get_point 2 w221) dashed evenly with_pen dashed_pen; draw (get_point 1 w221) -- (get_point 2 w221) dashed evenly with_pen dashed_pen; draw (get_point 0 w222) -- (get_point 2 w222) with_pen border_pen; draw (get_point 1 w222) -- (get_point 2 w222) with_pen border_pen; %% **** (4) Third row, bottom %% ***** (5) t64 := identity rotated_around (get_point 0 w103, p116) shifted (0, 0, -10); j := 223; %% This creates triangles from w223 to w270. LDF 2010.07.14. for i := 103 upto 150: s := "$w_{" & decimal j & "}$"; w[j] := w[i] * t64; j += 1; endfor; % j -= 1; % message "j == "; % show j; %pause; %% ***** (5) % dotlabel.top(0, get_point 0 w227); % dotlabel.top(1, get_point 1 w227); % dotlabel.top(2, get_point 2 w227); p163 := get_point 0 w227; p164 := get_point 1 w227; %dotlabel.top("$p_{163}$", p163); %% Transformed below %dotlabel.top("$p_{164}$", p164); % message "(p152 - p153) angle (p163 - p164):"; % show (p152 - p153) angle (p163 - p164); p165 := p163 shifted (0, 1); ang_1 := (p152 - p153) angle (p163 - p164); t65 := identity rotated_around (p163, p165) ang_1; p164 *= t65; t66 := identity shifted (.5, 0, .5); p163 *= p164 *= t66; % dotlabel.top("$p_{164}$", p164); % dotlabel.top("$p_{163}$", p163); for i := 223 upto 270: w[i] *= t65; w[i] *= t66; %s := "$w_{" & decimal i & "}$"; %label(s, get_center w[i]); %draw w[i] with_color gray; endfor; %% LDF 2010.08.06. %% For this row, i.e., the third row, right (bottom), %% I just copied the commands for drawing the triangles w103 %% through w150 and replaced the names using the following Emacs-Lisp %% code: % (progn % (setq i 103) % (setq j 223) % (while (<= i 150) % (setq a (concat "w" (number-to-string i))) % (setq b (concat "w" (number-to-string j))) % (message (concat "Replacing " a " with " b)) % (replace-string a b) % (setq i (1+ i)) % (setq j (1+ j)) % (goto-line 23) % ) % ) %% This labels a set of four triangles. LDF 2010.08.06. %% % j := 223; % for i := 0 upto 2: % dotlabel.top(i, get_point (i) w[j]) with_text_color blue with_dot_color blue; % dotlabel.bot(i, get_point (i) w[j + 1]) with_text_color red with_dot_color red; % dotlabel.lft(i, get_point (i) w[j + 2]) with_text_color green with_dot_color green; % dotlabel.rt (i, get_point (i) w[j + 3]) with_text_color magenta with_dot_color magenta; % endfor; draw (get_point 0 w223) -- (get_point 1 w223) with_pen border_pen; draw (get_point 0 w223) -- (get_point 2 w223) with_pen border_pen; draw (get_point 1 w223) -- (get_point 2 w223) dashed evenly with_pen dashed_pen; draw (get_point 0 w224) -- (get_point 2 w224) dashed evenly with_pen dashed_pen; draw (get_point 0 w225) -- (get_point 1 w225) with_pen border_pen; draw (get_point 0 w225) -- (get_point 2 w225) dashed evenly with_pen dashed_pen; draw (get_point 1 w225) -- (get_point 2 w225) dashed evenly with_pen dashed_pen; draw (get_point 0 w226) -- (get_point 2 w226) dashed evenly with_pen dashed_pen; draw (get_point 1 w226) -- (get_point 2 w226) with_pen border_pen; draw (get_point 0 w227) -- (get_point 1 w227) with_pen border_pen; draw (get_point 0 w227) -- (get_point 2 w227) with_pen border_pen; draw (get_point 1 w227) -- (get_point 2 w227) dashed evenly with_pen dashed_pen; draw (get_point 0 w229) -- (get_point 1 w229) with_pen border_pen; draw (get_point 0 w229) -- (get_point 2 w229) dashed evenly with_pen dashed_pen; draw (get_point 1 w229) -- (get_point 2 w229) dashed evenly with_pen dashed_pen; draw (get_point 0 w230) -- (get_point 2 w230) dashed evenly with_pen dashed_pen; draw (get_point 1 w230) -- (get_point 2 w230) with_pen border_pen; draw (get_point 0 w231) -- (get_point 1 w231) with_pen border_pen; draw (get_point 0 w231) -- (get_point 2 w231) with_pen border_pen; draw (get_point 1 w231) -- (get_point 2 w231) dashed evenly with_pen dashed_pen; draw (get_point 0 w232) -- (get_point 2 w232) dashed evenly with_pen dashed_pen; draw (get_point 0 w233) -- (get_point 1 w233) with_pen border_pen; draw (get_point 0 w233) -- (get_point 2 w233) dashed evenly with_pen dashed_pen; draw (get_point 1 w233) -- (get_point 2 w233) dashed evenly with_pen dashed_pen; draw (get_point 0 w234) -- (get_point 2 w234) dashed evenly with_pen dashed_pen; draw (get_point 1 w234) -- (get_point 2 w234) with_pen border_pen; draw (get_point 0 w235) -- (get_point 1 w235) with_pen border_pen; draw (get_point 0 w235) -- (get_point 2 w235) with_pen border_pen; draw (get_point 1 w235) -- (get_point 2 w235) dashed evenly with_pen dashed_pen; draw (get_point 0 w237) -- (get_point 1 w237) with_pen border_pen; draw (get_point 0 w237) -- (get_point 2 w237) dashed evenly with_pen dashed_pen; draw (get_point 1 w237) -- (get_point 2 w237) dashed evenly with_pen dashed_pen; draw (get_point 1 w238) -- (get_point 2 w238) with_pen border_pen; draw (get_point 0 w239) -- (get_point 1 w239) with_pen border_pen; draw (get_point 0 w239) -- (get_point 2 w239) with_pen border_pen; draw (get_point 1 w239) -- (get_point 2 w239) dashed evenly with_pen dashed_pen; draw (get_point 0 w240) -- (get_point 2 w240) with_pen border_pen; draw (get_point 0 w241) -- (get_point 1 w241) with_pen border_pen; draw (get_point 0 w241) -- (get_point 2 w241) dashed evenly with_pen dashed_pen; draw (get_point 1 w241) -- (get_point 2 w241) dashed evenly with_pen dashed_pen; draw (get_point 0 w242) -- (get_point 2 w242) dashed evenly with_pen dashed_pen; draw (get_point 1 w242) -- (get_point 2 w242) with_pen border_pen; draw (get_point 0 w243) -- (get_point 1 w243) with_pen border_pen; draw (get_point 0 w243) -- (get_point 2 w243) with_pen border_pen; draw (get_point 1 w243) -- (get_point 2 w243) dashed evenly with_pen dashed_pen; draw (get_point 0 w244) -- (get_point 2 w244) dashed evenly with_pen dashed_pen; draw (get_point 0 w245) -- (get_point 1 w245) with_pen border_pen; draw (get_point 0 w245) -- (get_point 2 w245) dashed evenly with_pen dashed_pen; draw (get_point 1 w245) -- (get_point 2 w245) dashed evenly with_pen dashed_pen; draw (get_point 0 w246) -- (get_point 2 w246) dashed evenly with_pen dashed_pen; draw (get_point 1 w246) -- (get_point 2 w246) with_pen border_pen; draw (get_point 0 w247) -- (get_point 1 w247) with_pen border_pen; draw (get_point 0 w247) -- (get_point 2 w247) with_pen border_pen; draw (get_point 1 w247) -- (get_point 2 w247) dashed evenly with_pen dashed_pen; draw (get_point 0 w249) -- (get_point 1 w249) with_pen border_pen; draw (get_point 0 w249) -- (get_point 2 w249) dashed evenly with_pen dashed_pen; draw (get_point 1 w249) -- (get_point 2 w249) dashed evenly with_pen dashed_pen; draw (get_point 1 w250) -- (get_point 2 w250) with_pen border_pen; draw (get_point 0 w251) -- (get_point 1 w251) with_pen border_pen; draw (get_point 0 w251) -- (get_point 2 w251) with_pen border_pen; draw (get_point 1 w251) -- (get_point 2 w251) dashed evenly with_pen dashed_pen; draw (get_point 0 w252) -- (get_point 2 w252) dashed evenly with_pen dashed_pen; draw (get_point 0 w253) -- (get_point 1 w253) with_pen border_pen; draw (get_point 0 w253) -- (get_point 2 w253) dashed evenly with_pen dashed_pen; draw (get_point 1 w253) -- (get_point 2 w253) dashed evenly with_pen dashed_pen; draw (get_point 1 w254) -- (get_point 2 w254) with_pen border_pen; draw (get_point 0 w255) -- (get_point 1 w255) with_pen border_pen; draw (get_point 0 w255) -- (get_point 2 w255) with_pen border_pen; draw (get_point 1 w255) -- (get_point 2 w255) dashed evenly with_pen dashed_pen; draw (get_point 0 w257) -- (get_point 1 w257) with_pen border_pen; draw (get_point 0 w257) -- (get_point 2 w257) dashed evenly with_pen dashed_pen; draw (get_point 1 w257) -- (get_point 2 w257) dashed evenly with_pen dashed_pen; draw (get_point 0 w258) -- (get_point 2 w258) dashed evenly with_pen dashed_pen; draw (get_point 1 w258) -- (get_point 2 w258) with_pen border_pen; draw (get_point 0 w259) -- (get_point 1 w259) with_pen border_pen; draw (get_point 0 w259) -- (get_point 2 w259) with_pen border_pen; draw (get_point 1 w259) -- (get_point 2 w259) dashed evenly with_pen dashed_pen; draw (get_point 0 w260) -- (get_point 2 w260) dashed evenly with_pen dashed_pen; draw (get_point 0 w261) -- (get_point 1 w261) with_pen border_pen; draw (get_point 0 w261) -- (get_point 2 w261) dashed evenly with_pen dashed_pen; draw (get_point 1 w261) -- (get_point 2 w261) dashed evenly with_pen dashed_pen; draw (get_point 0 w262) -- (get_point 2 w262) dashed evenly with_pen dashed_pen; draw (get_point 1 w262) -- (get_point 2 w262) with_pen border_pen; draw (get_point 0 w263) -- (get_point 1 w263) with_pen border_pen; draw (get_point 0 w263) -- (get_point 2 w263) with_pen border_pen; draw (get_point 1 w263) -- (get_point 2 w263) dashed evenly with_pen dashed_pen; draw (get_point 0 w265) -- (get_point 1 w265) with_pen border_pen; draw (get_point 0 w265) -- (get_point 2 w265) dashed evenly with_pen dashed_pen; draw (get_point 1 w265) -- (get_point 2 w265) dashed evenly with_pen dashed_pen; draw (get_point 1 w266) -- (get_point 2 w266) with_pen border_pen; draw (get_point 0 w267) -- (get_point 1 w267) with_pen border_pen; draw (get_point 0 w267) -- (get_point 2 w267) with_pen border_pen; draw (get_point 1 w267) -- (get_point 2 w267) dashed evenly with_pen dashed_pen; draw (get_point 0 w268) -- (get_point 2 w268) with_pen border_pen; draw (get_point 0 w269) -- (get_point 1 w269) with_pen border_pen; draw (get_point 0 w269) -- (get_point 2 w269) dashed evenly with_pen dashed_pen; draw (get_point 1 w269) -- (get_point 2 w269) dashed evenly with_pen dashed_pen; draw (get_point 1 w270) -- (get_point 2 w270) with_pen border_pen; % message "After rotation: (p152 - p153) angle (p163 - p164):"; % show (p152 - p153) angle (p163 - p164); % message "(p163 - p164):"; % show (p163 - p164); % message "(p152 - p153):"; % show (p152 - p153); % pause; %% **** (4) Tab %% ***** (5) numeric tab_row_offset; tab_row_offset := 1.5cm; if do_tabs: %% ****** (6) Row ends %% The two tabs for the first row are bigger, because there are no others that interfere %% with them. I think this better, because this is an important join %% on the model and the larger the tab, and the more holes, the more %% stable it will be. %% %% LDF 2010.07.15. tab {w52, 0, 2, .875, .75, .4, w32, 0, 2, 5}; %% w52 and w32 --- First row. tab {w100, 0, 2, .75, .675, .4, w76, 0, 2, 3}; %% w100 and w76 --- Second row, below tab {w198, 0, 2, .75, .675, .3, w222, 0, 2, 3}; %% w198 and w222 --- Second row, below tab {w148, 0, 2, .75, .675, .3, w120, 0, 2, 3}; %% w148 and w120 --- Third row, above tab {w240, 0, 2, .75, .675, .3, w268, 0, 2, 3}; %% w240 and w268 --- Third row, below label.rt("Row ends (1, 2 above, 2 below, 3 above, 3 below)", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) First row gaps tab {w50, 0, 2, .75, .675, .4, w53, 2, 1, 3}; %% w50 and w53 tab {w45, 1, 2, .75, .675, .4, w42, 2, 0, 3}; %% w45 and w42 tab {w38, 0, 2, .75, .675, .4, w41, 2, 1, 3}; %% w38 and w41 tab {w49, 1, 2, .75, .675, .4, w46, 2, 0, 3}; %% w49 and w46 tab {w14, 0, 2, .75, .675, .4, w17, 1, 2, 3}; %% w14 and w17 tab {w9, 1, 2, .75, .675, .4, w5, 2, 0, 3}; %% w9 and w5 tab {w10, 0, 2, .75, .675, .4, w13, 1, 2, 3}; %% w10 and w13 tab {w21, 1, 2, .75, .675, .4, w18, 2, 0, 3}; %% w21 and w18 tab {w34, 0, 2, .75, .675, .4, w37, 1, 2, 3}; %% w34 and w37 tab {w29, 1, 2, .75, .675, .4, w26, 2, 0, 3}; %% w29 and w26 tab {w22, 0, 2, .75, .675, .4, w25, 1, 2, 3}; %% w22 and w25 tab {w33, 1, 2, .75, .675, .4, w30, 2, 0, 3}; %% w33 and w30 label.rt("First row gaps", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Second row gaps, above tab {w99, 1, 2, .75, .675, .4, w102, 1, 2, 3}; %% w99 and w102 tab {w98, 1, 2, .75, .675, .4, w95, 1, 2, 3}; %% w98 and w95 tab {w87, 1, 2, .75, .675, .4, w90, 1, 2, 3}; %% w87 and w90 tab {w94, 1, 2, .75, .675, .4, w91, 1, 2, 3}; %% w94 and w91 tab {w59, 1, 2, .75, .675, .4, w62, 1, 2, 3}; %% w59 and w62 tab {w58, 1, 2, .75, .675, .4, w54, 1, 2, 3}; %% w58 and w54 tab {w63, 1, 2, .75, .675, .4, w66, 1, 2, 3}; %% w63 and w66 tab {w70, 1, 2, .75, .675, .4, w67, 1, 2, 3}; %% w70 and w67 tab {w83, 1, 2, .75, .675, .4, w86, 1, 2, 3}; %% w83 and w86 tab {w82, 1, 2, .75, .675, .4, w79, 1, 2, 3}; %% w82 and w79 tab {w71, 1, 2, .75, .675, .4, w74, 1, 2, 3}; %% w71 and w74 tab {w78, 1, 2, .75, .675, .4, w75, 1, 2, 3}; %% w78 and w75 label.rt("Second row gaps, above", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Second row gaps, right (below) tab {w195, 1, 2, .75, .675, .4, w198, 1, 2, 3}; %% w195 and w198 tab {w191, 1, 2, .75, .675, .4, w194, 1, 2, 3}; %% w191 and w194 tab {w183, 1, 2, .75, .675, .4, w186, 1, 2, 3}; %% w183 and w186 tab {w187, 1, 2, .75, .675, .4, w190, 1, 2, 3}; %% w187 and w190 tab {w182, 1, 2, .75, .675, .4, w179, 1, 2, 3}; %% w182 and w179 tab {w175, 1, 2, .75, .675, .4, w178, 1, 2, 3}; %% w175 and w178 tab {w202, 1, 2, .75, .675, .4, w199, 1, 2, 3}; %% w202 and w199 tab {w203, 1, 2, .75, .675, .4, w206, 1, 2, 3}; %% w203 and w206 tab {w214, 1, 2, .75, .675, .4, w211, 1, 2, 3}; %% w214 and w211 tab {w207, 1, 2, .75, .675, .4, w210, 1, 2, 3}; %% w207 and w210 tab {w218, 1, 2, .75, .675, .4, w215, 1, 2, 3}; %% w218 and w215 tab {w219, 1, 2, .75, .675, .4, w222, 1, 2, 3}; %% w219 and w222 label.rt("Second row gaps, right (below)", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Third row gaps, above tab {w147, 0, 2, .75, .675, .3, w150, 1, 2, 3}; %% w147 and w150 tab {w139, 0, 2, .75, .675, .3, w142, 1, 2, 3}; %% w139 and w142 tab {w143, 0, 2, .75, .675, .3, w146, 1, 2, 3}; %% w143 and w146 tab {w138, 1, 2, .75, .675, .3, w135, 0, 2, 3}; %% w138 and w135 tab {w131, 0, 2, .75, .675, .3, w134, 1, 2, 3}; %% w131 and w134 tab {w106, 1, 2, .75, .675, .3, w103, 0, 2, 3}; %% w106 and w103 tab {w107, 0, 2, .75, .675, .3, w110, 1, 2, 3}; %% w107 and w110 tab {w118, 1, 2, .75, .675, .3, w115, 0, 2, 3}; %% w118 and w115 tab {w111, 0, 2, .75, .675, .3, w114, 1, 2, 3}; %% w111 and w114 tab {w126, 1, 2, .75, .675, .3, w123, 0, 2, 3}; %% w126 and w123 tab {w127, 0, 2, .75, .675, .3, w130, 1, 2, 3}; %% w127 and w130 tab {w122, 1, 2, .75, .675, .3, w119, 0, 2, 3}; %% w122 and w119 label.rt("Third row gaps, above", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Third row gaps, right (below) tab {w242, 1, 2, .75, .675, .3, w239, 0, 2, 3}; %% w242 and w239 tab {w247, 0, 2, .75, .675, .3, w250, 1, 2, 3}; %% w247 and w250 tab {w246, 1, 2, .75, .675, .3, w243, 0, 2, 3}; %% w246 and w243 tab {w231, 0, 2, .75, .675, .3, w234, 1, 2, 3}; %% w231 and w234 tab {w238, 1, 2, .75, .675, .3, w235, 0, 2, 3}; %% w238 and w235 tab {w230, 1, 2, .75, .675, .3, w227, 0, 2, 3}; %% w230 and w227 tab {w223, 0, 2, .75, .675, .3, w226, 1, 2, 3}; %% w223 and w226 tab {w254, 1, 2, .75, .675, .3, w251, 0, 2, 3}; %% w254 and w251 tab {w255, 0, 2, .75, .675, .3, w258, 1, 2, 3}; %% w255 and w258 tab {w266, 1, 2, .75, .675, .3, w263, 0, 2, 3}; %% w266 and w263 tab {w259, 0, 2, .75, .675, .3, w262, 1, 2, 3}; %% w259 and w262 tab {w270, 1, 2, .75, .675, .3, w267, 0, 2, 3}; %% w270 and w267 label.rt("Third row gaps, right (below)", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) First and second row, top tab {w99, 0, 2, .75, .675, .4, w51, 0, 1, 3}; %% w99 and w51 tab {w95, 0, 2, .75, .675, .4, w43, 0, 1, 3}; %% w95 and w43 tab {w87, 0, 2, .75, .675, .4, w39, 0, 1, 3}; %% w87 and w39 tab {w91, 0, 2, .75, .675, .4, w47, 0, 1, 3}; %% w91 and w47 tab {w59, 0, 2, .75, .675, .4, w15, 0, 1, 3}; %% w59 and w15 tab {w63, 0, 2, .75, .675, .4, w11, 0, 1, 3}; %% w63 and w11 tab {w67, 0, 2, .75, .675, .4, w19, 0, 1, 3}; %% w67 and w19 tab {w83, 0, 2, .75, .675, .4, w35, 0, 1, 3}; %% w83 and w35 tab {w79, 0, 2, .75, .675, .4, w27, 0, 1, 3}; %% w79 and w27 tab {w71, 0, 2, .75, .675, .4, w23, 0, 1, 3}; %% w71 and w23 tab {w75, 0, 2, .75, .675, .4, w31, 0, 1, 3}; %% w75 and w31 label.rt("First and second row, top", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) First and second row, bottom tab {w5, 0, 1, .75, .675, .4, w199, 0, 2, 3}; %% w5 and w199 tab {w14, 0, 1, .75, .675, .4, w203, 0, 2, 3}; %% w14 and w203 tab {w46, 0, 1, .75, .675, .4, w211, 0, 2, 3}; %% w46 and w211 tab {w38, 0, 1, .75, .675, .4, w207, 0, 2, 3}; %% w38 and w207 tab {w42, 0, 1, .75, .675, .4, w215, 0, 2, 3}; %% w42 and w215 tab {w50, 0, 1, .75, .675, .4, w219, 0, 2, 3}; %% w50 and w219 tab {w18, 0, 1, .75, .675, .4, w179, 0, 2, 3}; %% w18 and w179 tab {w34, 0, 1, .75, .675, .4, w187, 0, 2, 3}; %% w34 and w187 tab {w26, 0, 1, .75, .675, .4, w183, 0, 2, 3}; %% w26 and w183 tab {w22, 0, 1, .75, .675, .4, w191, 0, 2, 3}; %% w22 and w191 tab {w30, 0, 1, .75, .675, .4, w195, 0, 2, 3}; %% w30 and w195 label.rt("First and second row, bottom", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Second and third row, top tab {w101, 0, 1, .75, .675, .4, w147, 0, 1, 3}; %% w101 and w147 tab {w97, 0, 1, .75, .675, .4, w139, 0, 1, 3}; %% w97 and w139 tab {w89, 0, 1, .75, .675, .4, w143, 0, 1, 3}; %% w89 and w143 tab {w93, 0, 1, .75, .675, .4, w135, 0, 1, 3}; %% w93 and w135 tab {w61, 0, 1, .75, .675, .4, w131, 0, 1, 3}; %% w61 and w131 tab {w57, 0, 1, .75, .675, .4, w103, 0, 1, 3}; %% w57 and w103 tab {w107, 0, 1, .75, .675, .4, w65, 0, 1, 3}; %% w107 and w65 tab {w115, 0, 1, .75, .675, .4, w69, 0, 1, 3}; %% w115 and w69 tab {w111, 0, 1, .75, .675, .4, w85, 0, 1, 3}; %% w111 and w85 tab {w123, 0, 1, .75, .675, .4, w81, 0, 1, 3}; %% w123 and w81 tab {w127, 0, 1, .75, .675, .4, w73, 0, 1, 3}; %% w127 and w73 tab {w119, 0, 1, .75, .675, .4, w77, 0, 1, 3}; %% w119 and w77 label.rt("Second and third row, top", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Second and third row, bottom tab {w177, 0, 1, .75, .675, .4, w227, 0, 1, 3}; %% w177 and w227 tab {w201, 0, 1, .75, .675, .4, w223, 0, 1, 3}; %% w201 and w223 tab {w205, 0, 1, .75, .675, .4, w251, 0, 1, 3}; %% w205 and w251 tab {w213, 0, 1, .75, .675, .4, w255, 0, 1, 3}; %% w213 and w255 tab {w209, 0, 1, .75, .675, .4, w263, 0, 1, 3}; %% w209 and w263 tab {w217, 0, 1, .75, .675, .4, w259, 0, 1, 3}; %% w217 and w259 tab {w221, 0, 1, .75, .675, .4, w267, 0, 1, 3}; %% w221 and w267 tab {w181, 0, 1, .75, .675, .4, w235, 0, 1, 3}; %% w181 and w235 tab {w189, 0, 1, .75, .675, .4, w231, 0, 1, 3}; %% w189 and w231 tab {w185, 0, 1, .75, .675, .4, w243, 0, 1, 3}; %% w185 and w243 tab {w193, 0, 1, .75, .675, .4, w247, 0, 1, 3}; %% w193 and w247 tab {w197, 0, 1, .75, .675, .4, w239, 0, 1, 3}; %% w197 and w239 label.rt("Second and third row, bottom", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Pole 1 and Pole 2: Joins tab {w168, 0, 2, .75, .675, .2, w170, 0, 2, 3}; %% w168 and w170 tab {w163, 0, 2, .75, .675, .2, w173, 0, 2, 3}; %% w163 and w173 tab {w156, 0, 2, .75, .675, .2, w158, 0, 2, 3}; %% w156 and w158 tab {w151, 0, 2, .75, .675, .2, w161, 0, 2, 3}; %% w151 and w161 tab {w293, 0, 2, .75, .675, .2, w283, 0, 2, 3}; %% w293 and 283 tab {w288, 0, 2, .75, .675, .2, w290, 0, 2, 3}; %% w288 and w290 tab {w276, 0, 2, .75, .675, .2, w278, 0, 2, 3}; %% w276 and w278 tab {w281, 0, 2, .75, .675, .2, w271, 0, 2, 3}; %% w281 and w271 label.rt("Pole 1 and Pole 2 (plus extras): Joins", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Pole 1 and Row 3, above tab {w168, 1, 0, .875, .75, .3, w121, 1, 0, 2}; %% w168 and w121 tab {w167, 1, 0, .875, .75, .3, w129, 1, 0, 3}; %% w167 and w129 tab {w171, 1, 0, .875, .75, .3, w125, 1, 0, 3}; %% w171 and w125 tab {w172, 1, 0, .875, .75, .3, w113, 1, 0, 3}; %% w172 and w113 tab {w174, 1, 0, .875, .75, .3, w117, 1, 0, 3}; %% w174 and w117 tab {w173, 1, 0, .875, .75, .3, w109, 1, 0, 3}; %% w173 and w109 tab {w163, 1, 0, .875, .75, .3, w105, 1, 0, 3}; %% w163 and w105 tab {w164, 1, 0, .875, .75, .3, w133, 1, 0, 3}; %% w164 and w133 tab {w166, 1, 0, .875, .75, .3, w137, 1, 0, 3}; %% w166 and w137 tab {w165, 1, 0, .875, .75, .3, w145, 1, 0, 3}; %% w168 and w145 tab {w169, 1, 0, .875, .75, .3, w141, 1, 0, 3}; %% w169 and w141 tab {w170, 1, 0, .875, .75, .3, w149, 1, 0, 3}; %% w170 and w149 tab_single {w293, 1, 0, .875, .75, .3, 3}; tab_single {w294, 1, 0, .875, .75, .3, 3}; tab_single {w291, 1, 0, .875, .75, .3, 3}; tab_single {w292, 1, 0, .875, .75, .3, 3}; tab_single {w287, 1, 0, .875, .75, .3, 3}; tab_single {w288, 1, 0, .875, .75, .3, 3}; tab_single {w283, 1, 0, .875, .75, .3, 3}; tab_single {w284, 1, 0, .875, .75, .3, 3}; tab_single {w285, 1, 0, .875, .75, .3, 3}; tab_single {w286, 1, 0, .875, .75, .3, 3}; tab_single {w289, 1, 0, .875, .75, .3, 3}; tab_single {w290, 1, 0, .875, .75, .3, 3}; label.rt("Pole 1 and Row 3, above", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) Pole 2 and Row 3, below tab {w161, 1, 0, .875, .75, .3, w241, 1, 0, 3}; %% w161 and w241 tab {w162, 1, 0, .875, .75, .3, w249, 1, 0, 3}; %% w162 and w249 tab {w160, 1, 0, .875, .75, .3, w245, 1, 0, 3}; %% w160 and w245 tab {w159, 1, 0, .875, .75, .3, w233, 1, 0, 3}; %% w159 and w233 tab {w155, 1, 0, .875, .75, .3, w237, 1, 0, 3}; %% w155 and w237 tab {w156, 1, 0, .875, .75, .3, w229, 1, 0, 3}; %% w156 and w229 tab {w158, 1, 0, .875, .75, .3, w225, 1, 0, 3}; %% w158 and w225 tab {w157, 1, 0, .875, .75, .3, w253, 1, 0, 3}; %% w157 and w253 tab {w153, 1, 0, .875, .75, .3, w257, 1, 0, 3}; %% w153 and w257 tab {w154, 1, 0, .875, .75, .3, w265, 1, 0, 3}; %% w154 and w265 tab {w152, 1, 0, .875, .75, .3, w261, 1, 0, 3}; %% w152 and w261 tab {w151, 1, 0, .875, .75, .3, w269, 1, 0, 3}; %% w151 and w269 tab_single {w271, 1, 0, .875, .75, .3, 3}; tab_single {w272, 1, 0, .875, .75, .3, 3}; tab_single {w273, 1, 0, .875, .75, .3, 3}; tab_single {w274, 1, 0, .875, .75, .3, 3}; tab_single {w277, 1, 0, .875, .75, .3, 3}; tab_single {w278, 1, 0, .875, .75, .3, 3}; tab_single {w275, 1, 0, .875, .75, .3, 3}; tab_single {w276, 1, 0, .875, .75, .3, 3}; tab_single {w279, 1, 0, .875, .75, .3, 3}; tab_single {w280, 1, 0, .875, .75, .3, 3}; tab_single {w281, 1, 0, .875, .75, .3, 3}; tab_single {w282, 1, 0, .875, .75, .3, 3}; label.rt("Pole 2 and Row 3, below", (tab_x_offset, 0, tab_z_offset)) tab_picture; tab_x_offset := 0cm; tab_z_offset -= tab_row_offset; %% ****** (6) End of `if do_tabs' conditional fi; %% do_tabs %% ****** (6) Emacs-Lisp macro for inserting repetitive code if false: ; " tab {w" (number-to-string a) ; ", 1, 2, .75, .675, .3, w" (number-to-string b) ; ", 1, 2, 3}; %% w" (number-to-string a) ;" and w" (number-to-string b) "\n\n")) (defun ttemp (a b) (insert (concat "\n\nfor i := 0 upto 2:\n" " dotlabel.top(i, get_point (i) w" (number-to-string a) ") with_text_color blue with_dot_color blue;\n" " dotlabel.bot(i, get_point (i) w" (number-to-string b) ") with_text_color red with_dot_color red;\nendfor;\n\n")) ) fi; %% (local-set-key [C-pause] 'eval-last-sexp) %% ****** (6) %% %% %% %% % (progn (ignore '( % )) (ttemp 230 227) (ignore '( % )) (ttemp 223 226) (ignore '( % )) (ttemp 254 251) (ignore '( % )) (ttemp 255 258) (ignore '( % )) (ttemp 266 263) (ignore '( % )) (ttemp 259 262) (ignore '( % )) (ttemp 270 267) (ignore '( % )) ) %% ***** (5) %% **** (4) % clear current_picture; %% **** (4) current_picture += v3; rotate current_picture (0, 90); %% **** (4) endfig with_projection parallel_x_z no_sort; %% *** (3) Tab picture beginfig(6); current_picture := tab_picture; endfig with_projection parallel_x_z no_sort; %% *** (3) Figure 7 %% This is for generating an image for use on the The GNU 3DLDF Sphere and Dome Models webpage. %% (../sphrdmmd.html). It's the projection of the sphere onto the x-y plane. %% LDF 2010.08.06. beginfig(7); frame_val := 6; current_picture := v0; draw (-frame_val, -frame_val) -- (frame_val, -frame_val) -- (frame_val, frame_val) -- (-frame_val, frame_val) -- cycle with_color white; endfig with_projection parallel_x_y no_sort; %% *** (3) Figure 8 %% Separate triangles for cutting out and gluing to the assembled model. %% These triangles could be cut out of high-quality paper, such as watercolor paper, %% that might look better painted than Bristol board or heavy paper used for the basic %% model. However, high-quality paper might be used for the basic model, in which case %% these triangles won't be needed. %% LDF 2010.08.13. picture total_picture; beginfig(8); numeric help_line_offset; numeric shift_val; help_line_offset := 1cm; %% **** (4) Row 1, Type 1 %% ***** (5) First line w295 := w5; shift w295 by ((get_point 0 w295) * -1); rotate w295 (180, 0); %draw w295; %label.top("$w_{295}$", get_center w295); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w295); % endfor; %message "w295:"; %show w295; %pause; w296 := w295; shift_val := magnitude(get_point 1 w295) + 1cm; for i = 0 upto 6: draw w296; p170 := help_line_offset * unit_vector((get_point 0 w296) - (get_point 1 w296)) shifted by (get_point 0 w296); draw (get_point 0 w296) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w296) - (get_point 2 w296)) shifted by (get_point 0 w296); draw (get_point 0 w296) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w296) - (get_point 0 w296)) shifted by (get_point 1 w296); draw (get_point 1 w296) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w296) - (get_point 2 w296)) shifted by (get_point 1 w296); draw (get_point 1 w296) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w296) - (get_point 0 w296)) shifted by (get_point 2 w296); draw (get_point 2 w296) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w296) - (get_point 1 w296)) shifted by (get_point 2 w296); draw (get_point 2 w296) -- p175 dashed evenly; label("\vbox{\hbox{Row 1,}\hbox{Type 1}}", get_center w296); shift w296 (shift_val, 0); endfor; %% ***** (5) Second line w296 := w295; rotate w296 (180, 0); shift w296 (.5 * magnitude(get_point 1 w296 - get_point 0 w296) + .5cm, 0, -1.5 * magnitude(get_point 2 w296 - mediate(get_point 0 w296, get_point 1 w296))); %label.top("$w_{296}$", get_center w296); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w296); % endfor; for i = 0 upto 6: draw w296; p170 := help_line_offset * unit_vector((get_point 0 w296) - (get_point 1 w296)) shifted by (get_point 0 w296); draw (get_point 0 w296) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w296) - (get_point 2 w296)) shifted by (get_point 0 w296); draw (get_point 0 w296) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w296) - (get_point 0 w296)) shifted by (get_point 1 w296); draw (get_point 1 w296) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w296) - (get_point 2 w296)) shifted by (get_point 1 w296); draw (get_point 1 w296) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w296) - (get_point 0 w296)) shifted by (get_point 2 w296); draw (get_point 2 w296) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w296) - (get_point 1 w296)) shifted by (get_point 2 w296); draw (get_point 2 w296) -- p175 dashed evenly; label("\vbox{\hbox{Row 1,}\hbox{Type 1}}", get_center w296); shift w296 (shift_val, 0); endfor; %% ***** (5) Third and fourth lines v4 := current_picture; shift v4 (0, 0, -(1.5 * magnitude(get_point 2 w296 - mediate(get_point 0 w296, get_point 1 w296)) + 1cm)); total_picture := v4; total_picture += v4; %% **** (4) Row 1, Type 2 %% ***** (5) Line 1 clear current_picture; w297 := w8; shift w297 by ((get_point 2 w297) * -1); ang_1 := ((get_point 0 w297) - (get_point 2 w297)) angle (1, 0); t69 := ((identity rotated_around (origin, (0, 1)) -ang_1) rotated (180, 0)) shifted (0, 0, -7); % message "((get_point 0 w297) - (get_point 2 w297)) angle (1, 0):"; % show ((get_point 0 w297) - (get_point 2 w297)) angle (1, 0); w297 *= t69; % message "((get_point 0 w297) - (get_point 2 w297)) angle (1, 0):"; % show ((get_point 0 w297) - (get_point 2 w297)) angle (1, 0); shift w297 (0, 0, .75); %label("$w_{297}$", get_center w297); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w297); % endfor; % draw w297; % message "w297:"; % show w297; w298 := w297; for i = 0 upto 6: draw w298; p170 := help_line_offset * unit_vector((get_point 0 w298) - (get_point 1 w298)) shifted by (get_point 0 w298); draw (get_point 0 w298) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w298) - (get_point 2 w298)) shifted by (get_point 0 w298); draw (get_point 0 w298) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w298) - (get_point 0 w298)) shifted by (get_point 1 w298); draw (get_point 1 w298) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w298) - (get_point 2 w298)) shifted by (get_point 1 w298); draw (get_point 1 w298) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w298) - (get_point 0 w298)) shifted by (get_point 2 w298); draw (get_point 2 w298) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w298) - (get_point 1 w298)) shifted by (get_point 2 w298); draw (get_point 2 w298) -- p175 dashed evenly; label("\vbox{\hbox{Row 1,}\hbox{Type 2}}", get_center w298); shift w298 (shift_val, 0); endfor; %% ***** (5) Line 2 t70 := (identity rotated_around (get_point 2 w297, get_point 0 w297)) shifted (.5 * magnitude(get_point 0 w297 - get_point 2 w297) + .5cm, 0, -(magnitude(get_point 1 w297 - mediate(get_point 0 w297, get_point 2 w297)) + .75cm) ); w298 := w297 * t70; for i = 0 upto 6: draw w298; p170 := help_line_offset * unit_vector((get_point 0 w298) - (get_point 1 w298)) shifted by (get_point 0 w298); draw (get_point 0 w298) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w298) - (get_point 2 w298)) shifted by (get_point 0 w298); draw (get_point 0 w298) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w298) - (get_point 0 w298)) shifted by (get_point 1 w298); draw (get_point 1 w298) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w298) - (get_point 2 w298)) shifted by (get_point 1 w298); draw (get_point 1 w298) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w298) - (get_point 0 w298)) shifted by (get_point 2 w298); draw (get_point 2 w298) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w298) - (get_point 1 w298)) shifted by (get_point 2 w298); draw (get_point 2 w298) -- p175 dashed evenly; label("\vbox{\hbox{Row 1,}\hbox{Type 2}}", get_center w298); shift w298 (shift_val, 0); endfor; v5 := current_picture; total_picture += v5; shift v5 (0, 0, -(1.5 * magnitude(get_point 2 w296 - mediate(get_point 0 w296, get_point 1 w296)) + 1cm)); total_picture += v5; clear current_picture; %% **** (4) Row 2, Type 1 %% ***** (5) Line 1 w299 := w63; shift w299 by -1 * get_point 0 w299; ang_1 := ((get_point 2 w299) - (get_point 0 w299)) angle (1, 0); rotate w299 (0, -ang_1); rotate w299 (180, 0); shift w299 (0, 0, -12.5cm); % label("$w_{299}$", get_center w299); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w299); % endfor; % message "w299:"; % show w299; w300 := w299; for i = 0 upto 6: draw w300; p170 := help_line_offset * unit_vector((get_point 0 w300) - (get_point 1 w300)) shifted by (get_point 0 w300); draw (get_point 0 w300) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w300) - (get_point 2 w300)) shifted by (get_point 0 w300); draw (get_point 0 w300) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w300) - (get_point 0 w300)) shifted by (get_point 1 w300); draw (get_point 1 w300) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w300) - (get_point 2 w300)) shifted by (get_point 1 w300); draw (get_point 1 w300) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w300) - (get_point 0 w300)) shifted by (get_point 2 w300); draw (get_point 2 w300) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w300) - (get_point 1 w300)) shifted by (get_point 2 w300); draw (get_point 2 w300) -- p175 dashed evenly; label("\vbox{\hbox{Row 2,}\hbox{Type 1}}", get_center w300); shift w300 (shift_val, 0); endfor; %% ***** (5) Line 2 t71 := (identity rotated_around (get_point 0 w299, get_point 2 w299)) shifted ((xpart(get_point 2 w299) - xpart(get_point 0 w299)) * .5 + .5cm, 0, zpart(get_point 1 w299) - zpart(get_point 0 w299) -.75cm); w300 := w299 * t71; for i = 0 upto 6: draw w300; p170 := help_line_offset * unit_vector((get_point 0 w300) - (get_point 1 w300)) shifted by (get_point 0 w300); draw (get_point 0 w300) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w300) - (get_point 2 w300)) shifted by (get_point 0 w300); draw (get_point 0 w300) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w300) - (get_point 0 w300)) shifted by (get_point 1 w300); draw (get_point 1 w300) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w300) - (get_point 2 w300)) shifted by (get_point 1 w300); draw (get_point 1 w300) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w300) - (get_point 0 w300)) shifted by (get_point 2 w300); draw (get_point 2 w300) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w300) - (get_point 1 w300)) shifted by (get_point 2 w300); draw (get_point 2 w300) -- p175 dashed evenly; label("\vbox{\hbox{Row 2,}\hbox{Type 1}}", get_center w300); shift w300 (shift_val, 0); endfor; %% ***** (5) v6 := current_picture; total_picture += v6; shift v6 (0, 0, -(1.5 * magnitude(get_point 2 w299 - mediate(get_point 0 w299, get_point 1 w299)))); total_picture += v6; shift v6 (0, 0, -(1.5 * magnitude(get_point 2 w299 - mediate(get_point 0 w299, get_point 1 w299)))); total_picture += v6; shift v6 (0, 0, -(1.5 * magnitude(get_point 2 w299 - mediate(get_point 0 w299, get_point 1 w299)))); total_picture += v6; %% **** (4) Row 2, Type 2 %% ***** (5) Line 1 clear current_picture; w301 := w64; %% w66 == w64, so we don't need to copy w64. LDF 2010.08.13. shift w301 by -1 * get_point 0 w301; ang_1 := ((get_point 2 w301) - (get_point 0 w301)) angle (1, 0); rotate w301 (0, ang_1); rotate w301 (180, 0); shift w301 (0, 0, -25.0cm); % label("$w_{301}$", get_center w301); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w301); % endfor; % message "w301:"; % show w301; % pause; w302 := w301; for i = 0 upto 6: draw w302; p170 := help_line_offset * unit_vector((get_point 0 w302) - (get_point 1 w302)) shifted by (get_point 0 w302); draw (get_point 0 w302) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w302) - (get_point 2 w302)) shifted by (get_point 0 w302); draw (get_point 0 w302) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w302) - (get_point 0 w302)) shifted by (get_point 1 w302); draw (get_point 1 w302) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w302) - (get_point 2 w302)) shifted by (get_point 1 w302); draw (get_point 1 w302) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w302) - (get_point 0 w302)) shifted by (get_point 2 w302); draw (get_point 2 w302) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w302) - (get_point 1 w302)) shifted by (get_point 2 w302); draw (get_point 2 w302) -- p175 dashed evenly; label("\vbox{\hbox{Row 2,}\hbox{Type 2}}", get_center w302); shift w302 (shift_val, 0); endfor; %% ***** (5) Line 2 t72 := (identity rotated_around (get_point 0 w301, get_point 2 w301)) shifted ((xpart(get_point 2 w301) - xpart(get_point 0 w301)) * .5 + .5cm, 0, zpart(get_point 1 w301) - zpart(get_point 0 w301) -.75cm); w302 := w301 * t72; for i = 0 upto 6: draw w302; p170 := help_line_offset * unit_vector((get_point 0 w302) - (get_point 1 w302)) shifted by (get_point 0 w302); draw (get_point 0 w302) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w302) - (get_point 2 w302)) shifted by (get_point 0 w302); draw (get_point 0 w302) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w302) - (get_point 0 w302)) shifted by (get_point 1 w302); draw (get_point 1 w302) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w302) - (get_point 2 w302)) shifted by (get_point 1 w302); draw (get_point 1 w302) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w302) - (get_point 0 w302)) shifted by (get_point 2 w302); draw (get_point 2 w302) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w302) - (get_point 1 w302)) shifted by (get_point 2 w302); draw (get_point 2 w302) -- p175 dashed evenly; label("\vbox{\hbox{Row 2,}\hbox{Type 2}}", get_center w302); shift w302 (shift_val, 0); endfor; v7 := current_picture; clear current_picture; total_picture += v7; shift v7 (0, 0, -(1.25 * magnitude(get_point 2 w301 - mediate(get_point 0 w301, get_point 1 w301)))); total_picture += v7; shift v7 (0, 0, -(1.25 * magnitude(get_point 2 w301 - mediate(get_point 0 w301, get_point 1 w301)))); total_picture += v7; shift v7 (0, 0, -(1.25 * magnitude(get_point 2 w301 - mediate(get_point 0 w301, get_point 1 w301)))); total_picture += v7; %% **** (4) current_picture := total_picture; endfig with_projection parallel_x_z no_sort; %% *** (3) Figure 9 beginfig(9); clear total_picture; %% **** (4) Row 2, Type 3 shift_val -= .75cm; w303 := w65; shift w303 by -1 * get_point 0 w303; ang_1 := ((get_point 1 w303) - (get_point 0 w303)) angle (1, 0); rotate w303 (0, -ang_1); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w303); % endfor; % message "w303:"; % show w303; % pause; w304 := w303; p176 := mediate(mediate(get_point 0 w304, get_point 1 w304), get_point 2 w304, .3); %label("$w_{303}$", p176); p177 := p176; for i = 0 upto 8: draw w304; p170 := help_line_offset * unit_vector((get_point 0 w304) - (get_point 1 w304)) shifted by (get_point 0 w304); draw (get_point 0 w304) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w304) - (get_point 2 w304)) shifted by (get_point 0 w304); draw (get_point 0 w304) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w304) - (get_point 0 w304)) shifted by (get_point 1 w304); draw (get_point 1 w304) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w304) - (get_point 2 w304)) shifted by (get_point 1 w304); draw (get_point 1 w304) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w304) - (get_point 0 w304)) shifted by (get_point 2 w304); draw (get_point 2 w304) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w304) - (get_point 1 w304)) shifted by (get_point 2 w304); draw (get_point 2 w304) -- p175 dashed evenly; label("\vbox{\hbox{Row 2,}\hbox{Type 3}}", p177); shift w304 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) Line 2 t73 := (identity rotated_around (get_point 0 w303, get_point 1 w303)) shifted ((xpart(get_point 1 w303) - xpart(get_point 0 w303)) * .5 + .5cm, 0, zpart(get_point 2 w303) - zpart(get_point 0 w303) -.5cm); w304 := w303 * t73; p176 := mediate(mediate(get_point 0 w304, get_point 1 w304), get_point 2 w304, .3); %label("$w_{303}$", p176); p177 := p176; for i = 0 upto 8: draw w304; p170 := help_line_offset * unit_vector((get_point 0 w304) - (get_point 1 w304)) shifted by (get_point 0 w304); draw (get_point 0 w304) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w304) - (get_point 2 w304)) shifted by (get_point 0 w304); draw (get_point 0 w304) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w304) - (get_point 0 w304)) shifted by (get_point 1 w304); draw (get_point 1 w304) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w304) - (get_point 2 w304)) shifted by (get_point 1 w304); draw (get_point 1 w304) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w304) - (get_point 0 w304)) shifted by (get_point 2 w304); draw (get_point 2 w304) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w304) - (get_point 1 w304)) shifted by (get_point 2 w304); draw (get_point 2 w304) -- p175 dashed evenly; label("\vbox{\hbox{Row 2,}\hbox{Type 3}}", p177); shift w304 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% **** (4) v8 := current_picture; clear current_picture; total_picture += v8; shift v8 (0, 0, -(2.0 * magnitude(get_point 2 w303 - mediate(get_point 0 w303, get_point 1 w303)))); total_picture += v8; %% **** (4) Row 3, Type 1 w305 := w103; shift w305 by -1 * get_point 0 w305; ang_1 := ((get_point 1 w305) - (get_point 0 w305)) angle (1, 0); rotate w305 (0, ang_1); rotate w305 (180, 0); shift w305 (0, 0, -6cm); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w305); % endfor; % message "w305:"; % show w305; % pause; % draw w305 with_color blue; w306 := w305; p176 := mediate(mediate(get_point 0 w306, get_point 1 w306), get_point 2 w306, .3); %label("$w_{305}$", p176); p177 := p176; shift_val -= .25cm; for i = 0 upto 9: draw w306; p170 := help_line_offset * unit_vector((get_point 0 w306) - (get_point 1 w306)) shifted by (get_point 0 w306); draw (get_point 0 w306) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w306) - (get_point 2 w306)) shifted by (get_point 0 w306); draw (get_point 0 w306) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w306) - (get_point 0 w306)) shifted by (get_point 1 w306); draw (get_point 1 w306) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w306) - (get_point 2 w306)) shifted by (get_point 1 w306); draw (get_point 1 w306) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w306) - (get_point 0 w306)) shifted by (get_point 2 w306); draw (get_point 2 w306) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w306) - (get_point 1 w306)) shifted by (get_point 2 w306); draw (get_point 2 w306) -- p175 dashed evenly; label("\vbox{\hbox{Row 3,}\hbox{Type 1}}", p177); shift w306 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) Line 2 t74 := (identity rotated_around (get_point 0 w305, get_point 1 w305)) shifted ((xpart(get_point 1 w305) - xpart(get_point 0 w305)) * .5 + .5cm, 0, zpart(get_point 2 w305) - zpart(get_point 0 w305) -.5cm); w306 := w305 * t74; p176 := mediate(mediate(get_point 0 w306, get_point 1 w306), get_point 2 w306, .3); %label("$w_{305}$", p176); p177 := p176; for i = 0 upto 9: draw w306; p170 := help_line_offset * unit_vector((get_point 0 w306) - (get_point 1 w306)) shifted by (get_point 0 w306); draw (get_point 0 w306) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w306) - (get_point 2 w306)) shifted by (get_point 0 w306); draw (get_point 0 w306) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w306) - (get_point 0 w306)) shifted by (get_point 1 w306); draw (get_point 1 w306) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w306) - (get_point 2 w306)) shifted by (get_point 1 w306); draw (get_point 1 w306) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w306) - (get_point 0 w306)) shifted by (get_point 2 w306); draw (get_point 2 w306) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w306) - (get_point 1 w306)) shifted by (get_point 2 w306); draw (get_point 2 w306) -- p175 dashed evenly; label("\vbox{\hbox{Row 3,}\hbox{Type 1}}", p177); shift w306 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) v9 := current_picture; clear current_picture; total_picture += v9; shift v9 (0, 0, -(2.0 * magnitude(get_point 2 w305 - mediate(get_point 0 w305, get_point 1 w305)))); total_picture += v9; %% **** (4) Row 3, Type 2 w307 := w104; shift w307 by -1 * get_point 0 w307; ang_1 := ((get_point 2 w307) - (get_point 0 w307)) angle (1, 0); rotate w307 (0, ang_1); shift w307 (0, 0, -11.25cm); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w307); % endfor; % message "w307:"; % show w307; % if w104 == w106: % message "w104 == w106:"; % else: % message "w104 <> w106:"; % fi; % pause; % draw w307 with_color blue; w308 := w307; p176 := mediate(mediate(get_point 0 w308, get_point 1 w308), get_point 2 w308, .3); %label("$w_{307}$", p176); p177 := p176; shift_val += 1cm; for i = 0 upto 6: draw w308; p170 := help_line_offset * unit_vector((get_point 0 w308) - (get_point 1 w308)) shifted by (get_point 0 w308); draw (get_point 0 w308) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w308) - (get_point 2 w308)) shifted by (get_point 0 w308); draw (get_point 0 w308) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w308) - (get_point 0 w308)) shifted by (get_point 1 w308); draw (get_point 1 w308) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w308) - (get_point 2 w308)) shifted by (get_point 1 w308); draw (get_point 1 w308) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w308) - (get_point 0 w308)) shifted by (get_point 2 w308); draw (get_point 2 w308) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w308) - (get_point 1 w308)) shifted by (get_point 2 w308); draw (get_point 2 w308) -- p175 dashed evenly; label("\vbox{\hbox{Row 3,}\hbox{Type 2}}", p177); shift w308 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) Line 2 t75 := (identity rotated_around (get_point 0 w307, get_point 2 w307)) shifted ((xpart(get_point 2 w307) - xpart(get_point 0 w307)) * .5 + .5cm, 0, zpart(get_point 1 w307) - zpart(get_point 2 w307) -.375cm); w308 := w307 * t75; p176 := mediate(mediate(get_point 0 w308, get_point 1 w308), get_point 2 w308, .3); %label("$w_{307}$", p176); p177 := p176; draw w308 with_color blue; for i = 0 upto 6: draw w308; p170 := help_line_offset * unit_vector((get_point 0 w308) - (get_point 1 w308)) shifted by (get_point 0 w308); draw (get_point 0 w308) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w308) - (get_point 2 w308)) shifted by (get_point 0 w308); draw (get_point 0 w308) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w308) - (get_point 0 w308)) shifted by (get_point 1 w308); draw (get_point 1 w308) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w308) - (get_point 2 w308)) shifted by (get_point 1 w308); draw (get_point 1 w308) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w308) - (get_point 0 w308)) shifted by (get_point 2 w308); draw (get_point 2 w308) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w308) - (get_point 1 w308)) shifted by (get_point 2 w308); draw (get_point 2 w308) -- p175 dashed evenly; label("\vbox{\hbox{Row 3,}\hbox{Type 2}}", p177); shift w308 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) v10 := current_picture; clear current_picture; total_picture += v10; shift v10 (0, 0, -(2.5 * magnitude(get_point 1 w307 - mediate(get_point 0 w307, get_point 2 w307)))); total_picture += v10; shift v10 (0, 0, -(2.5 * magnitude(get_point 1 w307 - mediate(get_point 0 w307, get_point 2 w307)))); total_picture += v10; shift v10 (0, 0, -(2.5 * magnitude(get_point 1 w307 - mediate(get_point 0 w307, get_point 2 w307)))); total_picture += v10; %% **** (4) %% **** (4) Row 3, Type 3 w309 := w105; shift w309 by -1 * get_point 1 w309; ang_1 := ((get_point 0 w309) - (get_point 1 w309)) angle (1, 0); rotate w309 (0, ang_1); shift w309 (0, 0, -18.5cm); % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w309); % endfor; % message "w309:"; % show w309; % pause; % draw w309 with_color blue; w310 := w309; p176 := mediate(mediate(get_point 0 w310, get_point 1 w310), get_point 2 w310, .3); %label("$w_{309}$", p176); p177 := p176; shift_val -= 1.75cm; help_line_offset -= .375cm; for i = 0 upto 13: draw w310; p170 := help_line_offset * unit_vector((get_point 0 w310) - (get_point 1 w310)) shifted by (get_point 0 w310); draw (get_point 0 w310) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w310) - (get_point 2 w310)) shifted by (get_point 0 w310); draw (get_point 0 w310) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w310) - (get_point 0 w310)) shifted by (get_point 1 w310); draw (get_point 1 w310) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w310) - (get_point 2 w310)) shifted by (get_point 1 w310); draw (get_point 1 w310) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w310) - (get_point 0 w310)) shifted by (get_point 2 w310); draw (get_point 2 w310) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w310) - (get_point 1 w310)) shifted by (get_point 2 w310); draw (get_point 2 w310) -- p175 dashed evenly; label("\vbox{\hbox{Row 3,}\hbox{Type 3}}", p177); shift w310 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) Line 2 t76 := (identity rotated_around (get_point 0 w309, get_point 1 w309)) shifted ((xpart(get_point 0 w309) - xpart(get_point 1 w309)) * .5 + .675cm, 0, zpart(get_point 2 w309) - zpart(get_point 1 w309) -.375cm); w310 := w309 * t76; p176 := mediate(mediate(get_point 0 w310, get_point 1 w310), get_point 2 w310, .3); %label("$w_{309}$", p176); p177 := p176; % draw w310 with_color blue; for i = 0 upto 13: draw w310; p170 := help_line_offset * unit_vector((get_point 0 w310) - (get_point 1 w310)) shifted by (get_point 0 w310); draw (get_point 0 w310) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w310) - (get_point 2 w310)) shifted by (get_point 0 w310); draw (get_point 0 w310) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w310) - (get_point 0 w310)) shifted by (get_point 1 w310); draw (get_point 1 w310) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w310) - (get_point 2 w310)) shifted by (get_point 1 w310); draw (get_point 1 w310) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w310) - (get_point 0 w310)) shifted by (get_point 2 w310); draw (get_point 2 w310) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w310) - (get_point 1 w310)) shifted by (get_point 2 w310); draw (get_point 2 w310) -- p175 dashed evenly; label("\vbox{\hbox{Row 3,}\hbox{Type 3}}", p177); shift w310 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) v11 := current_picture; clear current_picture; total_picture += v11; %% **** (4) Pole triangles w311 := w151; shift w311 by (-1 * get_point 1 w311); ang_1 := ((get_point 0 w311) - (get_point 1 w311)) angle (1, 0); rotate w311 (0, ang_1); rotate w311 (180, 0); shift w311 (0, 0, -21.0cm); p176 := mediate(mediate(get_point 0 w311, get_point 1 w311), get_point 2 w311, .3); % message "w311:"; % show w311; % pause; % draw w311 with_color blue; % for i = 0 upto 2: % dotlabel.top(i, get_point (i) w311); % endfor; % label("$w_{311}$", p176); w312 := w311; p177 := p176; shift_val -= .5cm; for i = 0 upto 18: draw w312; p170 := help_line_offset * unit_vector((get_point 0 w312) - (get_point 1 w312)) shifted by (get_point 0 w312); draw (get_point 0 w312) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w312) - (get_point 2 w312)) shifted by (get_point 0 w312); draw (get_point 0 w312) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w312) - (get_point 0 w312)) shifted by (get_point 1 w312); draw (get_point 1 w312) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w312) - (get_point 2 w312)) shifted by (get_point 1 w312); draw (get_point 1 w312) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w312) - (get_point 0 w312)) shifted by (get_point 2 w312); draw (get_point 2 w312) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w312) - (get_point 1 w312)) shifted by (get_point 2 w312); draw (get_point 2 w312) -- p175 dashed evenly; label("Pole", p177); shift w312 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) Line 2 t77 := (identity rotated_around (get_point 0 w311, get_point 1 w311)) shifted ((xpart(get_point 0 w311) - xpart(get_point 1 w311)) * .5 + .4cm, 0, zpart(get_point 2 w311) - zpart(get_point 1 w311) -.4cm); w312 := w311 * t77; p176 := mediate(mediate(get_point 0 w312, get_point 1 w312), get_point 2 w312, .3); %label("$w_{311}$", p176); p177 := p176; % draw w312 with_color blue; for i = 0 upto 18: draw w312; p170 := help_line_offset * unit_vector((get_point 0 w312) - (get_point 1 w312)) shifted by (get_point 0 w312); draw (get_point 0 w312) -- p170 dashed evenly; p171 := help_line_offset * unit_vector((get_point 0 w312) - (get_point 2 w312)) shifted by (get_point 0 w312); draw (get_point 0 w312) -- p171 dashed evenly; p172 := help_line_offset * unit_vector((get_point 1 w312) - (get_point 0 w312)) shifted by (get_point 1 w312); draw (get_point 1 w312) -- p172 dashed evenly; p173 := help_line_offset * unit_vector((get_point 1 w312) - (get_point 2 w312)) shifted by (get_point 1 w312); draw (get_point 1 w312) -- p173 dashed evenly; p174 := help_line_offset * unit_vector((get_point 2 w312) - (get_point 0 w312)) shifted by (get_point 2 w312); draw (get_point 2 w312) -- p174 dashed evenly; p175 := help_line_offset * unit_vector((get_point 2 w312) - (get_point 1 w312)) shifted by (get_point 2 w312); draw (get_point 2 w312) -- p175 dashed evenly; label("Pole", p177); shift w312 (shift_val, 0); shift p177 (shift_val, 0); endfor; %% ***** (5) v12 := current_picture; clear current_picture; total_picture += v12; %% **** (4) current_picture := total_picture; endfig with_projection parallel_x_z no_sort; %% *** (3) End of 3DLDF code verbatim_metapost "end;"; end; %% ** (2) %% * (1) Emacs-Lisp code for use in indirect buffers when using the %% GNU Emacs editor. The local variable list is not evaluated when an %% indirect buffer is visited, so it's necessary to evaluate the %% following s-expression in order to use the facilities normally %% accessed via the local variables list. %% LDF 2004.02.12. %% (progn (metafont-mode) (outline-minor-mode t) (setq fill-column 80) (ignore '( %% )) (setq outline-regexp "%% [*\f]+")) %% * (1) Local variables for Emacs. %% Local Variables: %% mode:Metafont %% eval:(outline-minor-mode t) %% eval:(read-abbrev-file abbrev-file-name) %% outline-regexp:"%% [*\f]+" %% End: