<?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[Punkte eines Vierecks genau zuordnen]]></title><description><![CDATA[<p>Hi liebe Community,</p>
<p>ich hab ein problem und zwar... bekomme ich durch ein Tracking system bis zu 4 geometrische Punkte geliefert in einem vector x und vector y. Die punkte gehören immer zusammen also x[i] und y[i]. Wenn ich 4 Punkte bekomme ergeben diese ein viereck das sich aber um 360° rotieren kann also kann man nicht davon ausgehen das der Punkt oben links bei 0,0 liegt, bzw den kleinsten x und den kleinsten y Wert hat. Deswegen muss ich in abhängigkeit zu x und y sortieren so das Punkt 0 der punkt &quot;oben links&quot; ist punkt 1 der punkt &quot;oben rechts&quot; punkt 2 &quot;unten links&quot; ist und so weiter. Dabei tracke ich aber immer ein 4eck kann aber nie mit Garantie sagen das ich auch alle 4 Eckpunkte bekomme.</p>
<p>Das ganze hatte ich angefangen in dem ich die beiden vectoren versucht habe zu sortieren und dabei die kriterien beachtet habe, das artet aber wahrscheinlich in einem rießen code aus und ist von der Programmierung her auch sehr schlecht.</p>
<p>Nun meine Frage ist gibt es vllt einen vorgefertigten Container in C++ der das für mich machen könnte oder hat jemand eine Idee wie man das sinnvoller lösen kann?</p>
<p>Schon mal Vielen Dank im Voraus.</p>
<p>Mfg<br />
Ambroxol</p>
<p>Edit:<br />
Um das ganze vielleicht etwas klarer zu gestalten bekomme ich dann z.B diese 4 Punkte<br />
0 = 499,111<br />
1 = 179,386<br />
2 = 173,105<br />
3 = 502,379<br />
Das &quot;Gemälde&quot; dazu würde dann ca so aussehen:<br />
|----------&gt;x<br />
|*2 *0<br />
|<br />
|<br />
|*1 *3<br />
|<br />
v<br />
y</p>
<p>Und das will ich dann so sortieren und in einen container schieben das der Punkt oben links der derzeit punkt 2 ist dann punkt 0 ist und punkt 0 dann 1 und so weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219126/punkte-eines-vierecks-genau-zuordnen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 09:34:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219126.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Jul 2008 08:17:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Punkte eines Vierecks genau zuordnen on Wed, 30 Jul 2008 08:56:56 GMT]]></title><description><![CDATA[<p>Hi liebe Community,</p>
<p>ich hab ein problem und zwar... bekomme ich durch ein Tracking system bis zu 4 geometrische Punkte geliefert in einem vector x und vector y. Die punkte gehören immer zusammen also x[i] und y[i]. Wenn ich 4 Punkte bekomme ergeben diese ein viereck das sich aber um 360° rotieren kann also kann man nicht davon ausgehen das der Punkt oben links bei 0,0 liegt, bzw den kleinsten x und den kleinsten y Wert hat. Deswegen muss ich in abhängigkeit zu x und y sortieren so das Punkt 0 der punkt &quot;oben links&quot; ist punkt 1 der punkt &quot;oben rechts&quot; punkt 2 &quot;unten links&quot; ist und so weiter. Dabei tracke ich aber immer ein 4eck kann aber nie mit Garantie sagen das ich auch alle 4 Eckpunkte bekomme.</p>
<p>Das ganze hatte ich angefangen in dem ich die beiden vectoren versucht habe zu sortieren und dabei die kriterien beachtet habe, das artet aber wahrscheinlich in einem rießen code aus und ist von der Programmierung her auch sehr schlecht.</p>
<p>Nun meine Frage ist gibt es vllt einen vorgefertigten Container in C++ der das für mich machen könnte oder hat jemand eine Idee wie man das sinnvoller lösen kann?</p>
<p>Schon mal Vielen Dank im Voraus.</p>
<p>Mfg<br />
Ambroxol</p>
<p>Edit:<br />
Um das ganze vielleicht etwas klarer zu gestalten bekomme ich dann z.B diese 4 Punkte<br />
0 = 499,111<br />
1 = 179,386<br />
2 = 173,105<br />
3 = 502,379<br />
Das &quot;Gemälde&quot; dazu würde dann ca so aussehen:<br />
|----------&gt;x<br />
|*2 *0<br />
|<br />
|<br />
|*1 *3<br />
|<br />
v<br />
y</p>
<p>Und das will ich dann so sortieren und in einen container schieben das der Punkt oben links der derzeit punkt 2 ist dann punkt 0 ist und punkt 0 dann 1 und so weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556142</guid><dc:creator><![CDATA[Ambroxol]]></dc:creator><pubDate>Wed, 30 Jul 2008 08:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Punkte eines Vierecks genau zuordnen on Wed, 30 Jul 2008 09:36:57 GMT]]></title><description><![CDATA[<p>Du musst wohl selbst anhand der Koordinaten entscheiden, welcher Punkt oben/links usw. darstellt. Mittels eines Dreieckstauschs kannst Du dann die gewünschte Reihenfolge herstellen.<br />
<a href="http://de.wikipedia.org/wiki/Dreieckstausch" rel="nofollow">http://de.wikipedia.org/wiki/Dreieckstausch</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556217</guid><dc:creator><![CDATA[MiP]]></dc:creator><pubDate>Wed, 30 Jul 2008 09:36:57 GMT</pubDate></item><item><title><![CDATA[Reply to Punkte eines Vierecks genau zuordnen on Wed, 30 Jul 2008 10:49:34 GMT]]></title><description><![CDATA[<p>Egal welchen Algorithmus Du auswählst. Es ist in jedem Fall empfehlenswert, die Punkte im Code als Objekte darzustellen. Eine Möglichkeit für Punkte bzw. <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-154875-and-start-is-20.html" rel="nofollow">Vektoren im Raum (und auch in der Ebene) findest Du hier</a>.</p>
<p>Wenn Du Dir zwei Diagonalen (unter 45°) durch Dein Koordinatensystem gezogen denkst, könnte man jeweils den Punkt herausfinden, der am weitesten von der jeweiligen Diagonalen entfernt in Richtung der gewünschten Ecke liegt. Berechnen lässt sich der Abstand leicht mit der <a href="http://de.wikipedia.org/wiki/Hessesche_Normalform" rel="nofollow">Hesseschen Normalform</a> und Raussuchen geht mit dem Algorithmus max_element aus dem C++-Standard.</p>
<p>Hier mein Vorschlag unter Zuhilfenahme des ersten Links auf den Vector (s.o.)</p>
<pre><code class="language-cpp">#include &quot;Vektor.h&quot;
#include &lt;algorithm&gt;    // copy, max_element
#include &lt;cassert&gt;
#include &lt;iterator&gt;     // ostream_iterator
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

struct Ebene    // Ebene in der Hesseschen Normalform
{
    explicit Ebene( const Vector&amp; n, double d = 0.0 )
        : m_n( n ) 
        , m_d( d )
    {}
    // liefert 'true' wenn 'p1' mehr unterhalb der Ebene liegt als 'p2'
    bool operator()( const Vector&amp; p1, const Vector&amp; p2 ) const
    {
        return p1 * m_n &lt; p2 * m_n;
    }
private:
    Vector m_n;
    double m_d; // Bem.: wird hier nicht benötigt!
};

std::vector&lt; Vector &gt; sortRechteck( std::vector&lt; Vector &gt; quadriga )
{                       // Bem.: Übergabe des Parameters per copy, da er intern verändert wird
    assert( quadriga.size() == 4 );
    // hier wird definiert was oben und unten im Sinne von x und y bedeutet
    const double LINKS = -1;        // x - Richtung
    const double RECHTS = +1;
    const double OBEN = -1;         // y - Rchtung; Bem.: y zeigt nach unten
    const double UNTEN = +1;

    vector&lt; Vector &gt; ecken(4);
    // hier wird die Reihenfolge der Punkte festgelegt
    ecken[0] = Vector( LINKS, OBEN );
    ecken[1] = Vector( RECHTS, OBEN );
    ecken[2] = Vector( RECHTS, UNTEN );
    ecken[3] = Vector( LINKS, UNTEN );

    vector&lt; Vector &gt; sortiertePunkte;   // Ergebnis
    for( vector&lt; Vector &gt;::iterator iEcke = ecken.begin(); iEcke != ecken.end(); ++iEcke )
    {
        // '*i' ist der Punkt, der am nächsten in Richtung der Ecke '*iEcke' liegt.
        vector&lt; Vector &gt;::iterator i = std::max_element( quadriga.begin(), quadriga.end(), 
            Ebene( *iEcke ) );
        sortiertePunkte.push_back( *i );
        quadriga.erase( i );    // Löschen, damit kein Punkt zweimal vorkommt!
    }
    return sortiertePunkte;
}

int main()
{
    // --   Satz Beispieldaten
    vector&lt; Vector &gt; punkte(4);
    punkte[0] = Vector( 499, 111 );
    punkte[1] = Vector( 179, 386 );
    punkte[2] = Vector( 173, 105 );
    punkte[3] = Vector( 502, 379 );

    // --   Sortierung nach Rechteck ausführen
    vector&lt; Vector &gt; sortiert = sortRechteck( punkte );

    // --   Ergebnis ausgeben
    copy( sortiert.begin(),  sortiert.end(),
        ostream_iterator&lt; Vector &gt;( cout &lt;&lt; &quot;Die sortierte Reihenfolge: \n&quot;, &quot;\n&quot; ) );

    return 0;
}
</code></pre>
<p>Die Ausgabe dieses Programms ist:</p>
<pre><code>Die sortierte Reihenfolge:
173 105 0
499 111 0
502 379 0
179 386 0
</code></pre>
<p>ich nehme an, das ist das, was Du wolltest.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556277</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 30 Jul 2008 10:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Punkte eines Vierecks genau zuordnen on Wed, 30 Jul 2008 17:12:13 GMT]]></title><description><![CDATA[<p>Ja sowas in der Richtung hatte ich gesucht.</p>
<p>Bin aber dann noch auf ne andere Idee gekommen die zum glück auch gut funtioniert und zwar kann ich die Punkte in den Ursprung transformieren, die dort rotieren und dann die Punkte anhand ihrer Quadranten zuordnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556544</guid><dc:creator><![CDATA[Ambroxol]]></dc:creator><pubDate>Wed, 30 Jul 2008 17:12:13 GMT</pubDate></item></channel></rss>