
%============
%============
% !TEX TS-program = XeLaTeX
% !TeX root=SuTech_Thesis_RTeX.tex
%============
%============

\appendix

\renewcommand{\thealgorithm}{\alph{chapter}--\arabic{algorithm}}
%============


% در برخی از توزیع‌های تک، به منظور اضافه شدن نام پیوست به فهرست مطالب، لازم هست خط زیر را فعال داشته باشید.
%\addcontentsline{toc}{chapter}{پیوست آ}


\chapter[کدهای برنامه‌نویسی]{
	کدهای برنامه‌نویسی
	%	\raisebox{-.2cm}{\includegraphics[scale=.017]{Rlogo}}
	}\label{App:RefMan1}





در این بخش نمونه مثالهایی از جدول، نمودار و الگوریتم در لاتک را خواهیم دید.
بسیاری از اوقات حرکت بین دو تصویر از یک صحنه با یکی از مدل‌های پارامتری ذکر شده در جدول \eqref{tab:MotionModels} قابل مدل‌سازی می‌باشد.
%  
\begin{table}[ht]
	\caption{
		مدل‌های تبدیل
		}
	\label{tab:MotionModels}
	\centering
	\onehalfspacing
	\begin{tabular}{|r|c|l|r|}
		\hline \hline
		 نام مدل & درجه آزادی & تبدیل مختصات & توضیح 
		\\ 
		\hline \hline
		 انتقالی & ۲ & 
		{ \cellcolor{Red!40} 
		 $\begin{aligned} x'=x+t_x \\ y'=y+t_y \end{aligned}$
		}
		   & 
		 انتقال دوبعدی
		\\ 
		\hline
		 اقلیدسی & ۳ & 
		$\begin{aligned} x'=x\cos\theta - y\sin\theta+t_x \\ y'=x\sin\theta+y\cos\theta+t_y \end{aligned}$  
		 &  انتقالی $+$ دوران 
		 \\ 
		\hline \hline
	\end{tabular} 
\end{table}





%============
%============

\section{
	الگوریتم
	}

شناخته ‌شده‌ترین روش تخمین ماتریس هوموگرافی الگوریتم تبدیل خطی مستقیم (\lr{DLT\LTRfootnote{Direct Linear Transform}}) است.  فرض کنید چهار زوج نقطه  متناظر در دو تصویر در دست هستند،  $\mathbf{x}_i\leftrightarrow\mathbf{x}'_i$   و تبدیل با رابطه
$\mathbf{x}'_i = H\mathbf{x}_i$
نشان داده می‌شود که در آن:
\[\mathbf{x}'_i=(x'_i,y'_i,w'_i)^\top  \]
و
\[ H=\left[
\begin{array}{ccc}
	h_1 & h_2 & h_3 \\ 
	h_4 & h_5 & h_6 \\ 
	h_7 & h_8 & h_9
\end{array} 
\right]\]
رابطه زیر را برای الگوریتم  \eqref{alg:DLT} لازم داریم.
\begin{equation}\label{eq:DLT_Ah}
	\left[
	\begin{array}{ccc}
		0^\top & -w'_i\mathbf{x}_i^\top & y'_i\mathbf{x}_i^\top \\ 
		w'_i\mathbf{x}_i & 0^\top & -x'_i\mathbf{x}_i^\top \\ 
		- y'_i\mathbf{x}_i^\top & x'_i\mathbf{x}_i^\top & 0^\top
	\end{array} 
	\right]
	\left(
	\begin{array}{c}
		\mathbf{h}^1 \\ 
		\mathbf{h}^2 \\ 
		\mathbf{h}^3
	\end{array} 
	\right)=0
\end{equation}




با مفروضات فوق، الگوریتم \lr{DLT} به صورت نشان داده شده 
در الگوریتم \ref{alg:DLT}  خواهد بود.\\


