본문 바로가기
Computer Science

Intersection

by OKOK 2019. 2. 10.

1. 수직선

2. 수평선

3. 기울기

4. 경우의 수를 두고, 그것을 풀이함

5. 직선과 선분의 교차점 구하기 


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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include<stdio.h>
double Xmin, Ymin, Xmax, Ymax, X1, Y1, X2, Y2, gradient;
int answer;
double Max(double num1, double num2)
{
    if (num1 < num2)
        return num2;
    return num1;
}
double Min(double num1, double num2)
{
    if (num1 < num2)
        return num1;
    return num2;
}
 
int main(void)
{
    freopen("input.txt""r", stdin);
    int T;
    double temp1, temp2, temp;
    scanf("%d"&T);
    for (int tc = 1; tc <= T; tc++)
    {
        answer = 0;
        scanf("%lf%lf%lf%lf"&Xmin, &Ymin, &Xmax, &Ymax);
        scanf("%lf%lf%lf%lf"&X1, &Y1, &X2, &Y2);
        if (X1 == X2)//수직선
        {
            temp1 = Max(Y1, Y2), temp2 = Min(Y1, Y2);
            for (double i = temp2; i <= temp1; i++)
            {
                if (X1 == Xmax || X1 == Xmin)
                {
                    if (i <= Ymax && i >= Ymin)
                        answer++;
                }
                else if (X1 > Xmin && X1 < Xmax)
                {
                    if (i == Ymax || i == Ymin)
                        answer++;
                }
                else
                    break;
            }
            if (X1 == Xmax || X1 == Xmin)
                if (answer > 1)
                    answer = 4;
        }
        else if (Y1 == Y2) // 수평선
        {
            temp1 = Max(X1, X2), temp2 = Min(X1, X2);
            for (double i = temp2; i <= temp1; i++)
            {
                if (Y1 == Ymax || Y1 == Ymin)
                {
                    if (i <= Xmax && i >= Xmin)
                        answer++;
                }
                else if (Y1 < Ymax && Y1>Ymin)
                {
                    if (i == Xmax || i == Xmin)
                        answer++;
                }
                else
                    break;
            }
            if (Y1 == Ymax || Y1 == Ymin)
                if (answer > 1)
                    answer = 4;
        }
        else // 기울기를 비교해서 풀이함
        {
            temp1 = Max(X1, X2), temp2 = Min(X1, X2);
            gradient = (Y1 - Y2) / (X1 - X2);
            if (temp1 >= Xmin && temp2 <= Xmin)
            {
                temp = gradient * Xmin - gradient * X1 + Y1;
                if (temp <= Ymax && temp >= Ymin)
                    answer++;
            }
            if (temp1 >= Xmax && temp2 <= Xmax)
            {
                temp = gradient * Xmax - gradient * X1 + Y1;
                if (temp <= Ymax && temp >= Ymin)
                    answer++;
            }
            temp1 = Max(Y1, Y2), temp2 = Min(Y1, Y2);
            if (temp1 >= Ymax && temp2 <= Ymax)
            {
                temp = Ymax / gradient - Y1 / gradient + X1;
                if (temp > Xmin && temp < Xmax)
                    answer++;
            }
            if (temp1 >= Ymin && temp2 <= Ymin)
            {
                temp = Ymin / gradient - Y1 / gradient + X1;
                if (temp > Xmin && temp < Xmax)
                    answer++;
            }
        }
        printf("#%d %d\n", tc, answer);
    }
}
cs

 


'Computer Science' 카테고리의 다른 글

지구 온난화  (0) 2019.02.10
올해의 조련사  (0) 2019.02.10
팰린드롬  (0) 2019.02.10
이진 문자열 복원  (0) 2019.02.08
운동  (0) 2019.02.07

댓글