Zum Inhalt springen

cadman

Mitglieder
  • Gesamte Inhalte

    28
  • Benutzer seit

  • Letzter Besuch

Beiträge von cadman

  1. habe jetzt eine funktion auf die vector geschichte umgestellt. rueckgabe ist eine punkt struktur

    wie stelle ich es denn an, dass die aufrufende funktion merkt, dass kein punkt gefunden wurde ?

    fc_point fc_calc_sp_g1_g2 (fc_point ep1, fc_point zp1,
    
                               fc_point ep2, fc_point zp2,
    
                               int f1, int f2)
    
    {
    
        fc_point rueckgabe;
    
        int fehler=1;
    
        fc_point schnittp;
    
        // Felder für transformierte Endpunkte
    
        double tep1[2],tzp1[2],tep2[2],tzp2[2];
    
        // Daten der 1. Geraden im Originalzustand
    
        double l1=pow(pow((ep1.x-zp1.x),2) + pow((ep1.y-zp1.y),2),0.5);
    
        double alpha1=acos((zp1.x-ep1.x)/l1);
    
        // Die Koordinatensystem wird so gedreht, dass der Anfangspunkt der 1. Geraden 
    
        // horizontal durch den Ursprung verläuft
    
        fc_calc_coortrans_point(ep1.x,ep1.y,ep1.x,ep1.y,alpha1,tep1);
    
        fc_calc_coortrans_point(zp1.x,zp1.y,ep1.x,ep1.y,alpha1,tzp1);
    
        fc_calc_coortrans_point(ep2.x,ep2.y,ep1.x,ep1.y,alpha1,tep2);
    
        fc_calc_coortrans_point(zp2.x,zp2.y,ep1.x,ep1.y,alpha1,tzp2);
    
        // Ist auch die 2. Gerade horizontal ? Dann Fehler = -1 setzen
    
        if (tep2[1]==tzp2[1])
    
        {
    
            //cout << "\nDie Linien sind parallel !";
    
            fehler = -1;
    
            if (tep1[1]==tep2[1])
    
            {
    
                //cout << "\nDie Linien liegen übereinander !";
    
            }
    
        }
    
    
        if (fehler==1)
    
        {
    
            // Zweite Gerade senkrecht ?
    
            if (tep2[0]==tzp2[0])
    
            {
    
                schnittp.x=tep2[0];
    
                schnittp.y=0.0;
    
            }
    
            else
    
            {
    
                schnittp.x=tep2[0]+(tzp2[0]-tep2[0])*(-tep2[1])/(tzp2[1]-tep2[1]);
    
                schnittp.y=0.0;
    
            }
    
    
            // Bei entsprechender Einstellung (f1,f2) muss der Schnittpunkt auf denn Geraden liegen
    
    
            // Bedingung f1 prüfen
    
            if (f1!=1) { if (schnittp.x<0.0 || schnittp.x>tzp1[0]) { fehler=-1; }}
    
    
            // Bedingung f2 prüfen, wenn kein Fehler
    
            if (fehler==1)
    
            {
    
                if (f2!=1)
    
                {
    
                    if ((schnittp.y-tep2[1])/(tzp2[1]-tep2[1])<0.0 ||
    
                        (schnittp.y-tep2[1])/(tzp2[1]-tep2[1])>1.0)
    
                        {fehler=-1;}
    
                }
    
            }
    
            // Rücktransformation
    
            double tmp[2],bcs[2];
    
            fc_calc_coortrans_point(0.0,0.0,ep1.x,ep1.y,alpha1,bcs);
    
            fc_calc_coortrans_point(schnittp.x,schnittp.y,bcs[0],bcs[1],-alpha1,tmp);
    
            rueckgabe.x=tmp[0];
    
            rueckgabe.y=tmp[1];
    
        }
    
        return rueckgabe;
    
    }

  2. die funktionen

    fc_calc_sp_g1_poly und fc_calc_sp_g1_g2

    kann ich ändern wie ich will, da ich nur privat ein bißchen programmieren lernen möchte

    bin so ein selbsternannter informatiker im 2. bildungsweg :bimei

  3. hallo,

    aus

    matrix[spz] = (double *) realloc (matrix, 2*sizeof(double));
    
    
    matrix[spz] = (double *)  malloc (2*sizeof(double));

    dann geht es ! Danke !

    Ob ich EInfluss auf die Signatur der Funktion habe ? Was meinst Du damit ?

  4. habe folgende funktion, aber das mit dem realloc funktioniert nicht:

    // Schnittpunkt einer Geraden mit einer Polylinie berechnen
    
    //  epx1, epy1,zpx1, zpy1    -> Koordinaten der 1. Geraden
    
    //  f                        -> =1 Gerade unendlich lang
    
    //  double poly [][2]        -> Koordinatenfeld der Polylinie (1. Punkt = letzter Punkt)
    
    //    int orianzep            -> Anzahl der Eckpunkte
    
    //  f1                        -> wenn f1=1 wird die 1. Gerade unendlich verlängert
    
    //  f2                        -> wenn f2=1 wird die 2. Gerade unendlich verlängert
    
    //    rueckgabe                -> punktfeld mit schnittpunkten: double (*rueckgabe) [2] = new double [anzeckp][2];
    
    //    fehler                    -> =-1 keine Schnittp4n2te gefunden
    
    void fc_calc_sp_g1_poly (double epx1, double epy1,double zpx1, double zpy1, int f,
    
                             double poly [][2], int orianzep,
    
                             double rueckgabe[][2], int fehler)
    
    {
    
        //fehlerpuffer
    
        fehler=-1;
    
        //Zähler zum Durchlauf der Polylinie
    
        int z;
    
        //Zwischenpuffer für Schnittpunkt
    
        double r1[3];
    
        //Zähler für Schnittpunkte
    
        int spz=0;
    
        //Rückgabepuffer "rueckgabe" wird erst beim 1 Fund initialisiert
    
        double **matrix;
    
        //
    
        int i;
    
    
    
        //Alle Punkte der Polylinie durchlaufen        
    
        for (z=0;z<(orianzep-1);z+=1)
    
        {
    
            //funktion sucht schnittpunkt
    
            fc_calc_sp_g1_g2 (epx1,epy1,zpx1,zpy1,
    
                              poly [z][0],poly [z][1],poly [z+1][0],poly [z+1][1],
    
                              f,0,r1);
    
            //wenn schnittpunkt gefunden
    
            if (r1[2]==1)
    
            {
    
                fehler=1;
    
                //wenn noch kein schnittpunkt gefunden
    
                if (spz==0)
    
                {
    
                    cout << "\nmalloc !";
    
                    //Zeile
    
                    matrix = (double **) malloc (1*sizeof(double *));
    
                    //Spalte
    
                    matrix[0] = (double *)  malloc (2*sizeof(double));
    
                }
    
                //für weitere schnittpunkte
    
                if (spz>0)
    
                {
    
                    cout << "\nrealloc !";
    
                    //Zeile
    
                    matrix = (double **) realloc (matrix, (spz+1)*sizeof(double *));
    
                    //Spalte
    
                    matrix[spz] = (double *) realloc (matrix, 2*sizeof(double));
    
                }
    
    
    
                cout << "\nSchnittpunkt gefunden !";
    
                cout << "\nspz: " << spz;
    
                cout << "\n" << z << "\t" << r1[0] << "\t" << r1[1];
    
                matrix[spz][0]=r1[0];
    
                matrix[spz][1]=r1[1];
    
                spz++;
    
    
            }
    
        }
    
        cout << "\nspeicher freigeben !";
    
        if (spz>0)
    
        {
    
            for (i=0;i<spz;i++) {free (matrix[i]);}
    
            free (matrix);
    
        }
    
    
    }

  5. ... struktur ? du meinst so eine art klasse mit einer methode für x, eine für y und eine für den fehlercode, wenn kein schnittpunkt vorhanden ?

    aber x und y müssten dann ja dynamisch funktionieren und da liegt das problem

  6. Hallo,

    habe folgendes Problem:

    Ich habe eine Gerade und eine Polylinie (mehrgliedrige Linie) an eine Funktion zu übergeben. Die Funktion soll mir die Schnittpunkte in einem 2-dimensionalem array zurückgeben.

    Da ich zu Anfang nicht weiß, ob und wieviele Schnittpunkte es gibt muss das Rückgabearray irgendwie dynamisch arbeiten.

    Ich habe mir schon malloc angesehen. Aber die Beispiele bestanden nur aus 1-dimensionalen arrays.

    wat nu ?

  7. hallo,

    ich habe in einem kleinen projekt z.b. die ressourcendatei a.cpp und b.cpp.

    kann ich in a.cpp irgendwie auf eine funktion in b.cpp zugreifen ?

    oder gibt es eine andere möglichkeit (ich meine keine headerfiles) die funktionen von b.cpp in a.cpp zu integrieren ?

    mfg

  8. ich ma wieder !

    auf codeblocks habe ich es jetzt hinbekommen, dann habe ich es mal mit ms visual express probiert und folgendes ergebnis bekommen:

    1>------ Erstellen gestartet: Projekt: t41, Konfiguration: Debug Win32 ------

    1> fc_math.cpp

    1>..\..\..\Bibliotheken\fc_math\fc_math.cpp(43): fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "StdAfx.h"" einzufügen?

    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    häääääääääää ?

  9. Erst einmal danke für die Hilfe

    Ich stecke halt noch ganz am Anfang und teste dieses und jenes.

    Aber mathematische Funktionen muss man doch nicht in eine Klasse legen, wo liegt der Vorteil ?

  10. #include <cstdlib>

    #include <iostream>

    #include <math.h>

    #include <stdio.h>

    #include <K:\Programmieren\c++\Bibliotheken\fc_math\fc_math .h>

    using namespace std;

    // Umwandlung Grad in Bogenmass

    double fc_bogenm(double grad)

    {

    return (grad / 180.0 * 3.1415927);

    }

    int main()

    {

    cout << "\n" << fc_bogenm(45.0);

    }

  11. ich glaube, ich muss mir da erst noch ein bißchen anlesen..

    ich dachte man könnte die funktionen einfach auslagern, dann im progi dazuladen, um sie dann mit ihrem "normalen" namen zu nutzen

  12. #include <cstdlib>

    #include <iostream>

    #include <math.h>

    #include <stdio.h>

    #include <K:\Programmieren\c++\Bibliotheken\fc_math\fc_math.h>

    using namespace std;

    int main()

    {

    cout << "\n" << fc_math::fc_bogenm(45.0);

    }

  13. aufruf: fc_math::fc_bogenm(45.0)

    führt zu folgenden fehlermeldungen:

    c++ forbids declaration of "fc_bogenm" with no type

    c++ forbids declaration of "fc_grad" with no type

    no matching function for cal to "fc_math::fcbogenm(double)"

  14. hi,

    ich möchte mir einen eigenen kleine header-file anlegen und per include anweisung einbinden. wie unten dargestellt habe ich eine "fc_math.h" und eine "fc_math.cpp" datei, aber irgendwie klappt es nicht. weiß jemand rat ?

    fc_math.h

    --------------------------------------

    #ifndef FC_MATH_H

    #define FC_MATH_H

    class fc_math

    {

    public:

    fc_bogenm();

    fc_grad();

    virtual ~fc_math();

    protected:

    private:

    };

    #endif // FC_MATH_H

    fc_math.cpp

    -------------------------------------------

    #include "fc_math.h"

    // Umwandlung Grad in Bogenmass

    double fc_bogenm(double grad)

    {

    return (grad / 180.0 * 3.1415927);

    }

    // Umwandlung Bogenmass in Grad

    double fc_grad(double bogenmass)

    {

    return (bogenmass / 3.1415927*180.0);

    }

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...