과제가 주어졌다.
1. 아래에 서술된 기능을 하는 Rectangle클래스를 만드시오,
2. 제출 방법은 소스코드만 과제게시판 글쓰기칸에 볻붙하여 제출하세요.
* 파일을 첨부하지 말고 과제게시판 글쓰기 칸에 복붙하세요.
------아 래 ----------------------
ES6 class를 이용해서 Rectangle클래스를 만드세요
area, overlap 두개 메소드 함수가 포함 되어 있어야 합니다.
아래 예시처럼 정사각형 사이에 겹치는지 체크한 이후 넓이를 출력하는 테스트를 통과해야 합니다.
class Rectangle ....{
}
const a = new Rectangle(100,100,15);
const b = new Rectangle(90,90,10);
const c = new Rectangle(50,50, 10);
if (a.overlap(b)) {
console.log(a.area()); // 225출력
}
if (a.overlap(c)) {
console.log(c.area()); // 100출력
}
처음에 뭘 만들어야하나 아무런 감도 오지 않아 막막했다.
const a = new Rectangle(100,100,15);
이것은 무엇이며
if (a.overlap(b)) {
console.log(a.area()); // 225출력
}
이것은 무엇인가.
area, overlap 메소드는 또 뭔 소리인가 겹치는지 체크는 어떻게 하는 것인가
하나부터 열까지 다 멘붕이었다.
그래도 끝까지 물고 늘어진 결과 완성을 하였다.
class Rectangle {
constructor(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
}
area() {
return this.z * this.z;
}
overlap(value) {
if (
a.x < value.x + value.z &&
a.x + a.z > value.x &&
a.y < value.y + value.z &&
a.y + a.z > value.y
) {
console.log("겹침");
return true;
} else {
console.log("안겹침");
console.log("고로 출력 안함");
return false;
}
} //overlap
} //class Rec
const a = new Rectangle(100, 100, 15);
const b = new Rectangle(90, 90, 15);
const c = new Rectangle(50, 50, 10);
if (a.overlap(b)) {
console.log(a.area()); // 225출력
}
if (a.overlap(c)) {
console.log(c.area()); // 100출력
}
코드에 설명을 달자면
const a = new Rectangle(100, 100, 15);
는 변수? 'a'에 값을 넣어주는데 (100,100,15)와 같은 값을 constructor(x,y,z)에서 각각 받아준다.
그래서 이후부터는
a.x == 100,
a.y == 100,
a.z == 15
로 쓸 수 있다.
이제 큰 고비 두 가지가 있다.
하나는 사각형이 겹치는지 판단하는 것이며,
하나는 어떻게 사각형 a와 b를 동시에 불러오냐 라는 것이다.
상단의 코드는 완성된 코드이기에 수정 되어있지만
그전에는
이를 해결하기 위해(질문에 힌트가 있었다.)
a.x, b.x로 불러 올 수 있다는 사실을 깨닫고
overlap 메소드에 파라미터를 받아오도록 했다.
하여
...
overlap(value){
value.x
value.y
value.z
a.x
a.y
a.z
}
...
if (a.overlap(c)) {
console.log(c.area());
}
(if절에 있는 a.overlap(c)의 c가 힌트였다.)
overlap 메소드를 사용할때 넣은 파라미터인 c를, 위에서 value라는 이름으로 받아 원하는 사각형의 값을 사용할 수 있게 되었다.
대단한 발견이었다..!
이로써 두가지의 사각형을 모두 사용할 수 있다는 하나의 문제를 해결했다.
다른 한 문제는 사각형이 겹치는지 어떻게 판별 할 것인가 였는데
몇시간을 고민했는지
두 사각형중 각각의 시작점을 'x, y' 값으로 받고 그 점으로 부터 'z'만큼 뻗어나가는 사각형을 설정하여
a라는 사각형, b라는 사각형으로 이름 짓고
"a사각형의 x좌표"가 "b사각형 x좌표"에 "z길이"를 합친것 보다 작은지를 확인하고
"a사각형의 x좌표"에 "a의 z길이"를 합친 값이...
아휴 모르겠다.
a.x < value.x + value.z &&
a.y < value.y + value.z &&
a.x + a.z > value.x &&
a.y + a.z > value.y
비교 당하는 a사각형과 비교할 value사각형이다.
각 x, y 좌표는 사각형의 왼쪽 하단 모서리이며 z길이 만큼 뻗어나간다(오른쪽과 위로).
a의 왼쪽 x좌표가 value의 오른쪽 x좌표보다 작으면(왼쪽이면) 겹칠 가능성이 있다.
가능성이라고 한 이유는 y좌표가 겹치지 않으면 결국 겹치지 않기 때문데 y좌표 또한,
a의 아래 y좌표가 value의 위쪽 y좌표보다 작기까지 하면 겹치게 된다.
이는 a가 value보다 오른쪽 상단일 경우이며
a가 왼쪽 하단일 경우도 위와 같은 개념으로 판단하면 된다.


설명 참 어렵다잉. 나중에 보고 또 이해할랑가.