DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦17d078a2b⟧ TextFile

    Length: 3190 (0xc76)
    Types: TextFile
    Names: »spline.psr«

Derivation

└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦af5ba6c8e⟧ »unix3.0/DVIWARE.tar.Z« 
        └─⟦ca79c7339⟧ 
            └─⟦this⟧ »DVIware/laser-setters/dvi-to-ps/TeXPS/dvitps/psr/spline.psr« 

TextFile

% Copyright (c) 1988 Stephan v. Bechtolsheim

% This file is part of the TeXPS Software Package.

% The TeXPS Software Package is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY.  No author or distributor
% accepts responsibility to anyone for the consequences of using it
% or for whether it serves any particular purpose or works at all,
% unless he says so in writing.  Refer to the TeXPS Software Package
% General Public License for full details.

% Everyone is granted permission to copy, modify and redistribute
% the TeXPS Software Package, but only under the conditions described in the
% TeXPS Software Package General Public License.   A copy of this license is
% supposed to have been given to you along with TeXPS Software Package so you
% can know your rights and responsibilities.  It should be in a
% file named CopyrightLong.  Among other things, the copyright notice
% and this notice must be preserved on all copies.

% Draw a Chaikin spline, which is the same one ditroff uses.
% (Needed by tpic support).
% x1 y1 x2 y2 ... xn yn n @ChaikinSplineDraw

/@ChaikinSplineSectionDict 20 dict def

/@ChaikinSplineSectionShow {	% paras : x1 y1 x2 y2 x3 y3 x4 y4 
    @ChaikinSplineSectionDict begin
	/y4 exch def /x4 exch def
	/y3 exch def /x3 exch def
	/y2 exch def /x2 exch def
	/y1 exch def /x1 exch def
	/xm x2 x3 add 2 div def	% xm = (x2 + x3) / 2
	/ym y2 y3 add 2 div def	% ym = (y2 + y3) / 2
	    x1 xm sub abs 3 lt
	    y1 ym sub abs 3 lt
	and			% abs(x1-xm)<3 && abs(y1-ym)<3
	    { x1 y1 moveto xm ym lineto stroke }
	    {
	    xm ym x1 y1 x2 y2 x3 y3 x4 y4	% save these on the stack
		x1 y1			% parameters for the next recursion
		x1 x2 add 2 div y1 y2 add 2 div
		x2 3 mul x3 add 4 div y2 3 mul y3 add 4 div
		xm ym
	    @ChaikinSplineSectionShow
	    /y4 exch def /x4 exch def
	    /y3 exch def /x3 exch def
	    /y2 exch def /x2 exch def
	    /y1 exch def /x1 exch def
	    /ym exch def /xm exch def	% pop them back
	} ifelse

	    xm x4 sub abs 3 lt
	    ym y4 sub abs 3 lt
	and			% abs(x1-xm)<3 && abs(y1-ym)<3
	    { xm ym moveto x4 y4 lineto stroke }
	    {   xm ym
	    x2 x3 3 mul add 4 div y2 y3 3 mul add 4 div
	    x3 x4 add 2 div y3 y4 add 2 div
	    x4 y4
	    @ChaikinSplineSectionShow
	} ifelse
	end
    } def

/@ChaikinSplineDict 22 dict def

/@ChaikinSplineDraw {
    @ChaikinSplineDict begin
	/n exch def
	n 2 mul -2 roll
	/y1 exch def
	/x1 exch def
	/n n 1 sub def

	n 2 mul -2 roll
	/y2 exch def
	/x2 exch def
	/n n 1 sub def

	/cx1 x1 x2 add 2 div def	% cx1 = (x1+x2)/2
	/cy1 y1 y2 add 2 div def
	/cx2 x1 3 x2 mul add 4 div def	% cx2 = (x1 + 3x2)/4
	/cy2 y1 3 y2 mul add 4 div def

	newpath x1 y1 moveto cx1 cy1 lineto

	    {
	    n 0 eq {exit} if
	    /x1 x2 def /y1 y2 def
	    n 2 mul -2 roll
	    /y2 exch def
	    /x2 exch def
	    /n n 1 sub def
	    /cx3 3 x1 mul x2 add 4 div def
	    /cy3 3 y1 mul y2 add 4 div def
	    /cx4 x1 x2 add 2 div def
	    /cy4 y1 y2 add 2 div def
	    cx1 cy1 cx2 cy2 cx3 cy3 cx4 cy4 @ChaikinSplineSectionShow
	    /cx1 cx4 def
	    /cy1 cy4 def
	    /cx2 x1 3 x2 mul add 4 div def
	    /cy2 y1 3 y2 mul add 4 div def
	} loop

	cx1 cy1 moveto x2 y2 lineto stroke
	end
    } def