Malen mit Zahlen, Teil RS1 – Kamera und Punkte

Das ist der erste Teil der Serie über 3D-Computergraphik, der sich speziell mit Rasterung/Schattierung beschäftigt. Obwohl es natürlich Überschneidungen gibt, möchte ich hier nicht auf spezielle Bibliotheken wie OpenGL oder Direct3D eingehen. Es wird aber wahrscheinlich noch eine Unterserie zu WebGL geben.

Die Standardkamera

Bevor wir etwas rastern können, müssen wir zunächst Punkte im Raum auf unsere Kamera projizieren. Fürs Erste verwenden wir dazu die in Abb. 1 gezeigte inverse Lochkamera (s. Teil 0).

Abb. 1: Unsere Standard-Lochkamera. Der »eye point« (das Loch) ist im Ursprung und der Schirm liegt in der Ebene z = -1. Die Kreuze auf den Achsen haben jeweils eine Längeneinheit Abstand.
Weiterlesen „Malen mit Zahlen, Teil RS1 – Kamera und Punkte“

Malen mit Zahlen, Teil 0 – die (inverse) Lochkamera

Dieser Beitrag beginnt eine neue Serie über 3D-Computergraphik. Speziell werden wir uns mit zwei Techniken – Raytracing und Rasterung/Schattierung – beschäftigen.

Im nullten – gemeinsamen – Teil geht es um die einfachste Kamera für perspektivische Abbildungen: die (inverse) Lochkamera bzw. Camera obscura. Ein röhrenförmiges Modell ist in Abb. 1 schematisch dargestellt.

Abb. 1: Eine röhrenförmige Lochkamera bildet ein Motiv ab. G, B sind Gegenstands- bzw. Bildgröße und g, b sind Gegenstands- bzw. Bildweite. Das Bild steht auf dem Kopf.
Weiterlesen „Malen mit Zahlen, Teil 0 – die (inverse) Lochkamera“

Fourier-Reihen, Teil 9 – komplexe Signale und Kurven in der Ebene

In den bisherigen Teilen haben wir uns mit der Fourier-Analyse reeller Signale beschäftigt. Dabei haben wir rotierende Zeiger unterschiedlicher Frequenzen addiert und die Projektion des Summenzeigers ergab unser zeitabhängiges Signal (s. Teil 1).

Der Summenzeiger hat dabei recht komplizierte Kurven in der komplexen Ebene beschrieben (s. speziell Teil 2). In diesem Teil stellen wir nun die Frage, wie wir geschlossene, ebene Kurven in eine Summe von rotierenden Zeigern verwandeln können.

Einfache Beispiele für solche Kurven sind Lissajous-Figuren wie in Abb. 1 gezeigt. Wir betrachten dabei die Bahnkurve eines Punktes, dessen x– und y-Koordinaten allgemeine Sinus-Funktionen der Zeit t sind. Wenn der Quotient der beiden Frequenzen rational ist, sind die Bahnen geschlossen – und damit periodisch.

Abb. 1: Bahn eines Punktes, dessen x– und y-Koordinaten allgemeine Sinus-Funktionen sind. Speziell ist f'=0.2\,\text{Hz} und f''=0.4\,\text{Hz}, was eine Periodendauer von T=5\,\text{s} bedeutet.
Weiterlesen „Fourier-Reihen, Teil 9 – komplexe Signale und Kurven in der Ebene“

Fourier-Reihen, Teil 8 – von der Reihe zur Fourier-Transformation

Periodische Signale s können wir in ihre einzelnen Frequenzanteile zerlegen und damit in eine Fourier-Reihe entwickeln. Wie wir in Teil 3 gesehen haben, erhalten wir das Transformations-Paar

\displaystyle s(t)=\sum_{k=-\infty}^{+\infty}\underline{S}_k\cdot e^{\underline{i}k\omega_1t}\quad\text{und}\quad\underline{S}_k=\frac{1}{T}\int_{-\frac{T}{2}}^{+\frac{T}{2}}s(t)\cdot e^{-\underline{i}k\omega_1t}\,\mathrm{d}t ,

wobei T die Periodendauer des Signals ist. Von den komplexe Fourier-Koeffizienten \underline{S}_k gibt es abzählbar unendlich viele, jeweils beim k-fachen der Grundkreisfrequenz \omega_1=\tau/T (es gilt \tau=2\pi). Für rein reelle Signale brauchen wir die Koeffizienten nur für k\geq0 berechnen, weil \underline{S}_{-k}=\underline{S}_k^* ist.

In diesem Teil soll es nun speziell um die nicht-periodischen Signale gehen. Wir werden sehen, dass es da auch so ein Transformations-Paar gibt. Abzählbar unendlich viele Koeffizienten reichen dafür aber nicht mehr aus.

Weiterlesen „Fourier-Reihen, Teil 8 – von der Reihe zur Fourier-Transformation“

Fourier-Reihen, Teil 7 – wie Signale in Frequenzen zerlegt werden

