File: comet.m

package info (click to toggle)
plplot 5.10.0%2Bdfsg2-0.4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 25,792 kB
  • ctags: 13,517
  • sloc: ansic: 83,001; xml: 27,081; ada: 18,878; cpp: 15,966; tcl: 11,651; python: 7,075; f90: 7,058; ml: 6,974; java: 6,665; perl: 5,029; sh: 2,208; makefile: 210; lisp: 75; sed: 25; fortran: 7
file content (103 lines) | stat: -rw-r--r-- 2,135 bytes parent folder | download | duplicates (3)
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
## Copyright (C) 1998-2003 Joao Cardoso.
## 
## This program 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 2 of the License, or (at your
## option) any later version.
## 
## This program 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.
##
## This file is part of plplot_octave.

##	comet(Y) displays an animated comet plot of the vector Y.
##	comet(X,Y) displays an animated comet plot of vector Y vs. X.
##	comet(X,Y,p) uses a comet of length p*length(Y).  Default is p = 0.10.
##	comet, by itself, is self demonstrating.
##	Example:
##	    t = -pi:pi/200:pi;
##	    comet(t,tan(sin(t))-sin(tan(t)))

function comet(x, y, p)

  ax_s = axis("state");
  ax_s = deblank(ax_s(1,:));
  if (strcmp("auto", ax_s) == 1)
    warning("comet: FIXME: axis is 'auto', turning it to 'tight'.");
    axis "tight"
  endif

  if (nargin == 0)
    x = -pi:pi/200:pi;
    y = tan(sin(x))-sin(tan(x));
    p = 0.1;
  elseif (nargin < 2)
    y = x;
    x = 1:length(y);
  endif

  if (nargin < 3)
    p = 0.10;
  endif

  if (rows(x) != 1)
    x = x';
  endif

  if (rows(y) != 1)
    y = y';
  endif

  plot(x,y);

  [r, g, b] = plgcol0(1);
  plscol0(1, 255, 0, 255);
  plcol0(1);
  pllsty(1);

  old_hold = ishold;
  hold "on";

  m = length(x);
  k = round(p*m);
  if (k == 1)
    k = 2;
  endif
  plxormod(1);
  
  unwind_protect # recover if user hit ^C
    
    ## Grow the body
    for i = 1:k
      __comet(x(1:i), y(1:i));
    endfor

    ## Primary loop
    for i = k+1:m-k
      __comet(x(i:i+k), y(i:i+k));
    endfor

    ## Clean up the tail
    for i = m-k+1:m
      __comet(x(i:m), y(i:m));
    endfor
    
  unwind_protect_cleanup
    
    plxormod(0);
    
    if (old_hold == 0)
      hold "off"
    endif

    plscol0(1, r, g, b);

  end_unwind_protect

  if (strcmp("auto", ax_s) == 1)
    axis "auto"
  endif

endfunction