All pastes #2017347 Raw Edit

pluc

public text v1 · immutable
#2017347 ·published 2010-12-12 14:46 UTC
rendered paste body
#! /usr/bin/env python# -*- coding: utf-8 -*-import sysfrom scitools.std import *from operator import itemgetterfrom numpy.linalg import det, normif __name__ == '__main__':    # try:    #     filename = sys.argv[1]    #     f = open(filename)    # except IndexError:    #     print "Usage : tp2.py filename"    #     sys.exit()    # except IOError:    #     print "Could not open file '%s'" % filename    #     sys.exit()    f = open('./data/pts5.txt')    ff = []    for line in f:        ff.append(line.split())    #ff = f.readlines()    print '-----------'    print ff    def to_point(): return lambda e : [float(itemgetter(0)(e)),                                       float(itemgetter(1)(e))]    def to_triangle(): return lambda e : sort([int(itemgetter(0)(e)) - 1,                                               int(itemgetter(1)(e)) - 1,                                               int(itemgetter(2)(e)) - 1])    print '-----------'    np = int(ff[0][0])    print np    vertices = array(map(to_point(), ff[1:np + 1]))    print vertices    print vertices.shape    print '-----------'    nt = int(ff[np+1][0])    print nt    print ff[7:9]    tgls = array(map(to_triangle(), ff[np + 2:np + nt + 2]))    print tgls    print tgls.shape    print '-----------'    print vertices[:, 0]    # plot(vertices[:, 0], vertices[:, 1], 'ro-',    #      axis = [min(vertices[:, 0]) - 0.5, max(vertices[:, 0]) + 0.5,    #              min(vertices[:, 1]) - 0.5, max(vertices[:, 1]) + 0.5])    # Nombre de demi-arrêtes    ne = 3 * nt    # Nombre de faces    nf = np + 1    print '-----'    edges = zeros((ne, 5), uint8)    print edges.shape    opp = {}    ii = 0    for i in range(nt):        v0, v1, v2 = tgls[i, :]        # Ordre polaire        u = vertices[v2] - vertices[v0]        v = vertices[v1] - vertices[v0]        d = det((u, v))        # v2 < v1        if d > 0 or d == 0 and norm(u) >= norm(v):            tmp = v1            v1 = v2            v2 = tmp        # Demi-arrête suivante        edges[ii, 0] = ii + 1        edges[ii + 1, 0] = ii + 2        edges[ii + 2, 0] = ii        # Demi-arrête précédente        edges[ii, 1] = ii + 2        edges[ii + 1, 1] = ii        edges[ii + 2, 1] = ii + 1        # Sommets d'origine        edges[ii, 3] = v0        edges[ii + 1, 3] = v1        edges[ii + 2, 3] = v2        # Demi-arrête opposée        v0, v1, v2 = tgls[i, :]        print '@@'        print v0, v1        if opp.has_key((v0, v1)):            e = opp.pop((v0, v1))            edges[e, 2] = ii            edges[ii, 2] = e            print 'FOUND : %d' % e        else:            print 'ADD'            opp[(v0, v1)] = ii        print opp        print v1, v2        if opp.has_key((v1, v2)):            e = opp.pop((v1, v2))            edges[e, 2] = ii + 1            edges[ii + 1, 2] = e            print 'FOUND : %d' % e        else:            print 'ADD'            opp[(v1, v2)] = ii + 1        print opp        print v0, v2        if opp.has_key((v0, v2)):            e = opp.pop((v0, v2))            edges[e, 2] = ii + 2            edges[ii + 2, 2] = e            print 'FOUND : %d' % e        else:            print 'ADD'            opp[(v0, v2)] = ii + 2        print opp        print '@@'        # Face droite        edges[ii:ii + 3, 4] = i        print ii        ii += 3        print 'done triangle %d' % i    print edges