🔓알고리즘/수학
삼각형 내부에 존재하는지 점인지 확인하는법 c++
Mawile
2021. 8. 20. 01:06
이번에는 삼각형을 이루는 세개의 꼭짓점을 통해서,
어느 한 꼭짓점 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";
}