Skip to content

Commit

Permalink
specka implementacyjna
Browse files Browse the repository at this point in the history
git-svn-id: https://src.iem.pw.edu.pl/repo/2012L_JIMP2_projekt_c_gr26@7 5a6c44e8-1669-43b8-b6fe-008c34979fb4
  • Loading branch information
turekb committed Mar 6, 2012
1 parent fc9ec67 commit fe6515a
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 15 deletions.
Binary file added doc/class.dia
Binary file not shown.
Binary file added doc/class.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified doc/jimp.pdf
Binary file not shown.
65 changes: 50 additions & 15 deletions doc/jimp.tex
Expand Up @@ -140,25 +140,45 @@ \subsection{Dodatkowe uwagi}

\newpage
\section{Specyfikacja implementacyjna}
\subsection{Algorytm}
\subsubsection{Działanie programu}
\todo[noline]{szkic!}
\begin{lstlisting}[caption=Przykładowe wywołanie]
wczytaj dane z~pliku poly do struktury p
\subsection{Struktura programu}

\begin{figure}[h]
\centering
\includegraphics[width=0.8\textwidth]{class.png}
\caption{Diagram klas}
\end{figure}

Program podzielony jest na trzy pliki:
\begin{description}
\item[siatkonator.c] Plik zawierający główną funkcję odpowiedzialną za wczytanie argumentów i~zależnie od nich wykonanie algorytmu sklejania siatek.
\item[siatkonator\_IO.c] Plik zawierający funkcje związane z~czytaniem i~zapisywaniem plików \emph{node}, \emph{ele} i \emph{poly} do struktur \texttt{triangulateio}.
\item[mesh\_ops.c] Plik zawierający funkcje obsługujące logikę sklejania siatek (znajdowanie wielokąta otaczającego siatkę, wycinanie dziur w~siatkach i~łączenie siatek).
\item[common.c] Plik zawierający funkcje pomocnicze (takie jak wypisywanie wiadomości).
\end{description}

\subsubsection{Funkcje modułu \texttt{mesh\_ops}}
\begin{description}
\item[\texttt{bounding\_polygon}] funkcja przyjmująca wskaźnik na wczytaną gotową siatkę i~znajdująca otaczający ją wielokąt (który należy wyciąć z~otoczki przed przeprowadzeniem triangulacji).
\item[\texttt{add\_hole}] Funkcja przyjmująca wskaźnik na wczytaną otoczkę (być może już z~dziurami) i~na wielokąt otaczający jedną ze sklejanych siatek. Funkcja dodaje do otoczki dziurę w~miejscu, w~którym zostanie w~nią wklejona siatka.
\item[\texttt{mesh\_cat}] Funkcja przyjmująca dwa wskaźniki na siatki i~dodająca elementy drugiej siatki do elementów pierwszej siatki.
\end{description}

\subsection{Algorytmy}
\begin{lstlisting}[caption=Pseudokod algorytmu głównej funkcji programu sklejającej siatki]
wczytaj dane z pliku poly do struktury p
dla kazdego pliku .ele:
wczytaj dane z~plikow ele i~nodes do struktury E
znajdz w~strukturze E krawedzie, ktore wystepuja tylko raz
usun te krawedzie ze stroktury E
wczytaj dane z plikow ele i nodes do struktury E
znajdz w strukturze E krawedzie, ktore wystepuja tylko raz
usun te krawedzie ze struktury E
dodaj te krawedzie do struktury P jako sekcje
dodaj dziure do struktury P wewnatrz kazdego trojkata ze struktury E
wykonaj triangulacje na strukturze p
zapisz wynik triangulacji do plikow ele i~node
wykonaj triangulacje na strukturze p do siatki S
dla kazdego pliku .ele:
wstaw siatke z pliku do dziur w siatce S
zapisz wynik triangulacji do plikow ele i node
\end{lstlisting}

\subsubsection{Znajdowanie krawędzi, które występują tylko raz}
\todo[noline]{szkic!}
\todo[noline]{sortować T?}
\begin{lstlisting}[caption=Przykładowe wywołanie]
\begin{lstlisting}[caption=Pseudokod funkcji szukającej wielokąta otaczającego daną siatkę: \texttt{bounding\_polygon}]
struct element {
double lower_node_id
double higher_node_id
Expand All @@ -168,14 +188,29 @@ \subsubsection{Znajdowanie krawędzi, które występują tylko raz}
T = element[]

Dla kazdego elementu e:
pos~= znajdz w~T element
pos = znajdz w T element
if pos:
T[pos]->more_than_once = true
continue
else:
T[pos]->lower_node_id = e->lower_node_id
T[pos]->higher_node_id = e->higher_node_id
T[pos]->more_than_once = false
Dla kazdego elementu e w T:
Jezeli e->more_than_once == true:
dodaj e jako punkt w danych wyjsciowych
barycenter = srodek ciezkosci pierwszego trojkata w T
dodaj dziure do danych wyjsciowych w~punkcie barycenter
\end{lstlisting}

\subsection{struktury danych}
Struktura danych, której będę używał do komunikacji między funkcjami to struktura \texttt{triangulateio} dostarczona wraz z~programem triangle.
Struktura ta pozwala opisać siatkę na każdym etapie jej budowania (także siatki wyjściowe).

Jej wadą jest fakt, że nie jest specjalizowana do konkretnych zadań i~wiele pól nie będzie miało zastosowania.
Mimo to jest już napisana, udokumentowana i~mogę być pewien, że zawiera wszystkie potrzebne pola.

Zastosowanie innej struktury, jako struktury pośredniej wymagałoby tłumaczenia jej do \texttt{triangulateio} przed wykonaniem funkcji \texttt{triangulate()}.


\end{document}

0 comments on commit fe6515a

Please sign in to comment.