Aktuelle Zeit: 26.08.2019 10:18:19

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mathe-Problem
BeitragVerfasst: 10.02.2019 12:43:59 
Offline
Administrator
Benutzeravatar

Registriert: 04.07.2002
Beiträge: 28864
Wohnort: Braunschweig
Bei der ZusiDisplay-Integration tauchte jetzt ein mathematisches Problem auf, das mit etwas Kopfzerbrechen bereitet. Vielleicht hat ja jemand einen Geistesblitz.
Für das irgendwie schief im Raum stehende Viereck des Displays im Führerstand kann man nicht einfach 2 Dreiecke nehmen, sondern braucht ein etwas feineres Gitter. Es geht um die Berechnung der Gitterkoordinaten und umgekehrt darum, einen Mausklick in ZusiDisplay-Koordinaten zurückzurechnen, damit ZusiDisplay weiß, wo man hingeklickt hat.

Also in allgemeiner Form sowas wie die Transformation im folgenden Bild, etwas herausgehoben das Display-Viereck im u/v-System.

So eine Transformation machen die Gleichungen 1 und 2. Wenn ich die Parameter a und b bestimmt habe, liefert mir die Gleichung also zu einem Mausklick im x/y-System die u/v-Koordinaten, die ZusiDisplay braucht.

Zu Berechnung der Koordinaten des Meshes hab ich die Formeln 1und 2 nach x und y aufgelöst.

Bild

Das Ganze funktioniert einwandfrei in beide Richtungen, solange das Viereck irgendwie schief ist.

Baut man es aber schön rechtwinklig ein, kollabiert die Formel. Man sieht es gut am trivialen Fall, dass beide Systeme identisch sind, also x=u und y=v.
Es ergeben sich a1=1 und b2=1 und der die restlichen Parameter zu 0.

Geht man damit in die Gleichungen für x und y, ist der Nenner jeweils 0, der Zähler auch. Richtig wäre aber das Ergebnis x=u und y=v.

Nun liegt hier ganz augenscheinlich keine Singularität oder eine entartete Geometrie oder irgendsowas vor, wo man das erwarten würde. Dieses mathematische Verhalten erscheint mir sehr ungewöhnlich, wenn die "schwierigeren Fälle" durchlaufen, dann bekommt man die einfachen Fälle ja normalerweise "kostenlos dazu". Ich sehe auch keinen Ansatz, die Formeln so umzustellen, dass keine oder andere Nenner vorkommen. Hat jemand eine Idee, wo hier was schief läuft?

Carsten


Nach oben
 Profil Website besuchen  
 
 Betreff des Beitrags: Re: Mathe-Problem
BeitragVerfasst: 10.02.2019 13:56:01 
Offline

Registriert: 02.01.2016
Beiträge: 133
Sowas müsste sich mit einer Transformationsmatrix lösen lassen, ist bei DirectX eventuell sogar dabei? Uni ist schon eine Weile her, da müsste ich mich wieder einarbeiten, aber eine schnelle Suche hat folgendes ergeben: https://math.stackexchange.com/questions/296794/finding-the-transform-matrix-from-4-projected-points-with-javascript

Gernot


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mathe-Problem
BeitragVerfasst: 10.02.2019 14:02:46 
Offline
Benutzeravatar

