...

 

 

문제 해결에 있어 주안점은 2가지가 되겠다.

 

1. 삼각형을 어떠한 방식으로 분할할 것인가? -> 정렬에 대한 이해 필요 / 회전체를 어떻게 분할 할 것인가?

 

2. 부피 공식의 구현

 

 

1.  x축에 대해서 회전을 시킬 경우, x축의 값에 따른 정렬

y축에 대해서 회전을 시킬 경우에는, y축의 값에 따른 정렬이 필요하겠다. 

정렬된 순서대로 부피를 구해주면 되겠다.

 

즉, + -  

 

2. 부피 공식의 구현에 있어서는 케이스를 조금 나눌 필요가 있다.

x좌표 혹은 y좌표가 같은지 확인할 필요가 있다. ,xy0,ZeroDivisorError.

이때는 그냥 깡구현으로 하면 되겠다. ..

 

해답은 다음과 같겠다.

import sys
import copy
import math
input = sys.stdin.readline

x1,y1,x2,y2,x3,y3 = map(int,input().split())
pts = [[x1,y1],[x2,y2],[x3,y3]]

pts.sort(key = lambda x: x[0])
sort_x_pts = copy.deepcopy(pts)
#x좌표 기준으로 정렬

pts.sort(key = lambda x:x[1])
sort_y_pts = copy.deepcopy(pts)
#y좌표 기준으로 정렬

def partial_vol(pt1,pt2):
    x1,y1 = pt1[0], pt1[1]
    x2,y2 = pt2[0], pt2[1]

    axis_x_vol, axis_y_vol = 0,0
    if x1 == x2:
        #x축 좌표는 동일한 경우이므로, x축 기준으로 회전했을때는 0
        x = x1
        axis_y_vol = math.fabs(math.pi * (x ** 2) * (y2 - y1))
    elif y1 == y2:
        #y축 좌표는 동일한 경우이므로, y축 기준으로 회전했을때는 0
        y = y1
        axis_x_vol = math.fabs(math.pi * (y ** 2) * (x2 - x1))
    else:
        a = (y2 - y1) / (x2 - x1)
        b = (x2 * y1 - x1 * y2) / (x2 - x1)
        c = (x2 - x1) / (y2 - y1)
        d = (y2 * x1 - x2 * y1) / (y2 - y1)

        axis_x_vol = math.fabs((x2 ** 3 - x1 ** 3) * (a ** 2 / 3) + (x2 ** 2 - x1 ** 2) * (a * b) + (x2 - x1) * b ** 2) * math.pi
        axis_y_vol = math.fabs((y2 ** 3 - y1 ** 3) * (c ** 2 / 3) + (y2 ** 2 - y1 ** 2) * (c * d) + (y2 - y1) * d ** 2) * math.pi
    return axis_x_vol, axis_y_vol

answer_x = math.fabs(partial_vol(sort_x_pts[0], sort_x_pts[1])[0] + partial_vol(sort_x_pts[1], sort_x_pts[2])[0] - partial_vol(sort_x_pts[2], sort_x_pts[0])[0])
answer_y = math.fabs(partial_vol(sort_y_pts[0], sort_y_pts[1])[1] + partial_vol(sort_y_pts[1], sort_y_pts[2])[1] - partial_vol(sort_y_pts[2], sort_y_pts[0])[1])

print(answer_x, answer_y)

+ Recent posts