UNPKG

kitchen-simulator

Version:

It is a kitchen simulator (self-contained micro-frontend).

54 lines (52 loc) 1.98 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateInnerCycles = calculateInnerCycles; exports.isClockWiseOrder = isClockWiseOrder; var _graph = _interopRequireDefault(require("./graph")); var _getEdgesOfSubgraphs = _interopRequireDefault(require("./get-edges-of-subgraphs")); var _graphCycles = _interopRequireDefault(require("./graph-cycles")); var _immutable = require("immutable"); function calculateInnerCycles(verticesArray, edgesArray) { var innerCycles = new _immutable.List(); var graph = new _graph["default"](verticesArray.length); edgesArray.forEach(function (line) { graph.addEdge(line[0], line[1]); graph.addEdge(line[1], line[0]); }); graph.BCC(); var subgraphs = graph.subgraphs.filter(function (subgraph) { return subgraph.length >= 3; }); var edgesOfSubgraphsArray = (0, _getEdgesOfSubgraphs["default"])(subgraphs, graph); var edges = []; edgesOfSubgraphsArray.forEach(function (es) { es.forEach(function (edge) { return edges.push(edge); }); }); var cycles = (0, _graphCycles["default"])(verticesArray, edges); cycles.v_cycles.forEach(function (cycle) { cycle.shift(); innerCycles = innerCycles.push(cycle); }); return innerCycles; } function isClockWiseOrder(innerCycleWithCoords) { // See: https://stackoverflow.com/a/1165943 and http://blog.element84.com/polygon-winding.html var i = 0; var twiceEnclosedArea = 0; var size = innerCycleWithCoords.size; for (i = 0; i < size; i++) { var _innerCycleWithCoords = innerCycleWithCoords.get(i), x1 = _innerCycleWithCoords.x, y1 = _innerCycleWithCoords.y; var _innerCycleWithCoords2 = innerCycleWithCoords.get((i + 1) % size), x2 = _innerCycleWithCoords2.x, y2 = _innerCycleWithCoords2.y; twiceEnclosedArea += (x2 - x1) * (y2 + y1); } return twiceEnclosedArea > 0; }