Problem:
三角形と円

平面上にある三角形と円の位置関係を判定するプログラムを作成してください。対象となる図形はいずれも境界を含むものとします。
三角形は 3 頂点の位置が与えられ、円は中心の位置と半径が与えられます。位置は直交座標系による２つの整数の組によって与えられます。半径も整数で与えられます。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロふたつの行で示されます。
各データセットは以下の形式で与えられます。

x1 y1
x2 y2
x3 y3
xc yc
r

１行目から３行目に、三角形の第 i の頂点座標 xi, yi が与えられます。４行目に円の中心の座標 xc, yc、５行目に円の半径 r が与えられます。与えられる入力はすべて、1 以上 10,000 以下の整数とします。

データセットの数は 100 を超えません。

Output

入力データセットごとに以下の形式で判定結果を１行に出力します。

円が三角形に含まれる場合 a

三角形が円に含まれる場合 b

それ以外の場合で、共通部分がある場合には c

共通部分がない場合には d

Sample Input

1 1
3 1
3 3
3 2
3
3 12
9 3
11 12
8 7
5
15 3
17 7
22 5
7 6
4
6 11
8 2
16 9
10 8
2
0 0

Output for the Sample Input

b
c
d
a

Solution in Python (judge verdict: Accepted)

def In():
  return map(int, raw_input().split())

def D(a, b): # diatance between a and b
  return ((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2) ** .5

def f(P, O): # make a vector from O to P
  return P[0] - O[0], P[1] - O[1]

def dot(a, b): #inner product of vectors a and b
  return a[0] * b[0] + a[1] * b[1]

def cross(a, b): #cross product of vectors a and b
  return a[0] * b[1] - a[1] * b[0]

def ab2c(a, b, c): # distance from point c to segment a-b
  if dot(f(c, a), f(b, a)) < 0:
    return D(a, c)
  if dot(f(c, b), f(a, b)) < 0:
    return D(b, c)
  return abs(cross(f(b, a), f(c, a))) / D(b, a)

def isIn(P, O, P1, P2): # check if point P is in triangle O-P1-P2
  a11, a21 = f(P1, O)
  a12, a22 = f(P2, O)
  x0, y0 = f(P, O)
  det = 1.0 * a11 * a22 - a12 * a21
  x = (a22 * x0 - a12 * y0) / det
  y = (-a21 * x0 + a11 * y0) / det
  return 0 <= x <= 1 and 0 <= y <= 1 and 0 <= x + y <= 1
def check(P4, r, P1, P2, P3):
  if max([D(P4, P1), D(P4, P2), D(P4, P3)]) <= r:
    return 2
  h1 = ab2c(P1, P2, P4)
  h2 = ab2c(P2, P3, P4)
  h3 = ab2c(P3, P1, P4)
  if isIn(P4, P1, P2, P3):
    if min([h1, h2, h3]) >= r:
      return 1
  elif min([h1, h2, h3]) > r:
    return 0
  return 3

while 1:
  P1 = In()
  if P1[0] == P1[1] == 0:
    break
  P2 = In()
  P3 = In()
  P4 = In()
  r = int(raw_input())
  print 'dabc'[check(P4, r, P1, P2, P3)]