즐거운 게임 수학

특정 좌표가 삼각형 안에 있는지 확인하기

2023. 6. 5. 22:31

캐릭터의 기술중 삼각형 범위 안에 있는 적을 기절시키려 하는데 어떻게 구현할 수 있을까?

 

히어로즈 오브 더 스톰의 데커드 기술, 삼각형 안에 있는 적을 기절시킨다.

 

이는 부호 계산으로 감지할 수 있다.

 

function isPointInTriangle(
  pointX: number,
  pointY: number,
  x1: number,
  y1: number,
  x2: number,
  y2: number,
  x3: number,
  y3: number
) {
  const a = (x1 - pointX) * (y2 - y1) - (x2 - x1) * (y1 - pointY);
  const b = (x2 - pointX) * (y3 - y2) - (x3 - x2) * (y2 - pointY);
  const c = (x3 - pointX) * (y1 - y3) - (x1 - x3) * (y3 - pointY);
  return (a >= 0 && b >= 0 && c >= 0) || (a <= 0 && b <= 0 && c <= 0);
}

 

삼각형 ABC의 각 꼭지점의 좌표는 (x1, y1), (x2, y2), (x3, y3)이다.
우리가 알고 싶은 것은, 점 P의 좌표가 (pointX, pointY)일 때, 점 P가 삼각형 ABC의 내부에 있는지 아닌지를 알고 싶다.

삼각형 내부/외부 판별을 위해 부호를 이용하면 된다. 부호는 양수, 음수, 또는 0의 값을 뜻한다.

함수 내부에서 사용되는 변수 a, b, c는 주어진 점 P와 삼각형의 변 사이의 부호를 계산하는 값이며,
변수 a는 점 P와 삼각형의 변 (x1, y1) - (x2, y2) 사이의 부호를 계산한다.

만약 a가 양수이면 점 P는 변 (x1, y1) - (x2, y2)의 왼쪽에 위치함을 의미하며,

반대로 a가 음수이면 오른쪽에 위치함을 의미한다.

변수 b는 점 P와 삼각형의 변 (x2, y2) - (x3, y3) 사이의 부호를 계산하고 

변수 c는 점 P와 삼각형의 변 (x3, y3) - (x1, y1) 사이의 부호를 계산한다.

주어진 점 P가 삼각형 ABC의 내부에 위치하려면, 변수 a, b, c가 모두 같은 부호를 가져야 하며,
만약 a, b, c 중 하나 이상의 변수가 0이거나 양수이고, 나머지 변수가 0이거나 음수라면, 주어진 점 P는 삼각형 ABC의 외부에 위치함을 알 수 있다.

'즐거운 게임 수학' 카테고리의 다른 글

특정 좌표가 타원형에 있는지 감지하기  (0) 2023.06.06
특정 좌표가 선 위에 있는지 감지하기  (0) 2023.06.05
특정 좌표가 원 안에 있을 때 감지하기  (0) 2023.06.05
선형 보간법(linear interpolation)  (0) 2023.06.05
특정 각도에서 일정 거리의 좌표 구하기  (0) 2023.06.05
'즐거운 게임 수학' 카테고리의 다른 글
  • 특정 좌표가 타원형에 있는지 감지하기
  • 특정 좌표가 선 위에 있는지 감지하기
  • 특정 좌표가 원 안에 있을 때 감지하기
  • 선형 보간법(linear interpolation)
S.H.S
S.H.S
한또리의 일기장
한또리의 일기장한또리의 일기장
S.H.S
한또리의 일기장
전체
오늘
어제
  • 분류 전체보기 (35)
    • 개발 이야기 (1)
      • JavaScript (4)
      • TypeScript (0)
      • React (4)
      • Git (3)
      • Next.js (0)
      • Pattern Matching (1)
      • Terminal (1)
      • AWS (1)
      • Unity (0)
      • Python (0)
      • Ubuntu (0)
      • Aduino (0)
    • 즐거운 게임 수학 (9)
    • 개발자 면접 후기 (7)
    • 일상 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 거리
  • 애니메이션
  • 원
  • git
  • 컴포넌트 시각화
  • 프론트엔드 면접
  • 각도
  • 패키지 관리자
  • 계산
  • 프론트엔드
  • 수염 자국
  • 개발자
  • 이색테마
  • 신박함
  • 수학
  • react
  • 컴포넌트 렌더링
  • 컴포넌트 기반
  • code-owners
  • 회사

최근 댓글

최근 글

hELLO · Designed By 정상우.
S.H.S
특정 좌표가 삼각형 안에 있는지 확인하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.