🔓알고리즘/수학

삼각형 내부에 존재하는지 점인지 확인하는법 c++

Mawile 2021. 8. 20.
728x90

이번에는 삼각형을 이루는 세개의 꼭짓점을 통해서,

어느 한 꼭짓점 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";
}

 


 

728x90

댓글