대각일 경우 오류 처리
This commit is contained in:
parent
75d610433e
commit
3ee113eb34
@ -199,6 +199,22 @@ export function useMode() {
|
|||||||
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'Enter': {
|
||||||
|
const result = prompt('입력하세요 (a(A패턴),b(B패턴),t(지붕))')
|
||||||
|
|
||||||
|
switch (result) {
|
||||||
|
case 'a':
|
||||||
|
applyTemplateA()
|
||||||
|
break
|
||||||
|
case 'b':
|
||||||
|
applyTemplateB()
|
||||||
|
break
|
||||||
|
case 't':
|
||||||
|
templateMode()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -362,7 +362,11 @@ export const sortedPoints = (points) => {
|
|||||||
// 짝수번째는 y값이 같은 점을 찾는다.
|
// 짝수번째는 y값이 같은 점을 찾는다.
|
||||||
for (let i = 0; i < copyPoints.length; i++) {
|
for (let i = 0; i < copyPoints.length; i++) {
|
||||||
// y값이 같은 point가 많은 경우 그 중 x값이 가장 큰걸 찾는다.
|
// y값이 같은 point가 많은 경우 그 중 x값이 가장 큰걸 찾는다.
|
||||||
const temp = copyPoints.filter((point) => point.y === currentPoint.y)
|
let temp = copyPoints.filter((point) => point.y === currentPoint.y)
|
||||||
|
if (temp.length === 0) {
|
||||||
|
// temp가 비어있을 경우 copyPoints에서 가장 가까운 점을 찾는다.
|
||||||
|
temp = Array.of(findClosestPointByY(currentPoint, copyPoints))
|
||||||
|
}
|
||||||
// temp중 x값이 가장 가까운 값
|
// temp중 x값이 가장 가까운 값
|
||||||
|
|
||||||
const min = temp.reduce((prev, current) => (Math.abs(current.x - currentPoint.x) <= Math.abs(prev.x - currentPoint.x) ? current : prev))
|
const min = temp.reduce((prev, current) => (Math.abs(current.x - currentPoint.x) <= Math.abs(prev.x - currentPoint.x) ? current : prev))
|
||||||
@ -377,7 +381,12 @@ export const sortedPoints = (points) => {
|
|||||||
// 홀수번째는 x값이 같은 점을 찾는다.
|
// 홀수번째는 x값이 같은 점을 찾는다.
|
||||||
for (let i = 0; i < copyPoints.length; i++) {
|
for (let i = 0; i < copyPoints.length; i++) {
|
||||||
// x값이 같은 point가 많은 경우 그 중 y값이 가장 큰걸 찾는다.
|
// x값이 같은 point가 많은 경우 그 중 y값이 가장 큰걸 찾는다.
|
||||||
const temp = copyPoints.filter((point) => point.x === currentPoint.x)
|
let temp = copyPoints.filter((point) => point.x === currentPoint.x)
|
||||||
|
if (temp.length === 0) {
|
||||||
|
// temp가 비어있을 경우 copyPoints에서 가장 가까운 점을 찾는다.
|
||||||
|
|
||||||
|
temp = Array.of(findClosestPointByX(currentPoint, copyPoints))
|
||||||
|
}
|
||||||
// temp중 y값이 가장 가까운 값
|
// temp중 y값이 가장 가까운 값
|
||||||
const min = temp.reduce((prev, current) => (Math.abs(current.y - currentPoint.y) <= Math.abs(prev.y - currentPoint.y) ? current : prev))
|
const min = temp.reduce((prev, current) => (Math.abs(current.y - currentPoint.y) <= Math.abs(prev.y - currentPoint.y) ? current : prev))
|
||||||
|
|
||||||
@ -429,6 +438,81 @@ export function findClosestLineToPoint(point, lines) {
|
|||||||
return closestLine
|
return closestLine
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* x값이 가장 가까운 점
|
||||||
|
* @param targetPoint
|
||||||
|
* @param points
|
||||||
|
* @returns {*|null}
|
||||||
|
*/
|
||||||
|
function findClosestPointByX(targetPoint, points) {
|
||||||
|
if (points.length === 0) {
|
||||||
|
return null // Return null if the points array is empty
|
||||||
|
}
|
||||||
|
|
||||||
|
let closestPoint = points[0]
|
||||||
|
let smallestDistance = Math.abs(targetPoint.x - points[0].x)
|
||||||
|
|
||||||
|
for (let i = 1; i < points.length; i++) {
|
||||||
|
const currentDistance = Math.abs(targetPoint.x - points[i].x)
|
||||||
|
if (currentDistance < smallestDistance) {
|
||||||
|
smallestDistance = currentDistance
|
||||||
|
closestPoint = points[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return closestPoint
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* y값이 가장 가까운 점
|
||||||
|
* @param targetPoint
|
||||||
|
* @param points
|
||||||
|
* @returns {*|null}
|
||||||
|
*/
|
||||||
|
function findClosestPointByY(targetPoint, points) {
|
||||||
|
if (points.length === 0) {
|
||||||
|
return null // Return null if the points array is empty
|
||||||
|
}
|
||||||
|
|
||||||
|
let closestPoint = points[0]
|
||||||
|
let smallestDistance = Math.abs(targetPoint.y - points[0].y)
|
||||||
|
|
||||||
|
for (let i = 1; i < points.length; i++) {
|
||||||
|
const currentDistance = Math.abs(targetPoint.y - points[i].y)
|
||||||
|
if (currentDistance < smallestDistance) {
|
||||||
|
smallestDistance = currentDistance
|
||||||
|
closestPoint = points[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return closestPoint
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 주어진 점에서 points 배열 중 가장 가까운 점을 찾는 함수입니다.
|
||||||
|
* @param {Object} targetPoint - { x: number, y: number } 형태의 대상 점 객체
|
||||||
|
* @param {Array} points - { x: number, y: number } 형태의 점 객체들의 배열
|
||||||
|
* @returns {Object} targetPoint에 가장 가까운 점 객체
|
||||||
|
*/
|
||||||
|
export function findClosestPoint(targetPoint, points) {
|
||||||
|
if (points.length === 0) {
|
||||||
|
return null // points 배열이 비어있으면 null 반환
|
||||||
|
}
|
||||||
|
|
||||||
|
let closestPoint = points[0]
|
||||||
|
let smallestDistance = calculateDistancePoint(targetPoint, closestPoint)
|
||||||
|
|
||||||
|
for (let i = 1; i < points.length; i++) {
|
||||||
|
const currentDistance = calculateDistancePoint(targetPoint, points[i])
|
||||||
|
if (currentDistance < smallestDistance) {
|
||||||
|
smallestDistance = currentDistance
|
||||||
|
closestPoint = points[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return closestPoint
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 점과 직선사이의 최단 거리
|
* 점과 직선사이의 최단 거리
|
||||||
* @param point
|
* @param point
|
||||||
@ -447,3 +531,13 @@ export function calculateDistance(point, line) {
|
|||||||
const denominator = Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2))
|
const denominator = Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2))
|
||||||
return numerator / denominator
|
return numerator / denominator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 두 점 사이의 거리를 계산하는 함수입니다.
|
||||||
|
* @param {Object} point1 - 첫 번째 점 { x: number, y: number }
|
||||||
|
* @param {Object} point2 - 두 번째 점 { x: number, y: number }
|
||||||
|
* @returns {number} 두 점 사이의 거리
|
||||||
|
*/
|
||||||
|
function calculateDistancePoint(point1, point2) {
|
||||||
|
return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2))
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user