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
|
/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;
const double ht(4);
const P target(0,0,0);
const P observer(0,-4,0);
const P dtarg(-0.5,0,1);
const double dx(0.375);
// location of label
const P obj_loc(1,0,0.25);
P F(P arg)
{
double x(arg.x2());
return (ht/(ht+x))*P(arg.x1(), 0, arg.x3());
}
P P1(0.75, -1, -0.25);
P P2(1, -1.25, -0.75);
P P3(0.5, -1.5, -0.5 );
P midpt((1.0/3)*(P1+P2+P3));
int main() {
bounding_box(P(-3.5,-3.5),P(3.5,2.5));
unitlength("0.375in");
picture(P(7,6));
begin();
camera.at(P(1.5,-10,3.5));
camera.range(10);
font_size("footnotesize");
right_angle(target, E_1, -E_2);
line(target, target+2*dx*E_1);
line(target, target+2*dx*E_3);
// grid(P(-3,0,-2), P(3,0,2), 6, 8);
grid(P(-3,0,-2), P(3,0,2));
masklabel(observer+E_1, P(2,0), "\\textbf{Sea}", r);
masklabel(observer+E_3, P(0,2), "\\textbf{Sky}", t);
masklabel(observer-E_2, P(-4,0), "\\textbf{Eye}", l);
masklabel(observer, P(-2,0), "Viewpoint", l);
dot(observer);
masklabel(P(3,0,2), P(-6,-2), "Canvas", bl);
line(observer, target);
fill(Black(0.5));
triangle(F(P1), F(P2), F(P3));
line(P1, F(P1));
line(P2, F(P2));
line(P3, F(P3));
line(observer, F(P1));
line(observer, F(P2));
line(observer, F(P3));
fill(Black(0.1));
triangle(P1, P2, P3);
line(obj_loc, midpt);
masklabel(obj_loc, P(0,0), "Object", t);
line(P(2,0,-1), F(midpt));
masklabel(P(2,0,-1), P(0,0), "Shadow", r);
masklabel(target+dtarg, P(0,0), "Target", t);
arrow(target+dtarg, target+0.1*dtarg, 0.5);
dot(target);
bold();
arrow(observer, observer+E_1, 0.5);
arrow(observer, observer-E_2, 0.5);
arrow(observer, observer+E_3, 0.5);
end();
}
|