PyGTS es un paquete de Python que se puede utilizar para

Anuncio
PyGTS es un paquete de Python que se puede utilizar para construir, manipular y
realizar cálculos en 3D de superficies triangulares. Es un hecho a mano y pythonic
vinculante para la superficie triangulada GNU (GTS) Biblioteca.
GTS representa la superficie triangulada GNU Biblioteca. Se trata de un Open Source
Software Libre biblioteca destinada a proporcionar un conjunto de funciones útiles para
hacer frente a las superficies 3D de malla de triángulos conectados entre sí. El código
fuente está disponible de forma gratuita bajo la licencia LGPL del Software Libre.
El código está escrito enteramente en C, con un enfoque orientado a objetos basado
sobre todo en el diseño de GTK +. Se presta una atención a las cuestiones relacionadas
con el rendimiento como el objetivo inicial de GTS es proporcionar una biblioteca
sencilla y eficaz a los científicos se ocupan de mallas 3D de superficie de cálculo.
Un breve resumen de sus principales características:
 Objeto simple estructura orientada a dar fácil acceso a las propiedades
topológicas.
 2D Delaunay dinámica y triangulaciones de Delaunay restringida.
 Robusto predicados geométricas (orientación, en el círculo) con rápida
adaptación aritmética de punto flotante (adaptación de la excelente labor
realizada por Jonathan R. Shewchuk).
 Robusto las operaciones establecidas en las superficies (unión, intersección,
diferencia).
El refinamiento y la brutalidad de superficie (modelos multiresolución).
 Vista dinámica continua de nivel independiente-de-detalle.
 Anteproyecto de apoyo para ver el nivel dependiente-de-detalle.
 Coordenadas de cajas de árboles y KD-árboles para la localización del punto de
colisión eficiente y detección de intersección.
 Operaciones Gráfico: recorrido, la partición de gráfico.
 Operaciones métricas (área, volumen, curvatura ...).
 Triángulo de la generación de tiras para el renderizado rápido.
Pygts es Una herramienta libre de Python para la manipulación de las superficies de
triangulación
PyGTS es un paquete de código abierto y basado en Python utilizados para construir,
manipular y realizar cálculos sobre las superficies triangulares.
PyGTS es un hecho a mano y pythonic vinculante para la superficie triangulada GNU
(GTS) Biblioteca.
Principales características:
- Objeto simple estructura orientada a dar fácil acceso a las propiedades topológicas.
- 2D Delaunay dinámica y triangulaciones de Delaunay restringida.
- Robusto predicados geométricas (orientación, en el círculo) con rápida adaptación
aritmética de punto flotante.
- Robusto conjunto de las operaciones en las superficies (unión, intersección, diferencia).
- Superficie refinamiento y la brutalidad (modelos multiresolución).
- Vista dinámica continua de nivel independiente-de-detalle.
- Anteproyecto de apoyo para ver el nivel dependiente-de-detalle.
- Coordenadas de cajas de árboles y KD-árboles para la localización del punto de
colisión eficiente y detección de intersección.
- Las operaciones Gráfico: recorrido, la partición de gráfico.
- Las operaciones de métricas (área, volumen, curvatura ...).
- Triángulo de generación de tiras para el renderizado rápido.
Requisitos del sistema:
Mejoras
- Corregido encasillamiento interior de los vértices. Esto soluciona problemas
- Con el uso de lista de números como vértices.
- Mejora de código de limpieza
- Construir específicamente para i386 de PPC en Mac OS X
Programa ejemplo
from gts import*
def get_coords_and_face_indices(s, descomprimir = False):
"" "Devuelve las coordenadas y los índices de la cara
de la superficie S.
if descomprimir is True then cuatro tuplas se devuelven.
Los tres primeros
son las X, Y y Z las coordenadas de cada vértice en la
superficie.
La última es una lista de tuplas, una para cada cara en
la superficie,
que contiene 3 índices que une los vértices de cara a
la coordinación de
listas.
if descomprimir is false, then las coordenadas que
figuran en una lista única
de 3-tuplas.
"" "
vértices = s.vertices ()
coords = [v.coords () para v en vértices]
face_indices = s.face_indices (vértices)
si descomprimir:
x, y, z = zip (* coords)
return x, y, z, face_indices
otra cosa:
vértices de retorno, coords
def cubo ():
"" "Devuelve un cubo de la longitud de la cara 2
centrado en el origen". ""
#
#
#
#
#
#
#
#
#
#
V8 ------ v5
/ / |
/ V1 / |
V4 ------ |
| | V6
| (V7) | /
| | /
V3 ------ v2
v1,
Vértice
V5,
Vértice
v2, v3, v4 = vértice (1,1,1), Vértice (1,1, -1),
(1, -1, -1), Vértice (1, -1,1)
V6, V7, V8 = Vértice (-1,1,1), Vértice (-1,1, -1),
(-1, -1, -1), Vértice (-1, -1,1 )
E12, E23, E34, E14 =
(v3, v4), Edge (v4, v1)
E56, E67, E78, E58 =
Edge (v7, v8), EDGE (V8,
E15, E26, E37, E48 =
(v3, v7), Edge (v4, v8)
E13, E16, E18 = Edge
v8)
E27, E47, E57 = Edge
v5)
Edge (v1, v2), Edge (V2, V3), Edge
Edge (V5, V6), Edge (V6 y V7),
V5)
Edge (v1, v5), Edge (v2, V6), Edge
(v1, v3), Edge (v1, V6), Edge (v1,
(v7, v2), Edge (v7, v4), Edge (v7,
caras = [Cara (E12, E23, E13), Cara (E13, E34, E14),
Face (E12, E26, E16), Cara (E15, E56, E16),,
Face (E15, E58, E18), Cara (E14, E48, E18),,
Face (E58, E78, E57), Cara (E56, E67, E57),,
Face (E26, E67, E27), Cara (E37, E23, E27),,
Face (E37, E47, E34), Cara (E78, E48, E47)]
se enfrenta a [0]. revertir () # Establecer la
orientación de la primera cara
s = superficie ()
para la cara en la cara:
si no face.is_compatible (s):
face.revert ()
s.add (Presencial)
return s
tetraedro def ():
"" "Devuelve un tetraedro de longitud lateral 2 * sqrt
(2) centrada en el origen.
Los bordes del tetraedro son perpendiculares al
cardenal
direcciones.
"" "
#
#
#
#
#
#
#
#
#
#
V4
| \ E6
E5 '| e4!
V1. -e3-v3
/.
./e1. e2
/.
V2
# Crear vértices
v1 = vértice (1,1,1)
v2 = vértice (-1, -1,1)
v3 = Vértice (-1,1, -1)
v4 = Vértice (1, -1, -1)
# Crear bordes
e1 = Edge (v1,
E2 = Edge (V2,
E3 = Edge (v3,
e4 = Edge (v1,
e5 = Edge (v4,
E6 = Edge (v4,
v2)
V3)
v1)
v4)
v2)
v3)
# Crear caras
f1 = Face (E1,
f2 = Face (e1,
f3 = Face (E2,
f4 = Face (e3,
E2,
e4,
E5,
e4,
E3)
e5)
E6)
e6)
de cara inferior #
se enfrentan a la izquierda #
# Derecho cara
# Volver cara
# Establezca la orientación de la cara primero
f1.revert ()
# Superficie Ensamble
s = superficie ()
para la cara en [F1, F2, F3, F4]:
si no face.is_compatible (s):
face.revert ()
s.add (Presencial)
return s
Descargar