File: comet.m

package info (click to toggle)
plplot 5.15.0%2Bdfsg2-6
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 31,004 kB
  • sloc: ansic: 79,703; xml: 28,583; cpp: 20,033; ada: 19,456; tcl: 12,081; f90: 11,431; ml: 7,276; java: 6,863; python: 6,792; sh: 3,274; perl: 828; lisp: 75; makefile: 61; sed: 34; fortran: 6
file content (103 lines) | stat: -rw-r--r-- 2,115 bytes parent folder | download | duplicates (6)
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