🔓알고리즘/수학
삼각형 내부에 존재하는지 점인지 확인하는법 c++
이번에는 삼각형을 이루는 세개의 꼭짓점을 통해서,
어느 한 꼭짓점 N이 해당 삼각형 내부에 존재하는지 확인하는 알고리즘입니다.
코드는 최대한 가독성을 높여서 만들었습니다.
#include <bits/stdc++.h>
struct Coord {
int x, y;
};
void initialize() {
std::cin.tie(0);
std::cout.tie(0);
std::ios_base::sync_with_stdio(0);
}
int calcTriangle(Coord A_TRIANGLE, Coord B_TRIANGLE, Coord C_TRIANGLE) {
int result = std::abs((A_TRIANGLE.x * (B_TRIANGLE.y - C_TRIANGLE.y)) +
(B_TRIANGLE.x * (C_TRIANGLE.y - A_TRIANGLE.y)) +
(C_TRIANGLE.x * (A_TRIANGLE.y - B_TRIANGLE.y)));
return result;
}
bool isInsideTriangle(Coord A_TRIANGLE, Coord B_TRIANGLE, Coord C_TRIANGLE, Coord N) {
int NN = calcTriangle(A_TRIANGLE, B_TRIANGLE, C_TRIANGLE);
int AA = calcTriangle(N, B_TRIANGLE, C_TRIANGLE);
int BB = calcTriangle(A_TRIANGLE, N, C_TRIANGLE);
int CC = calcTriangle(A_TRIANGLE, B_TRIANGLE, N);
return (NN == AA + BB + CC);
}
int main() {
initialize();
Coord A_TRIANGLE = { 0, 0 };
Coord B_TRIANGLE = { 6, 0 };
Coord C_TRIANGLE = { 3, 3 };
Coord N1 = { 6, 0 };
Coord N2 = { 6, 1 };
if (isInsideTriangle(A_TRIANGLE, B_TRIANGLE, C_TRIANGLE, N1)) std::cout << "원안에 존재하는 점이군뇨!\n";
else std::cout << "원안에 존재하지 않는 점이군뇨!\n";
if (isInsideTriangle(A_TRIANGLE, B_TRIANGLE, C_TRIANGLE, N2)) std::cout << "원안에 존재하는 점이군뇨!\n";
else std::cout << "원안에 존재하지 않는 점이군뇨!\n";
}
'🔓알고리즘 > 수학' 카테고리의 다른 글
Softmax function 구현하기 C++ (0) | 2021.10.11 |
---|---|
행렬곱셈 이론및 실습 c++ (0) | 2021.10.09 |
제곱, 제곱근 구현하기 (0) | 2021.08.13 |
나눗셈 연산속도 최적화 C++ (0) | 2021.08.02 |
여러개의 최댓값,최솟값 찾기 C++ (0) | 2020.11.08 |
댓글