Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Dreieckspeilung.

Synthetic_codes / 13 Antworten / Baumansicht Nickles

Hi. Ich suche einen Algorithmus, mit dem ich eine Dreieckspeilung berechnen kann. folgendes: wir haben ein koordinatensystem mit X=1000m
Y=1000m
wir haben drei sender A(250|250),B(640|480),C(250|700)
Die sender stehen also in einem gleichwinkligen dreieck zueinander in der entfernung |AC| = |AB| = |BC| = 450m
ich habe einen Punkt T(?|?) der von A 250m von B 200m und von C 365m entfernt ist. wie berechne ich die koordinaten des Punktes T der im dreieck ABC steht??

Vielen Dank für die Hilfe schonmal im vorraus, ich weiss dass es eine Extrem schwere Aufgabe ist.

mailto: Synthetic_codes@yahoo.de

'); DROP TABLE users;--
bei Antwort benachrichtigen
Borlander Synthetic_codes „Dreieckspeilung.“
Optionen

Hallo synthetic_codes,
die notwenige Fromel kann man relativ einfach selbst herleiten:

A(250|250),B(640|480),C(250|700)

a(A, T) = 250LE
a(A, T) = 200LE
a(A, T) = 365LE




d(A, T) = SQRT((ax-tx)2+(ay-ty)2)
d(B, T) = SQRT((bx-tx)2+(by-ty)2)
d(C, T) = SQRT((cx-tx)2+(cy-ty)2)

<=>
(d(A, T))2 = (ax-tx)2+(ay-ty)2
(d(B, T))2 = (bx-tx)2+(by-ty)2
(d(C, T))2 = (cx-tx)2+(cy-ty)2

<=>
(d(A, T))2 = ax2-2axtx+tx2 + ay2-2ayty+ty2
(d(B, T))2 = bx2-2bxtx+tx2 + by2-2byty+ty2
(d(C, T))2 = cx2-2cxtx+tx2 + cy2-2cyty+ty2

<=>
(d(A, T))2 = ax2-2axtx+tx2 + ay2-2ayty+ty2
(d(B, T))2-(d(A, T))2 = bx2-2bxtx+tx2 + by2-2byty+ty2 - (ax2-2axtx+tx2 + ay2-2ayty+ty2)
(d(C, T))2-(d(A, T))2 = cx2-2cxtx+tx2 + cy2-2cyty+ty2 - (ax2-2axtx+tx2 + ay2-2ayty+ty2)

<=>
(d(A, T))2 = ax2-2axtx+tx2 + ay2-2ayty+ty2
(d(B, T))2-(d(A, T))2 = bx2-2bxtx + by2-2byty - (ax2-2axtx + ay2-2ayty)
(d(C, T))2-(d(A, T))2 = cx2-2cxtx + cy2-2cyty - (ax2-2axtx + ay2-2ayty)

Jetzt brauchen wir nur noch zwei Gleichungen (II & III) zum Weiterrechenn, mit der 3. (I) kann überprüft werden ob die Lösung richtig ist (die Kombination der 3 Entfernungen zu einander passt).

(d(B, T))2-(d(A, T))2 = bx2 -2bxtx +by2 -2byty -ax2 +2axtx -ay2 +2ayty
(d(C, T))2-(d(A, T))2 = cx2 -2cxtx +cy2 -2cyty -ax2 +2axtx -ay2 +2ayty

<=>
(d(B, T))2-(d(A, T))2 = -2bxtx +2axtx -2byty +2ayty  +  bx2 +by2 -ax2 -ay2
(d(C, T))2-(d(A, T))2 = -2cxtx +2axtx -2cyty +2ayty  +  cx2 +cy2 -ax2 -ay2

<=>
(d(B, T))2-(d(A, T))2 = 2tx(ax-bx)+2ty(2ay-by)  +  bx2 +by2 -ax2 -ay2
(d(C, T))2-(d(A, T))2 = 2tx(ax-cx)+2ty(2ay-cy)  +  cx2 +cy2 -ax2 -ay2

