Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1415:projekte_im_wintersemester_2014_15:nuetzliche_programmschnipsel

Dies ist eine alte Version des Dokuments!


Nützliche Programmschnipsel

Funktionierende Triangulierung

def Show(NAME):
 
	import numpy as np
	import matplotlib.pyplot as plt
	from mpl_toolkits.mplot3d import Axes3D
	import matplotlib.tri as mtri
	from scipy.spatial import Delaunay
 
	rangey=[]
	rangex=[]
	z=[]
	myArray  = np.loadtxt(NAME)
	zeilen,spalten=myArray.shape
 
	for i in range(zeilen):
		for ii in range(zeilen):
			rangex.append(i)	
 
	for i in range(spalten):
		for i in range(spalten):
			rangey.append(i)
	reader=open(NAME,'r')
	z1=reader.read()
	reader.close()
	z1=z1.replace("\n","")
	z1=(z1.split())
 
	for word in z1:
		z.append(word)
	z=map(int,z)
 
	tri = Delaunay(np.array([rangex,rangey]).T)
	fig = plt.figure()
	ax = fig.add_subplot(1, 1, 1, projection='3d')
	ax.plot_trisurf(rangex, rangey, z, triangles=tri.simplices, cmap=plt.cm.BrBG)
	plt.show()
	print len(tri.simplices)
 
if __name__ == '__main__':
	Show("montblanc1.asc")

3d-Punkte zeichnen

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
 
myArray  = np.loadtxt("etopo1_bedrock.asc", skiprows=6)
z,s=myArray.shape
 
x=np.zeros((z,s))
for i in range(z):
	x[i]=i
 
y=np.zeros((z,s))
for i in range(s):
	y[:,i]=i
 
z=myArray
 
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, zdir='z', c= 'red')
plt.show()

3d-Dreiecke zeichnen

# -*- coding: utf-8 -*-
 
import numpy as np
from scipy.spatial import Delaunay
import mpl_toolkits.mplot3d as mplot3d
import matplotlib.colors as colors
import pylab as pl
 
###  erzeuge ein Gitter von x,y-Werten mit zugehörigen z-Werten
 
x=np.linspace(-1,1,10)
y=np.linspace(-1,1,10)
XX,YY=np.meshgrid(x,y)
ZZ=np.sin(XX*XX+YY*YY)
 
###  Erzeuge ein Array mit (x,y)-Koordinaten und eines
###  mit (x,y,z)-Koordinaten
 
points3d = np.array([XX.flatten(),YY.flatten(),ZZ.flatten()]).T
points2d=  np.array([XX.flatten(),YY.flatten()]).T
 
### Berechne Delaunay-Triangulierung des Gitters
 
 
tri = Delaunay(points2d)
 
###  Darstellung auf der Basis der erzeugten Dreiecke -- es gibt
###  in Matplotlib ganz verschiedene Schnittstellen, die dasselbe
###  tun. 
 
###  Hier wird mit ax=mplot3d.Axes3D(...) ein 3d-Koordinatensystem
###  erzeugt, dem man 3d-Objekte hinzufügen kann mit ax.add_collection3d(...)
###  In unserem Fall werden Dreiecke hinzugefügt, die mit 
###  mplot3d.art3d.Poly3DCollection(...) werden
 
 
 
ax = mplot3d.Axes3D(pl.figure())
for simplex in tri.simplices:
    ecken = np.array([points3d[simplex[0]],points3d[simplex[1]],points3d[simplex[2]]])
 
    dreieck = mplot3d.art3d.Poly3DCollection([ecken])
    ### Man kann von diesen Graphikobjekten Eigenschaften einstellen:
    dreieck.set_color(colors.rgb2hex(np.random.rand(3)))
    dreieck.set_edgecolor('k')
 
    ax.add_collection3d(dreieck)
 
pl.show()
ws1415/projekte_im_wintersemester_2014_15/nuetzliche_programmschnipsel.1417097102.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)