Hallo Schwaiger,
Bevor ich auf Deine eigentliche Frage antworte - nur soviel: Wenn ich Deinen Fall richtig verstanden habe, so brauchst Du diese Berechnung gar nicht zu machen.
Es wäre doch nur natürlich, die Position der Last (der Pyramidenspitze) in 3D vorzugeben - die Z-Koordinate wäre dabei die gewünschten Höhe. Dann werden die drei notwendigen Seillängen berechnet und diese dann mit den Winden einzustellen. Sei \(p\) die Position der Last, bzw. des Schnittpunkts der drei Seile, und \(s_i\) mit \(i \in {1;2;3}\) die Positionen der Seilwinden bzw. der Punkte, wo die Seile einlaufen, so kann man jede notwendige Seillänge \(l_i\) aus einem einfachen Pythagoras berechnen:
$$l_i = \left| p - s_i\right| = \sqrt{(p - s_i)^2}$$
Wenn es technisch möglich ist, auch die Geschwindigkeit \(\dot {l_i}\) der Seilwinden zu steuern, so kann man auch kontrolliert Wege fahren:
$$\dot{ l_i } = \frac{(p - s_i) \cdot \dot{p}}{ \sqrt{(p - s_i)^2}}$$
D.h. so kann zu jedem Zeitpunkt die Seillänge und Seilgeschwindigkeit der Winden berechnet werden, um mit der Last einen beliegen Weg im Raum zu fahren. Und es ist Sache der Steuerung, dass dabei eine Maximalhöhe nicht überschritten wird.
Der Kern der ursprünglichen Frage besteht darin, von drei gegebenen Punkte \(s_i\) aus, einen Punkt \(p\) zu finden, der von jedem der drei Punkte jeweils den Abstand \(l_i\) hat. Dies ist gleichbedeutend mit dem Problem den (bzw. die) Schnittpunkte dreier Kugeln zu finden. Diese Berechnung ist ein wenig aufwendig, sonst hätte längst jemand geantwortet ;-) Ein Verfahren besteht darin, zunächst die Schnittgerade von zwei Schnittebenen jeweils eines Kugelpaars zu bestimmen und dann die beiden Schnittpunkte dieser Geraden mit einer der Kugeln zu berechnen. Eine Kugelgleichung der \(i\)'ten Kugel mit Mittelpunkt \(m_i=s_i\) und Radius \(R_i=l_i\) sieht so aus:
$$| x - m_i| = R_i$$
und weil diese Betragsbildung wegen der Wurzelfunktion immer ein wenig lästig ist, quadriert man das ganze
$$(x - m_i)^2 = {R_i}^2$$
und um das Quadrat loszuwerden, zieht man nun die Gleichungen zweier Kugeln \(i\) und \(j\) von einander ab. man erhält
$$(x - m_i)^2 - (x - m_j)^2= {R_i}^2 - {R_j}^2$$
$$ -2x(m_i - m_j) = {R_i}^2 - {R_j}^2- ({m_i}^2 -{m_j}^2)$$
das ist eine Ebenengleichung in der Normalenform. Existiert ein Punkt \(x\), der beide Kugelgleichungen erfüllt, und somit auf dem Schnittkreis liegt, so erfüllt er auch diese Ebenengleichung. Daraus folgt, dass diese Ebene die Ebene ist, in der der Schnittkreis der beiden Kugeln \(i\) und \(j\) liegt - falls(!) dieser existiert. Dasselbe macht man nun für ein zweites Paar \(j\) und \(k\) und erhält die zweite Ebene. Anschließend wird die Schnittgerade der beiden Ebenen berechnet. Den Richtungsvektor \(d\) der Geraden bekommt man aus dem Kreuzprodukt der beiden Normalenvektoren:
$$d = (m_i - m_j) \times (m_j - m_k)$$
Bem.: Liegen die \(s_i\) in der XY-Ebene, so ist \(d=( 0; 0; d_z)\) - und \(d_z\) kann man dann zu 1 setzen. Der Betrag von \(d\) spielt für das folgende keine Rolle.
Einen Aufpunkt \(a\) der Geraden findet man als eine Lösung für \(x\) von folgendem unterbestimmten Gleichungssysten:
$$2 \begin{pmatrix} (m_j - m_i)^T \\ (m_k - m_j)^T \end{pmatrix} x = \begin{pmatrix} {R_i}^2 - {R_j}^2 \\ {R_j}^2 - {R_k}^2\end{pmatrix}$$
programmtechnisch ist das etwas tricky, da man durch die Wahl eines Pivotelements vermeiden muss, durch sehr kleine Werte bzw. 0 zu teilen. Wenn Du dazu mehr wissen möchtest, so frage nochmal nach.
Einsetzen der Geradengleichung \(a + d\cdot t\) in die quadrierte Kugelgleichung (s.o.) der Kugel \(j\) gibt:
$$( a + d \cdot t - m_j )^2 = {R_j}^2$$
$$ d^2 \cdot t^2 + (a- m_j) \cdot d \cdot t + (a- m_j)^2- {R_j}^2 = 0$$
letzteres ist eine quadratische Gleichung mit den beiden Lösungen \(t_{1,2}\). Setzt man diese \(t_{1,2}\) in die Geradengleichung ein, erhält man schließlich die beiden Schnittpunkte \(p_{1,2}\) der drei Kugeln. Existiert keine Lösung, so schneiden sich zwei der Kugeln nicht. Wichtig dabei ist, dass der letzte Schritt mit der Kugel (hier \(j\)) vorgenommen wird, die in beiden Paaren vorkommt - nur dann kann man sicher sein, dass dieser Schnittpunkt auch existiert. Legt man die Koordinaten \(s_i\) so, dass sie alle in der XY-Ebene liegen, so ist die gesuchte Höhe \(h\) die Z-Koordinate der Punkte \(p_{1,2}\), die sich in diesem Fall nur durch das Vorzeichen unterscheiden.
Falls Du noch den Algorithmus suchst, der die Koordinaten der dritten Seilwinde aus den Abständen der Seilwinden unter einander berechnet, so geht das genauso - nur eben im 2-dimensionalen.
Fragen und sonstiges Feedback erwünscht.
Gruß Werner