import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
const size = 336;
const insetSize = size / 2 - 8;
const inset = function(num) {
return insetSize * num;
};
const milliseconds = function(num, max) {
return max > 0 ? parseInt(max * num) / 100 : 0;
export default class TomographyGraph extends Component {
@tracked max = -999999999;
size = size;
circle = [inset(1), inset(0.25), inset(0.5), inset(0.75), inset(1)];
labels = [inset(-0.25), inset(-0.5), inset(-0.75), inset(-1)];
get milliseconds() {
const distances = this.args.distances || [];
const max = distances.reduce((prev, d) => Math.max(prev, d.distance), this.max);
return [25, 50, 75, 100].map(item => milliseconds(item, max));
}
get distances() {
let distances = this.args.distances || [];
const len = distances.length;
if (len > 360) {
// We have more nodes than we want to show, take a random sampling to keep
// the number around 360.
const sampling = 360 / len;
distances = distances.filter(function(_, i) {
return i == 0 || i == len - 1 || Math.random() < sampling;
});
return distances.map((d, i) => {
return {
rotate: (i * 360) / distances.length,
y2: insetSize * (d.distance / max),
node: d.node,
distance: d.distance,
segment: d.segment,