-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
57 lines (47 loc) · 1.23 KB
/
index.js
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
module.exports = Scale;
function Scale (domain, range) {
this._domain = domain || [0, 1]
this._range = range || [0, 1]
}
Scale.prototype.range = function (range) {
if (typeof range === 'undefined') {
return this._range;
}
this._range = range;
return this;
};
Scale.prototype.domain = function (domain) {
if (typeof domain === 'undefined') {
return this._domain;
}
this._domain = domain;
return this;
};
Scale.prototype.map = function (x) {
if (typeof x === 'undefined') {
return this._domain;
}
var range = this._range
var domain = this._domain
var factor = (range[1] - range[0]) / (domain[1] - domain[0])
return range[0] + factor * (x - domain[0])
};
Scale.prototype.invert = function (y) {
if (typeof y === 'undefined' ) {
return new Scale(this._range, this._domain);
}
var range = this._range
var domain = this._domain
var factor = (range[1] - range[0]) / (domain[1] - domain[0])
return domain[0] + (y - range[0]) / factor
};
Scale.prototype.scaleDomain = function (factor) {
var domain = this._domain
this.domain([domain[0] * factor, domain[1] * factor])
return this
}
Scale.prototype.scaleRange = function (factor) {
var range = this._range
this.range([range[0] * factor, range[1] * factor])
return this
}