Name
polar_trans_regionpolar_trans_regionPolarTransRegionpolar_trans_regionPolarTransRegionPolarTransRegion — Anwenden einer Polarkoordinatentransformation auf eine Region innerhalb eines
Kreisrings.
Herror polar_trans_region(const Hobject Region, Hobject* PolarTransRegion, double Row, double Column, double AngleStart, double AngleEnd, double RadiusStart, double RadiusEnd, const Hlong Width, const Hlong Height, const char* Interpolation)
Herror T_polar_trans_region(const Hobject Region, Hobject* PolarTransRegion, const Htuple Row, const Htuple Column, const Htuple AngleStart, const Htuple AngleEnd, const Htuple RadiusStart, const Htuple RadiusEnd, const Htuple Width, const Htuple Height, const Htuple Interpolation)
Herror polar_trans_region(Hobject Region, Hobject* PolarTransRegion, const HTuple& Row, const HTuple& Column, const HTuple& AngleStart, const HTuple& AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, const HTuple& Width, const HTuple& Height, const HTuple& Interpolation)
HRegion HRegion::PolarTransRegion(const HTuple& Row, const HTuple& Column, const HTuple& AngleStart, const HTuple& AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, const HTuple& Width, const HTuple& Height, const HTuple& Interpolation) const
HRegionArray HRegionArray::PolarTransRegion(const HTuple& Row, const HTuple& Column, const HTuple& AngleStart, const HTuple& AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, const HTuple& Width, const HTuple& Height, const HTuple& Interpolation) const
void PolarTransRegion(const HObject& Region, HObject* PolarTransRegion, const HTuple& Row, const HTuple& Column, const HTuple& AngleStart, const HTuple& AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, const HTuple& Width, const HTuple& Height, const HTuple& Interpolation)
HRegion HRegion::PolarTransRegion(const HTuple& Row, const HTuple& Column, double AngleStart, double AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, Hlong Width, Hlong Height, const HString& Interpolation) const
HRegion HRegion::PolarTransRegion(double Row, double Column, double AngleStart, double AngleEnd, double RadiusStart, double RadiusEnd, Hlong Width, Hlong Height, const HString& Interpolation) const
HRegion HRegion::PolarTransRegion(double Row, double Column, double AngleStart, double AngleEnd, double RadiusStart, double RadiusEnd, Hlong Width, Hlong Height, const char* Interpolation) const
void HOperatorSetX.PolarTransRegion(
[in] IHUntypedObjectX* Region, [out] IHUntypedObjectX** PolarTransRegion, [in] VARIANT Row, [in] VARIANT Column, [in] VARIANT AngleStart, [in] VARIANT AngleEnd, [in] VARIANT RadiusStart, [in] VARIANT RadiusEnd, [in] VARIANT Width, [in] VARIANT Height, [in] VARIANT Interpolation)
IHRegionX* HRegionX.PolarTransRegion(
[in] VARIANT Row, [in] VARIANT Column, [in] double AngleStart, [in] double AngleEnd, [in] VARIANT RadiusStart, [in] VARIANT RadiusEnd, [in] Hlong Width, [in] Hlong Height, [in] BSTR Interpolation)
static void HOperatorSet.PolarTransRegion(HObject region, out HObject polarTransRegion, HTuple row, HTuple column, HTuple angleStart, HTuple angleEnd, HTuple radiusStart, HTuple radiusEnd, HTuple width, HTuple height, HTuple interpolation)
HRegion HRegion.PolarTransRegion(HTuple row, HTuple column, double angleStart, double angleEnd, HTuple radiusStart, HTuple radiusEnd, int width, int height, string interpolation)
HRegion HRegion.PolarTransRegion(double row, double column, double angleStart, double angleEnd, double radiusStart, double radiusEnd, int width, int height, string interpolation)
polar_trans_regionpolar_trans_regionPolarTransRegionpolar_trans_regionPolarTransRegionPolarTransRegion transformiert eine RegionRegionRegionRegionRegionregion, die
innerhalb des durch den Mittelpunkt (RowRowRowRowRowrow, ColumnColumnColumnColumnColumncolumn),
die Radien RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart und RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd und die
Winkel AngleStartAngleStartAngleStartAngleStartAngleStartangleStart und AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd definierten
Kreisrings liegt, auf dessen Polarkoordinatendarstellung in der
Region PolarTransRegionPolarTransRegionPolarTransRegionPolarTransRegionPolarTransRegionpolarTransRegion in einem virtuellen Bild mit den
Dimensionen WidthWidthWidthWidthWidthwidth x HeightHeightHeightHeightHeightheight.
Die Polartransformation entspricht einem Wechsel des
Koordinatensystems. Anstatt durch Zeilen- und Spaltenkoordinate
wird die Position eines Punktes durch dessen Radius (Abstand zum
Mittelpunkt RowRowRowRowRowrow,ColumnColumnColumnColumnColumncolumn) und den Winkel zwischen
der Spaltenachse (durch den Mittelpunkt) und der Strecke vom
Mittelpunkt zum Punkt beschrieben. Diese Transformation ist nicht
affin.
Die Koordinate (0,0) in der Ausgabregion entspricht immer dem
Punkt in der Eingaberegion, der durch RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart und
AngleStartAngleStartAngleStartAngleStartAngleStartangleStart spezifiziert wird. Analog entspricht die
Koordinate (HeightHeightHeightHeightHeightheight-1, WidthWidthWidthWidthWidthwidth-1) immer dem Punkt
in der Eingaberegion, der durch RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd und
AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd spezifiziert wird. Im Normalfall
(AngleStartAngleStartAngleStartAngleStartAngleStartangleStart < AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd und RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart
< RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd) wird die Polarkoordinatentransformation also
in mathematisch positiver Durchlaufrichtung (entgegen dem
Uhrzeigersinn) durchgeführt. Dabei liegen die Punkte mit kleineren
Radien in der Ausgaberegion weiter oben. Durch geeignetes
Vertauschen der Werte der Parameter (z.B. AngleStartAngleStartAngleStartAngleStartAngleStartangleStart >
AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd oder RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart > RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd)
kann jede beliebige Orientierung der Ausgaberegion erreicht werden.
Die Winkel sind frei als reelle Zahlen wählbar, Mittelpunkt und
Radien können ebenfalls frei als reelle Zahlen gewählt werden. Sind
diese jedoch ganze Zahlen und entspricht die Differenz von
RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd und RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart dem Wert
HeightHeightHeightHeightHeightheight-1, so wird die Berechnung durch eine optimierte
Routine erheblich schneller durchgeführt.
Die Radien und Winkel sind inklusive, d.h. die erste Zeile des
virtuellen Zielbildes entspricht dem Kreis mit dem Radius
RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart, die letzte Zeile dem mit dem Radius
RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd. Für Vollkreise, bei denen die Differenz
AngleStartAngleStartAngleStartAngleStartAngleStartangleStart - AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd 2 * pi (360
Grad) beträgt, bedeutet dies insbesondere, dass die erste Spalte des
virtuellen Zielbildes gleich der letzten ist.
Um diesem Verhalten vorzubeugen, sollte diese Differenz 2 * pi * (1 - 1/WidthWidthWidthWidthWidthwidth)
statt 2 * pi betragen.
Über den Parameter InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation kann dabei zwischen den
Interpolationsverfahren 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear" und
'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor" gewählt werden. Die Wahl
InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear" kann insbesondere bei
Vergrößerungen zu glatteren Regionenrändern führen. Allerdings
steigt dadurch die Laufzeit signifikant an.
Werden mehrere Regionen in RegionRegionRegionRegionRegionregion übergeben, werden deren
Polartransformationen individuell berechnet und als Tupel in
PolarTransRegionPolarTransRegionPolarTransRegionPolarTransRegionPolarTransRegionpolarTransRegion abgespeichert. Dabei entsprechen die
Indizes von Ein- und Ausgaberegionen nur dann einander, wenn die
Systemvariable 'store_empty_regions'"store_empty_regions""store_empty_regions""store_empty_regions""store_empty_regions""store_empty_regions" auf 'true'"true""true""true""true""true"
gesetzt wird (siehe auch 'set_system'"set_system""set_system""set_system""set_system""set_system"). Sonst werden leere
Regionen nicht zurückgegeben und deshalb entspricht die Länge des
Ausgabetupels PolarTransRegionPolarTransRegionPolarTransRegionPolarTransRegionPolarTransRegionpolarTransRegion im Allgemeinen nicht der
Länge des Eingabetupels RegionRegionRegionRegionRegionregion.
Werden die Dimensionen des virtuellen Ausgabebildes WidthWidthWidthWidthWidthwidth
und HeightHeightHeightHeightHeightheight größer als die Dimensionen des aktuellen Bildes
gewählt, sollte die Systemvariable 'clip_region'"clip_region""clip_region""clip_region""clip_region""clip_region" auf
'false'"false""false""false""false""false" gesetzt werden (siehe auch
set_systemset_systemSetSystemset_systemSetSystemSetSystem). Andernfalls kann eine Ausgaberegion, die nicht
innerhalb der Dimensionen des aktuellen Bildes liegt, zu einer
Fehlermeldung führen.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
- Automatisch parallelisiert auf interner Datenebene.
RowRowRowRowRowrow (input_control) number → HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)
Zeilenkoordinate des Kreismittelpunktes.
Defaultwert: 256
Wertevorschläge: 0, 16, 32, 64, 128, 240, 256, 480, 512
Typischer Wertebereich: 0
≤
Row
Row
Row
Row
Row
row
≤
32767
Restriktion: Row >= -131068 && Row <= 131068
Spaltenkoordinate des Kreismittelpunktes.
Defaultwert: 256
Wertevorschläge: 0, 16, 32, 64, 128, 256, 320, 512, 640
Typischer Wertebereich: 0
≤
Column
Column
Column
Column
Column
column
≤
32767
Restriktion: Column >= -131068 && Column <= 131068
Kreisradius, der auf die Zeilenkoordinate
HeightHeightHeightHeightHeightheight-1 abgebildet wird.
Defaultwert: 100
Wertevorschläge: 0, 16, 32, 64, 100, 128, 256, 512
Typischer Wertebereich: 0
≤
RadiusEnd
RadiusEnd
RadiusEnd
RadiusEnd
RadiusEnd
radiusEnd
≤
32767
Breite des virtuellen Zielbildes.
Defaultwert: 512
Wertevorschläge: 256, 320, 512, 640, 800, 1024
Typischer Wertebereich: 2
≤
Width
Width
Width
Width
Width
width
≤
32767
Höhe des virtuellen Zielbildes.
Defaultwert: 512
Wertevorschläge: 240, 256, 480, 512, 600, 1024
Typischer Wertebereich: 2
≤
Height
Height
Height
Height
Height
height
≤
32767
Interpolationsverfahren für die Transformation.
Defaultwert:
'nearest_neighbor'
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
Werteliste: 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear", 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor"
polar_trans_image_extpolar_trans_image_extPolarTransImageExtpolar_trans_image_extPolarTransImageExtPolarTransImageExt,
polar_trans_image_invpolar_trans_image_invPolarTransImageInvpolar_trans_image_invPolarTransImageInvPolarTransImageInv,
polar_trans_region_invpolar_trans_region_invPolarTransRegionInvpolar_trans_region_invPolarTransRegionInvPolarTransRegionInv,
polar_trans_contour_xldpolar_trans_contour_xldPolarTransContourXldpolar_trans_contour_xldPolarTransContourXldPolarTransContourXld,
polar_trans_contour_xld_invpolar_trans_contour_xld_invPolarTransContourXldInvpolar_trans_contour_xld_invPolarTransContourXldInvPolarTransContourXldInv
Foundation