<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Punktkoordinaten in Serpentinenmuster sortieren]]></title><description><![CDATA[<p>Hallo alle zusammen</p>
<p>In meinem Code habe ich zur Zeit zwei Vektoren. In jedem Vektor speichere ich die Koordinaten von verschiedenen Punkten. Aus zwei Punkten eines jeden Vektors bilde ich anschließend Geradensegmente und schneide die zwei Segmente miteinander. Die Schnittpunkte, sofern sie existieren werden in einem dritten gespeichert. Dieser dritte Vektor soll jetzt sortiert werden, sodass sich eine Serpentinen ähnliche Struktur bildet. Zur Erklärung hier einmal der derzeitige Output meiner Funktion:<br />
*<br />
5 -2<br />
-5 -2<br />
5 -1<br />
-5 -1<br />
5 0<br />
-5 0<br />
5 1<br />
-5 1<br />
5 2<br />
-5 2<br />
*<br />
Zwar ist die zweite Spalte aufsteigend sortiert, was ich auch brauche, aber die erste Spalte ist absteigend sortiert. Ich hab einmal versucht den Output händisch zu verändern und komm zu diesem Ergebnis:<br />
*<br />
5 -2<br />
-5 -2<br />
-5 -1<br />
5 -1<br />
5 0<br />
-5 0<br />
-5 1<br />
5 1<br />
5 2<br />
-5 2<br />
*<br />
So bräuchte ich es auch durch meinen Code. Wie man sieht ist die zweite Spalte aufsteigend sortiert, die erste Spalte alterniert jedoch. Ich hab mir zwar überlegt wie ich es mit if-Statements machen könnte, aber wirklich schöner Code ergibt sich damit nicht. Ich würde am liebsten die Standard sort-Funktion für C++ verwenden, hab aber leider überhaupt keine Ahnung wie die sortier-Routine ausschauen müsste, damit ich dieses alternierende Muster erreichen kann. Habt ihr vielleicht einen Tipp für mich</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338628/punktkoordinaten-in-serpentinenmuster-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 08:41:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338628.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Jun 2016 11:41:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Punktkoordinaten in Serpentinenmuster sortieren on Tue, 28 Jun 2016 11:45:15 GMT]]></title><description><![CDATA[<p>Hallo alle zusammen</p>
<p>In meinem Code habe ich zur Zeit zwei Vektoren. In jedem Vektor speichere ich die Koordinaten von verschiedenen Punkten. Aus zwei Punkten eines jeden Vektors bilde ich anschließend Geradensegmente und schneide die zwei Segmente miteinander. Die Schnittpunkte, sofern sie existieren werden in einem dritten gespeichert. Dieser dritte Vektor soll jetzt sortiert werden, sodass sich eine Serpentinen ähnliche Struktur bildet. Zur Erklärung hier einmal der derzeitige Output meiner Funktion:<br />
*<br />
5 -2<br />
-5 -2<br />
5 -1<br />
-5 -1<br />
5 0<br />
-5 0<br />
5 1<br />
-5 1<br />
5 2<br />
-5 2<br />
*<br />
Zwar ist die zweite Spalte aufsteigend sortiert, was ich auch brauche, aber die erste Spalte ist absteigend sortiert. Ich hab einmal versucht den Output händisch zu verändern und komm zu diesem Ergebnis:<br />
*<br />
5 -2<br />
-5 -2<br />
-5 -1<br />
5 -1<br />
5 0<br />
-5 0<br />
-5 1<br />
5 1<br />
5 2<br />
-5 2<br />
*<br />
So bräuchte ich es auch durch meinen Code. Wie man sieht ist die zweite Spalte aufsteigend sortiert, die erste Spalte alterniert jedoch. Ich hab mir zwar überlegt wie ich es mit if-Statements machen könnte, aber wirklich schöner Code ergibt sich damit nicht. Ich würde am liebsten die Standard sort-Funktion für C++ verwenden, hab aber leider überhaupt keine Ahnung wie die sortier-Routine ausschauen müsste, damit ich dieses alternierende Muster erreichen kann. Habt ihr vielleicht einen Tipp für mich</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500379</guid><dc:creator><![CDATA[bekinect]]></dc:creator><pubDate>Tue, 28 Jun 2016 11:45:15 GMT</pubDate></item><item><title><![CDATA[Reply to Punktkoordinaten in Serpentinenmuster sortieren on Tue, 28 Jun 2016 12:00:20 GMT]]></title><description><![CDATA[<p>sind die Elemente der ersten Spalte immer die gleichen Werte, nur einmal positiv das andere mal negativ? (z.B. +5, -5, ...)</p>
<p>Du könntest jedenfalls den Mittelwert der Elemente der ersten Spalte berechnen. Dann machst du zwei neue Vektoren, der eine enthält alle Elemente größer dem Mittelwert (<strong>s1</strong>), der zweite Vektor (<strong>s2</strong>) den Rest.<br />
Und dann baust du dir den Ergebnisvektor <strong>sres</strong> eben zusammen, indem du abwechselnd ein (oder zwei) Element(e) aus dem Vektor <strong>s1</strong> und <strong>s2</strong> nimmst, bis alle Elemente entnommen sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500380</guid><dc:creator><![CDATA[hgfhgfhf]]></dc:creator><pubDate>Tue, 28 Jun 2016 12:00:20 GMT</pubDate></item><item><title><![CDATA[Reply to Punktkoordinaten in Serpentinenmuster sortieren on Tue, 28 Jun 2016 12:17:50 GMT]]></title><description><![CDATA[<p>Ich denke, man kann die brutale Methode nehmen: erst alles nach der 2. Spalte sortieren und dann jeden Bereich gleicher zweiter Spalte einzeln nach der ersten sortieren.</p>
<p>So zum Beispiel:</p>
<pre><code>#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

int main() {
    typedef pair&lt;double, double&gt; Punkt;
    vector&lt;Punkt&gt; v{{5, -2}, {5, -1}, {5, 0}, {-5, 0}, {-5, -1}, {-5, 1}, {5, 1}, {5, 2}, {-5, 2}, {-5, -2}};
    sort(v.begin(), v.end(), [](const Punkt &amp;a, const Punkt &amp;b) { return a.second &lt; b.second; });
    bool ascending_first = false;
    auto firstInRange = v.begin();
    while (firstInRange != v.end()) {
        auto endInRange =
            adjacent_find(firstInRange, v.end(), [](const Punkt &amp;a, const Punkt &amp;b) { return a.second != b.second; });
        if (endInRange != v.end()) ++endInRange;
        sort(firstInRange, endInRange, [ascending_first](const Punkt &amp;a, const Punkt &amp;b) {
            return ascending_first ? a.first &lt; b.first : b.first &lt; a.first;
        });
        ascending_first = !ascending_first;
        firstInRange = endInRange;
    }
    for (const auto &amp;p : v) {
        cout &lt;&lt; p.first &lt;&lt; &quot; &quot; &lt;&lt; p.second &lt;&lt; &quot;\n&quot;;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2500382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500382</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Tue, 28 Jun 2016 12:17:50 GMT</pubDate></item><item><title><![CDATA[Reply to Punktkoordinaten in Serpentinenmuster sortieren on Tue, 28 Jun 2016 13:35:49 GMT]]></title><description><![CDATA[<p>Geht auch in einem Rutsch:</p>
<pre><code>#include &lt;algorithm&gt; 
#include &lt;iostream&gt; 
#include &lt;vector&gt; 

using namespace std; 

int main() { 
     typedef pair&lt;double, double&gt; Punkt; 
     vector&lt;Punkt&gt; v{{5, -2}, {5, -1}, {5, 0}, {-5, 0}, {-5, -1}, {-5, 1}, {5, 1}, {5, 2}, {-5, 2}, {-5, -2}}; 
     sort(v.begin(), v.end(), [](const Punkt &amp;a, const Punkt &amp;b) { 
     	if (a.second == b.second) {
     		if (static_cast&lt;int&gt;(a.second) % 2 != 0)
	     		return a.first &gt; b.first;
     		else
	     		return a.first &lt; b.first;
     	} else
     		return a.second &lt; b.second; 
     }
     ); 
     for (const auto &amp;p : v) { 
         cout &lt;&lt; p.first &lt;&lt; &quot; &quot; &lt;&lt; p.second &lt;&lt; &quot;\n&quot;; 
     } 
}
</code></pre>
<p>Die &quot;Startrichtung&quot; der Serpentine hängt hierbei allerdings von den Daten ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500387</guid><dc:creator><![CDATA[Dasd]]></dc:creator><pubDate>Tue, 28 Jun 2016 13:35:49 GMT</pubDate></item><item><title><![CDATA[Reply to Punktkoordinaten in Serpentinenmuster sortieren on Tue, 28 Jun 2016 13:56:01 GMT]]></title><description><![CDATA[<p>Wieso sollte die Sortierrichtung davon abhängen, ob der Ganzzahl-Anteil der 2. Koordinate des Punktes gerade ist?!</p>
<p>Für mich siehst das so aus, als würdest du hier die Annahme machen, dass die 2. Koordinate in allen Punkten eine Ganzzahl ist und dass nur aufeinander folgende Zahlen vorkommen bzw. nie eine Lücke von einer ungeraden Zahl von Zahlen besteht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500388</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Tue, 28 Jun 2016 13:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to Punktkoordinaten in Serpentinenmuster sortieren on Tue, 28 Jun 2016 14:23:55 GMT]]></title><description><![CDATA[<p>wob schrieb:</p>
<blockquote>
<p>Wieso sollte die Sortierrichtung davon abhängen, ob der Ganzzahl-Anteil der 2. Koordinate des Punktes gerade ist?!</p>
<p>Für mich siehst das so aus, als würdest du hier die Annahme machen, dass die 2. Koordinate in allen Punkten eine Ganzzahl ist und dass nur aufeinander folgende Zahlen vorkommen bzw. nie eine Lücke von einer ungeraden Zahl von Zahlen besteht.</p>
</blockquote>
<p>Richtig. Und - wie gesagt - die Startrichtung der Serpentine hängt davon ab, ob die zweite Komponente des ersten Punktes gerade ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500391</guid><dc:creator><![CDATA[Dasd]]></dc:creator><pubDate>Tue, 28 Jun 2016 14:23:55 GMT</pubDate></item></channel></rss>