summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/visualization/projections/ProjectionParallel.java
blob: 98c2ac33c3f157f8c7ead8681c54f88f6f24d002 (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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
package de.lmu.ifi.dbs.elki.visualization.projections;

/*
 This file is part of ELKI:
 Environment for Developing KDD-Applications Supported by Index-Structures

 Copyright (C) 2012
 Ludwig-Maximilians-Universität München
 Lehr- und Forschungseinheit für Datenbanksysteme
 ELKI Development Team

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU Affero General Public License as published by
 the Free Software Foundation, either version 3 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 Affero General Public License for more details.

 You should have received a copy of the GNU Affero General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.math.scales.LinearScale;

/**
 * Projection to parallel coordinates that allows reordering and inversion of
 * axes.
 * 
 * Note: when using this projection, pay attention to the two different schemes
 * of dimension numbering: by input dimension and by axis position.
 * 
 * @author Robert Rödler
 * @author Erich Schubert
 */
public interface ProjectionParallel extends Projection {
  /**
   * Get inversion flag of axis.
   * 
   * @param axis Axis (reordered) position
   * @return Inversion flag
   */
  public boolean isAxisInverted(int axis);

  /**
   * Set inversion flag of axis.
   * 
   * @param axis Axis (reordered) position
   * @param bool Value of inversion flag
   */
  public void setAxisInverted(int axis, boolean bool);

  /**
   * Toggle inverted flag of axis.
   * 
   * @param axis Axis (reordered) position
   */
  public void toggleAxisInverted(int axis);

  /**
   * Get inversion flag of dimension.
   * 
   * @param truedim Dimension in original numbering
   * @return Inversion flag
   */
  public boolean isDimInverted(int truedim);

  /**
   * Set inversion flag of a dimension.
   * 
   * @param truedim Dimension in original numbering
   * @param bool Value of inversion flag
   */
  public void setDimInverted(int truedim, boolean bool);

  /**
   * Toggle inverted flag of dimension.
   * 
   * @param truedim Dimension in original numbering
   */
  public void toggleDimInverted(int truedim);

  /**
   * Get scale for the given axis
   * 
   * @param axis Axis (reordered) position
   * @return Axis scale
   */
  public LinearScale getAxisScale(int axis);

  /**
   * Test whether the current axis is visible
   * 
   * @param axis Axis (reordered) position
   * @return Visibility of axis
   */
  public boolean isAxisVisible(int axis);

  /**
   * Set the visibility of the axis.
   * 
   * @param axis Axis number
   * @param vis Visibility status
   */
  public void setAxisVisible(int axis, boolean vis);

  /**
   * Toggle visibility of the axis.
   * 
   * @param axis Axis number
   */
  public void toggleAxisVisible(int axis);

  /**
   * Get the number of visible dimension.
   * 
   * @return Number of visible dimensions
   */
  public int getVisibleDimensions();

  /**
   * Exchange axes A and B
   * @param a First axis
   * @param b Second axis
   */
  public void swapAxes(int a, int b);

  /**
   * shift a dimension to another position
   * 
   * @param axis axis to shift
   * @param rn new position
   */
  public void moveAxis(int axis, int rn);

  /**
   * Get the dimension for the given axis number
   * 
   * @param axis Axis number
   * @return Dimension
   */
  public int getDimForAxis(int axis);

  /**
   * Get the dimension for the given visible axis
   * 
   * @param axis Axis number (visible axes only)
   * @return Dimension
   */
  public int getDimForVisibleAxis(int axis);

  /**
   * Fast project a vector from data to render space
   * 
   * @param v Input vector
   * @return Vector with reordering, inversions and scales applied.
   */
  public double[] fastProjectDataToRenderSpace(double[] v);

  /**
   * Fast project a vector from data to render space
   * 
   * @param v Input vector
   * @return Vector with reordering, inversions and scales applied.
   */
  public double[] fastProjectDataToRenderSpace(NumberVector<?> v);

  /**
   * Project the value of a single axis to its display value
   * 
   * @param value Input value
   * @param axis Axis to use for scaling and inversion
   * @return Transformed value
   */
  public double fastProjectDataToRenderSpace(double value, int axis);

  /**
   * Project a display value back to the original data space
   * 
   * @param value transformed value
   * @param axis Axis to use for scaling and inversion
   * @return Original value
   */
  public double fastProjectRenderToDataSpace(double value, int axis);

  /**
   * Find the axis assinged to the given dimension.
   * 
   * @param truedim Dimension
   * @return Axis number
   */
  public int getAxisForDim(int truedim);
}