코딩테스트

[C++] 사각형과 점 과의 거리

뇨롱 2021. 6. 27. 00:27

< 직선거리와 직각거리 >

사각형과 점 과의 거리 2차원 평면 상에서 p(x1,y1), q(x2,y2) 사이의 직선거리 (Euclidean distance) d2(p,q)직각거리(rectilinear distance) d1(p,q)다음과 같이 정의한다.

 

 

직사각형과 개의 점이 주어졌을, 이들 사이의 직선거리의 제곱과 직각거리를 계산하는 프로그램을 작성하시오

 

예시:

#include<iostream>
#include<cmath>
using namespace std;

void find_length(int x1, int y1, int x2, int y2, int *s_l, int *a_l){
	*a_l=abs(x1-x2)+abs(y1-y2);
	*s_l=(int)(pow(x1-x2,2))+(int)(pow(y1-y2,2));

}


int main(){

	int x1=0x00;
	int y1=0x00;
	int x2=0x00;
	int y2=0x00;
	int p=0x00,q=0x00;
	cin>>x1>>y1>>x2>>y2;
	cin>>p>>q;
	int s_l=0x00,a_l=0x00;
	int lenx=x2-x1,leny=y2-y1;

	if((x1<=p&&p<=x2)&&(y1<=q&&q<=y2));
	else if(x1<=p&&p<=x2){
		if(q>y2){
			a_l=q-y2;
			s_l=a_l*a_l;
		}
		else{
			a_l=y1-q;
			s_l=a_l*a_l;
		}
	}
	else if(y1<=q&&q<=y2){
		if(p>x2){
			a_l=p-x2;
			s_l=a_l*a_l;
		}
		else{
			a_l=x1-q;
			s_l=a_l*a_l;
		}
	}
	else{
		if(x2<p&&y2<q) find_length(x2,y2,p,q,&s_l,&a_l);
		else if(x2<p&&y1>q) find_length(x2,y1,p,q,&s_l,&a_l);
		else if(x1>p&&y2<q)	find_length(x1,y2,p,q,&s_l,&a_l);
		else if(x1>p&&y1>q) find_length(x1,y1,p,q,&s_l,&a_l);
	}

	cout<<s_l<<" "<<a_l<<endl;


	return 0;
}