Registriert: 14.03.2009
Beiträge: 2249
Aktuelle Projekte: Zusitools (http://git.io/zusitools)
Mir ist noch nicht ganz klar, wie beim Aufloesen der Gleichungen vorgegangen wurde. Wenn ich durch 2(a_3b_1-a_1b_3) teile, muss ich ja eine Fallunterscheidung machen und fuer den Fall, dass der Nenner 0 ist, die Gleichung irgendwie anders loesen. Oben ist halt nur der Fall a_3b_1 != a_1b_3 abgehandelt.

Wenn ich die Gleichungen in Wolfram Alpha kippe, kommen neben der gezeigten Loesung (mit entsprechenden Bedingungen) auch noch eine ganze Menge andere raus: https://www.wolframalpha.com/input/?i=solve+%7Bu%3Da_1*x%2Ba_2*y%2Ba_3*x*y%2Bd,v%3Db_1*x%2Bb_2*y%2Bb_3*x*y%2Bh%7D+for+x,+y Das sieht aus wie eine Hoelle von Fallunterscheidungen.

Zusi kann doch nicht das erste Programm sein, das diese Problemstellung zu loesen hat. Ich schlage vor, eine bereits existierende Loesung zu suchen und diese zu implementieren. Startpunkte:
- https://www.geometrictools.com/Document ... ppings.pdf
- http://reedbeta.com/blog/quadrilateral- ... on-part-1/


Zuletzt geändert von Johannes am 10.02.2019 14:08:51, insgesamt 3-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mathe-Problem
BeitragVerfasst: 10.02.2019 19:01:55 
Offline
Administrator
Benutzeravatar

Registriert: 04.07.2002
Beiträge: 28864
Wohnort: Braunschweig
Man kann es auch durch Interpolieren der Eckpunkte lösen.
Mich wundert das nur und bevor ich es neu programmiere, wollt ich mal sehen, ob jemandem was auffällt.

Es gibt 2 Lösungen für die Lösung des Gleichungssystems. Mehr dürfen es auch nicht sein. Beide haben den gleichen Nenner.

Carsten


Nach oben
 Profil Website besuchen  
 
 Betreff des Beitrags: Re: Mathe-Problem
BeitragVerfasst: 11.02.2019 00:26:53 
Offline
Benutzeravatar

Registriert: 24.10.2011
Beiträge: 3246
Rein oberflächlich betrachtet würde ich jetzt erwarten, dass der Zähler auch 0 wird, und man womöglich sogar LH drauf werfen kann. Das klappt (unter der Kollabierungs-Vorraussetzung a3=b3=0) aber nur, wenn a2b1-a1b2<=0. Unter der Voraussetzung, dass das vermutlich keine normale Wurzel, sondern eine +/--Wurzel ist, könnte man sich das mal näher anschauen. Aber im Endeffekt wird das auf das selbe hinauslaufen, was Johannes schon gesagt hat. Vermutete Ursache: Die der Wurzel zugrunde liegende quadratische Formel muss für den Fall, dass der a-Faktor (also der vor dem x^2) null ist, ja anders aufgelöst werden.

Edit: Das ist jetzt umnachtet, also wenn ich Mist geschrieben habe, lösche ich es wieder: Ich vermute mal, dass die Formel aus der Auflösung eine quadratischen Gleichung kommt. In dem Fall wäre bei a2b1-a1b2 ein Vorzeichenfehler, das dürfte nicht von den restlichen Vorzeichen abweichen, aber sei's drum. In dem Fall wäre ein Schritt vor dem Endergebnis folgendes Zwischenergebnis:
ax^2 + bx + c = 0 mit
a = (a3b1-a1b3)
b = -a2b1 + a1b2 + a4b3 - a3b4 - b3u + a3v
c = a2b4 - a4b2 -a2v + b2u (hm, bei dir stehen hier 1er anstatt 2er... hm, egal...)
Deine Lösungsformeln wären jetzt x=(-b + sqrt(b^2+4ac) ) / 2a. Das gilt aber nur wenn a ungleich 0.

Für a = 0 könnte x durch x=-c/b bestimmt werden, wenn b ungleich 0. Rein abgeschätzt dürfte der Fall b = 0 eine Vernichtung einer Achse mit sich bringen und damit irrelevant sein, und immer wahr sein, wenn c = 0, ansonsten immer falsch.

_________________
Diese Signatur möchte folgendes bekannter machen: ZusiWiki: Führerstände · ZusiWiki: Fahrzeugprojekte · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat


Zuletzt geändert von F. Schn. am 11.02.2019 01:08:40, insgesamt 5-mal geändert.

Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.024s | 16 Queries | GZIP : Off ]