<?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[Gerade als Klasse deklarieren]]></title><description><![CDATA[<p>Nabend!<br />
Mein Problem ist folgendes:<br />
Ich möchte zwei Geraden als KLassen deklarieren und anschliessend prüfen<br />
ob die nen gemeinsamen Schnittpunkt haben. Ich weiss jez nicht wie ich das schreiben soll (p1.x, p1.y...)</p>
<p>Weiss da ev. jemand weiter? Thx, John</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/128042/gerade-als-klasse-deklarieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 08:31:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/128042.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Nov 2005 19:42:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gerade als Klasse deklarieren on Tue, 29 Nov 2005 19:42:50 GMT]]></title><description><![CDATA[<p>Nabend!<br />
Mein Problem ist folgendes:<br />
Ich möchte zwei Geraden als KLassen deklarieren und anschliessend prüfen<br />
ob die nen gemeinsamen Schnittpunkt haben. Ich weiss jez nicht wie ich das schreiben soll (p1.x, p1.y...)</p>
<p>Weiss da ev. jemand weiter? Thx, John</p>
]]></description><link>https://www.c-plusplus.net/forum/post/930108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/930108</guid><dc:creator><![CDATA[kaestlinger01]]></dc:creator><pubDate>Tue, 29 Nov 2005 19:42:50 GMT</pubDate></item><item><title><![CDATA[Reply to Gerade als Klasse deklarieren on Tue, 29 Nov 2005 19:59:28 GMT]]></title><description><![CDATA[<p>kaestlinger01 schrieb:</p>
<blockquote>
<p>Nabend!<br />
Mein Problem ist folgendes:<br />
Ich möchte zwei Geraden als KLassen deklarieren und anschliessend prüfen<br />
ob die nen gemeinsamen Schnittpunkt haben. Ich weiss jez nicht wie ich das schreiben soll (p1.x, p1.y...)</p>
<p>Weiss da ev. jemand weiter? Thx, John</p>
</blockquote>
<p>struct Punkt {<br />
int x;<br />
int y;<br />
};</p>
<p>class Gerade {<br />
public:<br />
Punkt Startpunkt;<br />
Punkt Endpunkt;<br />
};</p>
<p>Gerade g;<br />
Gerade h;</p>
<p>(bestimmt kein guter Code...)</p>
<p>Da gibts bestimmt ne lustige Formel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/930123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/930123</guid><dc:creator><![CDATA[xindon]]></dc:creator><pubDate>Tue, 29 Nov 2005 19:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to Gerade als Klasse deklarieren on Tue, 29 Nov 2005 20:05:37 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool Gerade::HatGemeinsamenSchnittpunktMit(Gerade const&amp; dieAndereGerade) const
{
	return !(b != dieAndereGerade.b &amp;&amp; m == dieAndereGerade.m);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/930133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/930133</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 29 Nov 2005 20:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to Gerade als Klasse deklarieren on Tue, 29 Nov 2005 20:17:39 GMT]]></title><description><![CDATA[<p>Hallo, ich würds ungefär so machen:</p>
<pre><code class="language-cpp">class Gerade
{
public:
	Gerade(double steigung, double yabstand) :
	  _m(steigung), _y(yabstand)
	{
	}

    bool hatSchnittpunkt(Gerade const&amp; gerade)
	{
		return ! (gerade._y == _y);
	}

	double getschnittpunkt(Gerade const&amp; gerade)
	{
		return (gerade._y - _y) / (_m - gerade._m);
	}

	double wert(double x)
	{
		return _m * x + _y; 
	}

private:
	double _m; // steigung
	double _y; // y-achsenabstand
};

int main()
{
	Gerade a(2, 5), b(3, 4);

	if(!a.hatSchnittpunkt(b)) {
		return 1;
	}

	double schnittpunkt = a.schnittpunkt(b);
	cout &lt;&lt; &quot;Schnittpunkt an Stelle x = &quot; &lt;&lt; schnittpunkt &lt;&lt; endl;
	cout &lt;&lt; &quot;Y-Wert am Schnittpunkt f(x) = &quot; &lt;&lt; a.wert(schnittpunkt) &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>edit: ach verdammt zu langsam <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/930149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/930149</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Tue, 29 Nov 2005 20:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to Gerade als Klasse deklarieren on Tue, 29 Nov 2005 20:20:35 GMT]]></title><description><![CDATA[<p>xindon schrieb:</p>
<blockquote>
<p>kaestlinger01 schrieb:</p>
<blockquote>
<p>Nabend!<br />
Mein Problem ist folgendes:<br />
Ich möchte zwei Geraden als KLassen deklarieren und anschliessend prüfen<br />
ob die nen gemeinsamen Schnittpunkt haben. Ich weiss jez nicht wie ich das schreiben soll (p1.x, p1.y...)</p>
<p>Weiss da ev. jemand weiter? Thx, John</p>
</blockquote>
<p>struct Punkt {<br />
int x;<br />
int y;<br />
};</p>
<p>class Gerade {<br />
public:<br />
Punkt Startpunkt;<br />
Punkt Endpunkt;<br />
};</p>
<p>Gerade g;<br />
Gerade h;</p>
<p>(bestimmt kein guter Code...)</p>
<p>Da gibts bestimmt ne lustige Formel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Eine Gerade kann durch zwei Punkte festgelegt werden, aber sie hat weder Start- noch Endpunkt, oder hab ich was verpasst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/930154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/930154</guid><dc:creator><![CDATA[Brutus]]></dc:creator><pubDate>Tue, 29 Nov 2005 20:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Gerade als Klasse deklarieren on Tue, 29 Nov 2005 20:45:45 GMT]]></title><description><![CDATA[<p>Brutus schrieb:</p>
<blockquote>
<p>Eine Gerade kann durch zwei Punkte festgelegt werden, aber sie hat weder Start- noch Endpunkt, oder hab ich was verpasst?</p>
</blockquote>
<p>Ja, mit Start- und Endpunkt wäre es eine Strecke. Man brauch wie schon gesagt 2 Punkte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/930185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/930185</guid><dc:creator><![CDATA[xindon]]></dc:creator><pubDate>Tue, 29 Nov 2005 20:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Gerade als Klasse deklarieren on Tue, 29 Nov 2005 22:11:31 GMT]]></title><description><![CDATA[<p>kaestlinger01 schrieb:</p>
<blockquote>
<p>Mein Problem ist folgendes:<br />
Ich möchte zwei Geraden als Klassen deklarieren und anschliessend prüfen<br />
ob die nen gemeinsamen Schnittpunkt haben. Ich weiss jez nicht wie ich das schreiben soll (p1.x, p1.y...)</p>
</blockquote>
<p>Hallo John,</p>
<p>zunächst einmal solltest Du Dir darüber im Klaren sein, ob Deine Gerade eine Geraden-Gleichung - wie von FireFlow vorgeschlagen - oder eine Gerade in der Ebene oder im Raum ist. Für letztere hat Xindon bereits angedeutet, dass man dafür außer einer Geraden auch noch einen Punkt - bzw. einen Vektor (im mathematischen Sinne) benötigt.<br />
Weiter wäre festzulegen, in welcher Form die Gerade gegeben ist - siehe <a href="http://de.wikipedia.org/wiki/Geradengleichung" rel="nofollow">http://de.wikipedia.org/wiki/Geradengleichung</a>.</p>
<p>Das ganze könnte dann in der Ebene (2D) im einfachsten Fall so aussehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cmath&gt;    // std::sqrt
#include &lt;utility&gt;  // std::pair

class Vektor
{
public:
    Vektor() : m_x( 0.0 ), m_y( 0.0 ) {}
    Vektor( double x, double y ) : m_x( x ), m_y( y ) {}

    // --   Skalarprodukt
    double operator*( const Vektor&amp; b ) const
    {
        return m_x * b.m_x + m_y * b.m_y;
    }
    // --   Division durch einen Skalar
    Vektor operator/( double teiler ) const
    {
        return Vektor( m_x / teiler, m_y / teiler );
    }

    double X() const { return m_x; }
    double Y() const { return m_y; }

    friend std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, const Vektor&amp; v )
    {
        return out &lt;&lt; &quot;(&quot; &lt;&lt; v.m_x &lt;&lt; &quot;; &quot; &lt;&lt; v.m_y &lt;&lt; &quot;)&quot;;
    }
private:
    double m_x, m_y;
};
double abs( const Vektor&amp; v )
{
    return std::sqrt( v.X() * v.X() + v.Y() + v.Y() );
}

class Gerade
{
public:
    // Konstruktor für Normalform
    Gerade( const Vektor&amp; normale, const Vektor&amp; punkt )
        : m_n( normale / abs( normale ) )
        , m_c( punkt * m_n )
    {}
    friend std::pair&lt; Vektor, bool &gt; 
        schnittpunkt( const Gerade&amp; g1, const Gerade&amp; g2 );
private:
    // --   interne Darstellung in Hessescher Normalform
    Vektor m_n; // abs( m_n ) == 1
    double m_c;
};

std::pair&lt; Vektor, bool &gt; schnittpunkt( const Gerade&amp; g1, const Gerade&amp; g2 )
{
    const double EPS = 1.E-8;
    const double det = g1.m_n.X() * g2.m_n.Y() - g2.m_n.X() * g1.m_n.Y();
    if( std::abs( det ) &lt; EPS  )
        return std::make_pair( Vektor(), false );
    return std::make_pair( Vektor( 
        g1.m_c     * g2.m_n.Y() - g2.m_c     * g1.m_n.Y(),
        g1.m_n.X() * g2.m_c     - g2.m_n.X() * g1.m_c     ) / det, true );
}
</code></pre>
<p>Eine kleines Testprogramm sähe dann so aus:</p>
<pre><code class="language-cpp">int main()
{
    using namespace std;
    //         Normale          Punkt auf der Geraden
    Gerade g1( Vektor( 3, -1 ), Vektor( 4, 0 ) );
    Gerade g2( Vektor(-1,  2 ), Vektor( 1, 1 ) );
    std::pair&lt; Vektor, bool &gt; ret = schnittpunkt( g1, g2 );
    if( ret.second )
        cout &lt;&lt; &quot;Schnittpunkt liegt bei: &quot; &lt;&lt; ret.first &lt;&lt; endl;

    Gerade g1_parallel( Vektor( 6, -2 ), Vektor( 5, 7 ) );
    ret = schnittpunkt( g1, g1_parallel );
    if( !ret.second )
        cout &lt;&lt; &quot;kein Schnittpunkt von g1 und g1_parallel&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/930249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/930249</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 29 Nov 2005 22:11:31 GMT</pubDate></item></channel></rss>