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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 45x 9x 9x 9x 108x 36x 36x 21x 9x | import type { Types } from '@cornerstonejs/core'; import * as lineSegment from '../line'; type rectLineSegments = { top: Types.Point2[]; right: Types.Point2[]; bottom: Types.Point2[]; left: Types.Point2[]; }; /** * Given a rectangle left, top, width and height, return an object containing the * line segments that make up the rectangle's four sides * @param left - The x-coordinate of the left edge of the rectangle. * @param top - The y-coordinate of the top edge of the rectangle. * @param width - The width of the rectangle. * @param height - The height of the rectangle. * @returns An object with four keys, each of which contains an array of two * points. */ function rectToLineSegments( left: number, top: number, width: number, height: number ): rectLineSegments { const topLineStart: Types.Point2 = [left, top]; const topLineEnd: Types.Point2 = [left + width, top]; const rightLineStart: Types.Point2 = [left + width, top]; const rightLineEnd: Types.Point2 = [left + width, top + height]; const bottomLineStart: Types.Point2 = [left + width, top + height]; const bottomLineEnd: Types.Point2 = [left, top + height]; const leftLineStart: Types.Point2 = [left, top + height]; const leftLineEnd: Types.Point2 = [left, top]; const lineSegments = { top: [topLineStart, topLineEnd], right: [rightLineStart, rightLineEnd], bottom: [bottomLineStart, bottomLineEnd], left: [leftLineStart, leftLineEnd], }; return lineSegments; } /** * Calculates distance of the point to the rectangle. It calculates the minimum * distance between the point and each line segment of the rectangle. * * @param rect - coordinates of the rectangle [left, top, width, height] * @param point - [x,y] coordinates of a point * @returns */ export default function distanceToPoint( rect: number[], point: Types.Point2 ): number { Iif (rect.length !== 4 || point.length !== 2) { throw Error( 'rectangle:[left, top, width, height] or point: [x,y] not defined correctly' ); } const [left, top, width, height] = rect; let minDistance = 655535; const lineSegments = rectToLineSegments(left, top, width, height); Object.keys(lineSegments).forEach((segment) => { const [lineStart, lineEnd] = lineSegments[segment]; const distance = lineSegment.distanceToPoint(lineStart, lineEnd, point); if (distance < minDistance) { minDistance = distance; } }); return minDistance; } |