Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Berechnung von baryzentrischen Koordinaten bzw. 3D Ebene? (https://www.delphipraxis.net/103315-berechnung-von-baryzentrischen-koordinaten-bzw-3d-ebene.html)

christian.noeding 14. Nov 2007 10:09


Berechnung von baryzentrischen Koordinaten bzw. 3D Ebene?
 
Hallo Leute,


ich sitze an einem kniffligen Problem und habe bereits einen Post in einem Matheforum hinterlegt, jedoch konnte man mir dort nur einen kleinen Tipp geben. Vielleicht ist hier ja jemand, der bei einem 3D-Spiel schonmal mit dem folgenden Problem konfrontiert wurde. Also:

Der Hintergrund:
Seit etlichen Monaten beschäftige ich mich mit dem Thema Beleuchtungstechnik und programmiere derzeit an einer Open-Source-Lichtsteuersoftware (http://www.pcdimmer.de) und arbeite zudem an einer weiteren Freeware-Software (http://www.dmxcontrol.de) mit. Nun gibt es in der Beleuchtungstechnik ja Bewegtscheinwerfer, sog. "Scanner" oder "Moving-Heads", die einen Lichtstrahl mit Hilfe von Spiegeln oder auf andere Weise ablenken können. Dies ist nach Oben/Unten und Rechts/Links möglich.

Die Scanner können über zwei Signale zwischen 0 und 255 angesteuert werden. Wobei 128 die Mittelstellung bedeutet (ist aber für das Folgende uninteressant)

Das Problem:
Nehmen wir mal an, ich habe zwei Scanner an einer Bühne oben Links und oben Rechts symmetrisch aufgehängt. Möchte ich nun beide Scanner auf den gleichen Punkt einstellen, müssen beide ja verschieden Rechts-/Links-Positionen einnehmen. Kann man auf einfache Weise dies in eine Formel packen, sodass ich eine automatische Ausgleichsfunktion in mein Programm integrieren kann? Ich habe selber schon einmal versucht, über Formeln für Ebenenberechnung auf eine Lösung zu kommen, aber entweder mein Leistungskurswissen ist dermaßen eingerostet, oder es ist wirklich etwas komplexer ;-)

Warum das ganze?:
Man hat bei der Steuerung z.B. einen Joystick, mit dem man den Schnittpunkt beider Scanner steuern möchte. Somit wäre innerhalb der Bewegungsmöglichkeiten beider Scanner ein heller Punkt und symmetrische Lichtkegelfahrten möglich. Wie gesagt, ich verdiehne mit dem Programm kein Geld, sondern biete es Open-Source an. Ich hoffe, dass mir jemand ein paar Tipps geben kann - diese Funktion besitzen nämlich sonst nur sehr hochwertige Programme.


Mein bisheriger Lösungsansatz:
Man hat bei dem Scanner ein normales X-/Y-Koordinatensystem (kartesisch). X- und Y- Achse haben je einen Wert von 0 bis 255. Nun wollte ich mit fünf (oder mehr) Kalibrierpunkten auf der Bühne mir ein virtuelles Koordinatensystem für jeden einzelnen Scanner einrichten und anhand dieser Koordinatensysteme die Korrekturwerte für jeden Scanner einzeln berechnen (bzw. wenn ein Scanner der "Master"-Scanner wäre für den anderen die Korrekturwerte). Leider bin ich nicht weiter gekommen, da mir der nächste Gedanke fehlt.


Zur Verdeutlichung eine kleine Grafik:

http://home.arcor.de/christian.noedi...nerproblem.gif



Im Grunde benötige ich einfach eine Funktion, die mir mein Koordinatensystem in ein anderes, von vier Punkten aufgespanntes Koordinatensystem transformiert (siehe Grafik). somit könnte ich gleichzeitig die Bewegungsmöglichkeiten einschränken und die Positionsunterschiede kompensieren.

http://home.arcor.de/christian.noedi...erproblem2.gif



Im Matheforum kam nun der Hinweis, diese Problematik mit Transformation der Punktkoordinaten in baryzentrische Koordinaten anzugehen. Hat hier vielleicht schon jemand mit Delphi (oder mit C, Java, egal) z.B. bei einem 3D-Spiel mit sowas gearbeitet und kann mir eventuell Tipps geben? Ich betone nochmal: das ganze ist OpenSource, ich bekomme dafür kein Geld. Allerdings lässt sich über eine namentliche Erwähnung in der Software sprechen, wenn jemand einen brauchbaren Tipp spendieren kann *g*


vielen vielen Dank,
Christian :)

christian.noeding 15. Nov 2007 17:24

Re: Berechnung von baryzentrischen Koordinaten bzw. 3D Ebene
 
Liste der Anhänge anzeigen (Anzahl: 1)
Problem gelöst dank einem Matheforum und viel Gooooooglen.

Die Lösung hieß nicht baryzentrisches Koordinatensystem (hat für Dreiecke aber super funktioniert), sondern bilineare Interpolation.


Im Anhang habe ich ein Testprogramm für beide Algorithmen angehängt. Bin sehr zufrieden.



Schönen Abend noch,
Christian :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.

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