linie in Abschnitte teilen



  • Hallo,
    ich versuche die Linien mit unterschiedlichen Länge und "Richtungen" (d.h sie sind nicht vertikal oder horisontal) zu teilen. Die x und y Koordinaten sind nicht immer absteigend oder aufsteigend. Mein Codefragment:

    for (int k = 0; k < (int)p.size(); k++)
            {
                int end = k;
                for(int l = k; l < (int)p.size(); l++)
                {
                    if((fabs(pP[l].x - pP[k].x) <= 60) && fabs(pP[l].y - pP[k].y) <= 60))
               end = l;
                        break;
                    }
                }
                if(end >= (int)points.size()-1) break;
    
              cout << "\t" << k << "\t" << end << '\n';
    // hier erwarte ich dass k = 0 und end = index des 60 px weiter entfernten Punktes(entlang x oder y Achse). kommt aber immer gleiche Werte für k und end raus.  
              }
    

    was mache ich falsch?
    Gruß


  • Mod

    Ich brauche mehr Details.

    Wie ist die Linie gegeben? Was soll die Zahl 60 bedeuten? Was soll das break in Zeile 8? Dir ist schon klar, dass du dadurch die Schleife beim ersten Durchlauf verlässt? Hast du dort möglicherweise Klammern vergessen?

    Überhaupt: Deine ganze Klammerung ist Müll und passt überhaupt nicht zur Code-Einrückung und zu den umgebenden Konstrollstrukturen. Ich vermute, dass dort der Fehler liegt.



  • Wie SeppJ schon meinte, wtf ist das:

    for(int l = k; l < (int)p.size(); l++)
                {
                    if((fabs(pP[l].x - pP[k].x) <= 60) && fabs(pP[l].y - pP[k].y) <= 60))
               end = l;
                        break;
                    }
                }
    

    Nicht nur das es total scheiße aussieht, es ist auch noch falsch:

    for (int k = 0; k < p.size(); k++)
    {
        int end = k;
        for(int l = k; l < p.size(); l++)
        {
            if((fabs(pP[l].x - pP[k].x) <= 60) && (fabs(pP[l].y - pP[k].y) <= 60)) //hier fehlte eine Klammer
            { //hier ebenso
                end = l;
                break;
            }
        }
        if(end >= points.size() - 1) break;
    
        cout << "\t" << k << "\t" << end << '\n';
    }
    

    Wenn du Glück hast, funktioniert es jetzt vielleicht.


Anmelden zum Antworten