Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.08.2009, 18:14

[gelöst] Schiefer Wurf

Hallo,

ich möchte eine Art 2D-Tontaubenschießen programmieren. Die Tontaube und das Projektil sollen nach den physik. Gesetzten des schiefen Wurfs fliegen.

Ein Kreisbewegung funktioniert ja folgendermaßen:

Quellcode

1
2
3
4
5
6
7
8
int x, y;
int radius = 50;

static double winkel = 0;
double  delta_winkel = 0.01;

x=radius * cos (winkel);
y=radius * sin (winkel);


Jetzt funktionier ja so ein Vorgehen nur bei "symetrischen" Bewegungen. Wie kann ich aber eine solche Bewegung realisieren:

x=v0*cos(a)*t
y=v0*sin(a)*t-(g/2)*t^2 mit g=fester Faktor

Ist ja nicht symetrisch, dadurch lassen sich die Koordinaten für den nächsten Punkt nicht ausrechnen.

Danke
Dani

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

05.08.2009, 18:38

Re: Schiefer Wurf

Zitat von »"dani k."«


Ist ja nicht symetrisch, dadurch lassen sich die Koordinaten für den nächsten Punkt nicht ausrechnen.


Wieso nicht? Tust du doch mit den Gleichungen?

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

05.08.2009, 19:28

Du musst nur t hochsetzten und kannst damit jeden punkt der kurve errechnen.

4

06.08.2009, 08:13

Zitat von »"Databyte"«

Du musst nur t hochsetzten und kannst damit jeden punkt der kurve errechnen.


Guten Morgen!

Wie kann ich t entsprechend meinem Timer hochzählen?

Grüße

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

06.08.2009, 08:34

C-/C++-Quelltext

1
++t;


:roll:

6

06.08.2009, 11:07

:D Das war die Geschichte mit dem Wald und den Bäumen...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
double x, y;
    int v0=150;     //Anfangsgeschwindigkeit

    static double winkel = 100;
    int t;
    int g=10;

    t=t+1;
    printf("\nmeine_Unterprogramme.c:Variable t hat den Wert %i", t);

    x=v0*cos(winkel)*t;
    y=v0*sin(winkel)*t-(g/2)*(t^2);


Jetzt sollte ich noch t=0 einbauen, da ich sonst mit dem Wert t=-370085 starte. Baue ich aber int t=0; ein, wird folglich bei jedem durchlauf genullt und t ist immer 1. Auch wenn ich t extern (Im Mainprog) nulle... Wie mach ich das? Gibt es einen Bereich der nicht durch den Timer beeinflusst wird?[/quote]

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

06.08.2009, 11:29

t einfach außerhalb der Schleife deklariern/definiern...

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

8

06.08.2009, 15:06

Zitat von »"dani k."«

Guten Morgen!


Ohh.. da war ich schon wach ? ;)

Zitat von »"David_pb"«

t einfach außerhalb der Schleife deklariern/definiern...


oder wenns in ner Funktion is, als static ;)

Du musst dabei aber noch aufpassen, dass entweder T nur jede Sekunde um eins hochgesetzt wird oder um einen Weicheren übergang zu erzeugen, machst du t zu einem float
und rechnest statt 1 immer die zeit seit der letzten Erhöung dazu.

9

06.08.2009, 16:45

Vielen Dank für die Hilfe, nun läuft es!

Zitat von »"Databyte"«

Zitat von »"dani k."«

Guten Morgen!


Ohh.. da war ich schon wach ? ;)

Ich auch :D

Werbeanzeige