angle_llangle_llAngleLlAngleLl (Operator)
Name
angle_llangle_llAngleLlAngleLl
— Berechnen des Winkels zwischen zwei Geraden.
Signatur
Herror angle_ll(double RowA1, double ColumnA1, double RowA2, double ColumnA2, double RowB1, double ColumnB1, double RowB2, double ColumnB2, double* Angle)
Herror T_angle_ll(const Htuple RowA1, const Htuple ColumnA1, const Htuple RowA2, const Htuple ColumnA2, const Htuple RowB1, const Htuple ColumnB1, const Htuple RowB2, const Htuple ColumnB2, Htuple* Angle)
void AngleLl(const HTuple& RowA1, const HTuple& ColumnA1, const HTuple& RowA2, const HTuple& ColumnA2, const HTuple& RowB1, const HTuple& ColumnB1, const HTuple& RowB2, const HTuple& ColumnB2, HTuple* Angle)
static HTuple HMisc::AngleLl(const HTuple& RowA1, const HTuple& ColumnA1, const HTuple& RowA2, const HTuple& ColumnA2, const HTuple& RowB1, const HTuple& ColumnB1, const HTuple& RowB2, const HTuple& ColumnB2)
static double HMisc::AngleLl(double RowA1, double ColumnA1, double RowA2, double ColumnA2, double RowB1, double ColumnB1, double RowB2, double ColumnB2)
static void HOperatorSet.AngleLl(HTuple rowA1, HTuple columnA1, HTuple rowA2, HTuple columnA2, HTuple rowB1, HTuple columnB1, HTuple rowB2, HTuple columnB2, out HTuple angle)
static HTuple HMisc.AngleLl(HTuple rowA1, HTuple columnA1, HTuple rowA2, HTuple columnA2, HTuple rowB1, HTuple columnB1, HTuple rowB2, HTuple columnB2)
static double HMisc.AngleLl(double rowA1, double columnA1, double rowA2, double columnA2, double rowB1, double columnB1, double rowB2, double columnB2)
Beschreibung
angle_llangle_llAngleLlAngleLlAngleLl
berechnet den Winkel zwischen zwei Geraden.
Als Eingabe werden die Koordinaten von zwei Punkten der ersten Geraden
(RowA1RowA1RowA1RowA1rowA1
,ColumnA1ColumnA1ColumnA1ColumnA1columnA1
,
RowA2RowA2RowA2RowA2rowA2
,ColumnA2ColumnA2ColumnA2ColumnA2columnA2
) und der zweiten Geraden
(RowB1RowB1RowB1RowB1rowB1
,ColumnB1ColumnB1ColumnB1ColumnB1columnB1
,
RowB2RowB2RowB2RowB2rowB2
,ColumnB2ColumnB2ColumnB2ColumnB2columnB2
) erwartet.
Die Berechnung des Winkels geschieht wie folgt: Man interpretiert
die beiden Geraden als Vektoren, wobei
RowA1RowA1RowA1RowA1rowA1
,ColumnA1ColumnA1ColumnA1ColumnA1columnA1
bzw.
RowB1RowB1RowB1RowB1rowB1
,ColumnB1ColumnB1ColumnB1ColumnB1columnB1
die Startpunkte und
RowA2RowA2RowA2RowA2rowA2
,ColumnA2ColumnA2ColumnA2ColumnA2columnA2
bzw.
RowB2RowB2RowB2RowB2rowB2
,ColumnB2ColumnB2ColumnB2ColumnB2columnB2
die Endpunkte sind.
Dreht man nun den Vektor A gegen den Uhrzeigersinn auf den
Vektor B (der Drehpunkt ist
der Schnittpunkt der Geraden), so ist der benötigte Rotationswinkel
der gesuchte Wert.
Der Winkel ist also abhängig von der
Reihenfolge der Koordinaten und der Reihenfolge der beiden Geraden.
Das Ergebnis, d.h. der Winkel in Bogenmaß, wird im Parameter
AngleAngleAngleAngleangle
übergeben.
Die Winkel liegen im Bereich von .
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Parameter
RowA1RowA1RowA1RowA1rowA1
(input_control) point.y(-array) →
HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Zeilenkoordinate des ersten Punktes der ersten
Geraden.
ColumnA1ColumnA1ColumnA1ColumnA1columnA1
(input_control) point.x(-array) →
HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Spaltenkoordinate des ersten Punktes der ersten
Geraden.
RowA2RowA2RowA2RowA2rowA2
(input_control) point.y(-array) →
HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Zeilenkoordinate des zweiten Punktes der ersten
Geraden.
ColumnA2ColumnA2ColumnA2ColumnA2columnA2
(input_control) point.x(-array) →
HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Spaltenkoordinate des zweiten Punktes der ersten
Geraden.
RowB1RowB1RowB1RowB1rowB1
(input_control) point.y(-array) →
HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Zeilenkoordinate des ersten Punktes der zweiten
Geraden.
ColumnB1ColumnB1ColumnB1ColumnB1columnB1
(input_control) point.x(-array) →
HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Spaltenkoordinate des ersten Punktes der zweiten
Geraden.
RowB2RowB2RowB2RowB2rowB2
(input_control) point.y(-array) →
HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Zeilenkoordinate des zweiten Punktes der zweiten
Geraden.
ColumnB2ColumnB2ColumnB2ColumnB2columnB2
(input_control) point.x(-array) →
HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Spaltenkoordinate des zweiten Punktes der zweiten
Geraden.
AngleAngleAngleAngleangle
(output_control) angle.rad(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Winkel zwischen den Geraden [rad].
Beispiel (HDevelop)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
RowA1 := 255
ColumnA1 := 10
RowA2 := 255
ColumnA2 := 501
gen_contour_polygon_xld (Contour, [RowA1,RowA2], [ColumnA1,ColumnA2])
RowB1 := 255
ColumnB1 := 255
for I := 5 to 360 by 5
RowB2 := 255 - sin(rad(I)) * 200
ColumnB2 := 255 + cos(rad(I)) * 200
gen_contour_polygon_xld (Contour, [RowB1,RowB2], [ColumnB1,ColumnB2])
angle_ll (RowA1, ColumnA1, RowA2, ColumnA2,\
RowB1, ColumnB1, RowB2, ColumnB2, Angle)
AngleDeg := deg(Angle)
endfor
Ergebnis
angle_llangle_llAngleLlAngleLlAngleLl
liefert den Wert 2 (H_MSG_TRUE).
Alternativen
angle_lxangle_lxAngleLxAngleLxAngleLx
Modul
Foundation