문제
2차원 좌표 평면 위에 있는 점 3개 P1, P2, P3가 주어진다. P1, P2, P3를 순서대로 이은 선분이 어떤 방향을 이루고 있는지 구하는 프로그램을 작성하시오.
풀이
신발끈 공식을 알면 쉽게 풀수 있는 문제였다.
세점 (x1 , y1), (x2, y2), (x3, y3) 이 좌표로 주어 졌을 때, (x1y2 + x2y3 + x3y1) - (y1x2 + y2x3 + y3x1) 의 값이
양수면 CCW(반시계) , 음수면 CW(시계), 0 이면 일직선이다.
<전체코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int dir1, dir2;
static point[] p;
static StringBuilder sb = new StringBuilder();
public static int parseInt(String string) {
return Integer.parseInt(string);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
p = new point[3];
for(int i = 0 ; i < 3 ; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
p[i] = new point(parseInt(st.nextToken()), parseInt(st.nextToken()));
}
int ccw = (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(ccw > 0) {
System.out.println(1);
}
else if(ccw < 0) {
System.out.println(-1);
}
else {
System.out.println(0);
}
}
static class point{
int x, y;
point(int x, int y){
this.x = x;
this.y = y;
}
}
}
'알고리즘 공부' 카테고리의 다른 글
[백준] 11375 열혈강호 - 이분매칭 (0) | 2022.01.07 |
---|---|
[백준] 2749 피보나치 수 3 (0) | 2021.10.29 |