<?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[Schnittpunkt zu Kreis, Winkelberechnung]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite auf einem Image mit zwei weiteren Images. Zwischen diesen beiden zeichne ich eine Linie mit einem Pfeil an beiden Seiten. Dafür habe ich einen virtuellen Kreis um das einzelne Image herum und berechne den Schnittpunkt der Geraden mit diesem Kreis. An dieser Stelle soll die Pfeilspitze sein. Klappt bedingt, da die Verbindungslinie nicht wirklich in der Mittellinie ist. Die Pfeilspitze des Bis-Image wandert gut mit, aber beim Von geht es immer von einer Stelle ab, nicht der Mitte. Zudem will ich eine Funktion, und nicht Abhängigkeiten prüfen in welchem Quadranten sich Von / Bis befindet. Kann mir jemand helfen ?</p>
<pre><code class="language-cpp">if (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top &gt; img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top &amp;&amp; img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left &gt; img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left)
        {
           // BIS = oben links
           ia = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top;
           ib = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left;

           ic = sqrt(ia * ia + ib * ib);
           if (ic &gt; 0)
           {
               iWinkel = (sin(ia / ic));
           }
           iKx = (img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2) + iRadius * cos(iWinkel);
           iKy = (img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2) + iRadius * sin(iWinkel);

           ib2 = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2 - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top;
           ia2 = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2 - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left;

           ic2 = sqrt(ia2 * ia2 + ib2 * ib2);
           if (ic2 &gt; 0)
           {
               iWinkel2 = 225 - (sin(ia2 / ic2));
           }
           iKx2 = (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2) + iRadius * cos(iWinkel2);
           iKy2 = (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2) + iRadius * sin(iWinkel2);

           frmMain-&gt;Image1-&gt;Canvas-&gt;MoveTo(img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2, img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2);
           frmMain-&gt;Image1-&gt;Canvas-&gt;LineTo(img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2, img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2);
           cpic_draw_arrow(iKx, iKy, iKx2, iKy2, false);
           cpic_draw_arrow(iKx2, iKy2, iKx, iKy, false);
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/207166/schnittpunkt-zu-kreis-winkelberechnung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 08:23:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207166.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Mar 2008 14:14:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schnittpunkt zu Kreis, Winkelberechnung on Tue, 04 Mar 2008 14:14:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite auf einem Image mit zwei weiteren Images. Zwischen diesen beiden zeichne ich eine Linie mit einem Pfeil an beiden Seiten. Dafür habe ich einen virtuellen Kreis um das einzelne Image herum und berechne den Schnittpunkt der Geraden mit diesem Kreis. An dieser Stelle soll die Pfeilspitze sein. Klappt bedingt, da die Verbindungslinie nicht wirklich in der Mittellinie ist. Die Pfeilspitze des Bis-Image wandert gut mit, aber beim Von geht es immer von einer Stelle ab, nicht der Mitte. Zudem will ich eine Funktion, und nicht Abhängigkeiten prüfen in welchem Quadranten sich Von / Bis befindet. Kann mir jemand helfen ?</p>
<pre><code class="language-cpp">if (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top &gt; img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top &amp;&amp; img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left &gt; img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left)
        {
           // BIS = oben links
           ia = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top;
           ib = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left;

           ic = sqrt(ia * ia + ib * ib);
           if (ic &gt; 0)
           {
               iWinkel = (sin(ia / ic));
           }
           iKx = (img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2) + iRadius * cos(iWinkel);
           iKy = (img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2) + iRadius * sin(iWinkel);

           ib2 = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2 - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top;
           ia2 = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2 - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left;

           ic2 = sqrt(ia2 * ia2 + ib2 * ib2);
           if (ic2 &gt; 0)
           {
               iWinkel2 = 225 - (sin(ia2 / ic2));
           }
           iKx2 = (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2) + iRadius * cos(iWinkel2);
           iKy2 = (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2) + iRadius * sin(iWinkel2);

           frmMain-&gt;Image1-&gt;Canvas-&gt;MoveTo(img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2, img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2);
           frmMain-&gt;Image1-&gt;Canvas-&gt;LineTo(img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2, img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2);
           cpic_draw_arrow(iKx, iKy, iKx2, iKy2, false);
           cpic_draw_arrow(iKx2, iKy2, iKx, iKy, false);
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1468050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1468050</guid><dc:creator><![CDATA[Pfeil]]></dc:creator><pubDate>Tue, 04 Mar 2008 14:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittpunkt zu Kreis, Winkelberechnung on Tue, 04 Mar 2008 16:27:34 GMT]]></title><description><![CDATA[<p>Ein paar Kommentare wären ganz schön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1468184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1468184</guid><dc:creator><![CDATA[stein]]></dc:creator><pubDate>Tue, 04 Mar 2008 16:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittpunkt zu Kreis, Winkelberechnung on Tue, 04 Mar 2008 20:46:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// Zur Laufzeit werden Images erzeugt img[] mit einer fortlaufender Nummer
        // iRelationVonZu ist ein zweidimensionaler Array, der die Nummern der erzeugten Images beinhaltet
        // iRelationVonZu[Von_Nummer][Nach_Nummer]

        // Bezogen auf das Von-Image habe ich es in 4 Quadranten eingeteilt.
        // Wenn sich das Von-Objekt rechts unterhalb des Zielobjektes (Bis) befindet
        if (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top &gt; img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top &amp;&amp; img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left &gt; img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left)
        {
           // BIS = oben links

           // Über Phytagoras Seiten a, b und c berechnen
           ia = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top;
           ib = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left;
           ic = sqrt(ia * ia + ib * ib);

           if (ic &gt; 0)
           {
               // Winkel ausrechnen, den die Linie des Von-Images in Richtung Bis-Image einschlägt
               iWinkel = (sin(ia / ic));
           }
           // Berechnen des Kreisschnittpunktes im Bis-Image
           // Hierbei gehe ich von einem imaginären Kreis aus, der um das Bis-Image gezogen ist, Mittelpunkt ist der Mittelpunkt des Bis-Images
           iKx = (img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2) + iRadius * cos(iWinkel);
           iKy = (img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2) + iRadius * sin(iWinkel);

           // Das gleiche dann für das andere Image
           ib2 = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2 - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top;
           ia2 = img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2 - img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2; //dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left;

           ic2 = sqrt(ia2 * ia2 + ib2 * ib2);
           if (ic2 &gt; 0)
           {
               iWinkel2 = 225 - (sin(ia2 / ic2));
           }
           iKx2 = (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2) + iRadius * cos(iWinkel2);
           iKy2 = (img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2) + iRadius * sin(iWinkel2);

           frmMain-&gt;Image1-&gt;Canvas-&gt;MoveTo(img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Width / 2, img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][0&rsqb;&rsqb;-&gt;Height / 2);
           frmMain-&gt;Image1-&gt;Canvas-&gt;LineTo(img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Left + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Width / 2, img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Top + img[iRelationVonZu[i][1&rsqb;&rsqb;-&gt;Height / 2);

           // Pfeil-Funktion, die StartX, StartY, EndX, EndY Koordinaten erhält und am Ende die Spitze zeichnet.
           cpic_draw_arrow(iKx, iKy, iKx2, iKy2, false);
           cpic_draw_arrow(iKx2, iKy2, iKx, iKy, false);
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1468382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1468382</guid><dc:creator><![CDATA[Pfeil]]></dc:creator><pubDate>Tue, 04 Mar 2008 20:46:48 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittpunkt zu Kreis, Winkelberechnung on Wed, 05 Mar 2008 14:34:38 GMT]]></title><description><![CDATA[<p>Einige Kleinigkeiten beachten und schon geht's!</p>
<p>- Phytagoras nicht nötig, Berechnung des Winkels über tan() möglich<br />
- Grundsätzlich mit double rechnen, um Rundungsfehler zu vermeiden<br />
- mit sprechenden Variablennamen idx, idy statt ia, ib vermeidet man Denkfehler<br />
- Vor Umwandlung in int (für Koodinaten nötig!) 0.5 addieren um Rundungsfehler zu minimieren<br />
- iWinkel und iWinkel2 sind identisch, Bewertung des Quadranten durch Vorzeichen bei r*sin() , bzw r*cos() möglich</p>
<p>Hier eine mögliche Veränderung des Codes:</p>
<pre><code class="language-cpp">#define IREL iRelationVonZu[i]
	 if (img[IREL[0&rsqb;&rsqb;-&gt;Top &gt; img[IREL[1&rsqb;&rsqb;-&gt;Top &amp;&amp; img[IREL[0&rsqb;&rsqb;-&gt;Left &gt; img[IREL[1&rsqb;&rsqb;-&gt;Left)
	 {
		// BIS = oben links
		double ddx, ddy;
		double dWinkel;
		int iKx, iKy;
		int iKx2, iKy2;

		// Winkel der Images zueinander berechnen
		ddy = img[IREL[0&rsqb;&rsqb;-&gt;Top - img[IREL[1&rsqb;&rsqb;-&gt;Top;
		ddx = img[IREL[0&rsqb;&rsqb;-&gt;Left - img[IREL[1&rsqb;&rsqb;-&gt;Left;

		if (ddx!=0)
		{
		  // Winkel ausrechnen, den die Linie des Von-Images in Richtung Bis-Image einschlägt
		  dWinkel = tan(ddy/ddx);
		}
		// Berechnen des Kreisschnittpunktes im Bis-Image
		// Hierbei gehe ich von einem imaginären Kreis aus, der um das Bis-Image gezogen ist, Mittelpunkt ist der Mittelpunkt des Bis-Images
		// Koordinaten an img[0]
		iKx = ((img[IREL[1&rsqb;&rsqb;-&gt;Left + (double)img[IREL[1&rsqb;&rsqb;-&gt;Width / 2.0) + dRadius * cos(dWinkel) + 0.5);
		iKy = ((img[IREL[1&rsqb;&rsqb;-&gt;Top + (double)img[IREL[1&rsqb;&rsqb;-&gt;Height / 2.0) + dRadius * sin(dWinkel) +0.5);
		// Koordinaten an img[1]
		iKx2 = (((double)img[IREL[0&rsqb;&rsqb;-&gt;Left + (double)img[IREL[0&rsqb;&rsqb;-&gt;Width / 2.0) - dRadius * cos(dWinkel)+ 0.5);
		iKy2 = (((double)img[IREL[0&rsqb;&rsqb;-&gt;Top + (double)img[IREL[0&rsqb;&rsqb;-&gt;Height / 2.0) - dRadius * sin(dWinkel)+ 0.5);

		// Hilfslinie zur Kontrolle
		frmMain-&gt;Image1-&gt;Canvas-&gt;MoveTo(img[IREL[0&rsqb;&rsqb;-&gt;Left + img[IREL[0&rsqb;&rsqb;-&gt;Width / 2, img[IREL[0&rsqb;&rsqb;-&gt;Top + img[IREL[0&rsqb;&rsqb;-&gt;Height / 2);
		frmMain-&gt;Image1-&gt;Canvas-&gt;LineTo(img[IREL[1&rsqb;&rsqb;-&gt;Left + img[IREL[1&rsqb;&rsqb;-&gt;Width / 2, img[IREL[1&rsqb;&rsqb;-&gt;Top + img[IREL[1&rsqb;&rsqb;-&gt;Height / 2);

		// Pfeil-Funktion, die StartX, StartY, EndX, EndY Koordinaten erhält und am Ende die Spitze zeichnet.
		cpic_draw_arrow(iKx, iKy, iKx2, iKy2, false);
		cpic_draw_arrow(iKx2, iKy2, iKx, iKy, false);
	 } 	

  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1468814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1468814</guid><dc:creator><![CDATA[Bcbap]]></dc:creator><pubDate>Wed, 05 Mar 2008 14:34:38 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittpunkt zu Kreis, Winkelberechnung on Wed, 05 Mar 2008 15:34:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank !</p>
<p>Bei einem Winkel bis ca. 60° läuft alles wie es soll. Danach verschiebt es sich. Aber nun hab ich endlich mal den richtigen Ansatzpunkt ! Vielen Dank !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1468856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1468856</guid><dc:creator><![CDATA[Pfeil]]></dc:creator><pubDate>Wed, 05 Mar 2008 15:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to Schnittpunkt zu Kreis, Winkelberechnung on Thu, 20 Mar 2008 14:16:00 GMT]]></title><description><![CDATA[<p>Hallo nochmal. Die Variante, zu der ich angefragt hatte läuft dank Bcbap.</p>
<p>Nun will ich noch folgendes erreichen:<br />
Keine Verbindung in der Mitte sondern zwei Verbindungen zwischen den Images. Praktisch vom Mittelpunkt aus gesehen einige Pixel darüber und darunter. Dann wieder jeweils den Schnittpunkt der beiden Linien mit dem virtuellen Kreis berechnen. Das Ganze für beide Images.</p>
<p>Hat da jemand einen Lösungsansatz oder gleiches schon mal umgesetzt ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1477842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1477842</guid><dc:creator><![CDATA[Pfeil]]></dc:creator><pubDate>Thu, 20 Mar 2008 14:16:00 GMT</pubDate></item></channel></rss>