백준
#백준_11758 CCW - Java 자바
ukyonge
2020. 5. 1. 14:11
#유형 : 벡터의 외적, CCW
#난이도 : 골드 V
# CCW 공식 (x1y2+x2y3+x3y1)−(y1x2+y2x3+y3x1)을 활용하여 쉽게 해결할 수 있던 문제.
# CCW는 Counter Clockwise의 약자로써, 평면 위에 놓여진 세 점의 방향관계를 구할 수 있는 알고리즘입니다.
먼저 한 줄로 요약하자면, CCW는 점 를 순서대로 봤을때 반시계방향으로 놓여 있으면 양수를, 시계방향이면 음수를, 평행하게 놓여있으면 0을 반환하게 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package bj;
import java.awt.Point;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class p11758 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Point[] po = new Point[3];
StringTokenizer st;
for(int i=0; i<3; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
po[i] = new Point(x,y);
}
System.out.println(ccw(po));
}
public static int ccw(Point[] p) {
//CCW 공식 (x1y2+x2y3+x3y1)−(y1x2+y2x3+y3x1)
// CCW는 점 A,B,C를 순서대로 봤을때 반시계방향으로 놓여 있으면 양수를, 시계방향이면 음수를, 평행하게 놓여있으면 0을 반환하게 됩니다.
int result = ((p[0].x*p[1].y) + (p[1].x*p[2].y) + (p[2].x * p[0].y)) - ((p[0].y*p[1].x) + (p[1].y*p[2].x) + (p[2].y*p[0].x));
if(result < 0)
return -1;
else if(result > 0)
return 1;
else
return 0;
}
}
|
cs |