resolveSegments = {
return function resolveSegments( segments ) {
const scale = [2,3,1];
const vertices = new IndexedSet, quaternions = new IndexedSet,
balls = new IndexedSet, struts = new IndexedSet, strutdata = [];
for (let segment of segments) {
const startpoint = scalarmul(scale, segment[0]);
const endpoint = scalarmul(scale, segment[1]);
const startindex = vertices.add(startpoint);
const endindex = vertices.add(endpoint);
balls.add(startindex), balls.add(endindex);
if (startindex != endindex) struts.add([startindex,endindex].sort());
}
for (let [startindex, endindex] of struts.contents) {
const startpoint = vertices.contents[startindex];
const endpoint = vertices.contents[endindex];
const displacement = vectorsub(endpoint, startpoint);
const [orbit, quaternion, reflected, length] = orbit2(displacement);
const quatindex = quaternions.add(quaternion);
strutdata.push({
orbit: JSON.stringify(orbit), orientation: quatindex,
start: reflected ? endindex : startindex, length: length });
}
return {
vertices: vertices, balls: balls,
quaternions: quaternions, struts: strutdata };
}
}