Press n or j to go to the next uncovered block, b, p or k for the previous block.
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 | 1x 5x 5x 5x 5x 5x 1x | import { Types } from '@cornerstonejs/core'; import getFirstLineSegmentIntersectionIndexes from './getFirstLineSegmentIntersectionIndexes'; /** * Check if two polylines intersect comparing line segment by line segment. * @param sourcePolyline - Source polyline * @param targetPolyline - Target polyline * @returns True if the polylines intersect or false otherwise */ export default function intersectPolyline( sourcePolyline: Types.Point2[], targetPolyline: Types.Point2[] ): boolean { // Naive way to detect intersection between polylines in O(n^2). // TODO: Implement Bentley Ottmann sweep line algorithm or maybe some // algorithm that uses r-tree may make it run faster for (let i = 0, sourceLen = sourcePolyline.length; i < sourceLen; i++) { const sourceP1 = sourcePolyline[i]; const sourceP2Index = i === sourceLen - 1 ? 0 : i + 1; const sourceP2 = sourcePolyline[sourceP2Index]; const intersectionPointIndexes = getFirstLineSegmentIntersectionIndexes( targetPolyline, sourceP1, sourceP2 ); Iif (intersectionPointIndexes?.length === 2) { return true; } } return false; } |