<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="mathml.xsl"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
   <link rel="stylesheet" href="styles.css" type="text/css" />
   <title>Trójmiejski Integrator Pomiarów</title>
</head>

<body>

<div class="menu">
<table><tr>
<td>&nbsp;</td>
<td><a href="index.php">Wstęp</a></td>
<td class="sel"><a href="projekt.xml">Projekt</a></td>
<td><a href="instytucje.php">Instytucje</a></td>
<td><a href="parametry.php">Parametry</a></td>
<td><a href="pomiary.php">Pomiary</a></td>
<td style="width:100%"></td>
</tr></table>
</div>

<h3>Założenia</h3>

<div class="tip">

<p>Każdy pomiar
jest opisany przez: (a) nazwę instytucji, która go dokonała, (b) współrzędne geograficzne
miejsca pomiaru, (c) dzień pomiaru, (d) zmierzoną wiekość fizyczną. Serwer WWW Instytutu
Budownictwa Wodnego umożliwia proste wyszukiwanie informacji o pomiarach. Można wyszukać
pomiary dokonane przez wszystkie instytucje albo przez jedną, wybraną instytucję.
Można wyszukać wszystkie mierzone wielkości fizyczne albo uzyskać informację o pomiarach
jednej, wybranej wielkości fizycznej. Można także zawęzić poszukiwania do wskazanego,
prostokątnego rejonu (przez podanie współrzędnych geograficznych) lub zawęzić poszukiwania
do wskazanego przedziału czasu (przez podanie daty początku i końca).</p>

<p>W trakcie projektowania bazy danych zrezygnowano z przechowywania niektórych informacji:</p>
<ul>
  <li>czas pomiaru jest przechowywany z dokładnością do dnia, czyli nie ma informacji
      o godzinie i minucie pomiaru,</li>
  <li>miejsce pomiaru jest zredukowane do dwóch wymiarów, czyli brakuje informacji o
      głębokości (wysokości) pomiaru.</li>
</ul>
<p>Część brakujących informacji można umieścić w formie swobodnej w polu <i>uwagi</i>,
które jest atrybutem pomiaru, albo w polu <i>opis</i>, które jest atrybutem miejsca
pomiaru. Również w formie swobodnej można opisać okres (częstotliwość) pomiarów
w polu <i>okres</i>, które jest atrybutem mierzonej wielkości fizycznej.</p>

<p>Oprócz informacji o pomiarach przechowywane są również informacje o instytucjach,
które przystąpiły do Porozumienia, oraz informacje o osobach, które pracują w tych
instytucjach i są odpowiedzialne, za przygotowywanie danych o pomiarach. Te osoby
są również odpowiedzialne za udzielanie informacji o sposobach pozyskaniach danych
pomiarowych, gdyż właścicielami danych pomiarowych są instytucje, które je wykonały
a nie Trójmiejski Integrator Pomiarów.</p>

<p>Ponieważ, jednym z celów było zaprezentowanie punktów pomiarowych na tle
mapy Zatoki Gdańskiej, dlatego trzeba zapamiętać jeszcze kontur Zatoki Gdańskiej.
Można by go odczytywać z pliku ale o wiele prościej przechowywać go również
w bazie danych.</p>

<h3>Projekt bazy danych</h3>

<p>Zdecydowano, że dane będą gromadzone w relacyjnej bazie danych. Do przechowywania
informacji o pomiarach wykorzystano RDBMS PostgreSQL w wersji 7.4 pracującym pod
kontrolą systemu operacyjnego Linux (Debian Sarge). PostgreSQL jest najlepszym zarządcą relacyjnych
baz danych w świecie Open Source, najbardziej zgodnym ze standardem języka SQL oraz
przygotowanym do przetwarzania ogromnych ilości informacji.</p>

<p>Do udostępniania danych wykorzystano serwer stron WWW o nazwie Apache. Serwer Apache
w wersji 1.3 pracuje pod kontrolą systemu OpenBSD. Z serwerem stron zintegrowany jest
interpreter języka PHP w wersji 4.3, który jest odpowiedzialny za budowanie dynamicznych
stron WWW prezentujących dane pobrane z bazy PostgreSQL. Do dynamicznego tworzenia
mapy z zaznaczonymi miejscami pomiarów wykorzystano bibliotekę GD, która jest 
dodatkowym modułem interpretera PHP.</p>

<p>Do bazy danych istnieje również dostęp autoryzowany. Przeznaczony jest dla
administratora systemu, którego zadaniem jest wprowadzanie, aktualizowanie i modyfikowanie
danych o pomiarach. Dostęp autoryzowany umożliwia serwer stron WWW Apache w wersji 2.0.
Serwer ten udostępnia strony po łączu szyfrowanym HTTPS. Pracuje pod kontrolą systemu
Linux (Debian Sarge) i jest z nim zintegrowany interpreter języka PHP w wersji 4.3.</p>

<p>Kodowanie polskich znaków diakrytycznych jest ujednolicone we wszystkich trzech
składnikach systemu. Wybrano kodowanie 8-bitowe zgodne z normą ISO-8859-2.</p>

<p>W chwili obecnej serwer baza danych i autoryzowany dostęp jest posadowiony na komputerze
klasy CELERON 400 (mistral.ibwpan.gda.pl), a serwer publicznych stron WWW na komputerze
klasy PENTIUM 120 (www.ibwpan.gda.pl).</p>

<h4>Normalizacja danych</h4>

<p>Normalizacja polega na przedstawieniu wszystkich gromadzonych danych w postaci
powiązanych ze sobą relacji (zwanych w języku SQL tabelami). Nie ma sensu przedstawiania
całego procesu normalizacji. Zostanie tu przedstawione jedynie końcowe rozwiązanie.</p>

<p>Cztery relacje narzucają się same: (a) mierzone wielkości fizyczne, (b) instytucje,
(c) telefony kontaktowe do osób zatrudnionych w tych instytucjach, (d) kontur 
Zatoki Gdańskiej.</p>

<p>Relacja przechowująca informacje o mierzonych wielkościach fizycznych nosi nazwę
PARAMETR i wiąże ze sobą trzy atrybuty: identyfikator parametru, nazwę parametru,
jednostkę parametru. Dla zwiększenia czytelności zdecydowano się, że identyfikator
parametru będzie ciągiem liter, dalej zwanym symbolem parametru. Symbol parametru
musi być unikalny, gdyż jest kluczem głównym tej relacji.</p>

<p>Relacja przechowująca informację o instytucjach, które przystąpiły do porozumienia
nosi nazwę INSTYTUCJA i wiążę ze sobą 5 atrybutów: identyfikator instytucji,
nazwę instytucji, adres instytucji (dwa atrybuty: ulica z numerem budynku
i miasto z kodem pocztowym), adres strony domowej instytucji. Dla zwiększenia czytelności
zdecydowano się, że identyfikator instytucji będzie ciągiem liter, dalej zwanym symbolem
instytucji. Symbol instytucji musi być unikalny, gdyż jest kluczem głównym tej relacji.</p>

<p>Relacja przechowująca informację o telefonach kontaktowych
nosi nazwę KONTAKT. Instytucja może mieć wiele telefonów kontaktowych ale
telefon kontaktowy nie może należeć do wielu instytucji. Stąd wynika, że związek
<img src="kontakt.gif" alt="Relacje KONTAKT i INSTYTUCJA" /> 
z relacją INSTYTUCJA jest typu jeden-do-wielu. Relacja KONTAKT wiążę ze sobą
6 atrybutów: identyfikator instytucji, priorytet kontaktu, nazwę kontaktu, 
numer telefony, adres poczty elektronicznej (dwa atrybuty: nazwa użytkownika
i nazwa serwera pocztowego). Para atrybutów: identyfikator instytucji i priorytet kontaktu
muszą jednoznacznie identyfikować krotkę w tej relacji, gdyż ta para jest kluczem
głównym. Z tego wynika, że dla jednej instytucji nie może być dwóch kontaktów
z tym samym priorytetem. Priorytet jest liczbą całkowitą. Im większa jest to liczba
tym niższy jest priorytet kontaktu. Nazwa kontaktu może być nazwiskiem pracownika
(np. dr Antoni Walter), albo funkcją (np. Sekretariat), albo urządzeniem (np. fax).
Jeśli jest znany adres poczty elektronicznej związanej z tym kontaktem to należy
wypełnić pola nazwa użytkownika (to co jest przed @) i nazwa serwera pocztowego
(to co jest za @). Rozbicie adresu poczty elektronicznej na dwa pola nie jest
przypadkowe. Umożliwia ono zabezpieczenie adresu poczty elektronicznej
przed przechwyceniem przez spamerów.</p>



<p><img src="mapa.gif" alt="Relacja MAPA" /> Relacja przechowująca informację o konturze Zatoki Gdańskiej nosi nazwę MAPA.
Mapa będzie składała się z wypełnionych wielokątów rysowanych jeden na drugi.
Przyjęto, że ląd będzie tłem, a na niego będą nakładane wielokąty wypełnione
kolorem niebieskim (woda) i jeśli trzeba znowu ląd (wyspy). Oprócz wielokątów
można nałożyć linię łamaną (granica). Ten sposób reprezentowania mapy
wymusza następujące atrybuty relacji: numer kolejny punktu, numer warstwy,
typ warstwy, długość i szerokość geograficzna. Numer kolejny punktu jest
kluczem głównym tej relacji i jednocześnie decyduje o kolejności rysowania
punktów w każdym wielokącie. Numer warstwy też nie jest obojętny gdyż rysowanie
poszczególnych wielokątów odbywa się w kolejności rosnących numerów warstwy.</p>

<p>Prostym rozwiązaniem relacji przechowującej informacje o pomiarach byłaby
relacja o atrybutach: kto (instytucja), gdzie (długość i szerokość geograficzna),
kiedy (dzień), co (parametr) zmierzył. Ale okazuje się, że liczba krotek
przechowywanych w takiej relacji niesłychanie szybko by się powiększała.
Na przykład Wydział Ochrony Środowiska UM Gdańsk przez cały rok, codziennie
mierzy 11 parametrów w 15 stacjonarnych punktach i 10 innych parametrów w
innych 14 stacjonarnych punktach. Po prostym wymnożeniu otrzymujemy 111325
krotek. A jest to tylko jedna instytucja w jednym roku. Pierwszą redukcję
krotek można uzyskać zastępując dzień pomiaru przez dzień początku
i dzień końca okresu pomiarowego (np: 2003-01-01 i 2003-12-31). Dla tych
samych danych będziemy mieli już tylko 305 krotek. Co więcej, jeśli
w następnym roku te same parametry będą mierzone w tych samych stacjach
pomiarowych to wystarczy we wszystkich krotkach zamienić koniec okresu
pomiarowego 2003-12-31 na 2004-12-31 i liczba krotek pozostanie 305.
Dalszą redukcję można uzyskać jeśli się zauważy, że te krotki są realizacją
dwóch iloczynów kartezjańskiego: 11 parametrów w 15 punktach i 10 parametrów
w 14 punktach. Podstawową cechą języka SQL jest tworzenie iloczynu
kartezjańskiego zbiorów i obróbka wyników tego iloczynu (filtrowanie,
sortowanie itp.) Należy w osobnej relacji umieścić mierzone parametry
i w osobnej relacji punkty pomiarowe. Aby można było spiąć ze sobą
<img src="pomiar.gif" alt="Relacja POMIAR i jej składowe" /> 
te krotki należy w obu relacjach umieścić atrybut z identyfikatorem grupy
pomiarów. Dla ogólności wprowadzono jeszcze trzecią relację, która przechowuje
listę okresów pomiarowych. To daje możliwość przechowywania pomiarów, które
na przykład wykonuje się przez tydzień na wiosnę i przez dwa tygodnie na jesieni.</p>

<p>Ostatecznie pomiary są przechowywane w czterech relacjach. Relacja centralna
o nazwie POMIAR ma atrybuty: identyfikator grupy pomiarów, identyfikator
instytucji, która tą grupę wykonała, uwagi w formacie swobodnym o tej grupie.</p>

<p>Druga relacja o nazwie MIEJSCE ma atrybuty: identyfikator grupy pomiarów,
długość i szerokość geograficzna, opis punktu w formie swobodnej. Kluczem głównym
w tej relacji jest trójka: identyfikator grupy pomiarów, długość geograficzna
i szerokość geograficzna. Oznacza to, że dla tej samej grupy pomiarów nie może
być dwóch takich samych punktów.</p>

<p>Trzecia relacja o nazwie CZAS ma atrybuty: identyfikator grupy pomiarów,
dzień początku i dzień końca okresu pomiarowego. Kluczem głównym
w tej relacji jest para identyfikator grupy pomiarów i dzień początku.
Oznacza to, że dla tej samej grupy pomiarów nie może być dwóch okresów 
zaczynających się w tym samym dniu. Tak na prawdę sens mają tylko okresy,
w których początek następnego okresu jest późniejszy końca wcześniejszego
okresu.</p>

<p>Czwarta relacja o nazwie CZUJNIK
ma atrybuty: identyfikator grupy pomiarów, identyfikator parametru i okres
(częstotliwość) pomiaru w formacie swobodnym. Kluczem głównym
w tej relacji jest para identyfikator grupy pomiarów i identyfikator parametru.
Oznacza to, że dla tej samej grupy pomiarów nie można dwa razy mierzyć 
tego samego parametru. Teoretycznie może się zdarzyć, że są dwa pomiary tego
samego parametru różniące się częstotliwością pomiaru (np. raz na godzinę i
co sekundę. Ale ponieważ atrybut <i>okres</i> ma format swobodny więc można
napisać <i>1h i 2s</i>.</p>

<p>Jak widać z atrybutów tych
relacji nie jest przechowywana kolejność okresów pomiarowych, kolejność
mierzonych parametrów, ani kolejność punktów pomiarowych.</p>

<h4>Wprowadzanie danych</h4>

<p>Dane o pomiarach wprowadza się do bazy za pośrednictwem plików tekstowych.
Plik tekstowy składa się z linii. Każda linia opisuje jedną grupę pomiarów.
W żadnej wartości opisującej grupy pomiarów nie mogą znaleźć się znaki
specjalne, którymi są nawiasy sześcienne, przecinek i kreska pionowa: { } , |.
Wszystkie spacje i tabulatory występujące na początku lub końcu oraz przed i
po znakach specjalnych zostaną usunięte.
Ogólna postać pliku pomiarowego wygląda następująco:</p>

<p>
<i>instytucja</i> | <i>uwagi</i> | <i>lista miejsc</i> | <i>lista okresów</i> | <i>lista parametrów</i><br />
<i>instytucja</i> | <i>uwagi</i> | <i>lista miejsc</i> | <i>lista okresów</i> | <i>lista parametrów</i><br />
<i>instytucja</i> | <i>uwagi</i> | <i>lista miejsc</i> | <i>lista okresów</i> | <i>lista parametrów</i><br />
...
</p>

<p>Kolejność pól w każdej linii taka, jak w powyższym przykładzie i nie można jej 
zmieniać. Pierwsze pole <i>instytucja</i> to oczywiście symbol instytucji. Pole <i>uwagi</i>
ma format swobodny.</p>

<p>Trzecie pole <i>lista miejsc</i> jest listą miejsc pomiarowych
separowanych przecinkami: <i>miejsce</i>, <i>miejsce</i>, <i>miejsce</i>, ... Każde
miejsce składa się minimum z dwóch pól: długość i szerokość geograficzna, dlatego
musi być ujęte w nawiasy sześcienne: {<i>szerokość</i>|<i>długość</i>} albo
{<i>szerokość</i>|<i>długość</i>|<i>opis</i>}. Jak widać wolno pomijać ostatnie
pola, a przyjmują one wartość <i>null</i>. Długość i szerokość jest liczbą rzeczywistą.
Separatorem miejsca dziesiętnego musi być kropka.</p>

<p>Czwarte pole <i>lista okresów</i> jest listą okresów pomiarowych
separowanych przecinkami: <i>okres</i>, <i>okres</i>, <i>okres</i>, ...
Każdy okres składa się z dwóch pól: dzień początku i dzień końca okresu.
Data musi być w formacie <i>rrrr</i>-<i>mm</i>-<i>dd</i>.
Jeśli użytkownik wpisze tylko jedną datę nie ujętą w nawiasy
sześcienne to system przyjmie tę datę jako dzień końca i dzień początku okresu.
Innymi słowy będzie to jednodniowy okres pomiarowy. Jeśli użytkownik ujmie
pojedynczą datę w nawiasy sześcienne to system przyjmie jako dzień końca wartość
<i>null</i>, co wygeneruje błąd, bo koniec okresu pomiarowego jest atrybutem
obowiązkowym.</p>

<p>Piąte pole <i>lista parametrów</i> jest listą zmierzonych wartości fizycznych
separowanych przecinkami: <i>parametr</i>, <i>parametr</i>, <i>parametr</i>, ...
Każdy parametr może się składać się z dwóch pól: symbol parametru i okresu
(częstotliwość) pomiaru. Jeśli użytkownik chce wpisać obie wartości to ten element
listy musi być ujęty w nawiasy sześcienne a wartości muszą być odseparowane
pionową kreską: {<i>parametr</i>|<i>okres</i>}. Jeśli okres (częstotliwość)
pomiaru nie jest znany to można napisać symbol parametru ujęty w nawiasy
sześcienne, albo prościej, tylko symbol parametru (bez nawiasów sześciennych).</p>

<p>Dwa przykłady:</p>

<p style="text-align:left; font-family:monospace">UMSop | zmiana czujnika temperatury w maju 2003 | {18.5633 | 54.4633 | Sopot na wysokości PTTK}, {18.5667 | 54.4583} | {2003-03-01 | 2003-09-30} | Tot_Col, Faec_Col, pH, BOD5, DO, clr</p>

<p>Powyższy rekord spowoduje wpisanie jednej krotki do relacji POMIAR (identyfikator grupy
pomiarów zostanie nadany automatycznie), dwóch krotek do relacji MIEJSCE,
jednej krotki do relacji CZAS i pięciu krotek do relacji CZUJNIK. Ta jedna linia
zawiera w sobie 10 elementarnych faktów o dokonanych pomiarach.</p>

<p style="text-align:left; font-family:monospace">MIR-ZO | ICES: 520 | {18.412000 | 55.425333 | Z13, głęb. 85m} | 2003-10-18 | POP, temp, S, DO</p>

<p>Drugi przykład spowoduje wpisanie jednej krotki do relacji POMIAR, jednej krotki
do relacji MIEJSCE, jednej krotki do relacji CZAS i czterech krotek do relacji
CZUJNIK. Ta jedna linia zawiera w sobie 4 elementarne fakty o dokonanych pomiarach.</p>


<h3>Rysowanie mapy</h3>

<p>Pierwsze założenie polega na tym, że elipsoidę obrotową jaką jest ziemia (geoidę)
przybliżam kulą.</p>

<p>Dowolny punkt na kuli można wyrazić liczbami
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>[</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo><mi>z</mi><mo>]</mo></math>
w przestrzeni kartezjańskiej albo we współrzędnych geograficznych 
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>[</mo><mi>R</mi><mo>,</mo><mi>&varphi;</mi><mo>,</mo><mi>&lambda;</mi><mo>]</mo></math>.
Stała <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>R</mi></math>
to promień kuli ziemskiej, która wynosi: 6370289 m. Kąt
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&varphi;</mi></math>
to kąt wzniesienia (dodatni na północ), a kąt
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&lambda;</mi></math>
to kąt odchylenia (dodatni na wschód). Gdańsk jest w okolicach
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&varphi;</mi><mo>=</mo><mn>54</mn><mo>o</mo></math>
i
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&lambda;</mi><mo>=</mo><mn>18</mn><mo>o</mo></math>.
</p>

<div style="text-align: center;">
<img style="float:none" src="globus.gif" alt="globus" />
</div>

<p>Jeśli mamy punkt 
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>[</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>,</mo><mi>z</mi><mo>]</mo><mo>=</mo><mo>[</mo><mi>R</mi><mo>,</mo><mn>0</mn><mo>,</mo><mn>0</mn><mo>]</mo></math>
to po obrocie o kąt
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&varphi;</mi></math>
wokół osi OY mamy:</p>

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow><mo>[</mo>
 <mtable>
  <mtr><mtd><mi>x</mi><mo>'</mo></mtd></mtr>
  <mtr><mtd><mi>y</mi><mo>'</mo></mtd></mtr>
  <mtr><mtd><mi>z</mi><mo>'</mo></mtd></mtr>
 </mtable>
<mo>]</mo></mrow>
<mo>=</mo>
<mrow><mo>[</mo>
 <mtable>
  <mtr> <mtd><mo>cos</mo><mi>&varphi;</mi></mtd> <mtd><mn>0</mn></mtd> <mtd><mo>-</mo><mo>sin</mo><mi>&varphi;</mi></mtd> </mtr>
  <mtr> <mtd><mn>0</mn></mtd> <mtd><mn>1</mn></mtd> <mtd><mn>0</mn></mtd> </mtr>
  <mtr> <mtd><mo>sin</mo><mi>&varphi;</mi></mtd> <mtd><mn>0</mn></mtd> <mtd><mo>cos</mo><mi>&varphi;</mi></mtd> </mtr>
 </mtable>
<mo>]</mo></mrow>
<mrow><mo>[</mo>
 <mtable>
  <mtr><mtd><mi>R</mi></mtd></mtr>
  <mtr><mtd><mn>0</mn></mtd></mtr>
  <mtr><mtd><mn>0</mn></mtd></mtr>
 </mtable>
<mo>]</mo></mrow>
</math>

<p>A następnie po obrocie o 
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>&lambda;</mi></math>
wokół osi OZ mamy:</p>

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow><mo>[</mo>
 <mtable>
  <mtr><mtd><mi>x</mi><mo>'</mo><mo>'</mo></mtd></mtr>
  <mtr><mtd><mi>y</mi><mo>'</mo><mo>'</mo></mtd></mtr>
  <mtr><mtd><mi>z</mi><mo>'</mo><mo>'</mo></mtd></mtr>
 </mtable>
<mo>]</mo></mrow>
<mo>=</mo>
<mrow><mo>[</mo>
 <mtable>
  <mtr> <mtd><mo>cos</mo><mi>&lambda;</mi></mtd><mtd><mo>-</mo><mo>sin</mo><mi>&lambda;</mi></mtd> <mtd><mn>0</mn></mtd>  </mtr>
  <mtr> <mtd><mo>sin</mo><mi>&lambda;</mi></mtd> <mtd><mo>cos</mo><mi>&lambda;</mi></mtd> <mtd><mn>0</mn></mtd> </mtr>
  <mtr> <mtd><mn>0</mn></mtd> <mtd><mn>0</mn></mtd> <mtd><mn>1</mn></mtd> </mtr>
 </mtable>
<mo>]</mo></mrow>
<mrow><mo>[</mo>
 <mtable>
  <mtr><mtd><mi>R</mi><mo>cos</mo><mi>&varphi;</mi></mtd></mtr>
  <mtr><mtd><mn>0</mn></mtd></mtr>
  <mtr><mtd><mi>R</mi><mo>sin</mo><mi>&varphi;</mi></mtd></mtr>
 </mtable>
<mo>]</mo></mrow>
</math>

<p>Ostatecznie otrzymujemy:</p>

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow><mo>{</mo>
 <mtable columnalign="left">
  <mtr><mtd><mi>x</mi><mo>=</mo><mi>R</mi><mo>cos</mo><mi>&varphi;</mi><mo>cos</mo><mi>&lambda;</mi></mtd></mtr>
  <mtr><mtd><mi>y</mi><mo>=</mo><mi>R</mi><mo>cos</mo><mi>&varphi;</mi><mo>sin</mo><mi>&lambda;</mi></mtd></mtr>
  <mtr><mtd><mi>z</mi><mo>=</mo><mi>R</mi><mo>sin</mo><mi>&varphi;</mi></mtd></mtr>
 </mtable>
</mrow>
</math>

<h4>Rzut równoległy</h4>

<p>Wrzucie równoległym obieramy punkt na kuli, który ze środkiem kuli tworzy wektor
rzutowania. Możemy ten wektor oznaczyć
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>[</mo><msub><mi>x</mi><mn>0</mn></msub><mo>,</mo><msub><mi>y</mi><mn>0</mn></msub><mo>,</mo><msub><mi>z</mi><mn>0</mn></msub><mo>]</mo></math>.
Ten wektor jest nachylony do płaszczyzny równika pod kątem 
<math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>&varphi;</mi><mn>0</mn></msub></math>
i odchylony od południka zerowego o kąt
<math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>&lambda;</mi><mn>0</mn></msub></math>
Płaszczyzna na którą będziey rzutować jest prostopadła do tego wektora i można ją umieścić
w dowolnym miejscu przestrzeni np. w początku układu współrzędnych. Wtedy będzie opisana równaniem: 
<math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>x</mi><mn>0</mn></msub><mi>x</mi><mo>+</mo><msub><mi>y</mi><mn>0</mn></msub><mi>y</mi><mo>+</mo><msub><mi>z</mi><mn>0</mn></msub><mi>z</mi><mo>=</mo><mn>0</mn></math>.
Prostą, wzdłuż której rzutujemy możemy opisać parametrycznie:
</p>

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow><mo>{</mo>
 <mtable columnalign="left">
  <mtr><mtd><mi>x</mi><mo>=</mo><msub><mi>x</mi><mn>0</mn></msub><mi>t</mi><mo>+</mo><msub><mi>x</mi><mo>p</mo></msub></mtd></mtr>
  <mtr><mtd><mi>y</mi><mo>=</mo><msub><mi>y</mi><mn>0</mn></msub><mi>t</mi><mo>+</mo><msub><mi>y</mi><mo>p</mo></msub></mtd></mtr>
  <mtr><mtd><mi>z</mi><mo>=</mo><msub><mi>z</mi><mn>0</mn></msub><mi>t</mi><mo>+</mo><msub><mi>z</mi><mo>p</mo></msub></mtd></mtr>
 </mtable>
</mrow>
</math>

<p>gdzie 
<math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>x</mi><mo>p</mo></msub></math>,
<math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>y</mi><mo>p</mo></msub></math>,
<math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>z</mi><mo>p</mo></msub></math>
są współrzędnymi punktu, który chcemy rzutować. Rozwiązując układ równań
z czterema niewiadomymi wyznaczamy współrzędne 
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>,
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>y</mi></math>,
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>z</mi></math>
z punktu na płaszczyźnie rzutowania.
</p>

<p>Jednak o wiele prostsze rozważania będą gdy dokonamy obrotu kuli o kąty
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>-</mo><msub><mi>&varphi;</mi><mn>0</mn></msub></math>
i
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>-</mo><msub><mi>&lambda;</mi><mn>0</mn></msub></math>.
Obrót o
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>-</mo><msub><mi>&lambda;</mi><mn>0</mn></msub></math>
nie powoduje zmiany współrzędnej
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>z</mi></math>,
dlatego możemy uprościć obrót do dwóch współrzędnych.
</p>

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow><mo>{</mo>
 <mtable columnalign="left">
  <mtr><mtd><mi>x</mi><mo>'</mo><mo>=</mo><mi>x</mi><mo>cos</mo><msub><mi>&lambda;</mi><mn>0</mn></msub> <mo>+</mo> <mi>y</mi><mo>sin</mo><msub><mi>&lambda;</mi><mn>0</mn></msub></mtd></mtr>
  <mtr><mtd><mi>y</mi><mo>'</mo><mo>=</mo><mo>-</mo><mi>x</mi><mo>sin</mo><msub><mi>&lambda;</mi><mn>0</mn></msub> <mo>+</mo> <mi>y</mi><mo>cos</mo><msub><mi>&lambda;</mi><mn>0</mn></msub></mtd></mtr>
  <mtr><mtd><mi>z</mi><mo>'</mo><mo>=</mo><mi>z</mi></mtd></mtr>
 </mtable>
</mrow>
</math>

<p>Teraz dokonujemy obrotu o
<math xmlns="http://www.w3.org/1998/Math/MathML"><mo>-</mo><msub><mi>&varphi;</mi><mn>0</mn></msub></math>
</p>

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow><mo>{</mo>
 <mtable columnalign="left">
  <mtr><mtd><mi>x</mi><mo>'</mo><mo>'</mo><mo>=</mo><mi>x</mi><mo>'</mo><mo>cos</mo><msub><mi>&varphi;</mi><mn>0</mn></msub> <mo>+</mo> <mi>z</mi><mo>'</mo><mo>sin</mo><msub><mi>&varphi;</mi><mn>0</mn></msub></mtd></mtr>
  <mtr><mtd><mi>y</mi><mo>'</mo><mo>'</mo><mo>=</mo><mi>y</mi><mo>'</mo></mtd></mtr>
  <mtr><mtd><mi>z</mi><mo>'</mo><mo>'</mo><mo>=</mo><mo>-</mo><mi>x</mi><mo>'</mo><mo>sin</mo><msub><mi>&varphi;</mi><mn>0</mn></msub> <mo>+</mo> <mi>z</mi><mo>'</mo><mo>cos</mo><msub><mi>&varphi;</mi><mn>0</mn></msub></mtd></mtr>
 </mtable>
</mrow>
</math>

<p>Po takiej transformacji płaszczyną rzutowania jest płaszczyna o równaniu 
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi><mo>=</mo><mn>0</mn></math>.
Obliczona współrzędna 
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>y</mi><mo>'</mo><mo>'</mo></math>
staje się współrzędną
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>
na płaszczyźnie rzutowania, a współrzędna 
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>z</mi><mo>'</mo><mo>'</mo></math>
staje się współrzędną
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>y</mi></math>
na płaszczyźnie rzutowania.</p>

</div>

</body>
</html>