\begin{algorithm} [H]  % [t]
	\onehalfspacing
	\caption{الگوریتم \lr{DLT} برای تخمین ماتریس هوموگرافی.} \label{alg:DLT}
	\begin{algorithmic}[1]
		\Require $n\geq4$
		 زوج نقطهٔ متناظر در دو تصویر 
		${\mathbf{x}_i\leftrightarrow\mathbf{x}'_i}$،
		
		\Ensure 
		 ماتریس هوموگرافی $H$ به نحوی‌که: 
		$\mathbf{x}'_i = H \mathbf{x}_i$.
		
		\State
		  برای هر زوج نقطهٔ متناظر
		$\mathbf{x}_i\leftrightarrow\mathbf{x}'_i$ 
		ماتریس $\mathbf{A}_i$ را با استفاده از رابطهٔ \ref{eq:DLT_Ah} محاسبه کنید.
		
		\State
		  ماتریس‌های ۹ ستونی  $\mathbf{A}_i$ را در 
		  قالب یک ماتریس $\mathbf{A}$ ۹ ستونی ترکیب کنید. 
		  
		\State 
		 تجزیهٔ مقادیر منفرد \lr{(SVD)}  ماتریس $\mathbf{A}$ را بدست آورید.  
		 بردار واحد متناظر با کمترین مقدار منفرد جواب $\mathbf{h}$ خواهد بود.
		 
		\State
		   ماتریس هوموگرافی $H$ با تغییر شکل $\mathbf{h}$ حاصل خواهد شد.
		   
	\end{algorithmic}
\end{algorithm}



	نمونه‌های کاربردی به منظور طراحی و درج 
	الگوریتم فارسی  در بسته‌ زی‌پرشین طراحی شده‌ و قابل استفاده هستند.
	در اینجا به نحوه قرارگیری الگوریتم درون یک جعبه با عرض کمتر از پهنای متن اصلی
	نوشتار توجه کنید.


% برای الگوریتم
\begin{center}
	\begin{minipage}{0.75\linewidth}
		\begin{algorithm}[H]
			\caption{الگوریتم مرتب‌سازی}
			\begin{algorithmic}[1]
				\Procedure{\lr{Sort} }{$A$}
				\For{$i \gets 1$ تا $n$}
				\For{$j \gets i+1$ تا $n$}
				\If{$A[i] > A[j]$}
				\State \Call{ \lr{Swap} }{$A[i], A[j]$} 
				\EndIf
				\EndFor
				\EndFor
				\EndProcedure
			\end{algorithmic}
		\end{algorithm}
	\end{minipage}
\end{center} 



به تفاوت بین ارجاع به برچسب الگوریتم و درج شمارنده الگوریتم دقت کنید.
شمارنده قبل از رسیدن به الگوریتم بعدی، یک عدد کمتر خواهد بود.
الگوریتم \ref{alg:merge-sort} (الگوریتم \thealgorithm)، 
مرتب‌سازی ادغامی را نشان می‌دهد.\\



\begin{algorithm}
	\caption{
		الگوریتم مرتب‌سازی ادغامی (\lr{Merge Sort})
		}
	\label{alg:merge-sort}
	\begin{algorithmic}[1]
		\Require آرایه $A$ با $n$ عضو
		\Ensure آرایه $A$ به صورت صعودی مرتب شده
		\Procedure{\lr{MergeSort}}{$A, p, r$}
		\If{$p < r$}
		\State $q \gets \lfloor (p + r) / 2 \rfloor$
		\State \Call{\lr{MergeSort}}{$A, p, q$}
		\State \Call{\lr{MergeSort}}{$A, q+1, r$}
		\State \Call{\lr{Merge}}{$A, p, q, r$}
		\EndIf
		\EndProcedure
		
		\Procedure{\lr{Merge}}{$A, p, q, r$}
		\State $n_1 \gets q - p + 1$
		\State $n_2 \gets r - q$
		\State ایجاد آرایه‌های $L[1 \dots n_1+1]$ و $R[1 \dots n_2+1]$
		
		\For{$i \gets 1$ \text{تا}  $n_1$}
		\State $L[i] \gets A[p + i - 1]$
		\EndFor
		
		\For{$j \gets 1$ \text{تا}  $n_2$}
		\State $R[j] \gets A[q + j]$
		\EndFor
		
		\State $L[n_1+1] \gets \infty$
		\State $R[n_2+1] \gets \infty$
		\State $i \gets 1$
		\State $j \gets 1$
		
		\For{$k \gets p$ \text{تا}  $r$}
		\If{$L[i] \leq R[j]$}
		\State $A[k] \gets L[i]$
		\State $i \gets i + 1$
		\Else
		\State $A[k] \gets R[j]$
		\State $j \gets j + 1$
		\EndIf
		\EndFor
		\EndProcedure
	\end{algorithmic}
\end{algorithm}



%============
%============

\section{
	رسم نمودار
	}


\hfill
\resizebox{.4\textwidth}{!}  {
	\begin{tikzpicture}[>=latex] % [>=Straight Barb]
		
		\draw[very thick,Blue, <->] (0,6) 
		node[above left=1pt] { $S$ } 
		node[below left=3pt] {\rl{(انحلال‌پذیری)}}
		-- (0,0) --
		node[midway,below=.3cm] { $Q>0$ \rl{انحلال گرماگیر}  }
		(7,0) node[below left]{ $T$ \rl{(دما)} } ;
		
		\coordinate (A) at (0,1.5);
		\coordinate (B) at (6,6); 
		
		\draw[ultra thick, Red, looseness=1.] 
		(A) node[above right=.2 and 1]{ } 
		to[out=10, in=250] (B)  ;
		
\end{tikzpicture}  }


	اکنون می‌توانیم نمودار ساده‌ای که در فصل اول آورده شده بود را با دستورات تک
	ترسیم کنیم. تمامی متغیرهای این نمودار 
	در اختیار ما بوده و قابل تغییر هستند\footnote{
		نمونه مثال‌هایی از بسته \lr{Tikz} را می‌توانید در \url{http://www.texample.net/tikz/examples/} ببینید.}. 
		در ادامه یک نمونه زیبا از نمودار رسم شده با بسته‌ی 
		\lr{TikZ}
		در شکل 
		\ref{fig:parabola}
		نشان داده شده است.
		
		
		

	

\begin{figure} [H]
	\centering
	\resizebox{.85\textwidth}{!}  {
	\begin{tikzpicture}[scale=2.4]
		\shade[top color=blue,bottom color=gray!40] 
		(0,0) parabola (1.5,2.25) |- (0,0);
		\draw (1.05cm,2pt) node[above] 
		{$\displaystyle\int_0^{3/2} \!\!x^2\mathrm{d}x$};
		
		\draw[style=help lines] (0,0) grid (3.9,3.9)
		[step=0.25cm]      (1,2) grid +(1,1);
		
		\draw[->] (-0.2,0) -- (4,0) node[right] {$x$};
		\draw[->] (0,-0.2) -- (0,4) node[above] {$f(x)$};
		
		\foreach \x/\xtext in {1/1, 1.5/1\frac{1}{2}, 2/2, 3/3}
		\draw[shift={(\x,0)}] (0pt,2pt) -- (0pt,-2pt) node[below] {$\xtext$};
		
		\foreach \y/\ytext in {1/1, 2/2, 2.25/2\frac{1}{4}, 3/3}
		\draw[shift={(0,\y)}] (2pt,0pt) -- (-2pt,0pt) node[left] {$\ytext$};
		
		\draw (-.5,.25) parabola bend (0,0) (2,4) node[below right] {$y=x^2$};
	\end{tikzpicture}	}
	\caption{
		یک نمودار زیبا  با قابلیت بزرگ‌نمایی بسیار، بدون از دست دادن کیفیت
		}
	\label{fig:parabola}
\end{figure}



در منطق شناختی پویا تغییر وضعیت موجود توسط داده‌های جدید را به‌روزرسانی می‌خوانیم. ساده‌ترین مثال زمانی است که عاملی می‌فهمد که گزاره‌ی $ \varphi $ برقرار است. به‌روزرسانی با یک گزاره در این مثال به این معنی است که گزینه‌هایی که عامل ممکن می‌دانست ولی در آنها گزاره‌ی $ \varphi $ برقرار نیست، حذف می‌شوند. 


در یک سیستم چند عاملی ممکن است عامل‌های مختلف دسترسی مختلفی به داده‌های جدید داشته باشند و همچنین اطلاعات عامل‌ها درباره‌ی دیگر عامل‌ها نقش بازی کند، از این رو می‌توان به‌روزرسانی پیچیده‌تری را  مدل کرد: فرض کنید بازیکن 1 کارت خود را به بازیکن 2 نشان دهد و بازیکن 3 نیز این را ببیند ولی از محتوای کارت خبردار نشود. در نتیجه دانش بازیکنان به این صورت تغییر می‌کند: بازیکن 2 می‌داند که محتوای کارت بازیکن 1 چیست، بازیکن 3 می‌داند که بازیکن 2 می‌داند محتوای کارت بازیکن 1 چیست ولی خودش محتوا را نمی‌داند و بازیکن 1 می‌داند که بازیکن 3 این را می‌داند.


\begin{figure} [H]
	\centering
	\includegraphics[width=.8\textwidth]{fig8}
	\caption{
		تلاقی دنیای نشر دیجیتالی، ریاضیات و زیبایی
	}
	\label{math}
\end{figure}

