코딩테스트
[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;
}