Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Koordinatensystem addieren. (https://www.delphipraxis.net/203766-koordinatensystem-addieren.html)

juniorA 21. Mär 2020 10:07

Koordinatensystem addieren.
 
Suche eine Funktion, mit der man Koordinatensysteme addieren kann. Das Koordinatensystem ist jeweils durch einen Punkt(x, y, z) und zwei V1(x, x, z) und V2(x , y, z). Die Vektoren stehen immer rechtwinklig zueinander.
Kann mich noch schwach daran erinnern, dass da etwas mit Matrizen ging. Stehe da aktuelle etwas auf dem Schlauch.

Andreas13 21. Mär 2020 10:53

AW: Koordinatensystem addieren.
 
Hallo juniorA,
im rechtwinkligen Koordinatensystem muß Du einfach die jeweiligen Koordinaten vorzeichengerecht summieren.
Also beim addieren Deiner drei Punkte P1(x1, y1, z1), V1(x2, x2, z2) und V2(x3 , y3, z3) erhältst Du den neuen Punkt N so:

N(x1+x2+x3, y1+y2+y3, z1+z2+z3)
Gruß, Andreas

Der schöne Günther 21. Mär 2020 11:02

AW: Koordinatensystem addieren.
 
Ein Vektor oder ein Punkt liegt in einem Bezugssystem. Wie willst du Koordinatensysteme addieren? Ich glaube du meinst die Definition eines 2D-Koordinatensystems, das sich durch einen Punkt und zwei Vektoren definieren lässt.


PS: Wenn du im Delphi mit Vektoren rechnen willst gibt es das schon fertig in der Unit
Delphi-Quellcode:
System.Math.Vectors
:

Delphi-Quellcode:
uses System.Math.Vectors;

var
  a, b, c: TVector;
begin
  a := TVector.Create(12.0, 3.5);
  b := TVector.Create(1.0, 1.0);

  c := a + b;
end.

juniorA 21. Mär 2020 14:31

AW: Koordinatensystem addieren.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die Hilfe aber leider noch nicht am Ziel.
Ich habe mal das Problem versucht in einer Skizze dargestellt.
Ich habe einen Körper der ein eigenes Koordinatensystem besitzt. Das Koordinatensystem des Körpers wird durch den Punkt U1 und 2 Vektoren V11 und V12 beschrieben. Die Werte von U1, V11, V12 sind bekannt und beziehen sich auf den Ursprung des Gesamtsystems. In diesen Körper befindet sich einen Öffnung. Die Öffnung wird durch ein eigenen Koordinatensystem beschrieben. Dieses setzt sich aus den Punkt U2 und 2 Vektoren V21, V22 zusammen. Die Werte von U2, V21 und V22 sind ebenfalls bekannt und beziehen sich auf das Koordinatensystem vom Körper. Was ich suche ist Summe der beiden Koordinatensystem mit U3, V31 und V32.
Benötige tue ich dieses resultierendes Koordinatensystem um im Anschluss, die Lage von P1 P1 bis Pn, bezogen auf das Gesamtsystem errechnen kann. Von P1 bis Pn ist mit XYZ bekannt aber leider nur bezogen auf das Koordinatensystem der Öffnung.

Andreas13 21. Mär 2020 19:46

AW: Koordinatensystem addieren.
 
Ich fasse Deine Aufgabenstellung mal mit meinen Worten zusammen:
Das eigene Koordinatensystem des Körpers K2 soll in das Koordinatensystem des Körpers K1 umgerechnet werden, damit alle Operationen in einem einheitlichen Koordinatensystem erfolgen können.
Das nennt man Koordinaten-Transformation. Laut Deiner Zeichnung handelt es sich lediglich um eine einfache Parallelverschiebung des Koordinatensystems (Translation) ohne Drehung.

Das läßt sich erst dann realisieren, wenn der Abstand zwischen den beiden Koordinatenursprüngen U1 und U2 bekannt ist. Hierbei mußt Du auch auf das Vorzeichen der Koordinaten achten! Für die Umrechnung gilt: verschoben wird immer das Koordinatensystem, NICHT das Objekt. Die zu transformierenden x-, y- und z - Koordinaten von Körper 2 lassen sich z.B. mit folgender Routine umrechnen:

Delphi-Quellcode:
Procedure Get_Punkt_Neu(CONST x, y, z,
                        Ursprung_Neu_Delta_X,
                        Ursprung_Neu_Delta_Y,
                        Ursprung_Neu_Delta_Z: Extended;
               VAR X_trans, Y_trans, Z_trans: Extended);
// Parallelverschiebung eines kartesischen Koordinatensystems
// _trans = Translation

Begin
  // verschoben wird immer das Koordinatensystem, NICHT das Objekt!!
  X_trans:= x - Ursprung_Neu_Delta_X;
  Y_trans:= y - Ursprung_Neu_Delta_Y;
  Z_trans:= z - Ursprung_Neu_Delta_Z;
End;
Viel Erfolg!
Gruß, Andreas
PS: Das ist nichts anderes als eine Vektor-Subtraktion.

Andreas13 22. Mär 2020 19:47

AW: Koordinatensystem addieren.
 
@Frühlingsrolle.
Nur ein kleiner Hinweis zu Deinen Routinen: Man darf eine Fließkommazahl wie Double, Extended nie auf Gleichheit prüfen, weil dies wider Erwartung (fast) nie zutrifft:
Delphi-Quellcode:
function TVec3.IsPerpendicular: Boolean;
...
   bRes := Scalar(FX, FY, FZ) = 0.0; // Falsch!
...
Der Grund dafür sind einerseits arithmetische Rundungsfehler in vorangegangenen Berechnungen. Darüber hinaus ist es generell nicht möglich, unendlich viele reelle Zahlen mit einer endlichen Anzahl von Bits (Double: 64 Bits; Extended: 80 Bits) darzustellen. Allein bei der binären Codierung der Dezimalzahlen entstehen daher unvermeidbare Rundungsfehler.
Man sollte daher stets einen unscharfen Fließkomma-Vergleich machen. Man kann dazu z. B. die vorhandene Math-Funktion
Delphi-Quellcode:
  Math.SameValue(Ist, Soll, Abs_Toleranz)
verwenden.
Delphi-Quellcode:
CONST
  Gleich_Toleranz = 1E-15; // für Double

function TVec3.IsPerpendicular: Boolean;
...
   bRes := SameValue(Scalar(FX, FY, FZ), 0.0, Gleich_Toleranz);
...
Empfehlenswert wäre auch die durchgängige Benutzung des Typs Extended anstelle von Double. Ich persönlich benutze für meine – zugegeben recht umfangreichen Berechnungen – oft die Multipräzisions-Arithmetik-Bibliothek von Wolfgang Ehrhardt mit 100 ... 200 Stellen (320 … 640 Bits), wo ich nach erfolgten Berechnungen die Rechenergebnisse zu Extended konvertiere.
Gruß, Andreas

himitsu 22. Mär 2020 22:27

AW: Koordinatensystem addieren.
 
Wieso sollte es schneller werden?

Gerechnet wird in der CPU mit 80 Bit (Intel/AMD), egal ob der Wert als 32 oder 64 Bit gespeichert wurde.



Einzig mit Streamingfunktionen kann es schneller werden.
SSE, MMX, SIMD, usw., wo parallel mehrere Werte gleichzeitig berechnet werden.

Oder gar sowas wie CUDA, wo man Berechnungen mit sehr vielen schnellen spezielen Prozessoren direkt in Grafikkarten berechnet werden können.


Aus diesem Grund werden auch Verschlüsselungsalgorithmen und Videokodierer/-dekodierer direkt in der CPU oder als Zusatzchip bereitgestellt werden, da die dann via Hardware schneller/optimaler/sicherer arbeiten können, als jede Softwarelösung.

Redeemer 22. Mär 2020 22:35

AW: Koordinatensystem addieren.
 
Zitat:

Zitat von juniorA (Beitrag 1460250)
Koordinatensysteme addieren

Als Mathematiker stehen mir die Haare zu Berge.
Man kann Vektoren addieren. Koordinatensysteme sind eine grafische Darstellung, die kann man nicht addieren.

juniorA 23. Mär 2020 08:27

AW: Koordinatensystem addieren.
 
Koordinatensystem Addieren. Muss gestehen der Ausdruck mag einen gestandenen Mathematiker etwas erstarren lassen. Mir ist leider nicht besseres für meine Problembeschreibung eingefallen.
Mein Problem ist jedenfalls, dass ich eine ganze Reihe von Körpern habe wo jeder immer den Vorgänger zum Bezug hat. Diese Körper liegen unterschiedlich im Raum. Jeder Körper hat sein eigenes Koordinatensystem. Was immer durch einen Ursprungspunkt und 2 Vektoren beschrieben. Da weiter die rechte Handregel gilt lässt sich so immer genau die Richtung x. y z bestimmen.
Wenn sich die Werte des Ursprungspunktes und der beiden Vektoren immer auf das Ursprungskoordinatensystem beziehen wäre alles OK, denn der letzte Körper setzt sich aus Punkten zusammen deren Koordinatenangeben sich auf das Koordinatensystem vom letzten Körper beziehen. Was ich suche ist die Lage der Punkte im Globalen Raum.
Wo ich die Sache gelöst bekommen ist, wenn ich nur ein gedrehtes Koordinatensystem habe. Wenn das System aber mehrfach gedreht und Verschoben ist, dann habe ich ein Problem. :cry:

venice2 23. Mär 2020 11:57

AW: Koordinatensystem addieren.
 
Zitat:

Zitat von Redeemer (Beitrag 1460332)
Zitat:

Zitat von juniorA (Beitrag 1460250)
Koordinatensysteme addieren

Als Mathematiker stehen mir die Haare zu Berge.
Man kann Vektoren addieren. Koordinatensysteme sind eine grafische Darstellung, die kann man nicht addieren.

Immer diese Pfennigfuchserei.
Alle verstehen was gemeint ist warum du nicht auch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz