//---------------------------------------------------------------------------
//  Relatywistyczna kula

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

#include "fkula.h"
#include "math.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( 0, 15, 5);      //pozycja aparatu (z boku, lekko z góry).
 TRelatyw3d rel( obserwator,
        0, 0, PaintBox1 -> Width, PaintBox1 -> Height,  //okno ekranowe
        v,                          //prędkość ruchu
        PaintBox1 -> Canvas);       //aparat graficzny

 int il_podzial = 1;
 double r = 1, fi, teta, dfi = M_PI/12., dteta = M_PI/12.;
 double rr, x, y, z;
 TPunkt p1, p2;
 bool pierwszy_punkt;

 for( teta = 0.; teta <= M_PI; teta += dteta)   //równoleżniki
 {
    rr = r * sin( teta);
    z = r * cos( teta);
    pierwszy_punkt = true;
    for( fi = 0.; fi >= -2.0*(M_PI + .01); fi -= dfi)
    {
        PaintBox1 -> Canvas -> Pen -> Color = fi < -M_PI ? clSilver : clGray;

        x = rr * cos( fi);
        y = rr * sin( fi);
        if( pierwszy_punkt)
        {
            pierwszy_punkt = false;
            p2 = TPunkt( x, y, z);
        }
        else
        {
            p1 = p2;
            p2 = TPunkt( x, y, z);
            rel.linia_relatyw( p1, p2, il_podzial);
        }
    }
 }

 for( fi = 0.; fi >= -2.0*(M_PI + .01); fi -= dfi)  //południki
 {
    pierwszy_punkt = true;
    PaintBox1 -> Canvas -> Pen -> Color = fi < -M_PI ? clSilver : clGray;

    for( teta = 0.; teta <= M_PI; teta += dteta)
    {
        rr = r * sin( teta);
        z = r * cos( teta);
        x = rr * cos( fi);
        y = rr * sin( fi);
        if( pierwszy_punkt)
        {
            pierwszy_punkt = false;
            p2 = TPunkt( x, y, z);
        }
        else
        {
            p1 = p2;
            p2 = TPunkt( x, y, z);
            rel.linia_relatyw( p1, p2, il_podzial);
        }
    }
 }
 PaintBox1 -> Canvas -> Brush -> Color = clWhite;
 PaintBox1 -> Canvas -> TextOut( 10, 10, AnsiString ("v = ") + AnsiString( v) + AnsiString (" m/s"));
}
//---------------------------------------------------------------------------
//  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();
}
//---------------------------------------------------------------------------
