Hier werden ein paar kleine Projekte vorgestellt, die ich hin und wieder mal verfolge. Code snippets am besten auf der englischen Version der Seite anschauen (rechts oben wechseln), da hier die Formatierung irgendwie zerschossen wurde.

Lau
Some Examples
Dupin cyclides
A simple numerical approach.
- In Python -
Private Cloud
Using Seafile to create a private Cloud in the own livingroom.
Some Coding
Some little coding projects like calculating molar mass or processing scientific data.
previous arrowprevious arrow
next arrownext arrow
Slider

Numerische Annäherung Dupin'scher Zykliden

Dupin'sche Zykliden sind Flächen mit spezifischen geometrischen Eigenschaften. Sie können erzeugt werden, indem die Einhüllende einer Kugelschar benutzt wird. Diese Kugelschar liegt auf einer Ellipse.
(Anmerkung: Ein Spezialfall wäre z.B., wenn alle Kugeln den gleichen radius haben und die Ellipse ein Kreis ist -> Torus)
Ich habe hier versucht ein kleines Python script zu schreiben, welches spezielle Dupin'sche Zykliden plottet.

Hornzyklide
Einhornzyklide

Einige Darstellunegn Dupin'scher Zykliden mit verschiedenen Parametern.

Hornzyklide
Ringzyklide

Für weitere Informationen siehe z.B. Wikipedia oder die Universität Stuttgart für Bilder von Gipsmodellen.

Python code

Leider braucht der code etwas Zeit um zu zeichnen (abhängig von der "Auflösung" N), da alle Kugeln gezeichnet werden und nicht nur die Einhüllende der Kugelschar. Für N=1000 ist eine plot-Zeit von einigen Minuten nicht ungewöhnlich. Für kleinere N kann diese natürlich reduziert werden.

# -*- coding: utf-8 -*-
"""
Created on Sat Feb  8 18:57:35 2020

@author: Lau
"""

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from timeit import default_timer as timer
from scipy.spatial import ConvexHull

class Zyklide:
    def __init__(self, r_off=1.5, N=100, a=10, b=5):
        self.N = N
        self.a = a
        self.b = b
        r = np.cos(np.linspace(0, 2*np.pi, N))
        self.r = r + r_off

    def ellipse(self, a, b, N):
        phi = np.linspace(0, 2*np.pi, N)
        x = (a * np.cos(phi))
        y = (b * np.sin(phi))
        coords = np.array([x, y])
        return coords
    
    def sphere(self, x, y, r):
        u, v = np.mgrid[0:2*np.pi:100j, 0:np.pi:100j]
        x = r*np.cos(u)*np.sin(v)-x
        y = r*np.sin(u)*np.sin(v)-y
        z = r*np.cos(v)
        return np.array([x, y, z])
    
    def calculate(self):
        start = timer()
        self.ellips_coords = self.ellipse(self.a, self.b, self.N)
        self.sphere_points = []
        for i in range(self.ellips_coords.shape[1]):
            self.sphere_points.append(
                self.sphere(self.ellips_coords[0, i],
                self.ellips_coords[1, i],
                self.r[i]))
        end = timer()
        print(f'Time for calculation: {end - start} s.')  # Time in seconds
        return 0

    def plot(self, theta=30, phi=45):
        start = timer()
        fig = plt.figure()
        ax = Axes3D(fig)
        ax.set_axis_off()
        for i in range(self.ellips_coords.shape[1]):
            xi = self.sphere_points[i][0, :, :]
            yi = self.sphere_points[i][1, :, :]
            zi = self.sphere_points[i][2, :, :]
            ax.plot_surface(xi, yi, zi, color='b')
        ax.set_xlim(-10, 10)
        ax.set_ylim(-10, 10)
        ax.set_zlim(-10, 10)
        ax.view_init(theta, phi)
        plt.savefig('zyklide.png', dpi=600)
        plt.show()
        end = timer()
        print(f'Time for plotting: {end - start} s.')  # Time in seconds


if __name__ == '__main__':
    ring_zyklide = Zyklide(a=8,b=8,N=100)
    ring_zyklide.calculate()
    ring_zyklide.plot(theta=90, phi=0)

Word Cloud – Bachelor Arbeit

Ich habe außerdem eine "Word Cloud" meiner B.Sc. Abschlussarbeit angefertigt. Meine Abschlussarbeit hatte den Titel "Coupling into silicon waveguides" und wurde bei der Barz Gruppe am Institut für Funktionelle Materie und Quantentechnologien an der Universität Stuttgart angefertigt.

Es ist sehr einfach eine solche Word Cloud mit Python zu generieren:

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 13 16:00:23 2019

@author: Lau
"""

from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt

with open("Lau_BA.txt") as BA:
    text = BA.read()

wordcloud = WordCloud(background_color='white',width=1920, height=1200,scale=1)
#STOPWORDS.update(['maybe', 'you', 'may', 'want', 'to', 'ignore', 'some', 'words'])
wordcloud.generate(text)
fig = plt.figure()
plt.imshow(wordcloud,interpolation="bilinear")
plt.axis('off')
plt.show()
wordcloud.to_file("WordCloud_Lau_BSc.pdf")

Ich habe eine .txt Datei mit dem Text meiner Abschlussarbeit benutzt (Strg+C & Strg+V in eine .txt ignoriert die Bilder) und habe diesen Text in mein script geladen.


Molar Mass Calculator

I wrote a little program to calculate the molar mass of a compound. Furthermore it is able to calculate the required amount of reactants if you have a reaction formular.

You can get or review the program on GitHub:

https://github.com/LauKr/Molar-mass-calculator