summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/metapost/mp3d/cube7.mp
blob: 28df75f1e85b42682c22d4f42963152c9355df47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
% The nine vanishing points of a cube
% D. Roegel, 22 January 2001
% Warning: this figure is very sensitive to small motions!

input 3danim
input 3dgeom
output_res:=72;
drawing_scale:=1cm;

def draw_arrowline_extra(expr i,j)(expr exi,exj)=
  drawarrow exi[z[ipnt_(i)],z[ipnt_(j)]]--exj[z[ipnt_(i)],z[ipnt_(j)]];
enddef;


vardef def_C(expr inst)=
  new_obj_points(inst,17); % 17 points
  set_C_points(inst);
enddef;

vardef set_C_points(expr inst)=
  set_point(1)(0,0,0);set_point(2)(0,0,1);
  set_point(3)(0,1,0);set_point(4)(0,1,1);
  set_point(5)(1,0,0);set_point(6)(1,0,1);
  set_point(7)(1,1,0);set_point(8)(1,1,1);
  % vanishing points
  def_screen_pl(screen);
  new_line(l)(1,2);
  if not def_vanishing_point_p_l_pl(9)(l)(screen):
    message "no vanishing point 1";
    set_point(9)(0,0,0);
  fi;
  set_line(l)(1,3);
  if not def_vanishing_point_p_l_pl(10)(l)(screen):
    message "no vanishing point 2";
    set_point(10)(0,0,0);
  fi;
  set_line(l)(1,5);
  if not def_vanishing_point_p_l_pl(11)(l)(screen):
    message "no vanishing point 3";
    set_point(11)(0,0,0);
  fi;
  set_line(l)(1,7);
  if not def_vanishing_point_p_l_pl(12)(l)(screen):
    message "no vanishing point 4";
    set_point(12)(0,0,0);
  fi;
  set_line(l)(5,3);
  if not def_vanishing_point_p_l_pl(13)(l)(screen):
    message "no vanishing point 5";
    set_point(13)(0,0,0);
  fi;
  set_line(l)(5,8);
  if not def_vanishing_point_p_l_pl(14)(l)(screen):
    message "no vanishing point 6";
    set_point(14)(0,0,0);
  fi;
  set_line(l)(6,7);
  if not def_vanishing_point_p_l_pl(15)(l)(screen):
    message "no vanishing point 7";
    set_point(15)(0,0,0);
  fi;
  set_line(l)(5,2);
  if not def_vanishing_point_p_l_pl(16)(l)(screen):
    message "no vanishing point 8";
    set_point(16)(0,0,0);
  fi;
  set_line(l)(6,1);
  if not def_vanishing_point_p_l_pl(17)(l)(screen):
    message "no vanishing point 9";
    set_point(17)(0,0,0);
  fi;
  
  free_line(l);
enddef;

vardef draw_C(expr inst)=
  draw_lines(1,2,4,3,1);draw_lines(5,6,8,7,5);
  draw_line(1,5);draw_line(2,6);draw_line(3,7);draw_line(4,8);
  pickup pencircle scaled 4pt;
  drawoptions(withcolor red);
  for i:=9 upto 17:
    if z[ipnt_(i)]=(10,10):draw_line(i,i);
    fi;
  endfor;
  drawoptions();
  pickup pencircle scaled 1pt;
  for i:=9 upto 17:draw_line(i,i);endfor;
  pickup pencircle scaled 0.4pt;
  drawoptions(dashed evenly scaled 0.5);
  for j:=1,3,5,7:draw_line(j,9);endfor;
  for j:=3,4,7,8:draw_line(j,10);endfor;
  for j:=1 upto 4:draw_line(j,11);endfor;
  draw_line(1,12);draw_line(2,12);
  drawoptions(dashed evenly scaled 0.5 withcolor red);
  for j:=5,6:draw_line(j,13);endfor;
  drawoptions(dashed evenly scaled 0.5 withcolor green);
  for j:=1,5:draw_line(j,14);endfor;
  drawoptions(dashed evenly scaled 0.5 withcolor blue);
  for j:=2,6:draw_line(j,15);endfor;
  drawoptions(dashed evenly scaled 0.5 withcolor green);
  for j:=2,4:draw_line(j,16);endfor;
  drawoptions(dashed evenly scaled 0.5 withcolor red);
  for j:=6,8:draw_line(j,17);endfor;

  drawoptions();
enddef;

new_plane_(screen)(0,0,0); % must be defined before |assign_obj|
                           % because |assign_obj| calls |set_C_point|

% we change the field, because we are very close
h_field:=170; % degrees 
v_field:=170; % degrees


assign_obj("cube","C");

%for i:=0 upto 100:
i=96;
  beginfig(100+i);
    % Observator
    set_point_(Obs)(1.7*cosd(3.6*i),1.8*sind(3.6*i),1.8);
    Obs_phi:=90;Obs_dist:=0.5;point_of_view_obj("cube",8,Obs_phi);
    reset_obj("cube");
    draw_obj("cube");
  endfig;
%endfor; 

end.