Od kilku dni z kumplem meczymy sie z symulacja - trajektoria(rozna oczywiscie) jazdy zuzlowca(kropki ;-) ) po torze.
Jedym pomyslem bylo podzielenie toru na 8 czesci
I tak w 1 czesci sprawdzal swoje polozenie (x,y) i losowal 1 z 10 mozliwych punktow (x,y) w czesci 2 i jechal do niej itd. z tym ze metoda ta niesprawdzala sie gdy wchodzil w luk. Podczas poruszania miedzy czesciami kropka czesto wyjezdzala poza tor. Zreszta ta metoda ogranicza ta symulacje do 10 schematow w danej czesci...i tylko na jednym torze bez mozliwosci przelozenia implementacji pod inne tory
Moze lepiej zrobic tor, nastepnie maske (2 kolory) oddzielic tor od band i sprobowac zrobic mu sztuczna inteligencje...i niech sam sie meczy ;) z tym ze wtedy minimum potrzebnych parametrow bedzie spora i na razie widze takie jak : predkosc,przyspieszenie,predkoscMax,skret-obrot,dlugoscToru?,start, i w sumie nie wiem jak sie do tego zabrac.
Moze ktos robil kiedys popularne "kreski" i moglby podpowiedziec to i owo.
Za wszelka pomoc bede wdzieczny i z gory dziekuje za pomoc.
gg:2718965

- Rejestracja:ponad 18 lat
- Ostatnio:około 8 lat
- Lokalizacja:Poznań
- Postów:295
jezeli tor sklada sie tylko z odcinkow prostych i łuków sprobuj je opisac matematycznie tzn
for y:=0 to 200 ----> x:=(y-b)/a (kozystasz ze wzorów y:=a*x+b)
łuki analogicznie i losuj x z wyznaczonego zakresu dla danego y
Moze sie pojawic taka sytuacja ze dla danego y bedziesz mial wiecej niz jeden zakres x (np dla wejscia w łuk i wyjścia) wiec musisz okreslic ze jezeli poprzedni x mial takie wspolrzedne to nastepny musi miec podobne a nie skok
- Rejestracja:około 19 lat
- Ostatnio:prawie 17 lat
no np parabola lotu piłki.
bardzo banalna robiona na szybko.
wykorzystujemy tu funkcję
f(x) := y*y;
oczywiscie trzeba uwzględnić żę na formatce mam nieco inny "układ współrzędnych".
obliczając położenie nastepnego pixela mozesz bez problemu określić trajektorię ruchu jakiego kolwiek obiektu na formatce
oto kod do paraboli;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Shape1: TShape;
Button1: TButton;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var x:integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=false;
x:=-30; // funkcja bedzie sie zaczynała od x= -30
doublebuffered:=true; // no i żeby nie migało
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var y:integer;
begin
y:=x*x+form1.Height div 2 ; // obliczenie y dla danego x , form1.Height div 2 po to zeby bylo na srodku
shape1.Top := y - form1.Height div 2 ;// zmiana pozycji shape1 (Y)
shape1.Left:=x+form1.width div 2 ; //zmiana pozycji shape1 (X)
inc(x);
if x>30 then begin // no a to po to żeby animacja się powtarzala
x:=-30;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;
end.