빙수달 게임 개발 노트

[C++] 두 선의 교차점을 구하는 프로그램 본문

Programming/C++

[C++] 두 선의 교차점을 구하는 프로그램

빙수달 2024. 12. 19. 00:21
#include <iostream>
using namespace std;

struct point
{
	double x, y;
};

double bottom(point p1, point p2, point p3, point p4);
double crossX(point p1, point p2, point p3, point p4);
double crossY(point p1, point p2, point p3, point p4);

int main()
{
	point p1;
	point p2;
	point p3;
	point p4;

	cout << "두 직선의 좌표 4점 : ";
	cin >> p1.x >> p1.y >> p2.x >> p2.y >> p3.x >> p3.y >> p4.x >> p4.y;

	if(((p1.x - p2.x) * (p3.y - p4.y) - (p1.y - p2.y) * (p3.x - p4.x))==0)
	{
		cout << "두 직선은 평행하다.";
	}
	else
	{
		cout << "두 직선의 교차점은 (" << crossX(p1, p2, p3, p4) << "," << crossY(p1, p2, p3, p4) << ")이다.";
	}

	return 0;
}

double bottom(point p1, point p2, point p3, point p4)
{
	double bottom;
	bottom = ((p1.x - p2.x) * (p3.y - p4.y) - (p1.y - p2.y) * (p3.x - p4.x));
	return bottom;
}

double crossX(point p1, point p2, point p3, point p4)
{
	double Px;
	Px = ((p1.x * p2.y - p1.y * p2.x) * (p3.x - p4.x) - (p1.x - p2.x)*(p3.x * p4.y - p3.y * p4.x)) / (bottom(p1,p2,p3,p4));
	return Px;
}

double crossY(point p1, point p2, point p3, point p4)
{
	double Py;
	Py = ((p1.x * p2.y - p1.y * p2.x) * (p3.y - p4.y) - (p1.y - p2.y)*(p3.x * p4.y - p3.y * p4.x)) / (bottom(p1, p2, p3, p4));
	return Py;
}