<?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[Lenkrakete]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem:<br />
Bin gerade dabei ein kleines Spiel zu programmieren und komme nicht weiter.<br />
Ich erinnere mich, mal ein Video gesehn zu haben, in dem gezeigt wurde, wie man die einzelnen Koordinaten zwischen zwei Objekten berechnet, weiß es aber nicht mehr genau.</p>
<p>Ich habe mal eine Skizze angefertigt, damit ihr wisst was ich meine:<br />
<a href="http://img193.imageshack.us/img193/4082/collision.jpg" rel="nofollow">http://img193.imageshack.us/img193/4082/collision.jpg</a></p>
<p>Man könnte natürlich verschiedene Abfragen machen<br />
if(Flugzeug-&gt;x &gt; 200 &amp;&amp; Flugzeug-&gt;x &lt; 300 ...)<br />
aber es geht doch bestimmt einfacher oder?</p>
<p>Wäre nett wenn mir jmd helfen könnte.<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257359/lenkrakete</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 03:05:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257359.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Dec 2009 12:50:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 12:50:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem:<br />
Bin gerade dabei ein kleines Spiel zu programmieren und komme nicht weiter.<br />
Ich erinnere mich, mal ein Video gesehn zu haben, in dem gezeigt wurde, wie man die einzelnen Koordinaten zwischen zwei Objekten berechnet, weiß es aber nicht mehr genau.</p>
<p>Ich habe mal eine Skizze angefertigt, damit ihr wisst was ich meine:<br />
<a href="http://img193.imageshack.us/img193/4082/collision.jpg" rel="nofollow">http://img193.imageshack.us/img193/4082/collision.jpg</a></p>
<p>Man könnte natürlich verschiedene Abfragen machen<br />
if(Flugzeug-&gt;x &gt; 200 &amp;&amp; Flugzeug-&gt;x &lt; 300 ...)<br />
aber es geht doch bestimmt einfacher oder?</p>
<p>Wäre nett wenn mir jmd helfen könnte.<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828408</guid><dc:creator><![CDATA[Nico12]]></dc:creator><pubDate>Sun, 27 Dec 2009 12:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 13:09:21 GMT]]></title><description><![CDATA[<p>Was möchtest du genau berechnen? Mit &quot;einzelnen Koordinaten zwischen zwei Objekten&quot; meinst du wahrscheinlich die Punkte auf der Verbindungsgeraden, oder?</p>
<p>Bei einer Lenkrakete würde ich jedoch anders vorgehen. Da auch die Ausrichtung (Drehung der Rakete) eine Rolle spielt, musst du Winkel miteinbeziehen. Den Winkel zwischen zwei Punkten (gegenüber der positiven x-Achse) kannst du mit Arcustangens berechnen, in C++ kannst du die Funktion<a href="http://www.cplusplus.com/reference/clibrary/cmath/atan2/" rel="nofollow"> <code>atan2()</code> </a>nehmen. Auf diese Weise weisst du, in welche Richtung die Rakete fliegt. Um daraus wieder kartesische Koordinaten (x und y) zu gewinnen, brauchst du die trigonometrischen Funktionen Sinus und Cosinus (<a href="http://www.cplusplus.com/reference/clibrary/cmath/sin/" rel="nofollow"> <code>sin()</code> </a>bzw.<a href="http://www.cplusplus.com/reference/clibrary/cmath/cos/" rel="nofollow"> <code>cos()</code> </a>).</p>
<p>Das Ganze könnte sinngemäss etwa so aussehen, wobei <code>vx</code> und <code>vy</code> die Geschwindigkeiten der Rakete in x- und y-Richtung repräsentieren ( <code>vRak</code> ist der Betrag der Geschwindigkeit).</p>
<pre><code class="language-cpp">float winkel = atan2(yZiel-yRak, xZiel-xRak);

float vx = vRak * cos(winkel);
float vy = vRak * sin(winkel);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1828420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828420</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Dec 2009 13:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 13:14:17 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnelle Antwort.</p>
<p>Ja ich meinte, die Punkte auf der Verbindungsgerade.<br />
Ich schau mir das mal genauer an und versuch es mal umzusetzen,<br />
ich meld mich dann wieder.<br />
Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828422</guid><dc:creator><![CDATA[Nico12]]></dc:creator><pubDate>Sun, 27 Dec 2009 13:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 13:52:08 GMT]]></title><description><![CDATA[<p>Was ich noch nicht ganz verstehe ist die Sacht mit dem vRak.</p>
<p>Betrag der Geschindigkeit im Sinne von<br />
Summe, also xRak + yRak?</p>
<p>Ich hab gelsen, dass man die Norm eines Vektors auch als Betrag bezeichnet, aber dieses Thema wurde im Unterricht noch nicht behandelt, sprich ich weiß nichts darüber.</p>
<p>Könntest du vRak nochmal näher definieren?</p>
<p>An sonsten ist mir alles klar geworden, nochmal vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828452</guid><dc:creator><![CDATA[Nico12]]></dc:creator><pubDate>Sun, 27 Dec 2009 13:52:08 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 13:56:52 GMT]]></title><description><![CDATA[<p>Nein, für die Gesamtgeschwindigkeit müsstest du den Satz von Pythagoras verwenden, also vRat<sup>2</sup>=xRak<sup>2</sup>+yRak<sup>2</sup></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828457</guid><dc:creator><![CDATA[m-r-x]]></dc:creator><pubDate>Sun, 27 Dec 2009 13:56:52 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 14:03:54 GMT]]></title><description><![CDATA[<p>Nico12 schrieb:</p>
<blockquote>
<p>Ich hab gelsen, dass man die Norm eines Vektors auch als Betrag bezeichnet, aber dieses Thema wurde im Unterricht noch nicht behandelt, sprich ich weiß nichts darüber.</p>
</blockquote>
<p>Das habe ich gemeint. Wenn du einen Vektor (x,y) hast, ist dessen Betrag die Länge des Vektors, also die Wurzel aus x<sup>2+y</sup>2 (siehe auch <a href="http://de.wikipedia.org/wiki/Vektor#Betrag_eines_Vektors" rel="nofollow">Wikipedia</a>).</p>
<p><code>vRak</code> soll dabei eine von dir festgelegte Grösse sein, die aussagt, wie schnell sich die Rakete fortbewegt. Als Einheit musst du dabei irgendetwas Sinnvolles festlegen, wie Pixel pro Frame oder sowas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828462</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Dec 2009 14:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 14:12:31 GMT]]></title><description><![CDATA[<p>Ok, vielen Dank,<br />
ich probiers mal aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828470</guid><dc:creator><![CDATA[Nico12]]></dc:creator><pubDate>Sun, 27 Dec 2009 14:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 14:39:26 GMT]]></title><description><![CDATA[<p>Ich bins, nochmal,<br />
ich habs jetzt mal ausprobiert, aber ich bekomme es einfach nicht hin.<br />
Ich hab mal einen Teil der Funktion gepostet, vllt wisst ihr ja weiter,<br />
ich hab wohl noch nicht alles verstanden, egal welchen Wert ich für vRak nehme, entweder wird die Rakete garnicht abgebildetet bzw ausserhalt des Sichtfelds oder sie bewegt sich nicht und bleibt an ihrer Startposition.</p>
<pre><code class="language-cpp">//player == Flugzeug
//en == enemy
if(en-&gt;rocket_fire == 1)
{
	float winkel = atan2( (player-&gt;y - en-&gt;rocket_y),         
                              (player-&gt;x - en-&gt;rocket_x) );

	en-&gt;rocket_xspeed = vRak * cos(winkel);
	en-&gt;rocket_yspeed = vRak * sin(winkel);

        if(player-&gt;x &lt; en-&gt;x)
        {
	     en-&gt;rocket_x -= en-&gt;rocket_xspeed;
	     en-&gt;rocket_y -= en-&gt;rocket_yspeed;
        }else
        {         
         en-&gt;rocket_x += en-&gt;rocket_xspeed;
	     en-&gt;rocket_y += en-&gt;rocket_yspeed;
        }

        //scroll routine (horizontal scrolling game)
	    en-&gt;rocket_x -=STEP;

//Rakete auf dem Buffer abbilden
pivot_scaled_sprite(buffer, enemy_rocket_b , en-&gt;rocket_x, en-&gt;rocket_y, 
                    0, 0, ftofix(en-&gt;rocket_angle), ftofix(en-&gt;rocket_scale));

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1828486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828486</guid><dc:creator><![CDATA[Nico12]]></dc:creator><pubDate>Sun, 27 Dec 2009 14:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sun, 27 Dec 2009 14:46:02 GMT]]></title><description><![CDATA[<p>Das If-Else ist nicht nötig, da Sinus und Cosinus auch negative Werte liefern können und somit alle Richtungen abgedeckt sind. Addiere die Geschwindigkeit immer zur Position, ohne Fallunterscheidung.</p>
<p>Wenn die Y-Achse deines Koordinatensystems nach unten zeigt, nimm <code>-sin(winkel)</code> statt <code>sin(winkel)</code> . Probier am besten ein wenig aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828493</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 27 Dec 2009 14:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Thu, 14 Jan 2010 21:18:31 GMT]]></title><description><![CDATA[<p>Ich weiss zwar nicht ob es noch aktuell ist, hatte bis eben in etwa das gleiche problem (bin noch blutiger anfänger).<br />
Auf folgende Lösung bin ich gekommen.</p>
<pre><code class="language-cpp">const double PI = 3.14159265;
const double RadToDeg = 180 / PI;
const double DegToRad = PI / 180;

dreieck_a = position_ist_x-position_soll_x;
dreieck_b = position_ist_y-position_soll_y;
dreieck_c = sqrt (pow (dreieck_a,2) + pow (dreieck_b,2));
winkel_alpha = asin (dreieck_a / dreieck_c )*RadToDeg;
winkel_beta = 90 - winkel_alpha;
dreieck_c = speed * time;
dreieck_a = dreieck_c * cos(winkel_beta*DegToRad);
dreieck_b = sqrt (pow(dreieck_c,2) - pow(dreieck_a,2));
position_ist_x = ceil(position_ist_x - dreieck_a);
position_ist_y = ceil(position_ist_y - dreieck_b);
</code></pre>
<p>Evtl. konnte ich ja helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839029</guid><dc:creator><![CDATA[Benson]]></dc:creator><pubDate>Thu, 14 Jan 2010 21:18:31 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Fri, 15 Jan 2010 10:00:49 GMT]]></title><description><![CDATA[<p>Warum nicht einfach so? (wenn du schon Allegro benutzt...)</p>
<pre><code class="language-cpp">float player_x, player_y; // irgendwo von dir festgelegt
  float rakete_x, rakete_y; // aktuelle position oder raketenwerfer position
  float rakete_speed; // speed der rakete in pixeln

  float dist_x, dist_y, dist_z;
  dist_x = player_x - rakete_x;
  dist_y = player_y - rakete_y;
  dist_z = 0;

  normalize_vector_f(&amp;dist_x, &amp;dist_y, &amp;dist_z);
  dist_x *= rakete_speed;
  dist_y *= rakete_speed;

  rakete_x += dist_x;
  rakete_y += dist_y;
</code></pre>
<p>EDIT:</p>
<p>Pi ist übrigens als M_PI in &lt;cmath&gt; definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839153</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 15 Jan 2010 10:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Fri, 15 Jan 2010 20:40:03 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Pi ist übrigens als M_PI in &lt;cmath&gt; definiert.</p>
</blockquote>
<p>Leider ist <code>M_PI</code> weder in C noch in C++ standardisiert und somit nicht portabel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839514</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 15 Jan 2010 20:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sat, 16 Jan 2010 13:03:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Pi ist übrigens als M_PI in &lt;cmath&gt; definiert.</p>
</blockquote>
<p>Leider ist <code>M_PI</code> weder in C noch in C++ standardisiert und somit nicht portabel.</p>
</blockquote>
<p>Man kann ja immer noch acos(1)*2 verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839738</guid><dc:creator><![CDATA[Phoemuex]]></dc:creator><pubDate>Sat, 16 Jan 2010 13:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sat, 16 Jan 2010 15:25:05 GMT]]></title><description><![CDATA[<p>Phoemuex schrieb:</p>
<blockquote>
<p>Man kann ja immer noch acos(1)*2 verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Null? Dann ist ja sogar <code>sqrt(10.f)</code> noch genauer. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839801</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 16 Jan 2010 15:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Lenkrakete on Sat, 16 Jan 2010 23:47:39 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Phoemuex schrieb:</p>
<blockquote>
<p>Man kann ja immer noch acos(1)*2 verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Null? Dann ist ja sogar <code>sqrt(10.f)</code> noch genauer. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Ups <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> , ich meinte natürlich asin(1)*2 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839992</guid><dc:creator><![CDATA[Phoemuex]]></dc:creator><pubDate>Sat, 16 Jan 2010 23:47:39 GMT</pubDate></item></channel></rss>