//---------------------------------------------------------------------------
//  Relatywistyczna droga

#include <vcl\vcl.h>
#pragma hdrstop

#include "fautostrada.h"
#include "relatyw3d.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
 v = 0;                             //prędkość ruchu
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
 TPunkt obserwator( 4, 1, 0);   //pozycja obserwatora
 TRelatyw3d rel( obserwator,
    0, 0, PaintBox1 -> Width, PaintBox1 -> Height,  //okno ekranowe
    v,                      //prędkość ruchu
    PaintBox1 -> Canvas,    //aparat graficzny
    0.05);                  //odległość oka od ekranu


 int i, il_podzial = 10;
 double h = -5;             //poziom gruntu
                            //p1 ...p4 odpowiadają za pas drogi
                            //p5 ...p8 odpowiadają za linię środkową
                            //p9 ...p10 - to przydrożne słupy
 TPunkt p1(0,-10,h), p2(0,10,h), p3(-5000,10,h), p4(-5000,-10,h);
 TPunkt p5(0,-0.2,h), p6(0,0.2,h), p7(0,0.2,h), p8(0,-0.2,h);
 TPunkt p9(0,0,h), p10(0,0,40);

 PaintBox1 -> Canvas -> Pen -> Color = clSilver;
 PaintBox1 -> Canvas -> Brush -> Color = clGray;
 rel.czworokat_relatyw( p1, p2, p3, p4, il_podzial);  //pas drogi

 PaintBox1 -> Canvas -> Pen -> Color = clYellow;
 PaintBox1 -> Canvas -> Brush -> Color = clYellow;
 for( i = 0; i < 10; i++)   //linie środkowe
 {
    p5.x = p6.x = - i * 10;
    p7.x = p8.x = p5.x - 5;
    rel.czworokat_relatyw( p5, p6, p7, p8, 1);
 }

 PaintBox1 -> Canvas -> Pen -> Color = clWhite;
 for( i = 0; i < 20; i++)   //słupy
 {
    if( i < 2)
        PaintBox1 -> Canvas -> Pen -> Width = 3;
    else
    if( i < 5)
        PaintBox1 -> Canvas -> Pen -> Width = 2;
    else
        PaintBox1 -> Canvas -> Pen -> Width = 1;

    if( i < 10)
        p9.x = p10.x = - i * 20;
    else
        p9.x = p10.x = - i * 25;
    p9.y = p10.y = -10.;
    rel.linia_relatyw( p9, p10, il_podzial);

    p9.y = p10.y = 10.;
    rel.linia_relatyw( p9, p10, il_podzial);
 }
}
//---------------------------------------------------------------------------
//  Naciśnięto jakiś klawisz. Gdy Escape - koniec
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
 if( Key == VK_ESCAPE)
    Close();
}
//---------------------------------------------------------------------------
//  Ruszono suwak
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
 v = (double)TrackBar1 -> Position * 1000.;//uzgodnione z Min, Max suwaka
 PaintBox1 -> Refresh();
}
//---------------------------------------------------------------------------
