반응형
세 점이 시계방향인지 평행하는지 반시계방향인지 확인할때 쓰는방법
또한 ccw의 크기의 /2 는 세점으로 하는 삼각형의 크기라는 것을 알 수 있다.
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
39
40
|
package algo;
public class B11758 {
static class Pair {
int y;
int x;
public Pair(int x, int y) {
super();
this.y = y;
this.x = x;
}
}
static int ccw(Pair a, Pair b, Pair c) {
int op = a.x * b.y + b.x * c.y + c.x * a.y;
op -= (a.y * b.x + b.y * c.x + c.y * a.x);
// 반시계 방향
if (op > 0)
return 1;
// 평행
else if (op == 0)
return 0;
// 시계 방향
else
return -1;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Pair a = new Pair(sc.nextInt(), sc.nextInt());
Pair b = new Pair(sc.nextInt(), sc.nextInt());
Pair c = new Pair(sc.nextInt(), sc.nextInt());
System.out.println(ccw(a, b, c));
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
이걸가지고 여러 기하학 문제들을 풀 수 있다
import java.util.Scanner;
public class Main {
static class Pair {
long y;
long x;
public Pair(long x, long y) {
super();
this.y = y;
this.x = x;
}
public boolean cmp(Pair o) {
if (y > o.y)
return true;
if (y == o.y) {
if (x > o.x)
return true;
}
return false;
}
}
static long ccw(Pair a, Pair b, Pair c) {
long op = a.x * b.y + b.x * c.y + c.x * a.y;
op -= (a.y * b.x + b.y * c.x + c.y * a.x);
// 반시계 방향
if (op > 0)
return 1;
// 시계방향
else if (op == 0)
return 0;
else
return -1;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Pair a = new Pair(sc.nextLong(), sc.nextLong());
Pair b = new Pair(sc.nextLong(), sc.nextLong());
Pair c = new Pair(sc.nextLong(), sc.nextLong());
Pair d = new Pair(sc.nextLong(), sc.nextLong());
if (Solve(a, b, c, d))
System.out.println(1);
else
System.out.println(0);
}
public static boolean Solve(Pair a, Pair b, Pair c, Pair d) {
long abc = ccw(a, b, c);
long abd = ccw(a, b, d);
long cda = ccw(c, d, a);
long cdb = ccw(c, d, b);
if (abc * abd == 0 && cda * cdb == 0) {
if (a.cmp(b)) {
Pair tmp = a;
a = b;
b = tmp;
}
if (c.cmp(d)) {
Pair tmp = c;
c = d;
d = tmp;
}
return b.cmp(c);
}
return abc * abd <= 0 && cda * cdb <= 0;
}
}
반응형
'Algorithm' 카테고리의 다른 글
코딩테스트 자주사용하는 코드 (JAVA) (0) | 2021.01.09 |
---|---|
레드 블랙트리 (0) | 2020.10.15 |
강한 연결 요소 java (0) | 2020.04.29 |
트라이(Trie) : JAVA / 백준 5052 (0) | 2020.04.26 |
이분 매칭 알고리즘 ( JAVA),열혈강호1,2,3 문제 (0) | 2020.04.25 |