문제
프로그램은 세 좌표의 값이 필요합니다.
> P1 (x1, y1)
> P2 (x2, y2)
> P3 (x3, y3)
다른 좌표 P (x, y)와이 점이 위의 3 점에서 형성된 삼각형 내부에 있는지 여부를 결정합니다.
해결
이를 수행하는 올바른 방법은 삼각형의 세 점이 주어지는 네 번째 점의 barycentric coordinates을 계산하는 것입니다. 이들을 계산하는 수식은 “중심 좌표로 변환”단원 끝 부분에 나와 있습니다. 그러나 여기서보다 적은 수학적 설명을 제공하기를 바랍니다.
단순성을 위해 struct x, y 값을 가진 struct가 있다고 가정합니다. 포인트를 다음과 같이 정의했습니다.
point p1(x1, y1);
point p2(x2, y2);
point p3(x3, y3);
point p(x,y); //You are checking if this point lies in the triangle.
이제 일반적으로 알파, 베타, 감마라고하는 중심 좌표가 다음과 같이 계산됩니다.
float alpha = ((p2.y - p3.y)*(p.x - p3.x) + (p3.x - p2.x)*(p.y - p3.y)) /
((p2.y - p3.y)*(p1.x - p3.x) + (p3.x - p2.x)*(p1.y - p3.y));
float beta = ((p3.y - p1.y)*(p.x - p3.x) + (p1.x - p3.x)*(p.y - p3.y)) /
((p2.y - p3.y)*(p1.x - p3.x) + (p3.x - p2.x)*(p1.y - p3.y));
float gamma = 1.0f - alpha - beta;
알파, 베타 및 감마가 모두 0보다 큰 경우 점 p는 점 p1, p2 및 p3으로 이루어진 삼각형 내에 있습니다.
이것의 뒤에있는 설명은 삼각형 내부의 점이 삼각형의 점과 세 개의 계수 ([0,1] 범위의 각 점에 하나씩)를 사용하여 설명 될 수 있다는 것입니다.
p = (alpha)*p1 + (beta)*p2 + (gamma)*p3
이 함수를 다시 배열하면 중심 좌표를 계산하는 수식이 주어 지지만 그렇게해야 할 단계가 문제의 범위를 벗어날 수 있다고 생각합니다. 그것들은 위키피디아 페이지에 링크되어 있습니다.
점 p가 세 점에 의해 기술 된 영역 내에 있도록 각 계수는 0보다 커야합니다.
Reference
https://codeday.me/ko/qa/20190316/79032.htmlhttps://codeday.me/ko/qa/20190316/79032.html
수학 – 점이 삼각형 안에 있는지 결정 - 코드 로그
프로그램은 세 좌표의 값을 읽을 필요가있다. > P1 (x1, y1)> P2 (x2, y2)> P3 (x3, y3) 다른 좌표 P (x, y)와이 점이 위의 3 점에서 형성된 삼각형 내부에 있는지 여부를 결정합니다. 우수 답변 이를 수행하는 올바른 방법은 삼각형의 세 점이 주어지는 네 번째 점의 barycentric coordinates을 계산하는 것입니다. 이들을 계산하는 수식은 “중심 좌표로 변환”단원 끝 부분에 나와 있습니다. 그러나 여기서보다 적은
codeday.me
https://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle
How to determine if a point is in a 2D triangle?
Is there an easy way to determine if a point is inside a triangle? It's 2D, not 3D.
stackoverflow.com
https://codeday.me/ko/qa/20190417/352960.html
알고리즘 – 점이 2D에서 많은 수의 삼각형 안에 있는지 여부를 효율적으로 검사합니다. - 코드 로그
이 질문에서 첫 번째 알고리즘 인 how to determine if a point is inside a 2d triangle을 호출하여 점이 2D에서 삼각형 안에 있는지 확인하는 알고리즘을 구현했습니다. 이 알고리즘은 작동하지만 삼각형을 사전 처리하고 스마트 데이터 구조를 사용하면 효율적으로 만들 수 있다고 생각합니다. 저는 약 1 천만 개의 삼각형을 사용하고 있습니다. 이 빠른 만드는 한 가지 방법은 삼각형에 대한 경계 사각형을 계산하고 사각형 검사에
codeday.me
'기타' 카테고리의 다른 글
[기타] 윈도우 방화벽 명령어 Netsh (0) | 2019.07.18 |
---|---|
[기타] Window7 방화벽에서 특정 포트 열기 (0) | 2019.07.18 |
[기타] CMD 에서 TELNET 사용하기 (0) | 2019.07.18 |
[기타] 점이 도형안에 있는지 판별 (0) | 2019.06.25 |
[기타] 프레임워크 참고 사이트 (0) | 2019.05.23 |
댓글