Witam serdecznie,
więc problem mam z tym aby po osiągnięciu przez samolot dystansu dzielącego P1 i P2 automatycznie leciał z P2 do P3 itd. Tylko wydaje mi się, że X:=X+(V*dt); moze być błędne gdyż tor ruchu nie jest wzdłóż osi X a jest pod jakimś kątem.
Dystans między kolejnymi punktami obliczam funkcją (wynik w [m]):
function Dystans(P1, P2: TPoint): Integer;
begin
Result := Round(Sqrt(Sqr(P1.X - P2.X) + Sqr(P1.Y - P2.Y)));
end;
Mając daną aktualną wartość X obliczam wartość Y za pomocą funkcji:
Function ObliczX(x1,y1,x2,y2, X:Real):Real;// liczenie wartości Y z równania prostej przechodzącej przez dwa punkty (x1,y1) i (x2,y2) i punkt X
Begin
Result:=((y2-y1)/(x2-x1))*x-((y2-y1)/(x2-x1))*x1+y1;
End;
procedure TBAL.Button1Click(Sender: TObject);
var obliczenia : TextFile;
P:TPoint;
t,dt:real;
X,Y,S:Real;
V:integer;
P1,P2,P3,P4,P5,P6,P7,P8 : TPoint; // WAYPOINT'S PUNKTY NAWIGACYJNE
begin
t:=0; // czas początkowy
X:=P1.X; // X startu wynosi X pierwszego punktu.
Y:=P1.Y; // Y startu wynosi Y pierwszego punktu.
V:=20; // stała prędkość lotu.
dt:=0.5; // wylicz pozycję co 0.5s lotu.
S:= 29000 // wyliczona wcześniej całkowita długość trasy
AssignFile(obliczenia, 'obliczenia.txt');
rewrite(obliczenia);
repeat
X:=X+(V*dt);
{Czy dobrze wyliczam X? Czy należy dodać jakiś współczynnik pochylenia prostej?}
Y:=ObliczX(P1.X,P1.Y,P2.X,P2.Y, X); // oblicza Y dla zadanego X
{i tutaj nie wiem jak zrobić aby po przeleceniu dystansu dzielącego P1 i P2 leciał wzdłóż P2 i P3 }
Writeln(obliczenia,FormatFloat('0.00' , t),' ',FormatFloat('0.00' , X),' ',FormatFloat('0.00' , Y));
t:=t+dt;
until CalkowityDystans>=S;
CloseFile(obliczenia);
end;