%%%% elpsd_13.ldf
%%%% Created by Laurence D. Finston (LDF) Fri Dec 9 21:41:57 CET 2005
%% * (1) Copyright and License.
%%%% This file is part of GNU 3DLDF, a package for three-dimensional drawing.
%%%% Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Free Software Foundation
%%%% 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 the maintainer of
%%%% GNU 3DLDF to send 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 The Free Software Foundation, Inc.
%%%% 51 Franklin St, Fifth Floor
%%%% Boston, MA 02110-1301
%%%% USA
%%%% Laurence.Finston@gmx.de
%% *** (3) The intersection points of a linear `path' and an `ellipsoid'.
%% LDF 2005.12.09.
verbatim_metapost "verbatimtex \magnification=\magstep5 etex";
pickup pencircle scaled (.75mm, .75mm);
focus f;
set f with_position (-10, 15, -30) with_direction (-10, 15, 100) with_distance 20;
picture save_picture;
beginfig(1);
transform t;
%t := identity rotated (15, 15) shifted (1, 1, 1);
t := identity;
ellipsoid e;
set e with_center origin with_axis_x 20 with_axis_y 16 with_axis_z 10
with_divisions_x 6 with_divisions_y 6 with_divisions_z 2
with_point_count 64;
e *= t;
draw e;
% cuboid c;
% c := out_cuboid e;
% draw c with_color red;
path q[];
q0 := ((-10, -10) -- (10, 10)) rotated -90 shifted (0, 1);
%q0 := (0, -10) -- (0, 10);
q0 *= t;
draw q0 with_color blue;
bool_point_vector bpv;
bpv := e intersection_points q0;
message "bpv:";
show bpv;
point p[];
p0 := bpv0;
p1 := bpv1;
message "p0 location e:";
show p0 location e;
drawdot bpv0 with_color green with_pen pencircle scaled (1.5mm, 1.5mm);
label.top("$i_0$", p0 shifted (0, .2));
drawdot bpv1 with_color green with_pen pencircle scaled (1.5mm, 1.5mm);
label.lrt("$i_1$", p1 shifted (0, .2));
save_picture := current_picture;
label("Perspective Projection", (0, -11));
endfig with_focus f no_sort;
%end;
point label_pt;
label_pt := (0, -10);
beginfig(2);
output save_picture with_projection parallel_x_z;
label("Parallel Projection, X-Z Plane", label_pt);
endfig with_projection parallel_x_y;
beginfig(3);
output save_picture with_projection parallel_x_y;
label("Parallel Projection, X-Y Plane", label_pt);
endfig with_projection parallel_x_y;
beginfig(4);
output save_picture with_projection parallel_z_y;
label("Parallel Projection, Z-Y Plane", label_pt);
endfig with_projection parallel_x_y;
verbatim_metapost "end";
end;