#!/usr/bin/env python
# -*- coding: utf-8 -*-

eps = 0.01

segments = [
    { "x1": 0.000000, "y1": 0.000000, "x2": 0.000000, "y2": 200.000000 },
    { "x1": 0.000000, "y1": 0.000000, "x2": 120.000000, "y2": 0.000000 },
    { "x1": 120.000000, "y1": 0.000000, "x2": 0.000000, "y2": 200.000000 },
    { "x1": 0.000000, "y1": 20.000000, "x2": 100.000000, "y2": 180.000000 },
    { "x1": 20.000000, "y1": 0.000000, "x2": 50.000000, "y2": 180.000000 },
    { "x1": 100.000000, "y1": 0.000000, "x2": 50.000000, "y2": 180.000000 }
]

connections = {}
vertices    = {}

for s in segments:
    v1 = (s["x1"], s["y1"])
    v2 = (s["x2"], s["y2"])
    connections[v1, v2] = True
    connections[v2, v1] = True
    vertices[v1] = True
    vertices[v2] = True

for s_ in segments:
    for t_ in segments:
        s = ((s_["x1"], s_["y1"]), (s_["x2"], s_["y2"]))
        t = ((t_["x1"], t_["y1"]), (t_["x2"], t_["y2"]))
        # Schnittpunkt von s und t bestimmen
        # Allgemeiner Punkt von s: s[0] + alpha (s[1] - s[0])
        # Allgemeiner Punkt von t: t[0] + beta  (t[1] - t[0])
        # Gleichgesetzt und nach alpha, beta aufgelöst:
        d = (t[0][1] - t[1][1]) * (s[1][0] - s[0][0]) - (s[0][1] - s[1][1]) * (t[1][0] - t[0][0])
        if abs(d) < eps:
            break
        alpha = ((t[0][1] - t[1][1]) * (t[0][0] - s[0][0]) + (t[1][0] - t[0][0]) * (t[0][1] - s[0][1])) / d
        beta  = ((s[0][1] - s[1][1]) * (t[0][0] - s[0][0]) + (s[1][0] - s[0][0]) * (t[0][1] - s[0][1])) / d
        p = (s[0][0] + alpha * (s[1][0] - s[0][0]), s[0][1] + alpha * (s[1][1] - s[0][1]))
        q = (t[0][0] + beta  * (t[1][0] - t[0][0]), t[0][1] + beta  * (t[1][1] - t[0][1]))
        #print(alpha,beta,p,q)
        if alpha < -eps or beta < -eps or alpha > 1+eps or beta > 1+eps:
            break
#        invers:
#            (t01 - t11      t10 - t00)
#            (s01 - s11      s10 - s00)
#        alpha = 
#
#            s00 + lambda (s10 - s00) = t00 + mu (t10 - t00)
#            s01 + lambda (s11 - s01) = t01 + mu (t11 - t01)
#
#            also
#            (s10 - s00   |t10 - t00) ( alpha )  = t00 - s00
#            (s11 - s01   |t11 - t01) ( beta  )  = t01 - s01
        vertices[p] = True
        connections[s[0],p] = True
        connections[p,s[0]] = True
        connections[s[1],p] = True
        connections[p,s[1]] = True
        connections[t[0],p] = True
        connections[p,t[0]] = True
        connections[t[1],p] = True
        connections[p,t[1]] = True

for v1 in vertices.keys():
    for v2 in vertices.keys():
        for v3 in vertices.keys():
            if (v1,v2) in connections and (v2,v3) in connections and (v3,v1) in connections:
                print(sorted([v1,v2,v3]))