Dann noch eine der Gleichungen zu tx auflösen und in die Andere einsetzen, so das erst ty und anschliend tx gelöst werden kann - dann hast Du die notwendige Formel. Das sollte extrem einfach sein...
Mit der Formel I kann anschließen Geprüft werden ob die Angaben stimmen (wahre Aussage), die Anordnung der Punkte ABC ist dabei unerheblich.


CU Borlander
bei Antwort benachrichtigen
Synthetic_codes Nachtrag zu: „Dreieckspeilung.“
Optionen

Re. danke für die schnelle hilfe. ich find die Formel zwar nich so einfach herzuleiten(und ich sass von 20Uhr bis mitternacht dran, aber ich bin ja auch ne niete in mathe. vielen Dank nochmal.

'); DROP TABLE users;--
bei Antwort benachrichtigen
Borlander Synthetic_codes „Re. danke für die schnelle hilfe. ich find die Formel zwar nich so einfach...“
Optionen

Aber die letzten Umformungen hast Du doch hinbekommen?

bei Antwort benachrichtigen
Synthetic_codes Nachtrag zu: „Dreieckspeilung.“
Optionen

ich bin grad dabeidas ganze umzusetzen, da es mit den entfernungsangaben probleme gibt(die drei sender abc senden ein signal aus und der zu peilende empfänger T bestimmt die Signalstärke um die Entfernung zu peilen. leider stimmte die Formel zur umrechnung von % in m nicht ganz(was ich ja auch nicht wirklich erwartet habe, schliesslich gibt es ja auch ungeeignetes gelände und so weiter). ich melde mich wenn ich ein problem haben sollte.


Danke

'); DROP TABLE users;--
bei Antwort benachrichtigen
Synthetic_codes Nachtrag zu: „Dreieckspeilung.“
Optionen

ich noch ma. hab mal gerade nach deinen Formeln gerechnet. könntest du mir vielleicht ein vollständiges beispiel geben(vielleicht auch nach den gegebenen werten? thx im voraus


The Synthetic_ : Synthetic_codes@yahoo.de

'); DROP TABLE users;--
bei Antwort benachrichtigen
Borlander Synthetic_codes „ich noch ma. hab mal gerade nach deinen Formeln gerechnet. könntest du mir...“
Optionen

Dann löse ich das Gleichungssystem erst mal komplett auf:
Stelle gerade fest das sich bei der letzten Formel ein kleiner Fehler eingeschlichen hatte (Faktor zwei nicht komplett ausgeklammert - Der HTML-Code dieser Formeln ist alles andere als übersichtlich...):
Der Teil "2ty(2ay" muss so aussehen "2ty(ay"

<=>
2tx(ax-bx) = (d(B, T))2-(d(A, T))2 - [2ty(ay-by)  +  bx2 +by2 -ax2 -ay2]
2ty(ay-cy) = (d(C, T))2-(d(A, T))2 - [2tx(ax-cx)  +  cx2 +cy2 -ax2 -ay2]

<=>
2tx(ax-bx) = (d(B, T))2-(d(A, T))2 - 2ty(ay-by)  -  bx2 -by2 +ax2 +ay2
2ty(ay-cy) = (d(C, T))2-(d(A, T))2 - 2tx(ax-cx)  -  cx2 -cy2 +ax2 +ay2

<=>
tx = [(d(B, T))2-(d(A, T))2 - 2ty(ay-by)  -  bx2 -by2 +ax2 +ay2] / [2(ax-bx)]
ty = [(d(C, T))2-(d(A, T))2 - 2tx(ax-cx)  -  cx2 -cy2 +ax2 +ay2] / [2(ay-cy)]

Hier höre ich auf allgemein weiter zu rechnen, würde mir dann doch zu aufwendig...

A(250|250) : ax=250 ; ay=250
B(640|480) : bx=640 ; by=480
C(250|700) : cx=250 ; cy=700

d(A, T) = 250
d(B, T) = 200
d(C, T) = 365

tx = [(d(B, T))2-(d(A, T))2 - 2ty(250-480)  -  6402-4802 +2502 +2502] / [2(250-640)]
ty = [(d(C, T))2-(d(A, T))2 - 2tx(250-640)  -  2502-7002 +2502 +2502] / [2(250-700)]

<=>
tx = [(d(B, T))2-(d(A, T))2 +460ty  -  6402-4802 +2502 +2502] / -780
ty = [(d(C, T))2-(d(A, T))2 +780tx  -  2502-7002 +2502 +2502] / -900

<=>
tx = [(d(B, T))2-(d(A, T))2 +460ty  -515000] / -780
ty = [(d(C, T))2-(d(A, T))2 +780tx  -427500] / -900

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty = [(d(C, T))2-(d(A, T))2-427500 + 780tx] / -900

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty = [(d(C, T))2-(d(A, T))2-427500 - 780[[(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780]] / -900

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty = [(d(C, T))2-(d(A, T))2-427500 -(d(B, T))2+(d(A, T))2+515000 - 460ty] / -900

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty = [(d(C, T))2-(d(B, T))2-427500+515000 - 460ty] / -900

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty = [(d(C, T))2-(d(B, T))2+87500 - 460ty] / -900
<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty = [(d(C, T))2-(d(B, T))2+87500]/-900 +(460/900)ty

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty-(23/45)ty = [(d(C, T))2-(d(B, T))2+87500]/-900

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
22/45ty = [(d(C, T))2-(d(B, T))2+87500]/-900

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty = [(d(C, T))2-(d(B, T))2+87500]/-900*45/22

<=>
tx = [(d(B, T))2-(d(A, T))2-515000 + 460ty] / -780
ty = [(d(C, T))2-(d(B, T))2+87500]/-440

=>
tx = [2002-2502-515000 + 460ty] / -780
ty = [3652-2002+87500]/-440

<=>
tx = [-537500 + 460ty] / -780
ty = [180725]/-440

<=>
tx = [-537500 + 460ty] / -780
ty = [180725]/-440

<=>
tx = [-537500 + 460ty] / -780
ty = -36145/88 ~-410 ; vermutlich vorzeichenfehler - den such ich jetzt aber nicht extra ...

<=>
tx = [-537500 + 460*36145/88] / -780
ty = -36145/88 ~-410 ; vermutlich vorzeichenfehler - den such ich jetzt aber nicht extra ...

<=>
tx ~ 446,9
ty = -36145/88 ~-410 ; vermutlich vorzeichenfehler - den such ich jetzt aber nicht extra ...

d(A,T) = 253,8 ~ 250
d(B,T) = 205,3 ~ 200
d(C,T) = 350,6 ~ 365

Ergibt eine Abweichung von <5%, bei echten Messwerten könnte man damit schon ganz zufrieden sein.

Dieser Ansatz stellt natürlich nur einer von vielen dar, man könnte alternativ auch mit parallelen Geraden arbeiten und diese zum Schnitt bringen...


CU Borlander

bei Antwort benachrichtigen
Synthetic_codes Nachtrag zu: „Dreieckspeilung.“
Optionen

danke erst mal an dich borlander. deine Formeln sind zwar auf den ersten blick eher verwirrend, wenn man sich damit beschäftigt, sind sie aber sehr schlüssig(-> ich habs geblickt ;) Ein Wunder!!!).


Dann noch an Martin Feldmaier, dein Programm wie deine PDF haben mir extrem geholfen.
eine Frage: könntest du mir den C/C++ Source als solchen noch mal mailen?(thx schonma im voraus.) wegen den DAteianhängen an Postings: so weit ich weiss, geht das so nicht, aber du kannst die files auf nen separaten host uploaden( www.geocities.com , www.fortunecities.de usw.) und dann einen html link in den Text setzen.( ja, html-tags in postings werden akzeptiert.) wegen dem MS-VC++ Studio:

M$ ist eigentlich häufig die falsche lösung. mein Tipp: der Borland C++Compiler.
der ist in version 5.5 als freeware vorhanden. ausserdem gibt es zum BCB noch gute IDE´s: da wären z.B die Vide . So kriegst du ein qualitativ bestechendes Produkt for free.

'); DROP TABLE users;--
bei Antwort benachrichtigen
Borlander Synthetic_codes „danke erst mal an dich borlander. deine Formeln sind zwar auf den ersten blick...“
Optionen

Nachdem ich ja bereits in meinem letzten Post angedeutet hatte das es auch noch andere Lösungswege gibt, würde ich bei Interesse eine noch elegantere und IHMO einfachere Lösung präsentieren die auf den Kathetensatz und zu den Seiten des Dreices orthogonalen Geraden aufbaut die sich im Punkt T schneiden. Vorteil dieser Lösung:

  • wesenstlich einfachere Formeln
  • 3 identische Rechnungen (für jeweils 2 Eckpunkte)
  • bei Ungenauen Werten erhält man 3 Schnittpunkte zwischen denenen der Punkt T liegen sollte, gleichzeitig können so aussagen über die Genauigkeit getroffen werden



CU Borlander
bei Antwort benachrichtigen
Synthetic_codes Nachtrag zu: „Dreieckspeilung.“
Optionen

aber sicher doch - als her damit!

'); DROP TABLE users;--
bei Antwort benachrichtigen
Borlander Synthetic_codes „aber sicher doch - als her damit!“
Optionen

Vektoren habe ich jeweils in {} eingeschlossen
A / AB (wiederholen für B / BC, C / CA)


Die Gerade durch A und B kann durch folgende Verkorgleichung dargestellt werden:
{x} = {a} + u*{AB}; u ist Element aus |R; AB={b}-{a}

Um die zu AB orthogonale Gerade (oa) durch T zu finden wird der Schnittpunkt dieser beiden Geraden (Sa) und ein Richtungsvektor benötigt. Der Astand zwischen A und Sa ( Strecke pa) zu finden wird der Kathetensatz auf das Dreieck ABT angewendet. Daraus ergibt sich folgender Zusammenhang:
ta2 = AB * pa
<=> pa = ta2 / AB

{sa} = {a} + {AB}0 * pa

{AB} | {oa}
=>
oa,x = -ABy
oa,y = ABx


Oa: {x} = {sa} + v * {oa}

Bei idealen Messwerten sollte T der gemeinsame Schnittpunkt von Oa, Ob und Oc sein.


CU Borlander
bei Antwort benachrichtigen
martinx24 Borlander „ Vektoren habe ich jeweils in eingeschlossen A / AB wiederholen für B / BC, C /...“
Optionen

Hallo!
Vielleicht hilft Dir das weiter: (hab ich bereits an synthetic codes geschickt)

//10062003

#include

bei Antwort benachrichtigen
Borlander martinx24 „Hallo! Vielleicht hilft Dir das weiter: hab ich bereits an synthetic codes...“
Optionen

Denke das die Lösung mit Vektoren wesentlich einfacher ist, da hier keine Spezialfälle behandelt werden müssen...

bei Antwort benachrichtigen
Synthetic_codes Nachtrag zu: „Dreieckspeilung.“
Optionen

Hi. Ich bins mal wieder. habe inzwischen eine eigene lösung auf basis von borlanders formeln gefunden.
wen es interessiert, der kann mir mailen( Synthetic_codes@yahoo.de)
ich schick es euch dann zurück(rar, ca 10kb). kann aber dauern, weil ich die ganze woche vom 23. mit meiner inkompetenten Englischlehrerin nach borkum fahren muss(so ziemlich die ganze klasse war dagegen überhaupt mit der irgendwohhin zu fahren). naja, mein leid.

greetz fly out to martinx24 Borlander

'); DROP TABLE users;--
bei Antwort benachrichtigen