Funktion zur Berechnung des Umfangs des Polygons in C



  • 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