matplotlib.tri#
Funktionen für unstrukturierte Dreiecksnetze.
- class matplotlib.tri.Triangulation(x, y, triangles=None, mask=None)[Quelle]#
Ein unstrukturiertes Dreiecksnetz bestehend aus n-Punkten und n-Dreiecken. Die Dreiecke können entweder vom Benutzer spezifiziert oder automatisch mittels Delaunay-Triangulation generiert werden.
- Parameter:
- x, y(npoints,) array-ähnlich
Koordinaten der Gitterpunkte.
- triangles(ntri, 3) array-ähnlich von int, optional
Für jedes Dreieck die Indizes der drei Punkte, aus denen das Dreieck besteht, in gegen den Uhrzeigersinn geordnet. Falls nicht angegeben, wird die Delaunay-Triangulation berechnet.
- mask(ntri,) array-ähnlich von bool, optional
Welche Dreiecke maskiert sind.
- Attribute:
- triangles(ntri, 3) array von int
Für jedes Dreieck die Indizes der drei Punkte, aus denen das Dreieck besteht, in gegen den Uhrzeigersinn geordnet. Wenn Sie die *mask* berücksichtigen möchten, verwenden Sie stattdessen
get_masked_triangles.- mask(ntri, 3) array von bool oder None
Maskierte Dreiecke.
- is_delaunaybool
Ob die Triangulation eine berechnete Delaunay-Triangulation ist (wenn *triangles* nicht angegeben wurde) oder nicht.
Anmerkungen
Damit eine Triangulation gültig ist, darf sie keine doppelten Punkte, aus kollinearen Punkten gebildete Dreiecke oder überlappende Dreiecke enthalten.
- calculate_plane_coefficients(z)[Quelle]#
Berechnet die Koeffizienten der Ebenengleichung für alle nicht maskierten Dreiecke aus den (x, y)-Koordinaten und dem angegebenen z-Array der Form (npoints). Das zurückgegebene Array hat die Form (npoints, 3) und ermöglicht die Berechnung des z-Werts an der Position (x, y) in Dreieck tri mittels
z = array[tri, 0] * x + array[tri, 1] * y + array[tri, 2].
- property edges#
Gibt ein Integer-Array der Form (nedges, 2) zurück, das alle Kanten von nicht maskierten Dreiecken enthält.
Jede Zeile definiert eine Kante durch ihren Start- und Endpunktindex. Jede Kante erscheint nur einmal, d.h. für eine Kante zwischen den Punkten *i* und *j* gibt es nur entweder * (i, j)* oder * (j, i)*.
- get_cpp_triangulation()[Quelle]#
Gibt das zugrunde liegende C++-Triangulationsobjekt zurück und erstellt es bei Bedarf.
- static get_from_args_and_kwargs(*args, **kwargs)[Quelle]#
Gibt ein Triangulationsobjekt aus den Args und Kwargs sowie die restlichen Args und Kwargs mit den verbrauchten Werten entfernt zurück.
Es gibt zwei Alternativen: Entweder ist das erste Argument ein Triangulationsobjekt, in diesem Fall wird es zurückgegeben, oder die Args und Kwargs reichen aus, um eine neue Triangulation zu erstellen und zurückzugeben. Im letzteren Fall siehe Triangulation. __init__ für die möglichen Args und Kwargs.
- get_trifinder()[Quelle]#
Gibt den Standard-
matplotlib.tri.TriFinderdieser Triangulation zurück und erstellt ihn bei Bedarf. Dies ermöglicht eine einfache gemeinsame Nutzung desselben TriFinder-Objekts.
- property neighbors#
Gibt ein Integer-Array der Form (ntri, 3) mit Nachbardreiecken zurück.
Für jedes Dreieck die Indizes der drei Dreiecke, die sich die gleichen Kanten teilen, oder -1, wenn kein solches Nachbardreieck vorhanden ist.
neighbors[i, j]ist das Dreieck, das der Kante vom Punktindextriangles[i, j]zum Punktindextriangles[i, (j+1)%3]benachbart ist.
- class matplotlib.tri.TriContourSet(ax, *args, **kwargs)[Quelle]#
Bases:
ContourSetErstellt und speichert einen Satz von Konturlinien oder gefüllten Regionen für ein Dreiecksnetz.
Diese Klasse wird normalerweise nicht direkt vom Benutzer instanziiert, sondern von
tricontourundtricontourf.- Attribute:
- levelsarray
Die Werte der Konturlinien.
- layersarray
Gleich wie levels für Linienkonturen; auf halbem Weg zwischen den Levels für gefüllte Konturen. Siehe
ContourSet._process_colors.
Zeichnet Konturlinien oder gefüllte Regionen eines Dreiecksnetzes, abhängig davon, ob das Schlüsselwort-Argument *filled* False (Standard) oder True ist.
Das erste Argument des Initialisierers muss ein
Axes-Objekt sein. Die übrigen Argumente und Schlüsselwort-Argumente werden in der Docstring vontricontourbeschrieben.- set(*, agg_filter=<UNSET>, alpha=<UNSET>, animated=<UNSET>, antialiased=<UNSET>, array=<UNSET>, capstyle=<UNSET>, clim=<UNSET>, clip_box=<UNSET>, clip_on=<UNSET>, clip_path=<UNSET>, cmap=<UNSET>, color=<UNSET>, edgecolor=<UNSET>, facecolor=<UNSET>, gid=<UNSET>, hatch=<UNSET>, hatch_linewidth=<UNSET>, in_layout=<UNSET>, joinstyle=<UNSET>, label=<UNSET>, linestyle=<UNSET>, linewidth=<UNSET>, mouseover=<UNSET>, norm=<UNSET>, offset_transform=<UNSET>, offsets=<UNSET>, path_effects=<UNSET>, paths=<UNSET>, picker=<UNSET>, pickradius=<UNSET>, rasterized=<UNSET>, sketch_params=<UNSET>, snap=<UNSET>, transform=<UNSET>, url=<UNSET>, urls=<UNSET>, visible=<UNSET>, zorder=<UNSET>)[Quelle]#
Setzt mehrere Eigenschaften auf einmal.
Unterstützte Eigenschaften sind
Eigenschaft
Beschreibung
eine Filterfunktion, die ein (m, n, 3) Float-Array und einen dpi-Wert entgegennimmt und ein (m, n, 3) Array und zwei Offsets von der linken unteren Ecke des Bildes zurückgibt
Array-ähnlich oder float oder None
bool
antialiasedoderaaoderantialiasedsbool oder Liste von bools
Array-ähnlich oder None
CapStyleoder {'butt', 'projecting', 'round'}(vmin: float, vmax: float)
BboxBaseoder Nonebool
Patch oder (Path, Transform) oder None
Colormapoder str oder NoneFarbe oder Liste von RGBA-Tupeln
edgecoloroderecoderedgecolorsfacecoloroderfacecolorsoderfcstr
{'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'}
unknown
bool
JoinStyleoder {'miter', 'round', 'bevel'}object
linestyleoderdashesoderlinestylesoderlsstr oder Tupel oder Liste davon
linewidthoderlinewidthsoderlwfloat oder Liste von floats
bool
Normalizeoder str oder None(N, 2) oder (2,) Array-ähnlich
liste von
AbstractPathEffectunknown
None oder bool oder float oder callable
float
bool
(scale: float, length: float, randomness: float)
bool oder None
str
Liste von str oder None
bool
float
- class matplotlib.tri.TriFinder(triangulation)[Quelle]#
Abstrakte Basisklasse für Klassen, die zum Finden der Dreiecke einer Triangulation verwendet werden, in denen (x, y)-Punkte liegen.
Anstatt ein Objekt einer von TriFinder abgeleiteten Klasse zu instanziieren, ist es normalerweise besser, die Funktion
Triangulation.get_trifinderzu verwenden.Abgeleitete Klassen implementieren __call__(x, y), wobei x und y array-ähnliche Punktkoordinaten derselben Form sind.
- class matplotlib.tri.TrapezoidMapTriFinder(triangulation)[Quelle]#
Bases:
TriFinderTriFinder-Klasse, implementiert mithilfe des Trapezoidkartenalgorithmus aus dem Buch "Computational Geometry, Algorithms and Applications", zweite Auflage, von M. de Berg, M. van Kreveld, M. Overmars und O. Schwarzkopf.Die Triangulation muss gültig sein, d.h. sie darf keine doppelten Punkte, aus kollinearen Punkten gebildete Dreiecke oder überlappende Dreiecke enthalten. Der Algorithmus ist bis zu einem gewissen Grad tolerant gegenüber Dreiecken, die aus kollinearen Punkten gebildet werden, aber darauf sollte man sich nicht verlassen.
- class matplotlib.tri.TriInterpolator(triangulation, z, trifinder=None)[Quelle]#
Abstrakte Basisklasse für Klassen, die zur Interpolation auf einem Dreiecksnetz verwendet werden.
Abgeleitete Klassen implementieren die folgenden Methoden
__call__(x, y), wobei x, y array-ähnliche Punktkoordinaten derselben Form sind und ein Maskenarray derselben Form mit den interpolierten z-Werten zurückgegeben wird.gradient(x, y), wobei x, y array-ähnliche Punktkoordinaten derselben Form sind und eine Liste von 2 Maskenarrays derselben Form zurückgegeben wird, die die 2 Ableitungen des Interpolators enthalten (Ableitungen der interpolierten z-Werte in Bezug auf x und y).
- class matplotlib.tri.LinearTriInterpolator(triangulation, z, trifinder=None)[Quelle]#
Bases:
TriInterpolatorLinearer Interpolator auf einem Dreiecksnetz.
Jedes Dreieck wird durch eine Ebene repräsentiert, sodass ein interpolierter Wert am Punkt (x, y) auf der Ebene des Dreiecks liegt, das (x, y) enthält. Interpolierte Werte sind daher kontinuierlich über die Triangulation hinweg, aber ihre ersten Ableitungen sind an den Kanten zwischen Dreiecken diskontinuierlich.
- Parameter:
- triangulation
Triangulation Die Triangulation, über die interpoliert werden soll.
- z(npoints,) array-ähnlich
Array von Werten, die an den Gitterpunkten definiert sind und zwischen denen interpoliert werden soll.
- trifinder
TriFinder, optional Wenn dies nicht angegeben ist, wird der Standard-TriFinder der Triangulation durch Aufruf von
Triangulation.get_trifinderverwendet.
- triangulation
Methoden
`__call__` (x, y)
(Gibt interpolierte Werte an den (x, y)-Punkten zurück.)
`gradient` (x, y)
(Gibt interpolierte Ableitungen an den (x, y)-Punkten zurück.)
- gradient(x, y)[Quelle]#
Gibt eine Liste von 2 Maskenarrays zurück, die interpolierte Ableitungen an den angegebenen (x, y)-Punkten enthalten.
- Parameter:
- x, yarray-ähnlich
x- und y-Koordinaten gleicher Form und beliebiger Dimensionalität.
- Gibt zurück:
- dzdx, dzdynp.ma.array
2 Maskenarrays mit der gleichen Form wie *x* und *y*; Werte, die zu (x, y)-Punkten außerhalb der Triangulation gehören, sind maskiert. Das erste zurückgegebene Array enthält die Werte von \(\frac{\partial z}{\partial x}\) und das zweite die Werte von \(\frac{\partial z}{\partial y}\).
- class matplotlib.tri.CubicTriInterpolator(triangulation, z, kind='min_E', trifinder=None, dz=None)[Quelle]#
Bases:
TriInterpolatorKubischer Interpolator auf einem Dreiecksnetz.
Eindimensional - auf einem Segment - wird eine kubische Interpolationsfunktion durch die Werte der Funktion und ihrer Ableitung an beiden Enden definiert. Dies ist in 2D innerhalb eines Dreiecks fast dasselbe, außer dass die Werte der Funktion und ihrer 2 Ableitungen an jedem Dreiecksknoten definiert sein müssen.
Der CubicTriInterpolator nimmt den vom Benutzer bereitgestellten Wert der Funktion an jedem Knoten und berechnet intern den Wert der Ableitungen, was zu einer glatten Interpolation führt. (Als besonderes Merkmal kann der Benutzer auch den Wert der Ableitungen an jedem Knoten vorgeben, dies ist jedoch nicht die übliche Verwendung.)
- Parameter:
- triangulation
Triangulation Die Triangulation, über die interpoliert werden soll.
- z(npoints,) array-ähnlich
Array von Werten, die an den Gitterpunkten definiert sind und zwischen denen interpoliert werden soll.
- kind{'min_E', 'geom', 'user'}, optional
Auswahl des Glättungsalgorithmus zur Berechnung der Ableitungen des Interpolanten (Standard: 'min_E')
wenn 'min_E': (Standard) Die Ableitungen an jedem Knoten werden berechnet, um die Biegeenergie zu minimieren.
wenn 'geom': Die Ableitungen an jedem Knoten werden als gewichteter Durchschnitt relevanter Dreiecksnormale berechnet. Zur Geschwindigkeitsoptimierung (große Gitter) zu verwenden.
wenn 'user': Der Benutzer stellt das Argument *dz* bereit, es ist daher keine Berechnung erforderlich.
- trifinder
TriFinder, optional Wenn nicht angegeben, wird der Standard-TriFinder der Triangulation durch Aufruf von
Triangulation.get_trifinderverwendet.- dzTupel aus Array-ähnlichen Objekten (dzdx, dzdy), optional
Nur verwendet, wenn *kind* = 'user'. In diesem Fall muss *dz* als (dzdx, dzdy) angegeben werden, wobei dzdx, dzdy Arrays mit der gleichen Form wie *z* sind und die ersten Ableitungen des Interpolanten an den *triangulation*-Punkten darstellen.
- triangulation
Methoden
`__call__` (x, y)
(Gibt interpolierte Werte an den (x, y)-Punkten zurück.)
`gradient` (x, y)
(Gibt interpolierte Ableitungen an den (x, y)-Punkten zurück.)
Anmerkungen
Diese Anmerkung ist etwas technisch und beschreibt, wie die kubische Interpolation berechnet wird.
Die Interpolation basiert auf einem Clough-Tocher-Unterteilungschema des *triangulation*-Netzes (um es klarer zu machen, jedes Dreieck des Netzes wird in 3 Kind-Dreiecke unterteilt und auf jedem Kind-Dreieck ist die interpolierte Funktion ein kubisches Polynom der 2 Koordinaten). Diese Technik stammt aus der FEM-Analyse (Finite-Elemente-Methode); das verwendete Element ist ein reduziertes Hsieh-Clough-Tocher (HCT)-Element. Seine Formfunktionen sind in [1] beschrieben. Die zusammengefügte Funktion ist garantiert C1-glatt, d.h. sie ist stetig und ihre ersten Ableitungen sind ebenfalls stetig (dies lässt sich leicht innerhalb der Dreiecke zeigen, ist aber auch beim Überqueren der Kanten der Fall).
Im Standardfall (*kind* = 'min_E') werden die Ableitungen an jedem Knoten so berechnet, dass sie eine Krümmungsenergie im Funktionsraum minimieren, der von den HCT-Element-Formfunktionen erzeugt wird – mit auferlegten Werten, aber beliebigen Ableitungen an jedem Knoten. Die minimierte Funktion ist das Integral der sogenannten Gesamtkrümmung (Implementierung basiert auf einem Algorithmus aus [2] - PCG Sparse Solver)
\[E(z) = \frac{1}{2} \int_{\Omega} \left( \left( \frac{\partial^2{z}}{\partial{x}^2} \right)^2 + \left( \frac{\partial^2{z}}{\partial{y}^2} \right)^2 + 2\left( \frac{\partial^2{z}}{\partial{y}\partial{x}} \right)^2 \right) dx\,dy\]Wenn der Fall *kind* = 'geom' vom Benutzer gewählt wird, wird eine einfache geometrische Näherung verwendet (gewichteter Durchschnitt der Dreiecksnormale), was auf sehr großen Gittern zu einer Verbesserung der Geschwindigkeit führen kann.
Referenzen
[1]Michel Bernadou, Kamal Hassan, "Basisfunktionen für allgemeine Hsieh-Clough-Tocher-Dreiecke, vollständig oder reduziert.", International Journal for Numerical Methods in Engineering, 17(5):784 - 789. 2.01.
[2]C.T. Kelley, "Iterative Methods for Optimization".
- gradient(x, y)[Quelle]#
Gibt eine Liste von 2 Maskenarrays zurück, die interpolierte Ableitungen an den angegebenen (x, y)-Punkten enthalten.
- Parameter:
- x, yarray-ähnlich
x- und y-Koordinaten gleicher Form und beliebiger Dimensionalität.
- Gibt zurück:
- dzdx, dzdynp.ma.array
2 Maskenarrays mit der gleichen Form wie *x* und *y*; Werte, die zu (x, y)-Punkten außerhalb der Triangulation gehören, sind maskiert. Das erste zurückgegebene Array enthält die Werte von \(\frac{\partial z}{\partial x}\) und das zweite die Werte von \(\frac{\partial z}{\partial y}\).
- class matplotlib.tri.TriRefiner(triangulation)[Quelle]#
Abstrakte Basisklasse für Klassen, die die Netzverfeinerung implementieren.
Ein TriRefiner kapselt ein Triangulationsobjekt und bietet Werkzeuge zur Netzverfeinerung und Interpolation.
Abgeleitete Klassen müssen implementieren
refine_triangulation(return_tri_index=False, **kwargs), wobei die optionalen Schlüsselwort-Argumente *kwargs* in jeder konkreten TriRefiner-Implementierung definiert sind und was zurückgibteine verfeinerte Triangulation,
optional (abhängig von *return_tri_index*), für jeden Punkt der verfeinerten Triangulation: den Index des ursprünglichen Triangulationsdreiecks, zu dem er gehört.
refine_field(z, triinterpolator=None, **kwargs), wobeiz ein Array von Feldwerten (zu verfeinern), das an den Knoten der Basis-Triangulation definiert ist,
triinterpolator ein optionaler
TriInterpolatorist,die anderen optionalen Schlüsselwort-Argumente *kwargs* in jeder konkreten TriRefiner-Implementierung definiert sind;
und was zurückgibt (als Tupel) ein verfeinertes Dreiecksnetz und die interpolierten Werte des Feldes an den Knoten der verfeinerten Triangulation.
- class matplotlib.tri.UniformTriRefiner(triangulation)[Quelle]#
Bases:
TriRefinerGleichmäßige Netzverfeinerung durch rekursive Unterteilungen.
- Parameter:
- triangulation
Triangulation Die gekapselte Triangulation (zu verfeinern)
- triangulation
- refine_field(z, triinterpolator=None, subdiv=3)[Quelle]#
Verfeinert ein Feld, das auf den gekapselten Triangulationsknoten definiert ist.
- Parameter:
- z(npoints,) array-ähnlich
Werte des zu verfeinernden Feldes, die an den Knoten der gekapselten Triangulation definiert sind. (*n_points* ist die Anzahl der Punkte in der ursprünglichen Triangulation)
- triinterpolator
TriInterpolator, optional Interpolator, der für die Feldinterpolation verwendet wird. Wenn nicht angegeben, wird ein
CubicTriInterpolatorverwendet.- subdivint, Standard: 3
Rekursionsstufe für die Unterteilung. Jedes Dreieck wird in
4**subdivKind-Dreiecke unterteilt.
- Gibt zurück:
- refi_tri
Triangulation Die zurückgegebene verfeinerte Triangulation.
- refi_z1D-Array der Länge: *refi_tri* Knotenanzahl.
Das zurückgegebene interpolierte Feld (an den *refi_tri*-Knoten).
- refi_tri
- refine_triangulation(return_tri_index=False, subdiv=3)[Quelle]#
Berechnet eine gleichmäßig verfeinerte Triangulation *refi_triangulation* der gekapselten
triangulation.Diese Funktion verfeinert die gekapselte Triangulation, indem sie jedes Eltern-Dreieck in 4 Kind-Unterdreiecke unterteilt, die auf den Mittelpunkten der Kanten basieren, und dies *subdiv*-mal wiederholt. Am Ende wird jedes Dreieck in
4**subdivKind-Dreiecke unterteilt.- Parameter:
- return_tri_indexbool, Standard: False
Gibt an, ob eine Indextabelle zurückgegeben wird, die den Index des Vaterdreiecks für jeden Punkt angibt.
- subdivint, Standard: 3
Rekursionsstufe für die Unterteilung. Jedes Dreieck wird in
4**subdivKind-Dreiecke unterteilt; daher führt die Standardeinstellung zu 64 verfeinerten Unterdreiecken für jedes Dreieck der ursprünglichen Triangulation.
- Gibt zurück:
- refi_triangulation
Triangulation Die verfeinerte Triangulation.
- found_indexint array
Index der ursprünglichen Triangulation, die das Dreieck enthält, für jeden Punkt von *refi_triangulation*. Wird nur zurückgegeben, wenn *return_tri_index* auf True gesetzt ist.
- refi_triangulation
- class matplotlib.tri.TriAnalyzer(triangulation)[Quelle]#
Definiert grundlegende Werkzeuge für die Analyse und Verbesserung von Dreiecksgittern.
Ein TriAnalyzer kapselt ein
Triangulation-Objekt und bietet grundlegende Werkzeuge für die Gitteranalyse und -verbesserung.- Parameter:
- triangulation
Triangulation Die eingekapselte Triangulation zur Analyse.
- triangulation
- Attribute:
scale_factorsFaktoren zur Skalierung der Triangulation in ein Einheitsquadrat.
- circle_ratios(rescale=True)[Quelle]#
Gibt ein Maß für die Flachheit der Dreiecke der Triangulation zurück.
Das Verhältnis des Radius des Inkreises zum Radius des Umkreises ist ein weit verbreitter Indikator für die Flachheit eines Dreiecks. Es ist immer
<= 0.5und== 0.5nur für gleichseitige Dreiecke. Kreisverhältnisse unter 0,01 bezeichnen sehr flache Dreiecke.Um unbillig niedrige Werte aufgrund von Skalierungsunterschieden zwischen den beiden Achsen zu vermeiden, kann das Dreiecksgitter zuerst skaliert werden, um in ein Einheitsquadrat mit
scale_factorszu passen (nur wenn rescale True ist, was sein Standardwert ist).- Parameter:
- rescalebool, Standard: True
Wenn True, intern skalieren (basierend auf
scale_factors), so dass die (unmaskierten) Dreiecke genau in ein Einheitsgitter passen.
- Gibt zurück:
- maskiertes Array
Verhältnis des Inkreisradius zum Umkreisradius für jedes 'reskalierte' Dreieck der eingekapselten Triangulation. Werte, die maskierten Dreiecken entsprechen, werden maskiert.
- get_flat_tri_mask(min_circle_ratio=0.01, rescale=True)[Quelle]#
Entfernt übermäßig flache Randdreiecke aus der Triangulation.
Gibt eine Maske new_mask zurück, die es ermöglicht, die eingekapselte Triangulation von ihren Rand-flachen Dreiecken (gemäß ihren
circle_ratios()) zu bereinigen. Diese Maske soll anschließend mitTriangulation.set_maskauf die Triangulation angewendet werden. new_mask ist eine Erweiterung der ursprünglichen Triangulationsmaske in dem Sinne, dass ein ursprünglich maskiertes Dreieck maskiert bleibt.Das new_mask-Array wird rekursiv berechnet; in jedem Schritt werden flache Dreiecke nur entfernt, wenn sie eine Seite mit dem aktuellen Gitterrand teilen. Dadurch werden keine neuen Löcher im triangulierten Gebiet erzeugt.
- Parameter:
- min_circle_ratiofloat, Standard: 0.01
Randdreiecke mit dem Verhältnis der Radien von Inkreis und Umkreis r/R werden entfernt, wenn r/R < min_circle_ratio.
- rescalebool, Standard: True
Wenn True, wird zunächst intern skaliert (basierend auf
scale_factors), so dass die (unmaskierten) Dreiecke genau in ein Einheitsquadrat passen. Diese Skalierung berücksichtigt den möglicherweise vorhandenen Unterschied in der Skalierung zwischen den beiden Achsen.
- Gibt zurück:
- Array von bool
Maske zum Anwenden auf die eingekapselte Triangulation. Alle ursprünglich maskierten Dreiecke bleiben in new_mask maskiert.
Anmerkungen
Die Begründung für diese Funktion ist, dass eine Delaunay-Triangulation – eines unstrukturierten Punktesatzes – manchmal fast flache Dreiecke am Rand enthält, was zu Artefakten in Diagrammen (insbesondere bei hochauflösenden Konturen) führt. Mit der berechneten new_mask maskiert, würde die eingekapselte Triangulation keine unmaskierten Randdreiecke mehr mit einem Kreisverhältnis unter min_circle_ratio enthalten, wodurch die Gitterqualität für nachfolgende Diagramme oder Interpolationen verbessert wird.
- property scale_factors#
Faktoren zur Skalierung der Triangulation in ein Einheitsquadrat.
- Gibt zurück:
- (float, float)
Skalierungsfaktoren (kx, ky), so dass die Triangulation
[triangulation.x * kx, triangulation.y * ky]genau in ein Einheitsquadrat passt.