Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1617:the_art_of_music:protokolle:05

Dies ist eine alte Version des Dokuments!


2017-01-26:

Wir haben uns das erstes Mal mit der Verbildlichung unseres Projekts auseinandergesetzt.

<code python> #!/usr/bin/env python # -*- coding: utf-8 -*- # # server.py # # Copyright 2015 Stefan Born born@math.tu-berlin.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA. # #

import matplotlib matplotlib.use('GTKAgg') import matplotlib.pyplot as plt

import numpy as np import time import sys

def anzeige():

'''wird aufgerufen, um den Plot zu aktualisieren'''
fig.canvas.draw()
fig.canvas.flush_events()

def main():

global im
while True:
	
	## verändere Bilddaten und setze diese
	
	im=4*im*(1-im)#np.random.rand(N*N).reshape(N,N)
	im=np.where(im<1,im, 1)
	image.set_data(im)
	
	## verändere die Kreisdaten 
	
	# Mittelpunkt ist ein Attribut
	
	c1.center=(c1.center[0]+np.random.randint(3)-1,c1.center[1]+np.random.randint(3)-1)
	
	# Parameter wie 'color' verändert man so
	
	matplotlib.artist.setp(c1,color=(np.random.rand(),np.random.rand(),np.random.rand()))
	
	## verändere die Dreiecksdaten:
	
	dt=time.time()-now
	p1.set_xy(np.array([[np.cos(dt)*N/2.+N/2., np.sin(dt)*N/2.+N/2],
	[np.cos(0.4*dt)*N/2.+N/2., np.sin(0.4*dt)*N/2.+N/2],
	[np.cos(0.1*dt)*N/2.+N/2., np.sin(0.1*dt)*N/2.+N/2]]))
	matplotlib.artist.setp(p1,color=(np.abs(np.sin(dt)),np.abs(np.cos(dt)), np.abs(np.sin(1.777*dt))))
	
	
	##   Verändere die Farben der Dreiecke und Kanten (simultan)
	
	# Hier wird eine Liste von Farbtripeln erzeugt 
	
	colors=[]
	for i in range(len(triangles)):
		colors.append((np.abs(np.sin(0.1*dt*i)),np.abs(np.sin(0.1*2*dt*i)),np.abs(0.1*np.sin(3*dt*i))))

	# Hier wird die Liste als den Dreiecken zugeordnet
	
	triangle_collection.set_color(colors)
	
	# Genauso für die Kanten, erst Liste erzeugen, dann zuordnen
	
	colors=[]
	for i in range(len(lines)):
		colors.append((np.abs(np.sin(0.1*dt*i)),np.abs(np.sin(0.1*2*dt*i)),np.abs(0.1*np.sin(3*dt*i))))
	line_collection.set_color(colors)
	
	## Zeichne mit den aktuellen Werten
			
	anzeige()
return 0

if name == 'main':

now=time.time()

##############

matplotlib.rcParams['toolbar'] = 'None'  #  Keine Buttons zum Vergrößern/Verkleinern anzeigen
fig=plt.figure()                      #  Figure Objekt

N=100
ax = plt.axes(xlim=(0,2*N),ylim=(0,2*N))  #  Axes (Koordinatensystem)-Objekt
plt.axis("off")                       #  Achsen nicht beschriften

##############

# Ein Bild ("Artist") in ax erzeugen, das ein Array durch farbige Punkte ausdrückt

im=np.array([[np.abs(np.sin(0.1*(i*i+j*j))) for i in range(N)]for j in range(N)])#np.random.rand(N*N).reshape(N,N)
image=ax.imshow(im)

# Einen Kreis ("Artist") erzeugen und zu ax hinzufügen.

c1=matplotlib.patches.Circle([N/2,N/2],color=(1,0,0),alpha=0.8)
ax.add_artist(c1)

# Ein Dreieck mit identischen Ecken erzeugen und zu ax hinzufügen

p1=matplotlib.patches.Polygon(np.array([[1,0],[1,0],[1,0]]),color=(1.,0,0),alpha=0.8)
ax.add_artist(p1)


## Eine Liste von Dreiecken erzeugen

ax1=fig.add_axes((0.5,0.5,0.5,0.5))  ## Standard-Koordinatensystem der neuen Achse 0-1 x 0-1
                                     ## lässt sich mit xlim und ylim überschreiben, s. o.
plt.axis("off")

triangles=[]
points=np.random.rand(30,2)
import scipy.spatial
tri=scipy.spatial.Delaunay(points)
for simplex in tri.simplices:
	p=matplotlib.patches.Polygon(np.array([points[simplex[0]],points[simplex[1]],points[simplex[2]]]))
	triangles.append(p)
triangle_collection=matplotlib.collections.PatchCollection(triangles)
ax1.add_artist(triangle_collection)
## Eine Liste der zugehörigen Dreieckskanten

lines=set([])
for simplex in tri.simplices:
	lines.add((simplex[0],simplex[1]))
	lines.add((simplex[1],simplex[2]))
	lines.add((simplex[2],simplex[0]))
	
line_collection=matplotlib.collections.LineCollection([(points[line[0]], points[line[1]]) for line in lines],color=(0,1,0))
ax1.add_artist(line_collection)
# Anzeigen

anzeige()

## Beim erstem Aufbau der Graphik muss eine solche Pause erzwungen werden
## für die späteren Updates der Graphik ist das nicht notwendig.

plt.pause(0.05)

# Animationsschleife starten

main()
ws1617/the_art_of_music/protokolle/05.1486649347.txt.gz · Zuletzt geändert: 2017/02/09 15:09 von cm.mint.2016