ein Makefile, ein Makefile, juchuuuu! :)
[my-code/triang.git] / triang.c
index ca5207a..eb1f6a6 100644 (file)
--- a/triang.c
+++ b/triang.c
@@ -1,9 +1,14 @@
+/*
+ * triang.c
+ */
+
 #include <stdio.h>
 #include <math.h>
 
+
 #define MAXSIGNAL 100
 
-double *delta1, *delta2; 
+double deltaX1, deltaY1, deltaX2, deltaY2; 
 
        /*
        zweite Loesung ist achsensymmetrisch zur Verbindungslinie
@@ -17,41 +22,59 @@ 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 */
 
-// printf("Debug: %f %f %f %f %d %d \n", X1, Y1, X2, Y2, E1, E2);
-
-double zaehler, nenner, zusatz;
-
-zaehler=MAXSIGNAL*(1./E1-1./E2)-(X1-X2)*(X1-X2)-(Y1-Y2)*(Y1-Y2);
-nenner=2*sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
-zusatz=sqrt((double)MAXSIGNAL/E1);
-
-*delta1=zusatz*sin(acos(zaehler/(nenner*zusatz)));
-*delta2=zaehler/nenner;
+       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);
+
+       /* 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);
+
+       /* 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() {
-
-/* beispiel */
-
-printf("Debug: funzt noch ...\n");
+int main (int argc, char ** argv)
+{
+       /* beispiel */
 
-float a, b, c, d;
-int e, f;
+       float a, b, c, d;
+       int e, f;
 
-a=0;
-b=0;
-c=0;
-d=10;
-e=90;
-f=35;
+       a=0;
+       b=0;
+       c=0;
+       d=10;
+       e=5;
+       f=2;
 
-seek_target (a, b, c, d, e, f);
-/* wir sind im ursprung, kumpel 10 einheiten ueber uns! */
+       seek_target (a, b, c, d, e, f);
+       /* wir sind im ursprung, kumpel 10 einheiten ueber uns! */
 
-printf("Debug: seek_target ausgefuehrt!\n");
+       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: Delta(%f;%f)\n", deltaX1, deltaY1);
+       printf("2. Moeglichkeit: Delta(%f;%f)\n", deltaX2, deltaY2);
 
+       return 0;
 }