segwitharrows = (plane, data, type) => {
console.log('plane = ', plane);
const color = {
point: '#9aceff',
stroke: '#9aceff',
...data.color
};
const p = data.points;
const g = plane.ctx.append('g');
if (p[0][1] < p[1][1]) {
const lengthseg = (plane.domain.x[1] - plane.domain.x[0]) / 20;
const yval = data.points[1][1] - data.points[0][1];
const xval = data.points[1][0] - data.points[0][0];
const preangle = Math.atan(xval / yval);
const reangle = preangle * 180;
const angle = reangle / Math.PI;
const upangle = angle + 30;
const downangle = angle - 30;
const xi = (data.points[1][0] - lengthseg * Math.sin(upangle * Math.PI / 180));
const yi = data.points[1][1] - lengthseg * Math.cos(upangle * Math.PI / 180);
const xj = (data.points[1][0] - lengthseg * Math.sin(downangle * Math.PI / 180));
const yj = data.points[1][1] - lengthseg * Math.cos(downangle * Math.PI / 180);
const dataup = [[xi, yi], data.points[1]];
const datadown = [[xj, yj], data.points[1]];
segnocir(plane, {
points: dataup
});
segnocir(plane, {
points: datadown
});
} if (p[0][1] > p[1][1]) {
const lengthseg = (plane.domain.x[1] - plane.domain.x[0]) / 20;
const yval = data.points[1][1] - data.points[0][1];
const xval = data.points[1][0] - data.points[0][0];
const preangle = Math.atan(xval / yval);
const reangle = preangle * 180;
const angle = reangle / Math.PI;
const upangle = angle + 30;
const downangle = angle - 30;
const xi = (data.points[1][0] + lengthseg * Math.sin(upangle * Math.PI / 180));
const yi = data.points[1][1] + lengthseg * Math.cos(upangle * Math.PI / 180);
const xj = (data.points[1][0] + lengthseg * Math.sin(downangle * Math.PI / 180));
const yj = data.points[1][1] + lengthseg * Math.cos(downangle * Math.PI / 180);
const dataup = [[xi, yi], data.points[1]];
const datadown = [[xj, yj], data.points[1]];
segnocir(plane, {
points: dataup
});
segnocir(plane, {
points: datadown
});
} else if (p[0][1] == p[1][1]) {
const lengthseg = (plane.domain.x[1] - plane.domain.x[0]) / 20;
const yval = data.points[1][1] - data.points[0][1];
const xval = data.points[1][0] - data.points[0][0];
const preangle = Math.atan(xval / yval);
const reangle = preangle * 180;
const angle = reangle / Math.PI;
const upangle = angle + 30;
const downangle = angle - 30;
const xi = (data.points[1][0] + lengthseg * Math.sin(upangle * Math.PI / 180));
const yi = data.points[1][1] + lengthseg * Math.cos(upangle * Math.PI / 180);
const xj = (data.points[1][0] + lengthseg * Math.sin(downangle * Math.PI / 180));
const yj = data.points[1][1] + lengthseg * Math.cos(downangle * Math.PI / 180);
const dataup = [[xi, yi], data.points[1]];
const datadown = [[xj, yj], data.points[1]];
segnocir(plane, {
points: dataup
});
segnocir(plane, {
points: datadown
});
}
g.selectAll('circles')
.data(p)
.enter()
.append('path')
.attr(
'd',
d3.line()(p.map(v => [plane.scale.x(v[0]), plane.scale.y(v[1])]))
)
.attr('stroke', color.stroke)
.attr('stroke-width', 1.6)
.attr('stroke-dasharray', data.type === 'd' ? 4.0 : undefined);
}