source: Sophya/trunk/SophyaPI/PIGcont/gp_axis.c@ 4043

Last change on this file since 4043 was 1844, checked in by ansari, 24 years ago

changement de nom des fichiers (ajout de gp_ ou gpc_ ) pour eviter les confusions - Reza 30/12/2001

File size: 2.5 KB
RevLine 
[1844]1#include "gp_axis.h"
2#include <math.h>
3AXIS axis_array[AXIS_ARRAY_SIZE] = AXIS_ARRAY_INITIALIZER(DEFAULT_AXIS_STRUCT);
4
5void dummy(){
6
7 int k=4;
8
9}
10/*{{{ dbl_raise() used by set_tics */
11/* FIXME HBB 20000426: is this really useful? */
12static double
13dbl_raise(x, y)
14double x;
15int y;
16{
17 register int i = abs(y);
18 double val = 1.0;
19
20 while (--i >= 0)
21 val *= x;
22
23 if (y < 0)
24 return (1.0 / val);
25 return (val);
26}
27
28/*}}} */
29
30/*{{{ set_tic() */
31/* the guide parameter was intended to allow the number of tics
32 * to depend on the relative sizes of the plot and the font.
33 * It is the approximate upper limit on number of tics allowed.
34 * But it did not go down well with the users.
35 * A value of 20 gives the same behaviour as 3.5, so that is
36 * hardwired into the calls to here. Maybe we will restore it
37 * to the automatic calculation one day
38 */
39
40double
41set_tic(l10, guide)
42 double l10;
43 int guide;
44{
45 double xnorm, tics, posns;
46
47 int fl = (int) floor(l10);
48 xnorm = pow(10.0, l10 - fl); /* approx number of decades */
49
50 posns = guide / xnorm; /* approx number of tic posns per decade */
51
52 if (posns > 40)
53 tics = 0.05; /* eg 0, .05, .10, ... */
54 else if (posns > 20)
55 tics = 0.1; /* eg 0, .1, .2, ... */
56 else if (posns > 10)
57 tics = 0.2; /* eg 0,0.2,0.4,... */
58 else if (posns > 4)
59 tics = 0.5; /* 0,0.5,1, */
60 else if (posns > 1)
61 tics = 1; /* 0,1,2,.... */
62 else if (posns > 0.5)
63 tics = 2; /* 0, 2, 4, 6 */
64 else
65 /* getting desperate... the ceil is to make sure we
66 * go over rather than under - eg plot [-10:10] x*x
67 * gives a range of about 99.999 - tics=xnorm gives
68 * tics at 0, 99.99 and 109.98 - BAD !
69 * This way, inaccuracy the other way will round
70 * up (eg 0->100.0001 => tics at 0 and 101
71 * I think latter is better than former
72 */
73 tics = ceil(xnorm);
74
75 return (tics * dbl_raise(10.0, fl));
76}
77/* this is used in a few places all over the code: undo logscaling of
78 * a given range if necessary. If checkrange is TRUE, will int_error() if
79 * range is invalid */
80void
81axis_unlog_interval(axis, min, max, checkrange)
82 AXIS_INDEX axis;
83 double *min, *max;
84 TBOOLEAN checkrange;
85{
86 if (axis_array[axis].log) {
87 if (checkrange && (*min<= 0.0 || *max <= 0.0))printf(" axis_unlog_interval : range must be > 0 !! \n");
88 /*int_error(NO_CARET,
89 "%s range must be greater than 0 for log scale",
90 axis_defaults[axis].name);*/
91 *min = (*min<=0) ? -VERYLARGE : AXIS_DO_LOG(axis,*min);
92 *max = (*max<=0) ? -VERYLARGE : AXIS_DO_LOG(axis,*max);
93 }
94}
95
96/*}}} */
97
Note: See TracBrowser for help on using the repository browser.