Hi,
ich weiß, der Beitrag hat schon ein paar Jährchen auf dem Buckel, aber ich möchte gerne anderen Suchenden meine Lösung vorstellen....
Ich bin noch ganz frisch dabei und habe mich als Autodidakt durch die Beiträge gewühlt und nach Lösungen gesucht.
Der Ansatz des Rückwärtsschnitts hat mir dabei sehr geholfen, mein aktuelles Projekt etwas voran zu bringen.
Mit meinem ersten Beitrag hier möchte ich anderen Suchenden evtl. helfen.
Leider haben mir die Zeichnungen hier nur bedingt weitergeholfen, da ich für ein Programm nun mal den Rechenweg benötige. Diesen konnte ich mir auch nicht selbst daraus ableiten, dafür liegt mein Mathematikunterricht wohl schon zu lange zurück...
Hier ein paar Tipps/Links zum Thema, die mir sehr geholfen haben. Und anschließend ein kleines C-Programm mit dem Lösungsweg.
http://www.geogebra.org/webstart/geogebra.html Java-Tool für Geometrie
http://www.3eck.org/triangle/de/calculator_advanced.php online Dreiecksberechnung
http://diegeodaeten.de/rueckwaertsschnitt.html Über das Thema Rückwärtsschnitt
http://www.ottmarlabonde.de/L1/VermKunde/ruwesn2.html Rückwärtsschnitt im Detail
Vermessungskunde, Teil 2 von Volker Matthews bei google-books
und letztendlich die Seite, die mir die Lösung verständlich(im Quelltext) erklärt hat:
http://mesamike.org/geocache/GC1B0Q9/tienstra/ ein schlanker Javascript Rückwärtsschnitt-rechner.
Mit dessen Hilfe habe ich dann folgendes kleines C-Programm geschrieben/portiert.
Die Positionsdaten der Baken werden nicht abgefragt, sondern müssen im oberen Abschnitt eingetragen werden.
Winkel alpha ist der Winkel BC und Winkel gamma ist der Winkel AB.
Vielleicht hilf das jemanden, würde mich freuen!Code:#include <stdio.h> #include <math.h> void calculate(float ANG_ALPHA, float ANG_GAMMA, float* position) { float AX,BX,CX,AY,BY,CY,ANG_BETA,AB,AC,BC,ANG_A,ANG_B,ANG_C,COT_A,COT_B,COT_C,COT_ALPHA,COT_BETA,COT_GAMMA,KA,KB,KC,K,E,N; // Positionsdaten der BAKEN müssen hier festgelegt werden// AX=2.9;//a.x AY=4.18;//a.y BX=7.1;//b.x BY=4.58;//b.y CX=5.28;//c.x CY=0.56;//c.y //////////////////////////////////////////////////////////////////// ANG_ALPHA=ANG_ALPHA * M_PI / 180; ANG_GAMMA=ANG_GAMMA * M_PI / 180; ANG_BETA=2*M_PI - ANG_ALPHA - ANG_GAMMA; AB = sqrt( pow((AX-BX),2) + pow((AY-BY),2) ); AC = sqrt( pow((AX-CX),2) + pow((AY-CY),2) ); BC = sqrt( pow((BX-CX),2) + pow((BY-CY),2) ); ANG_A = acos( (pow(AB, 2) + pow(AC,2) - pow(BC,2))/(2*AB*AC) ); ANG_B = acos( (pow(AB, 2) + pow(BC,2) - pow(AC,2))/(2*AB*BC) ); ANG_C = acos( (pow(AC, 2) + pow(BC,2) - pow(AB,2))/(2*AC*BC) ); COT_A = 1/tan(ANG_A); COT_B = 1/tan(ANG_B); COT_C = 1/tan(ANG_C); COT_ALPHA = 1/tan(ANG_ALPHA); COT_BETA = 1/tan(ANG_BETA); COT_GAMMA = 1/tan(ANG_GAMMA); KA = 1/(COT_A - COT_ALPHA); KB = 1/(COT_B - COT_BETA); KC = 1/(COT_C - COT_GAMMA); K = KA + KB + KC; E = (KA*AX + KB*BX + KC*CX)/K; N = (KA*AY + KB*BY + KC*CY)/K; position[0]= E; position[1]= N; } int main() { printf("Bitte Winkel alpha (Winkel BC) eingeben:\n"); float alpha; scanf("%f",&alpha); printf("Bitte Winkel gamma (Winkel AB) eingeben:\n"); float gamma; scanf("%f",&gamma); float position[1]; calculate(alpha, gamma, position); printf("x: %f\n",position[0]); printf("y: %f\n",position[1]); system("PAUSE"); }
Grüße
Tobi
Lesezeichen