Wenn wir ein Signal in eine Fourier-Reihe »entwickeln«, müssen wir herausfinden, welche Frequenzen in diesem Signal stecken. Die Formeln dazu haben wir schon in Teil 3 gesehen. Aber warum funktioniert das – speziell bei gemessenen Signalen – wirklich?

Weiterlesen „Fourier-Reihen, Teil 7 – wie Signale in Frequenzen zerlegt werden“

Fourier-Reihen, Teil 6b – DFT gemessener Signale

Im letzten Teil haben wir die Fourier-Koeffizienten eines Signals s numerisch berechnet, unter der Voraussetzung, die Periodendauer des Signals zu kennen.

Wenn wir ein Signal messen, kennen wir dessen Periodendauer normalerweise nicht. Wir messen einfach während der Messdauer T_m mit der Sampling-Frequenz (Abtastrate) f_s die momentanen Werte s(t). Wie beeinflusst das die Fourier-Koeffizienten?

Abb. 1 zeigt nochmals unser Signal

s(t) = -1 + 3\sin(2\pi \cdot 0.5\,\text{Hz} \cdot t + \pi) + 2\sin(5 \cdot 2\pi \cdot 0.5\,\text{Hz} \cdot t - \tfrac{\pi}{2})

aus dem letzten Teil.

sampled_meas_sig
Abb. 1: Das Signal aus Teil 6. Innerhalb der Messdauer von 3.5 s ist das Signal dicker gezeichnet. Der hellblaue Verlauf ist die tatsächliche Periodizität, der hellrote Verlauf die scheinbare Periodizität. Die roten Punkte sind die 32 Messwerte.
Weiterlesen „Fourier-Reihen, Teil 6b – DFT gemessener Signale“

Fourier-Reihen, Teil 6 – Diskrete Fourier-Transformation (DFT)

In Teil 3 haben wir gesehen, dass wir ein periodisches Signal s mit Periodendauer T als Summe rotierender Zeiger

\displaystyle s(t) = \sum_{-\infty}^{+\infty}\underline{S}_k \cdot e^{\underline{i}k\omega_1 t}

schreiben können (zumindest wenn s »schön« ist). Dabei ist die Grundfrequenz f_1 = 1/T und die Grundkreisfrequenz \omega_1 = \tau/T mit \tau = 2\pi.

Wir haben auch gesehen, dass wir die Fourier-Koeffizienten \underline{S}_k über die Mittelwerte

\displaystyle\underline{S}_k = \frac{1}{T} \int_0^T s(t) \cdot e^{-\underline{i}k\omega_1 t} \, \mathrm{d}t

erhalten. Dabei müssen wir über eine ganze Periode integrieren, egal wo wir anfangen: 0 bis T, -T/2 bis +T/2, -T/4 bis +3T/4, …

Wenn wir den Verlauf des Signals s tatsächlich als mathematischen Funktionsterm kennen, sind diese Integrale prinzipiell berechenbar – auch wenn es manchmal kompliziert werden kann. Aber was, wenn wir den Funktionsterm des Signals nicht kennen, z.B. weil wir es gemessen haben? – In beiden Fällen können wir die Integrale zumindest näherungsweise numerisch berechnen.

Weiterlesen „Fourier-Reihen, Teil 6 – Diskrete Fourier-Transformation (DFT)“

Fourier-Reihen, Teil 5 – Schwebungen

In Teil 1 haben wir gesehen, dass die Addition von Sinussignalen unterschiedlicher Frequenzen wieder ein periodisches Signal ergibt, wenn alle Frequenzen ganzzahlige Vielfache einer Grundfrequenz f_1 sind. Die Periodendauer des Summensignals ist dann T = 1/f_1. In diesem Teil beschäftigen wir uns mit Frequenzen, die nicht mehr ganzzahlige Vielfache voneinander sind.

Weiterlesen „Fourier-Reihen, Teil 5 – Schwebungen“

Komplexe Zahlen, Teil 7 – Addition in Polardarstellung

Die Polardarstellung komplexer Zahlen (s. Teil 3) ist besonders gut geeignet für Multiplikationen, Divisionen, Potenzen und Wurzeln komplexer Zahlen. Additionen und Subtraktionen sind nicht so einfach.

Mit etwas gutem Willen, geht es aber doch (s. Abb. 1) und führt zu interessanten Resultaten.

polar_add
Abb. 1: Addition in Polardarstellung; hier am Beispiel 1\angle15^\circ + 1\angle75^\circ = \sqrt{3}\angle45^\circ.

Weiterlesen „Komplexe Zahlen, Teil 7 – Addition in Polardarstellung“

Das Geheimnis der Prozentrechnung

Die Prozentrechnung wird oft als schwierig befunden. Vielleicht auch deshalb, weil verschiedene Dinge miteinander vermischt werden.

Da ist zunächst einmal ein spezielles %-Zeichen. Aber das Einzige, was wir dazu wissen müssen, ist:

Das %-Zeichen ist die multiplikative Konstante 1 / 100 = 0.01 .

Weiterlesen „Das Geheimnis der Prozentrechnung“