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 | 105x 105x 105x 105x 105x 39x 66x 5x 61x 105x | import type { Types } from '@cornerstonejs/core'; import * as math from '../'; /** * Calculate the closest point and the squared distance between a reference point and a line segment. * * It projects the reference point onto the line segment but it shall be bounded by the * start/end points since this is a line segment and not a line which could be extended. * * @param lineStart - Start point of the line segment * @param lineEnd - End point of the line segment * @param point - Reference point * @returns Closest point and the squared distance between a `point` and a line * segment defined by `lineStart` and `lineEnd` points */ export default function distanceToPointSquaredInfo( lineStart: Types.Point2, lineEnd: Types.Point2, point: Types.Point2 ): { point: Types.Point2; distanceSquared: number; } { let closestPoint: Types.Point2; const distanceSquared = math.point.distanceToPointSquared(lineStart, lineEnd); // Check if lineStart equal to the lineEnd which means the closest point // is any of these two points Iif (lineStart[0] === lineEnd[0] && lineStart[1] === lineEnd[1]) { closestPoint = lineStart; } Eif (!closestPoint) { const dotProduct = ((point[0] - lineStart[0]) * (lineEnd[0] - lineStart[0]) + (point[1] - lineStart[1]) * (lineEnd[1] - lineStart[1])) / distanceSquared; if (dotProduct < 0) { closestPoint = lineStart; } else if (dotProduct > 1) { closestPoint = lineEnd; } else { closestPoint = [ lineStart[0] + dotProduct * (lineEnd[0] - lineStart[0]), lineStart[1] + dotProduct * (lineEnd[1] - lineStart[1]), ]; } } return { point: [...closestPoint], distanceSquared: math.point.distanceToPointSquared(point, closestPoint), }; } |