summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketpic/ketlib/ketpicscifiles6/Paramplot.sci
blob: 4e3effdccd44a4486719e2f0a011801f1d2d62e0 (plain)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// 08.06.18  (N)
// 08.12.18
// 09.03.12
// 09.12.31 (gsort)
// 13.10.19 ( __ added to variables )
// 14.10.24   N,D,E => N__, etc
// 14.12.11   Assign used
// 15.11.16 N changed to number of intervals
// 16.12.13  in case of T1=T2

function P__=Paramplot(varargin)
  Eps__=10^(-5);
  Nargs__=length(varargin);
  if type(varargin(1))==13
    Fnflg__=1;
    Fnx__=varargin(1);
    Fny__=varargin(2); Is__=3;
    if type(varargin(Is__))==13
      Fnflg__=Fnflg__+1;
      Fnargx__=varargin(Is__);
      Fnargy__=varargin(Is__+1);
      Is__=Is__+2;
    end;
  else
    Fnflg__=0;
    Fnstr__=varargin(1); Is__=2;
  end;
  Rgstr__=varargin(Is__); Is__=Is__+1;
  Range__=[0,2*%pi];
  N__=50; // Numpoints
  E__=[]; // Exclusions
  D__=%inf;  // Discont
  for I__=Is__:Nargs__
    Tmp__=varargin(I__);
    K__=mtlb_findstr(Tmp__,'=');
    Tmp1__=strsplit(Tmp__,[K__-1,K__]);
    Tmp2__=ascii(Tmp1__(1,1));
    Lhs__=char(Tmp2__(1));
    Str__=Lhs__+'__='+Tmp1__(3,1);
    execstr(Str__);
  end;
  K__=mtlb_findstr(Rgstr__,'=');
  if K__~=[]
    Tmp__=strsplit(Rgstr__,[K__-1,K__]);
    Vname__=Tmp__(1,1);
    Rng__=evstr(Tmp__(3,1));
  else
    Vname__=Rgstr__;
    Rng__=[XMIN,XMAX];
  end
  T1__=Rng__(1); T2__=Rng__(2);
//  Dt__=(T2__-T1__)/(N__-1);
  Dt__=(T2__-T1__)/(N__); // 15.11.16
  if Fnflg__==0
    Str__=Assign(Fnstr__,Vname__,'t__');
  end;
  if abs(Dt__)<Eps__ then // 16.12.13
    t__=T1__;
    P__=evstr(Str__);
    return;
  end;
  P__=[];
  E__=gsort(E__);
  E__=E__(length(E__):-1:1);
  E__=[E__,%inf];
  Tmp__=gsort(E__);
  E__=Tmp__(length(Tmp__):-1:1);
  Ke__=1;
  for t__=T1__:Dt__:T2__
    Pa__=[];
    if t__-E__(Ke__)<-Eps__
      if Fnflg__==0
        Pa__=evstr(Str__);
      else
        if Fnflg__==1
          Pa__=[Fnx__(t__),Fny__(t__)];
        else
          if type(Fnargx__)==1
            Tmp1__=Fnx__(t__);
          else
            Tmp1__=Fnx__(Fnargx__,t__);
          end;
          if type(Fnargy__)==1
            Tmp2__=Fny__(t__);
          else
            Tmp2__=Fny__(Fnargy__,t__);
          end;
          Pa__=[Tmp1__,Tmp2__];
        end;
      end;
    end
    if abs(t__-E__(Ke__))<=Eps__
      if P__~=[] & P__(size(P__,1),:)~=[%inf,%inf]
        Pa__=[%inf,%inf];
      end
    end
    if t__-E__(Ke__)>Eps__
      if Fnflg__==0
        Pa__=evstr(Str__);
      else
        if Fnflg__==1
          Pa__=[Fnx__(t__),Fny__(t__)];
        else
          if type(Fnargx__)==1
            Tmp1__=Fnx__(t__);
          else
            Tmp1__=Fnx__(Fnargx__,t__);
          end;
          if type(Fnargy__)==1
            Tmp2__=Fny__(t__);
          else
            Tmp2__=Fny__(Fnargy__,t__);
          end;
          Pa__=[Tmp1__,Tmp2__];
        end;
      end;
      Ke__=Ke__+1;
    end
    if Pa__~=[]
      if Pa__(1)==%inf
        P__=[P__; Pa__]
      elseif P__==[]
        P__=[Pa__];
      else
        Tmp__=P__(size(P__,1),:);
        if Tmp__(1)==%inf
          P__=[P__;Pa__];
        elseif norm(Tmp__-Pa__)<D__
          P__=[P__;Pa__];
        else
          P__=[P__;%inf,%inf;Pa__];
        end
      end
    end
  end;
  Tmp__=size(P__,1);
  if P__(Tmp__,1)==%inf
    P__=P__(1:Tmp__-1,:);
  end;
endfunction;