Funktion zur Berechnung des Umfangs des Polygons in C



  • Ich muss zu morgen folgende aufgabe lösen

    Ein Polygon ist in der Ebene durch eine Anzahl von Punkten Pi(xi,yi) gegeben. Erstellen Sie eine Funktion zur Berechnung des Umfangs des Polygons.

    hab dabei leider weder gegeben wie viele seiten das polygon gegeben hat,noch ob die seiten immer gleich lang sein müssen
    könnt ihr mir helfen

    MFG



  • Hier kommt es darauf an, wie du die Daten erhälst:
    Unter http://de.wikipedia.org/wiki/Polygon findest du die Definition
    eines Polygons.

    Wenn die Punkte in einer gewissen Reihenfolge eingegeben werden (z.b. im
    Uhrzeigersinn) besteht die Aufgabe darin, die Punkte einzulesen und
    der Reihenfolge nach die Länge der Strecken zu bestimmen.

    Wenn die Punkte in einer beliebigen Reihenfolge eingegeben werden,
    mußt du erstmal die richtige Reihenfolge finden und das ist dann ein wenig
    schwerer.

    hab dabei leider weder gegeben wie viele seiten das polygon gegeben hat,
    noch ob die seiten immer gleich lang sein müssen könnt ihr mir helfen

    Aber du hast doch eine Menge von Punkten, daraus ergibt sich dann die
    Anzahl der Kanten.

    Gruß mcr



  • es soll ja jedes polygon berechnet werden können,wie mach ich das das ich erkenn wie viele punkte das polygon hat dann müsste ich ja noch alle formeln zur berechnung einbinden oder gibt es eine algemeine formel?
    ich bin total überfordert...
    kann vll mal wer ne beispielfunktion posten



  • Im Zweifelsfall muß der Anwender halt angeben, wie groß das Polygon werden soll:

    typedef struct{double x,y;}punkt;
    
    double Umfang(punkt* poly,int polysize)
    {
      ...
    }
    


  • wie mach ich das das ich erkenn wie viele punkte das polygon hat

    Abzählen.

    gibt es eine algemeine formel?

    a*a + b*b = c*c in jedem rechtwinkeligen Dreieck 😉



  • mir is grad n geistesblitz gekommen weiß aber nicht ob das so geht wie ichs mir denke
    ich könnte ja immer zwei punkte einlesen und dann die strecke dazwischen berechnen dann les ich einen punkt neu ein(der andere is ja automatisch der startpunkt) und berechne wieder die strecke und addiere diese dazu das mach ich solange bis der benutzer als 2. Punkt wieder den aller ersten punkt eingibt(dann bin ich ja wieder am anfang(den punkt speicher ich natürlich)) so könnt ich den spaß mit sovielen punkten wie möglich berechnen....der nachteil is halt nur das ich nicht erkenne ob das polygon sich irgendwo schneidet

    und kann mir mal wer die Formel geben mit der ich ne linie zwischen 2 punkten berechn en kann?

    MFG



  • Na so geht's natürlich auch.

    (Zur Berechnung der Abstände würde ich den guten alten Pythagoras bemühen - siehe cheopz' Beitrag)



  • so es gibt wieder ein paar probleme bei der umsetzung

    1. ich benutze unsignet int werte für die längen der seiten des rechtwinkligen dreiecks(welches ich erstelle um die grade zu berechnen)damit wenn die werte mal negativ sind kein müll rauskommt...damit kann aber die float zahl(in welcher dann die länge der grade gespeichert werden soll nicht umgehen

    2. Wie ziehe ich eine wurzel (ich dachte das geht mit sqrt gehts aber nicht )

    so siehts bis jetzt bei mir aus

    float poly()
    {
    int x1,y1,x2,y2;
    int a,b;
    int startpunktx,startpunkty;
    double laenge;
    
    printf("Bitte Punkt 1 eingeben");
    scanf("%d",x1);
    scanf("%d",y1);
    
    printf("Bitte Punkt 2 eingeben");
    scanf("%d",x2);
    scanf("%d",y2);
    
    a=x2-x1;
    b=y2-y1;
    laenge=a*a+b*b sqrt;
    

    MFG



  • Braineater schrieb:

    1. ich benutze unsignet int werte für die längen der seiten des rechtwinkligen dreiecks(welches ich erstelle um die grade zu berechnen)damit wenn die werte mal negativ sind kein müll rauskommt...damit kann aber die float zahl(in welcher dann die länge der grade gespeichert werden soll nicht umgehen

    Was will uns dieser Satz jetzt sagen?

    2. Wie ziehe ich eine wurzel (ich dachte das geht mit sqrt gehts aber nicht )

    Tja, man sollte natürlich auch wissen, wie in C eine Funktion aufgerufen wird - laenge=sqrt(a*a+b*b);



  • CStoll schrieb:

    Braineater schrieb:

    1. ich benutze unsignet int werte für die längen der seiten des rechtwinkligen dreiecks(welches ich erstelle um die grade zu berechnen)damit wenn die werte mal negativ sind kein müll rauskommt...damit kann aber die float zahl(in welcher dann die länge der grade gespeichert werden soll nicht umgehen

    Was will uns dieser Satz jetzt sagen?

    also ums kurz zu fassen,mein c meckert rum weil laenge(das ergenis) double bzw float is und die seiten a und b sind int...es steht da das ein datenverlust bei der rechnung auftreten kann und das tut er auch weil es kommt immer 0.00 raus
    weiß wer abhilfe?

    mfg



  • so ich habs nun hinbekommen

    int x1,y1,x2,y2;
    unsigned int a,b;
    int startpunktx,startpunkty;
    float laenge;
    int i=3;
    
    printf("Bitte Punkt 1 eingeben");
    scanf("%d",&x1);
    scanf("%d",&y1);
    
    startpunktx=x1;
    startpunkty=y1;
    
    printf("Bitte Punkt 2 eingeben");
    scanf("%d",&x2);
    scanf("%d",&y2);
    
    a=x2-x1;
    b=y2-y1;
    laenge=sqrt(a*a+b*b);
    
    y1=y2;
    x1=x2;
    
    while (startpunktx != x2 || startpunkty != y2)
    {
    
    	printf("Bitte Punkt %d eingeben",i);
    	scanf("%d",&x2);
    	scanf("%d",&y2);
    
    	a=x2-x1;
    	b=y2-y1;
    	laenge=laenge+sqrt(a*a+b*b);
    	i++;
    
    y1=y2;
    x1=x2;
    }
    
    printf("Der Umfang des Polygons beträgt %f",laenge);
    

    es fehlt nur noch das die funktion erkennt ob sich die linien schneiden
    falls wer ne idee hat immer her damit

    ach ja und alle klugen matheköpfe könntet ihr euch das nochmal angucken?
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-197858.html

    MFG



  • Hi,

    um zu erkennen, ob sich Linien schneiden, wirst du wohl nicht drumherum
    kommen, alle Punkte zu speichern. Anschließend könntest du dann mit einer
    Sweepline die Geraden auf Schnitt überprüfen. Aber ich glaube nicht, dass
    du das bis morgen noch fertig bekommst.

    Gruß mcr



  • ach so wird das schon reichen es rechnet ja immerhin was und das auch noch richtig ^^


Anmelden zum Antworten