Berechnung eines Schnittpunktes von zwei Geraden. Problem



  • --------------------------------------------------------------------------------
    Hallo,
    habe probleme mit diesem halb fertigen Programm, das Scbnittpunkte von zwei Geraden ausrechnen sollte.
    Habe festgestellt, dass das Programm die Vektoren richtig zuordent, wenn der Berechnungsblock fehlt, also der Block wo ich f und z ausrechne. Jedoch wenn ich diesen im Programm lasse so wie unten, dann ordnet er ein paar Vektoren falsch zu.

    Kann das sein, dass sich die for-Schleifen die ineinander laufen sich beißen?
    Wäre klasse, wenn mir jemand helfen kann.

    #include <iostream.h> 
    #include <conio.h> 
    
    void main() 
    { 
      int i,c,a; 
      float Auf[3],Richt[3],f,z,g1,g2,g3; 
      char ende; 
      const char esc=27; 
    
      while(esc!=ende) 
      { 
        cout << "Das Programm berechnet den Schnittpunkt von zwei Geraden.\n"; 
    
        for(c=0;c<10;c=c+5) 
        { 
          cout <<"\nGeben Sie die "<<(c+1)<<".Gerade in Parameterform ein.\n"; 
          cout <<"\n"; 
          for(i=0;i<3;i++) 
          {
            cout <<"Geben Sie den Aufpunkt "<<(c+1)<<"."<<(i+1)<<" ein: ";
            cin >> Auf[i+c];
          } 
          cout <<"\n"; 
          for(a=40;a<43;a++) 
          {
            cout <<"Geben Sie den Richtungsvektor "<<(c+1)<<"."<<(a+1)<<" ein: ";
            cin >> Richt[a+c];} 
          } 
        }
    
        f=(-Richt[47])-Richt[42]/Richt[41]*(-Richt[46]); 
        z=((Auf[7]-Auf[2])-(Richt[42]/Richt[41]*(Auf[6]-Auf[1])))/f; 
        cout<<""<<f<<", "; 
        cout<<""<<z<<", "; 
        g1=z*Richt[45]+Auf[5]; 
        g2=z*Richt[46]+Auf[6]; 
        g3=z*Richt[47]+Auf[7]; 
        cout<<"Schnittpunkt("<<g1<<"/"<<g2<<"/"<<g3<<")"; 
        cout<<""<<Auf[0]<<","<<Auf[1]<<","<<Auf[2]<<","<<Richt[40]<<","
            <<Richt[41]<<","<<Richt[42]<<","<<Auf[5]<<","<<Auf[6]<<","<<Auf[7]
            <<","<<Richt[45]<<","<<Richt[46]<<","<<Richt[47]<<""; 
        cout << "\n\n\n\nAbbruch: <esc> Wiederhohlen: <beliebige Taste>"; 
        ende=getch(); 
        clrscr(); 
      } 
    }
    

    Gruß Benny

    edit: bitte Code-Tags benutzen



  • Sorry, aber der Code ist so unleserlich, daß ich nicht viel damit anfangen kann.

    Vielleicht solltest Du erstmal ne Klasse Vector3D schreiben oder sowas, für die die Rechenoperationen sowie Ein/Ausgabe überladen. Danach kannste Dich dann auch auf das eigentliche Problem konzentrieren... aber hier ist irgendwie alles durcheinander, etwas Eingabe, ein Stück Berechnung, ein wenig Ausgabe...
    irgendwie alles etwas kompliziert.

    MfG Jester



  • Ich habe den Verdacht, dass du da nen Doppelpost gemacht hast.
    Siehe C++ Forum.

    PS: Dein Stil ist gräßlich 😮



  • ist n doppelpost. mach das hier mal zu, und warte, bis er die ganzen programmierfehler behoben hat 🙂
    (ich sag nur bereichsüberschreitung bei arrays ;))



  • Hallo,
    hab mein Programm jetzt überholt.
    Nun jetzt habe ich ein weiteres Problem ich weis nicht wie ich mein Programm schreiben soll, daß es Geraden ausrechnet die ineinander liegen oder Parallel oder windschief sind ?????????
    Normale Geraden die einen Schnittpunkt haben die kann mein Programm jetzt ausrechnen(glaube ich).

    void main()
    {
    int i,c,a;
    float f,z,g1,g2,g3,Auf[3],Richt[3],auf[3],richt[3];
    char ende;
    const char esc=27;

    while(esc!=ende)
    {
    cout << "Das Programm berechnet den Schnittpunkt von zwei Geraden.\n";

    cout <<"\nGeben Sie die erste Gerade in Parameterform ein.\n\n";
    cout <<"\n";
    for(i=0;i<3;i++)
    {cout <<"Geben Sie den Aufpunkt 1."<<(i+1)<<" ein: "; cin >> Auf[i];}
    cout <<"\n";
    for(a=0;a<3;a++)
    {cout <<"Geben Sie den Richtungsvektor 1."<<(a+1)<<" ein: ";
    cin >> Richt[a];}

    cout <<"\nGeben Sie die zweite Gerade in Parameterform ein.\n\n";
    cout <<"\n";
    for(i=0;i<3;i++)
    {cout <<"Geben Sie den Aufpunkt 2."<<(i+1)<<" ein: "; cin >> auf[i];}
    cout <<"\n";
    for(a=0;a<3;a++)
    {cout <<"Geben Sie den Richtungsvektor 2."<<(a+1)<<" ein: "; cin >>
    richt[a];}

    f=(-richt[2])-Richt[2]/Richt[1]*(-richt[1]);
    if(f!=0)

    {z=((auf[2]-Auf[2])-(Richt[2]/Richt[1](auf[1]-Auf[1])))/f;
    g1=z
    richt[0]+auf[0];
    g2=zricht[1]+auf[1];
    g3=z
    richt[2]+auf[2];
    cout<<"Schnittpunkt("<<g1<<"/"<<g2<<"/"<<g3<<")";}

    else
    {cout<<"Die Geraden sind windschief oder Parallel oder sind genau gleich.";}

    cout << "\n\n\n\nAbbruch: <esc> Wiederhohlen: <beliebige Taste>";
    ende=getch();
    clrscr();
    }
    }



  • Es gibt auch Code Tags!!



  • und merk dir eins: du kannst das programm _nicht_ schreiben, wenn du die "theorie" der mathematik dahinter nicht kannst. nimm dein schulheft (oder was auch immer) und lies nach, wie das mit den geraden im R3 ist. da gibts n paar sachen zu beachten. UND GENAU DIESE RECHENSCHRITTE MACHST DU DANN IN DEINEM PROGRAMM. is das so schwer zu verstehen?

    (WENN determinante = 0 DANN MACH...  == if (det == 0) { /* ... */ }
    

    wenn du mit der mathematik schwierigkeiten hast, dann sag genau wo. wenn du mit dem programmieren schwierig keiten hast, dann sag genau wo, aber in nem anderen forum.
    den ganzen code zu posten und zu sagen "was fehlt mir, um dies und das zu machen" ist scheisse



  • Und da es sich hier wohl zunächst mal um ein reines Programmierproblem handelt machen wir diesen Thread mal zu.

    Jester


Anmelden zum Antworten