X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Ftriang.git;a=blobdiff_plain;f=triang.c;h=1caf49a9e8ba41ff1861625cfb490c839c9db3f9;hp=d2d5f9fdd0bcb4e14d7a10fd10868521c1b30dc8;hb=1f66fd1f42b17d524529fbe20f1b004a4a8e7db5;hpb=681260de0121ec3f5436d2d845a08a80cc33ab3d diff --git a/triang.c b/triang.c index d2d5f9f..1caf49a 100644 --- a/triang.c +++ b/triang.c @@ -4,7 +4,7 @@ #define MAXSIGNAL 100 -double delta1, delta2; +double deltaX1, deltaY1, deltaX2, deltaY2; /* zweite Loesung ist achsensymmetrisch zur Verbindungslinie @@ -18,16 +18,33 @@ void seek_target (float X1, float Y1, float X2, float Y2, int E1, int E2) { /* E1 eigene Signalstaerke vom target */ /* E2 Signalstaerke des Targets vom Freund */ -double zaehler, nenner, zusatz; +double zaehler, nenner, a_q, b_q, c_q, deltaX, deltaY; printf("Debug: %f %f %f %f %d %d \n", X1, Y1, X2, Y2, E1, E2); -zaehler=MAXSIGNAL*(1./E2-1./E1)-(X1-X2)*(X1-X2)-(Y1-Y2)*(Y1-Y2); -nenner=2*sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2)); -zusatz=sqrt((double)MAXSIGNAL/E1); +/* quadratwerte der seitenlaengen im dreieck */ +a_q=(double)MAXSIGNAL/E2; +b_q=(double)MAXSIGNAL/E1; +c_q=(X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2); -delta1=zusatz*sin(acos(zaehler/(nenner*zusatz))); -delta2=zaehler/nenner; +/* hilfsvariablen */ +deltaX=X1-X2; +deltaY=Y1-Y2; +zaehler=a_q-b_q-c_q; +nenner=-2*sqrt(c_q*b_q); + +printf("Debug: a=%f , b=%f ... und c=%f\n", sqrt(a_q), sqrt(b_q), sqrt(c_q)); + +if ( (sqrt(a_q)+sqrt(b_q)) <= sqrt(c_q) ) { + printf("impossible situation!\n"); + deltaX1=0; deltaY1=0; +} +else { + deltaX1=-sqrt(b_q)*cos(acos(deltaX/deltaY)-acos(zaehler/nenner)); + deltaY1=sqrt(b_q)*sin(acos(deltaX/deltaY)-acos(zaehler/nenner)); + deltaX2=deltaY1; + deltaY2=-1*deltaX1; +} } main() { @@ -41,16 +58,16 @@ a=0; b=0; c=0; d=10; -e=90; -f=90; +e=5; +f=2; seek_target (a, b, c, d, e, f); /* wir sind im ursprung, kumpel 10 einheiten ueber uns! */ printf("Debug: seek_target ausgefuehrt!\n"); -printf("1. Moeglichkeit: (%f;%f)\n", delta1, delta2); -printf("2. Moeglichkeit: (%f;%f)\n", delta2, delta1); +printf("1. Moeglichkeit: (%f;%f)\n", deltaX1, deltaY1); +printf("2. Moeglichkeit: (%f;%f)\n", deltaX2, deltaY2); }