




<!DOCTYPE html>
<html class="   ">
  <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#">
    <meta charset='utf-8'>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    
    
    <title>rapport_stage_2014/Rapport_stage.tex at master · gaultier/rapport_stage_2014 · GitHub</title>
    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-114.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-144.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144.png">
    <meta property="fb:app_id" content="1401488693436528">

      <meta content="@github" name="twitter:site" /><meta content="summary" name="twitter:card" /><meta content="gaultier/rapport_stage_2014" name="twitter:title" /><meta content="Contribute to rapport_stage_2014 development by creating an account on GitHub." name="twitter:description" /><meta content="https://avatars3.githubusercontent.com/u/3737145?v=2&amp;s=400" name="twitter:image:src" />
<meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="https://avatars3.githubusercontent.com/u/3737145?v=2&amp;s=400" property="og:image" /><meta content="gaultier/rapport_stage_2014" property="og:title" /><meta content="https://github.com/gaultier/rapport_stage_2014" property="og:url" /><meta content="Contribute to rapport_stage_2014 development by creating an account on GitHub." property="og:description" />

    <link rel="assets" href="https://assets-cdn.github.com/">
    <link rel="conduit-xhr" href="https://ghconduit.com:25035">
    

    <meta name="msapplication-TileImage" content="/windows-tile.png">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="selected-link" value="repo_source" data-pjax-transient>
      <meta name="google-analytics" content="UA-3769691-2">

    <meta content="collector.githubapp.com" name="octolytics-host" /><meta content="collector-cdn.github.com" name="octolytics-script-host" /><meta content="github" name="octolytics-app-id" /><meta content="824F8177:1E4B:11EEB2:53E0A7FC" name="octolytics-dimension-request_id" />
    

    
    
    <link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">


    <meta content="authenticity_token" name="csrf-param" />
<meta content="+7jN3bKtEaltfsdbuQmM6blR8JMLVRPx7wkBxH5lfOmccbY8vIDHopbkx2VN91Dy580N68B/d9cefTO/UxutmA==" name="csrf-token" />

    <link href="https://assets-cdn.github.com/assets/github-4eaa9c38c91506826861597eb1685076a73795d4.css" media="all" rel="stylesheet" type="text/css" />
    <link href="https://assets-cdn.github.com/assets/github2-5b6e3d0ecbb4b0efd96b3e9123237139010d1a8e.css" media="all" rel="stylesheet" type="text/css" />
    


    <meta http-equiv="x-pjax-version" content="08a2424766b392a666bd5a99f21f7d58">

      
  <meta name="description" content="Contribute to rapport_stage_2014 development by creating an account on GitHub.">


  <meta content="3737145" name="octolytics-dimension-user_id" /><meta content="gaultier" name="octolytics-dimension-user_login" /><meta content="21974379" name="octolytics-dimension-repository_id" /><meta content="gaultier/rapport_stage_2014" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="21974379" name="octolytics-dimension-repository_network_root_id" /><meta content="gaultier/rapport_stage_2014" name="octolytics-dimension-repository_network_root_nwo" />

  <link href="https://github.com/gaultier/rapport_stage_2014/commits/master.atom" rel="alternate" title="Recent Commits to rapport_stage_2014:master" type="application/atom+xml">

  </head>


  <body class="logged_out  env-production macintosh vis-public page-blob">
    <a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
    <div class="wrapper">
      
      
      
      


      
      <div class="header header-logged-out">
  <div class="container clearfix">

    <a class="header-logo-wordmark" href="https://github.com/">
      <span class="mega-octicon octicon-logo-github"></span>
    </a>

    <div class="header-actions">
        <a class="button primary" href="/join">Sign up</a>
      <a class="button signin" href="/login?return_to=%2Fgaultier%2Frapport_stage_2014%2Fblob%2Fmaster%2FRapport_stage.tex">Sign in</a>
    </div>

    <div class="command-bar js-command-bar  in-repository">

      <ul class="top-nav">
          <li class="explore"><a href="/explore">Explore</a></li>
          <li class="features"><a href="/features">Features</a></li>
          <li class="enterprise"><a href="https://enterprise.github.com/">Enterprise</a></li>
          <li class="blog"><a href="/blog">Blog</a></li>
      </ul>
        <form accept-charset="UTF-8" action="/search" class="command-bar-form" id="top_search_form" method="get">

<div class="commandbar">
  <span class="message"></span>
  <input type="text" data-hotkey="s" name="q" id="js-command-bar-field" placeholder="Search or type a command" tabindex="1" autocapitalize="off"
    
    
    data-repo="gaultier/rapport_stage_2014"
  >
  <div class="display hidden"></div>
</div>

    <input type="hidden" name="nwo" value="gaultier/rapport_stage_2014">

    <div class="select-menu js-menu-container js-select-menu search-context-select-menu">
      <span class="minibutton select-menu-button js-menu-target" role="button" aria-haspopup="true">
        <span class="js-select-button">This repository</span>
      </span>

      <div class="select-menu-modal-holder js-menu-content js-navigation-container" aria-hidden="true">
        <div class="select-menu-modal">

          <div class="select-menu-item js-navigation-item js-this-repository-navigation-item selected">
            <span class="select-menu-item-icon octicon octicon-check"></span>
            <input type="radio" class="js-search-this-repository" name="search_target" value="repository" checked="checked">
            <div class="select-menu-item-text js-select-button-text">This repository</div>
          </div> <!-- /.select-menu-item -->

          <div class="select-menu-item js-navigation-item js-all-repositories-navigation-item">
            <span class="select-menu-item-icon octicon octicon-check"></span>
            <input type="radio" name="search_target" value="global">
            <div class="select-menu-item-text js-select-button-text">All repositories</div>
          </div> <!-- /.select-menu-item -->

        </div>
      </div>
    </div>

  <span class="help tooltipped tooltipped-s" aria-label="Show command bar help">
    <span class="octicon octicon-question"></span>
  </span>


  <input type="hidden" name="ref" value="cmdform">

</form>
    </div>

  </div>
</div>



      <div id="start-of-content" class="accessibility-aid"></div>
          <div class="site" itemscope itemtype="http://schema.org/WebPage">
    <div id="js-flash-container">
      
    </div>
    <div class="pagehead repohead instapaper_ignore readability-menu">
      <div class="container">
        
<ul class="pagehead-actions">


  <li>
      <a href="/login?return_to=%2Fgaultier%2Frapport_stage_2014"
    class="minibutton with-count star-button tooltipped tooltipped-n"
    aria-label="You must be signed in to star a repository" rel="nofollow">
    <span class="octicon octicon-star"></span>
    Star
  </a>

    <a class="social-count js-social-count" href="/gaultier/rapport_stage_2014/stargazers">
      0
    </a>

  </li>

    <li>
      <a href="/login?return_to=%2Fgaultier%2Frapport_stage_2014"
        class="minibutton with-count js-toggler-target fork-button tooltipped tooltipped-n"
        aria-label="You must be signed in to fork a repository" rel="nofollow">
        <span class="octicon octicon-repo-forked"></span>
        Fork
      </a>
      <a href="/gaultier/rapport_stage_2014/network" class="social-count">
        1
      </a>
    </li>
</ul>

        <h1 itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="entry-title public">
          <span class="mega-octicon octicon-repo"></span>
          <span class="author"><a href="/gaultier" class="url fn" itemprop="url" rel="author"><span itemprop="title">gaultier</span></a></span><!--
       --><span class="path-divider">/</span><!--
       --><strong><a href="/gaultier/rapport_stage_2014" class="js-current-repository js-repo-home-link">rapport_stage_2014</a></strong>

          <span class="page-context-loader">
            <img alt="" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
          </span>

        </h1>
      </div><!-- /.container -->
    </div><!-- /.repohead -->

    <div class="container">
      <div class="repository-with-sidebar repo-container new-discussion-timeline  ">
        <div class="repository-sidebar clearfix">
            

<div class="sunken-menu vertical-right repo-nav js-repo-nav js-repository-container-pjax js-octicon-loaders" data-issue-count-url="/gaultier/rapport_stage_2014/issues/counts">
  <div class="sunken-menu-contents">
    <ul class="sunken-menu-group">
      <li class="tooltipped tooltipped-w" aria-label="Code">
        <a href="/gaultier/rapport_stage_2014" aria-label="Code" class="selected js-selected-navigation-item sunken-menu-item" data-hotkey="g c" data-pjax="true" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches /gaultier/rapport_stage_2014">
          <span class="octicon octicon-code"></span> <span class="full-word">Code</span>
          <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
</a>      </li>

        <li class="tooltipped tooltipped-w" aria-label="Issues">
          <a href="/gaultier/rapport_stage_2014/issues" aria-label="Issues" class="js-selected-navigation-item sunken-menu-item js-disable-pjax" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /gaultier/rapport_stage_2014/issues">
            <span class="octicon octicon-issue-opened"></span> <span class="full-word">Issues</span>
            <span class="js-issue-replace-counter"></span>
            <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
</a>        </li>

      <li class="tooltipped tooltipped-w" aria-label="Pull Requests">
        <a href="/gaultier/rapport_stage_2014/pulls" aria-label="Pull Requests" class="js-selected-navigation-item sunken-menu-item js-disable-pjax" data-hotkey="g p" data-selected-links="repo_pulls /gaultier/rapport_stage_2014/pulls">
            <span class="octicon octicon-git-pull-request"></span> <span class="full-word">Pull Requests</span>
            <span class="js-pull-replace-counter"></span>
            <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
</a>      </li>


    </ul>
    <div class="sunken-menu-separator"></div>
    <ul class="sunken-menu-group">

      <li class="tooltipped tooltipped-w" aria-label="Pulse">
        <a href="/gaultier/rapport_stage_2014/pulse" aria-label="Pulse" class="js-selected-navigation-item sunken-menu-item" data-pjax="true" data-selected-links="pulse /gaultier/rapport_stage_2014/pulse">
          <span class="octicon octicon-pulse"></span> <span class="full-word">Pulse</span>
          <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
</a>      </li>

      <li class="tooltipped tooltipped-w" aria-label="Graphs">
        <a href="/gaultier/rapport_stage_2014/graphs" aria-label="Graphs" class="js-selected-navigation-item sunken-menu-item" data-pjax="true" data-selected-links="repo_graphs repo_contributors /gaultier/rapport_stage_2014/graphs">
          <span class="octicon octicon-graph"></span> <span class="full-word">Graphs</span>
          <img alt="" class="mini-loader" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif" width="16" />
</a>      </li>
    </ul>


  </div>
</div>

              <div class="only-with-full-nav">
                

  

<div class="clone-url open"
  data-protocol-type="http"
  data-url="/users/set_protocol?protocol_selector=http&amp;protocol_type=clone">
  <h3><strong>HTTPS</strong> clone URL</h3>
  <div class="input-group">
    <input type="text" class="input-mini input-monospace js-url-field"
           value="https://github.com/gaultier/rapport_stage_2014.git" readonly="readonly">
    <span class="input-group-button">
      <button aria-label="Copy to clipboard" class="js-zeroclipboard minibutton zeroclipboard-button" data-clipboard-text="https://github.com/gaultier/rapport_stage_2014.git" data-copied-hint="Copied!" type="button"><span class="octicon octicon-clippy"></span></button>
    </span>
  </div>
</div>

  

<div class="clone-url "
  data-protocol-type="subversion"
  data-url="/users/set_protocol?protocol_selector=subversion&amp;protocol_type=clone">
  <h3><strong>Subversion</strong> checkout URL</h3>
  <div class="input-group">
    <input type="text" class="input-mini input-monospace js-url-field"
           value="https://github.com/gaultier/rapport_stage_2014" readonly="readonly">
    <span class="input-group-button">
      <button aria-label="Copy to clipboard" class="js-zeroclipboard minibutton zeroclipboard-button" data-clipboard-text="https://github.com/gaultier/rapport_stage_2014" data-copied-hint="Copied!" type="button"><span class="octicon octicon-clippy"></span></button>
    </span>
  </div>
</div>


<p class="clone-options">You can clone with
      <a href="#" class="js-clone-selector" data-protocol="http">HTTPS</a>
      or <a href="#" class="js-clone-selector" data-protocol="subversion">Subversion</a>.
  <a href="https://help.github.com/articles/which-remote-url-should-i-use" class="help tooltipped tooltipped-n" aria-label="Get help on which URL is right for you.">
    <span class="octicon octicon-question"></span>
  </a>
</p>

  <a href="http://mac.github.com" data-url="github-mac://openRepo/https://github.com/gaultier/rapport_stage_2014" class="minibutton sidebar-button js-conduit-rewrite-url" title="Save gaultier/rapport_stage_2014 to your computer and use it in GitHub Desktop." aria-label="Save gaultier/rapport_stage_2014 to your computer and use it in GitHub Desktop.">
    <span class="octicon octicon-device-desktop"></span>
    Clone in Desktop
  </a>


                <a href="/gaultier/rapport_stage_2014/archive/master.zip"
                   class="minibutton sidebar-button"
                   aria-label="Download gaultier/rapport_stage_2014 as a zip file"
                   title="Download gaultier/rapport_stage_2014 as a zip file"
                   rel="nofollow">
                  <span class="octicon octicon-cloud-download"></span>
                  Download ZIP
                </a>
              </div>
        </div><!-- /.repository-sidebar -->

        <div id="js-repo-pjax-container" class="repository-content context-loader-container" data-pjax-container>
          


<a href="/gaultier/rapport_stage_2014/blob/fa859167dd3c0c9191705ef502d120bb64846b02/Rapport_stage.tex" class="hidden js-permalink-shortcut" data-hotkey="y">Permalink</a>

<!-- blob contrib key: blob_contributors:v21:5c99dd6ece60f5ef29bbb802403a1b32 -->

<div class="file-navigation">
  

<div class="select-menu js-menu-container js-select-menu" >
  <span class="minibutton select-menu-button js-menu-target css-truncate" data-hotkey="w"
    data-master-branch="master"
    data-ref="master"
    title="master"
    role="button" aria-label="Switch branches or tags" tabindex="0" aria-haspopup="true">
    <span class="octicon octicon-git-branch"></span>
    <i>branch:</i>
    <span class="js-select-button css-truncate-target">master</span>
  </span>

  <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax aria-hidden="true">

    <div class="select-menu-modal">
      <div class="select-menu-header">
        <span class="select-menu-title">Switch branches/tags</span>
        <span class="octicon octicon-x js-menu-close" role="button" aria-label="Close"></span>
      </div> <!-- /.select-menu-header -->

      <div class="select-menu-filters">
        <div class="select-menu-text-filter">
          <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
        </div>
        <div class="select-menu-tabs">
          <ul>
            <li class="select-menu-tab">
              <a href="#" data-tab-filter="branches" class="js-select-menu-tab">Branches</a>
            </li>
            <li class="select-menu-tab">
              <a href="#" data-tab-filter="tags" class="js-select-menu-tab">Tags</a>
            </li>
          </ul>
        </div><!-- /.select-menu-tabs -->
      </div><!-- /.select-menu-filters -->

      <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches">

        <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">


            <div class="select-menu-item js-navigation-item selected">
              <span class="select-menu-item-icon octicon octicon-check"></span>
              <a href="/gaultier/rapport_stage_2014/blob/master/Rapport_stage.tex"
                 data-name="master"
                 data-skip-pjax="true"
                 rel="nofollow"
                 class="js-navigation-open select-menu-item-text css-truncate-target"
                 title="master">master</a>
            </div> <!-- /.select-menu-item -->
        </div>

          <div class="select-menu-no-results">Nothing to show</div>
      </div> <!-- /.select-menu-list -->

      <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
        <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">


        </div>

        <div class="select-menu-no-results">Nothing to show</div>
      </div> <!-- /.select-menu-list -->

    </div> <!-- /.select-menu-modal -->
  </div> <!-- /.select-menu-modal-holder -->
</div> <!-- /.select-menu -->

  <div class="button-group right">
    <a href="/gaultier/rapport_stage_2014/find/master"
          class="js-show-file-finder minibutton empty-icon tooltipped tooltipped-s"
          data-pjax
          data-hotkey="t"
          aria-label="Quickly jump between files">
      <span class="octicon octicon-list-unordered"></span>
    </a>
    <button class="js-zeroclipboard minibutton zeroclipboard-button"
          data-clipboard-text="Rapport_stage.tex"
          aria-label="Copy to clipboard"
          data-copied-hint="Copied!">
      <span class="octicon octicon-clippy"></span>
    </button>
  </div>

  <div class="breadcrumb">
    <span class='repo-root js-repo-root'><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/gaultier/rapport_stage_2014" data-branch="master" data-direction="back" data-pjax="true" itemscope="url"><span itemprop="title">rapport_stage_2014</span></a></span></span><span class="separator"> / </span><strong class="final-path">Rapport_stage.tex</strong>
  </div>
</div>


  <div class="commit file-history-tease">
      <img alt="Philippe Gaultier" class="main-avatar" data-user="3737145" height="24" src="https://avatars2.githubusercontent.com/u/3737145?v=2&amp;s=48" width="24" />
      <span class="author"><a href="/gaultier" rel="author">gaultier</a></span>
      <time datetime="2014-08-04T16:19:28+02:00" is="relative-time">August 04, 2014</time>
      <div class="commit-title">
          <a href="/gaultier/rapport_stage_2014/commit/171558d6b62b30e9082dd807f9371f60a8288e57" class="message" data-pjax="true" title="Move Pattern details to &#39;Annexes&#39;">Move Pattern details to 'Annexes'</a>
      </div>

    <div class="participation">
      <p class="quickstat"><a href="#blob_contributors_box" rel="facebox"><strong>1</strong>  contributor</a></p>
      
    </div>
    <div id="blob_contributors_box" style="display:none">
      <h2 class="facebox-header">Users who have contributed to this file</h2>
      <ul class="facebox-user-list">
          <li class="facebox-user-list-item">
            <img alt="Philippe Gaultier" data-user="3737145" height="24" src="https://avatars2.githubusercontent.com/u/3737145?v=2&amp;s=48" width="24" />
            <a href="/gaultier">gaultier</a>
          </li>
      </ul>
    </div>
  </div>

<div class="file-box">
  <div class="file">
    <div class="meta clearfix">
      <div class="info file-name">
          <span class="mode" title="File mode">executable file</span>
          <span class="meta-divider"></span>
          <span>1285 lines (1014 sloc)</span>
          <span class="meta-divider"></span>
        <span>67.329 kb</span>
      </div>
      <div class="actions">
        <div class="button-group">
          <a href="/gaultier/rapport_stage_2014/raw/master/Rapport_stage.tex" class="minibutton " id="raw-url">Raw</a>
            <a href="/gaultier/rapport_stage_2014/blame/master/Rapport_stage.tex" class="minibutton js-update-url-with-hash">Blame</a>
          <a href="/gaultier/rapport_stage_2014/commits/master/Rapport_stage.tex" class="minibutton " rel="nofollow">History</a>
        </div><!-- /.button-group -->

          <a class="octicon-button tooltipped tooltipped-nw js-conduit-openfile-check"
             href="http://mac.github.com"
             data-url="github-mac://openRepo/https://github.com/gaultier/rapport_stage_2014?branch=master&amp;filepath=Rapport_stage.tex"
             aria-label="Open this file in GitHub for Mac"
             data-failed-title="Your version of GitHub for Mac is too old to open this file. Try checking for updates.">
              <span class="octicon octicon-device-desktop"></span>
          </a>

            <a class="octicon-button disabled tooltipped tooltipped-w" href="#"
               aria-label="You must be signed in to make or propose changes"><span class="octicon octicon-pencil"></span></a>

          <a class="octicon-button danger disabled tooltipped tooltipped-w" href="#"
             aria-label="You must be signed in to make or propose changes">
          <span class="octicon octicon-trashcan"></span>
        </a>
      </div><!-- /.actions -->
    </div>
      
  <div class="blob-wrapper data type-tex">
       <table class="file-code file-diff tab-size-8">
         <tr class="file-code-line">
           <td class="blob-line-nums">
             <span id="L1" rel="#L1">1</span>
<span id="L2" rel="#L2">2</span>
<span id="L3" rel="#L3">3</span>
<span id="L4" rel="#L4">4</span>
<span id="L5" rel="#L5">5</span>
<span id="L6" rel="#L6">6</span>
<span id="L7" rel="#L7">7</span>
<span id="L8" rel="#L8">8</span>
<span id="L9" rel="#L9">9</span>
<span id="L10" rel="#L10">10</span>
<span id="L11" rel="#L11">11</span>
<span id="L12" rel="#L12">12</span>
<span id="L13" rel="#L13">13</span>
<span id="L14" rel="#L14">14</span>
<span id="L15" rel="#L15">15</span>
<span id="L16" rel="#L16">16</span>
<span id="L17" rel="#L17">17</span>
<span id="L18" rel="#L18">18</span>
<span id="L19" rel="#L19">19</span>
<span id="L20" rel="#L20">20</span>
<span id="L21" rel="#L21">21</span>
<span id="L22" rel="#L22">22</span>
<span id="L23" rel="#L23">23</span>
<span id="L24" rel="#L24">24</span>
<span id="L25" rel="#L25">25</span>
<span id="L26" rel="#L26">26</span>
<span id="L27" rel="#L27">27</span>
<span id="L28" rel="#L28">28</span>
<span id="L29" rel="#L29">29</span>
<span id="L30" rel="#L30">30</span>
<span id="L31" rel="#L31">31</span>
<span id="L32" rel="#L32">32</span>
<span id="L33" rel="#L33">33</span>
<span id="L34" rel="#L34">34</span>
<span id="L35" rel="#L35">35</span>
<span id="L36" rel="#L36">36</span>
<span id="L37" rel="#L37">37</span>
<span id="L38" rel="#L38">38</span>
<span id="L39" rel="#L39">39</span>
<span id="L40" rel="#L40">40</span>
<span id="L41" rel="#L41">41</span>
<span id="L42" rel="#L42">42</span>
<span id="L43" rel="#L43">43</span>
<span id="L44" rel="#L44">44</span>
<span id="L45" rel="#L45">45</span>
<span id="L46" rel="#L46">46</span>
<span id="L47" rel="#L47">47</span>
<span id="L48" rel="#L48">48</span>
<span id="L49" rel="#L49">49</span>
<span id="L50" rel="#L50">50</span>
<span id="L51" rel="#L51">51</span>
<span id="L52" rel="#L52">52</span>
<span id="L53" rel="#L53">53</span>
<span id="L54" rel="#L54">54</span>
<span id="L55" rel="#L55">55</span>
<span id="L56" rel="#L56">56</span>
<span id="L57" rel="#L57">57</span>
<span id="L58" rel="#L58">58</span>
<span id="L59" rel="#L59">59</span>
<span id="L60" rel="#L60">60</span>
<span id="L61" rel="#L61">61</span>
<span id="L62" rel="#L62">62</span>
<span id="L63" rel="#L63">63</span>
<span id="L64" rel="#L64">64</span>
<span id="L65" rel="#L65">65</span>
<span id="L66" rel="#L66">66</span>
<span id="L67" rel="#L67">67</span>
<span id="L68" rel="#L68">68</span>
<span id="L69" rel="#L69">69</span>
<span id="L70" rel="#L70">70</span>
<span id="L71" rel="#L71">71</span>
<span id="L72" rel="#L72">72</span>
<span id="L73" rel="#L73">73</span>
<span id="L74" rel="#L74">74</span>
<span id="L75" rel="#L75">75</span>
<span id="L76" rel="#L76">76</span>
<span id="L77" rel="#L77">77</span>
<span id="L78" rel="#L78">78</span>
<span id="L79" rel="#L79">79</span>
<span id="L80" rel="#L80">80</span>
<span id="L81" rel="#L81">81</span>
<span id="L82" rel="#L82">82</span>
<span id="L83" rel="#L83">83</span>
<span id="L84" rel="#L84">84</span>
<span id="L85" rel="#L85">85</span>
<span id="L86" rel="#L86">86</span>
<span id="L87" rel="#L87">87</span>
<span id="L88" rel="#L88">88</span>
<span id="L89" rel="#L89">89</span>
<span id="L90" rel="#L90">90</span>
<span id="L91" rel="#L91">91</span>
<span id="L92" rel="#L92">92</span>
<span id="L93" rel="#L93">93</span>
<span id="L94" rel="#L94">94</span>
<span id="L95" rel="#L95">95</span>
<span id="L96" rel="#L96">96</span>
<span id="L97" rel="#L97">97</span>
<span id="L98" rel="#L98">98</span>
<span id="L99" rel="#L99">99</span>
<span id="L100" rel="#L100">100</span>
<span id="L101" rel="#L101">101</span>
<span id="L102" rel="#L102">102</span>
<span id="L103" rel="#L103">103</span>
<span id="L104" rel="#L104">104</span>
<span id="L105" rel="#L105">105</span>
<span id="L106" rel="#L106">106</span>
<span id="L107" rel="#L107">107</span>
<span id="L108" rel="#L108">108</span>
<span id="L109" rel="#L109">109</span>
<span id="L110" rel="#L110">110</span>
<span id="L111" rel="#L111">111</span>
<span id="L112" rel="#L112">112</span>
<span id="L113" rel="#L113">113</span>
<span id="L114" rel="#L114">114</span>
<span id="L115" rel="#L115">115</span>
<span id="L116" rel="#L116">116</span>
<span id="L117" rel="#L117">117</span>
<span id="L118" rel="#L118">118</span>
<span id="L119" rel="#L119">119</span>
<span id="L120" rel="#L120">120</span>
<span id="L121" rel="#L121">121</span>
<span id="L122" rel="#L122">122</span>
<span id="L123" rel="#L123">123</span>
<span id="L124" rel="#L124">124</span>
<span id="L125" rel="#L125">125</span>
<span id="L126" rel="#L126">126</span>
<span id="L127" rel="#L127">127</span>
<span id="L128" rel="#L128">128</span>
<span id="L129" rel="#L129">129</span>
<span id="L130" rel="#L130">130</span>
<span id="L131" rel="#L131">131</span>
<span id="L132" rel="#L132">132</span>
<span id="L133" rel="#L133">133</span>
<span id="L134" rel="#L134">134</span>
<span id="L135" rel="#L135">135</span>
<span id="L136" rel="#L136">136</span>
<span id="L137" rel="#L137">137</span>
<span id="L138" rel="#L138">138</span>
<span id="L139" rel="#L139">139</span>
<span id="L140" rel="#L140">140</span>
<span id="L141" rel="#L141">141</span>
<span id="L142" rel="#L142">142</span>
<span id="L143" rel="#L143">143</span>
<span id="L144" rel="#L144">144</span>
<span id="L145" rel="#L145">145</span>
<span id="L146" rel="#L146">146</span>
<span id="L147" rel="#L147">147</span>
<span id="L148" rel="#L148">148</span>
<span id="L149" rel="#L149">149</span>
<span id="L150" rel="#L150">150</span>
<span id="L151" rel="#L151">151</span>
<span id="L152" rel="#L152">152</span>
<span id="L153" rel="#L153">153</span>
<span id="L154" rel="#L154">154</span>
<span id="L155" rel="#L155">155</span>
<span id="L156" rel="#L156">156</span>
<span id="L157" rel="#L157">157</span>
<span id="L158" rel="#L158">158</span>
<span id="L159" rel="#L159">159</span>
<span id="L160" rel="#L160">160</span>
<span id="L161" rel="#L161">161</span>
<span id="L162" rel="#L162">162</span>
<span id="L163" rel="#L163">163</span>
<span id="L164" rel="#L164">164</span>
<span id="L165" rel="#L165">165</span>
<span id="L166" rel="#L166">166</span>
<span id="L167" rel="#L167">167</span>
<span id="L168" rel="#L168">168</span>
<span id="L169" rel="#L169">169</span>
<span id="L170" rel="#L170">170</span>
<span id="L171" rel="#L171">171</span>
<span id="L172" rel="#L172">172</span>
<span id="L173" rel="#L173">173</span>
<span id="L174" rel="#L174">174</span>
<span id="L175" rel="#L175">175</span>
<span id="L176" rel="#L176">176</span>
<span id="L177" rel="#L177">177</span>
<span id="L178" rel="#L178">178</span>
<span id="L179" rel="#L179">179</span>
<span id="L180" rel="#L180">180</span>
<span id="L181" rel="#L181">181</span>
<span id="L182" rel="#L182">182</span>
<span id="L183" rel="#L183">183</span>
<span id="L184" rel="#L184">184</span>
<span id="L185" rel="#L185">185</span>
<span id="L186" rel="#L186">186</span>
<span id="L187" rel="#L187">187</span>
<span id="L188" rel="#L188">188</span>
<span id="L189" rel="#L189">189</span>
<span id="L190" rel="#L190">190</span>
<span id="L191" rel="#L191">191</span>
<span id="L192" rel="#L192">192</span>
<span id="L193" rel="#L193">193</span>
<span id="L194" rel="#L194">194</span>
<span id="L195" rel="#L195">195</span>
<span id="L196" rel="#L196">196</span>
<span id="L197" rel="#L197">197</span>
<span id="L198" rel="#L198">198</span>
<span id="L199" rel="#L199">199</span>
<span id="L200" rel="#L200">200</span>
<span id="L201" rel="#L201">201</span>
<span id="L202" rel="#L202">202</span>
<span id="L203" rel="#L203">203</span>
<span id="L204" rel="#L204">204</span>
<span id="L205" rel="#L205">205</span>
<span id="L206" rel="#L206">206</span>
<span id="L207" rel="#L207">207</span>
<span id="L208" rel="#L208">208</span>
<span id="L209" rel="#L209">209</span>
<span id="L210" rel="#L210">210</span>
<span id="L211" rel="#L211">211</span>
<span id="L212" rel="#L212">212</span>
<span id="L213" rel="#L213">213</span>
<span id="L214" rel="#L214">214</span>
<span id="L215" rel="#L215">215</span>
<span id="L216" rel="#L216">216</span>
<span id="L217" rel="#L217">217</span>
<span id="L218" rel="#L218">218</span>
<span id="L219" rel="#L219">219</span>
<span id="L220" rel="#L220">220</span>
<span id="L221" rel="#L221">221</span>
<span id="L222" rel="#L222">222</span>
<span id="L223" rel="#L223">223</span>
<span id="L224" rel="#L224">224</span>
<span id="L225" rel="#L225">225</span>
<span id="L226" rel="#L226">226</span>
<span id="L227" rel="#L227">227</span>
<span id="L228" rel="#L228">228</span>
<span id="L229" rel="#L229">229</span>
<span id="L230" rel="#L230">230</span>
<span id="L231" rel="#L231">231</span>
<span id="L232" rel="#L232">232</span>
<span id="L233" rel="#L233">233</span>
<span id="L234" rel="#L234">234</span>
<span id="L235" rel="#L235">235</span>
<span id="L236" rel="#L236">236</span>
<span id="L237" rel="#L237">237</span>
<span id="L238" rel="#L238">238</span>
<span id="L239" rel="#L239">239</span>
<span id="L240" rel="#L240">240</span>
<span id="L241" rel="#L241">241</span>
<span id="L242" rel="#L242">242</span>
<span id="L243" rel="#L243">243</span>
<span id="L244" rel="#L244">244</span>
<span id="L245" rel="#L245">245</span>
<span id="L246" rel="#L246">246</span>
<span id="L247" rel="#L247">247</span>
<span id="L248" rel="#L248">248</span>
<span id="L249" rel="#L249">249</span>
<span id="L250" rel="#L250">250</span>
<span id="L251" rel="#L251">251</span>
<span id="L252" rel="#L252">252</span>
<span id="L253" rel="#L253">253</span>
<span id="L254" rel="#L254">254</span>
<span id="L255" rel="#L255">255</span>
<span id="L256" rel="#L256">256</span>
<span id="L257" rel="#L257">257</span>
<span id="L258" rel="#L258">258</span>
<span id="L259" rel="#L259">259</span>
<span id="L260" rel="#L260">260</span>
<span id="L261" rel="#L261">261</span>
<span id="L262" rel="#L262">262</span>
<span id="L263" rel="#L263">263</span>
<span id="L264" rel="#L264">264</span>
<span id="L265" rel="#L265">265</span>
<span id="L266" rel="#L266">266</span>
<span id="L267" rel="#L267">267</span>
<span id="L268" rel="#L268">268</span>
<span id="L269" rel="#L269">269</span>
<span id="L270" rel="#L270">270</span>
<span id="L271" rel="#L271">271</span>
<span id="L272" rel="#L272">272</span>
<span id="L273" rel="#L273">273</span>
<span id="L274" rel="#L274">274</span>
<span id="L275" rel="#L275">275</span>
<span id="L276" rel="#L276">276</span>
<span id="L277" rel="#L277">277</span>
<span id="L278" rel="#L278">278</span>
<span id="L279" rel="#L279">279</span>
<span id="L280" rel="#L280">280</span>
<span id="L281" rel="#L281">281</span>
<span id="L282" rel="#L282">282</span>
<span id="L283" rel="#L283">283</span>
<span id="L284" rel="#L284">284</span>
<span id="L285" rel="#L285">285</span>
<span id="L286" rel="#L286">286</span>
<span id="L287" rel="#L287">287</span>
<span id="L288" rel="#L288">288</span>
<span id="L289" rel="#L289">289</span>
<span id="L290" rel="#L290">290</span>
<span id="L291" rel="#L291">291</span>
<span id="L292" rel="#L292">292</span>
<span id="L293" rel="#L293">293</span>
<span id="L294" rel="#L294">294</span>
<span id="L295" rel="#L295">295</span>
<span id="L296" rel="#L296">296</span>
<span id="L297" rel="#L297">297</span>
<span id="L298" rel="#L298">298</span>
<span id="L299" rel="#L299">299</span>
<span id="L300" rel="#L300">300</span>
<span id="L301" rel="#L301">301</span>
<span id="L302" rel="#L302">302</span>
<span id="L303" rel="#L303">303</span>
<span id="L304" rel="#L304">304</span>
<span id="L305" rel="#L305">305</span>
<span id="L306" rel="#L306">306</span>
<span id="L307" rel="#L307">307</span>
<span id="L308" rel="#L308">308</span>
<span id="L309" rel="#L309">309</span>
<span id="L310" rel="#L310">310</span>
<span id="L311" rel="#L311">311</span>
<span id="L312" rel="#L312">312</span>
<span id="L313" rel="#L313">313</span>
<span id="L314" rel="#L314">314</span>
<span id="L315" rel="#L315">315</span>
<span id="L316" rel="#L316">316</span>
<span id="L317" rel="#L317">317</span>
<span id="L318" rel="#L318">318</span>
<span id="L319" rel="#L319">319</span>
<span id="L320" rel="#L320">320</span>
<span id="L321" rel="#L321">321</span>
<span id="L322" rel="#L322">322</span>
<span id="L323" rel="#L323">323</span>
<span id="L324" rel="#L324">324</span>
<span id="L325" rel="#L325">325</span>
<span id="L326" rel="#L326">326</span>
<span id="L327" rel="#L327">327</span>
<span id="L328" rel="#L328">328</span>
<span id="L329" rel="#L329">329</span>
<span id="L330" rel="#L330">330</span>
<span id="L331" rel="#L331">331</span>
<span id="L332" rel="#L332">332</span>
<span id="L333" rel="#L333">333</span>
<span id="L334" rel="#L334">334</span>
<span id="L335" rel="#L335">335</span>
<span id="L336" rel="#L336">336</span>
<span id="L337" rel="#L337">337</span>
<span id="L338" rel="#L338">338</span>
<span id="L339" rel="#L339">339</span>
<span id="L340" rel="#L340">340</span>
<span id="L341" rel="#L341">341</span>
<span id="L342" rel="#L342">342</span>
<span id="L343" rel="#L343">343</span>
<span id="L344" rel="#L344">344</span>
<span id="L345" rel="#L345">345</span>
<span id="L346" rel="#L346">346</span>
<span id="L347" rel="#L347">347</span>
<span id="L348" rel="#L348">348</span>
<span id="L349" rel="#L349">349</span>
<span id="L350" rel="#L350">350</span>
<span id="L351" rel="#L351">351</span>
<span id="L352" rel="#L352">352</span>
<span id="L353" rel="#L353">353</span>
<span id="L354" rel="#L354">354</span>
<span id="L355" rel="#L355">355</span>
<span id="L356" rel="#L356">356</span>
<span id="L357" rel="#L357">357</span>
<span id="L358" rel="#L358">358</span>
<span id="L359" rel="#L359">359</span>
<span id="L360" rel="#L360">360</span>
<span id="L361" rel="#L361">361</span>
<span id="L362" rel="#L362">362</span>
<span id="L363" rel="#L363">363</span>
<span id="L364" rel="#L364">364</span>
<span id="L365" rel="#L365">365</span>
<span id="L366" rel="#L366">366</span>
<span id="L367" rel="#L367">367</span>
<span id="L368" rel="#L368">368</span>
<span id="L369" rel="#L369">369</span>
<span id="L370" rel="#L370">370</span>
<span id="L371" rel="#L371">371</span>
<span id="L372" rel="#L372">372</span>
<span id="L373" rel="#L373">373</span>
<span id="L374" rel="#L374">374</span>
<span id="L375" rel="#L375">375</span>
<span id="L376" rel="#L376">376</span>
<span id="L377" rel="#L377">377</span>
<span id="L378" rel="#L378">378</span>
<span id="L379" rel="#L379">379</span>
<span id="L380" rel="#L380">380</span>
<span id="L381" rel="#L381">381</span>
<span id="L382" rel="#L382">382</span>
<span id="L383" rel="#L383">383</span>
<span id="L384" rel="#L384">384</span>
<span id="L385" rel="#L385">385</span>
<span id="L386" rel="#L386">386</span>
<span id="L387" rel="#L387">387</span>
<span id="L388" rel="#L388">388</span>
<span id="L389" rel="#L389">389</span>
<span id="L390" rel="#L390">390</span>
<span id="L391" rel="#L391">391</span>
<span id="L392" rel="#L392">392</span>
<span id="L393" rel="#L393">393</span>
<span id="L394" rel="#L394">394</span>
<span id="L395" rel="#L395">395</span>
<span id="L396" rel="#L396">396</span>
<span id="L397" rel="#L397">397</span>
<span id="L398" rel="#L398">398</span>
<span id="L399" rel="#L399">399</span>
<span id="L400" rel="#L400">400</span>
<span id="L401" rel="#L401">401</span>
<span id="L402" rel="#L402">402</span>
<span id="L403" rel="#L403">403</span>
<span id="L404" rel="#L404">404</span>
<span id="L405" rel="#L405">405</span>
<span id="L406" rel="#L406">406</span>
<span id="L407" rel="#L407">407</span>
<span id="L408" rel="#L408">408</span>
<span id="L409" rel="#L409">409</span>
<span id="L410" rel="#L410">410</span>
<span id="L411" rel="#L411">411</span>
<span id="L412" rel="#L412">412</span>
<span id="L413" rel="#L413">413</span>
<span id="L414" rel="#L414">414</span>
<span id="L415" rel="#L415">415</span>
<span id="L416" rel="#L416">416</span>
<span id="L417" rel="#L417">417</span>
<span id="L418" rel="#L418">418</span>
<span id="L419" rel="#L419">419</span>
<span id="L420" rel="#L420">420</span>
<span id="L421" rel="#L421">421</span>
<span id="L422" rel="#L422">422</span>
<span id="L423" rel="#L423">423</span>
<span id="L424" rel="#L424">424</span>
<span id="L425" rel="#L425">425</span>
<span id="L426" rel="#L426">426</span>
<span id="L427" rel="#L427">427</span>
<span id="L428" rel="#L428">428</span>
<span id="L429" rel="#L429">429</span>
<span id="L430" rel="#L430">430</span>
<span id="L431" rel="#L431">431</span>
<span id="L432" rel="#L432">432</span>
<span id="L433" rel="#L433">433</span>
<span id="L434" rel="#L434">434</span>
<span id="L435" rel="#L435">435</span>
<span id="L436" rel="#L436">436</span>
<span id="L437" rel="#L437">437</span>
<span id="L438" rel="#L438">438</span>
<span id="L439" rel="#L439">439</span>
<span id="L440" rel="#L440">440</span>
<span id="L441" rel="#L441">441</span>
<span id="L442" rel="#L442">442</span>
<span id="L443" rel="#L443">443</span>
<span id="L444" rel="#L444">444</span>
<span id="L445" rel="#L445">445</span>
<span id="L446" rel="#L446">446</span>
<span id="L447" rel="#L447">447</span>
<span id="L448" rel="#L448">448</span>
<span id="L449" rel="#L449">449</span>
<span id="L450" rel="#L450">450</span>
<span id="L451" rel="#L451">451</span>
<span id="L452" rel="#L452">452</span>
<span id="L453" rel="#L453">453</span>
<span id="L454" rel="#L454">454</span>
<span id="L455" rel="#L455">455</span>
<span id="L456" rel="#L456">456</span>
<span id="L457" rel="#L457">457</span>
<span id="L458" rel="#L458">458</span>
<span id="L459" rel="#L459">459</span>
<span id="L460" rel="#L460">460</span>
<span id="L461" rel="#L461">461</span>
<span id="L462" rel="#L462">462</span>
<span id="L463" rel="#L463">463</span>
<span id="L464" rel="#L464">464</span>
<span id="L465" rel="#L465">465</span>
<span id="L466" rel="#L466">466</span>
<span id="L467" rel="#L467">467</span>
<span id="L468" rel="#L468">468</span>
<span id="L469" rel="#L469">469</span>
<span id="L470" rel="#L470">470</span>
<span id="L471" rel="#L471">471</span>
<span id="L472" rel="#L472">472</span>
<span id="L473" rel="#L473">473</span>
<span id="L474" rel="#L474">474</span>
<span id="L475" rel="#L475">475</span>
<span id="L476" rel="#L476">476</span>
<span id="L477" rel="#L477">477</span>
<span id="L478" rel="#L478">478</span>
<span id="L479" rel="#L479">479</span>
<span id="L480" rel="#L480">480</span>
<span id="L481" rel="#L481">481</span>
<span id="L482" rel="#L482">482</span>
<span id="L483" rel="#L483">483</span>
<span id="L484" rel="#L484">484</span>
<span id="L485" rel="#L485">485</span>
<span id="L486" rel="#L486">486</span>
<span id="L487" rel="#L487">487</span>
<span id="L488" rel="#L488">488</span>
<span id="L489" rel="#L489">489</span>
<span id="L490" rel="#L490">490</span>
<span id="L491" rel="#L491">491</span>
<span id="L492" rel="#L492">492</span>
<span id="L493" rel="#L493">493</span>
<span id="L494" rel="#L494">494</span>
<span id="L495" rel="#L495">495</span>
<span id="L496" rel="#L496">496</span>
<span id="L497" rel="#L497">497</span>
<span id="L498" rel="#L498">498</span>
<span id="L499" rel="#L499">499</span>
<span id="L500" rel="#L500">500</span>
<span id="L501" rel="#L501">501</span>
<span id="L502" rel="#L502">502</span>
<span id="L503" rel="#L503">503</span>
<span id="L504" rel="#L504">504</span>
<span id="L505" rel="#L505">505</span>
<span id="L506" rel="#L506">506</span>
<span id="L507" rel="#L507">507</span>
<span id="L508" rel="#L508">508</span>
<span id="L509" rel="#L509">509</span>
<span id="L510" rel="#L510">510</span>
<span id="L511" rel="#L511">511</span>
<span id="L512" rel="#L512">512</span>
<span id="L513" rel="#L513">513</span>
<span id="L514" rel="#L514">514</span>
<span id="L515" rel="#L515">515</span>
<span id="L516" rel="#L516">516</span>
<span id="L517" rel="#L517">517</span>
<span id="L518" rel="#L518">518</span>
<span id="L519" rel="#L519">519</span>
<span id="L520" rel="#L520">520</span>
<span id="L521" rel="#L521">521</span>
<span id="L522" rel="#L522">522</span>
<span id="L523" rel="#L523">523</span>
<span id="L524" rel="#L524">524</span>
<span id="L525" rel="#L525">525</span>
<span id="L526" rel="#L526">526</span>
<span id="L527" rel="#L527">527</span>
<span id="L528" rel="#L528">528</span>
<span id="L529" rel="#L529">529</span>
<span id="L530" rel="#L530">530</span>
<span id="L531" rel="#L531">531</span>
<span id="L532" rel="#L532">532</span>
<span id="L533" rel="#L533">533</span>
<span id="L534" rel="#L534">534</span>
<span id="L535" rel="#L535">535</span>
<span id="L536" rel="#L536">536</span>
<span id="L537" rel="#L537">537</span>
<span id="L538" rel="#L538">538</span>
<span id="L539" rel="#L539">539</span>
<span id="L540" rel="#L540">540</span>
<span id="L541" rel="#L541">541</span>
<span id="L542" rel="#L542">542</span>
<span id="L543" rel="#L543">543</span>
<span id="L544" rel="#L544">544</span>
<span id="L545" rel="#L545">545</span>
<span id="L546" rel="#L546">546</span>
<span id="L547" rel="#L547">547</span>
<span id="L548" rel="#L548">548</span>
<span id="L549" rel="#L549">549</span>
<span id="L550" rel="#L550">550</span>
<span id="L551" rel="#L551">551</span>
<span id="L552" rel="#L552">552</span>
<span id="L553" rel="#L553">553</span>
<span id="L554" rel="#L554">554</span>
<span id="L555" rel="#L555">555</span>
<span id="L556" rel="#L556">556</span>
<span id="L557" rel="#L557">557</span>
<span id="L558" rel="#L558">558</span>
<span id="L559" rel="#L559">559</span>
<span id="L560" rel="#L560">560</span>
<span id="L561" rel="#L561">561</span>
<span id="L562" rel="#L562">562</span>
<span id="L563" rel="#L563">563</span>
<span id="L564" rel="#L564">564</span>
<span id="L565" rel="#L565">565</span>
<span id="L566" rel="#L566">566</span>
<span id="L567" rel="#L567">567</span>
<span id="L568" rel="#L568">568</span>
<span id="L569" rel="#L569">569</span>
<span id="L570" rel="#L570">570</span>
<span id="L571" rel="#L571">571</span>
<span id="L572" rel="#L572">572</span>
<span id="L573" rel="#L573">573</span>
<span id="L574" rel="#L574">574</span>
<span id="L575" rel="#L575">575</span>
<span id="L576" rel="#L576">576</span>
<span id="L577" rel="#L577">577</span>
<span id="L578" rel="#L578">578</span>
<span id="L579" rel="#L579">579</span>
<span id="L580" rel="#L580">580</span>
<span id="L581" rel="#L581">581</span>
<span id="L582" rel="#L582">582</span>
<span id="L583" rel="#L583">583</span>
<span id="L584" rel="#L584">584</span>
<span id="L585" rel="#L585">585</span>
<span id="L586" rel="#L586">586</span>
<span id="L587" rel="#L587">587</span>
<span id="L588" rel="#L588">588</span>
<span id="L589" rel="#L589">589</span>
<span id="L590" rel="#L590">590</span>
<span id="L591" rel="#L591">591</span>
<span id="L592" rel="#L592">592</span>
<span id="L593" rel="#L593">593</span>
<span id="L594" rel="#L594">594</span>
<span id="L595" rel="#L595">595</span>
<span id="L596" rel="#L596">596</span>
<span id="L597" rel="#L597">597</span>
<span id="L598" rel="#L598">598</span>
<span id="L599" rel="#L599">599</span>
<span id="L600" rel="#L600">600</span>
<span id="L601" rel="#L601">601</span>
<span id="L602" rel="#L602">602</span>
<span id="L603" rel="#L603">603</span>
<span id="L604" rel="#L604">604</span>
<span id="L605" rel="#L605">605</span>
<span id="L606" rel="#L606">606</span>
<span id="L607" rel="#L607">607</span>
<span id="L608" rel="#L608">608</span>
<span id="L609" rel="#L609">609</span>
<span id="L610" rel="#L610">610</span>
<span id="L611" rel="#L611">611</span>
<span id="L612" rel="#L612">612</span>
<span id="L613" rel="#L613">613</span>
<span id="L614" rel="#L614">614</span>
<span id="L615" rel="#L615">615</span>
<span id="L616" rel="#L616">616</span>
<span id="L617" rel="#L617">617</span>
<span id="L618" rel="#L618">618</span>
<span id="L619" rel="#L619">619</span>
<span id="L620" rel="#L620">620</span>
<span id="L621" rel="#L621">621</span>
<span id="L622" rel="#L622">622</span>
<span id="L623" rel="#L623">623</span>
<span id="L624" rel="#L624">624</span>
<span id="L625" rel="#L625">625</span>
<span id="L626" rel="#L626">626</span>
<span id="L627" rel="#L627">627</span>
<span id="L628" rel="#L628">628</span>
<span id="L629" rel="#L629">629</span>
<span id="L630" rel="#L630">630</span>
<span id="L631" rel="#L631">631</span>
<span id="L632" rel="#L632">632</span>
<span id="L633" rel="#L633">633</span>
<span id="L634" rel="#L634">634</span>
<span id="L635" rel="#L635">635</span>
<span id="L636" rel="#L636">636</span>
<span id="L637" rel="#L637">637</span>
<span id="L638" rel="#L638">638</span>
<span id="L639" rel="#L639">639</span>
<span id="L640" rel="#L640">640</span>
<span id="L641" rel="#L641">641</span>
<span id="L642" rel="#L642">642</span>
<span id="L643" rel="#L643">643</span>
<span id="L644" rel="#L644">644</span>
<span id="L645" rel="#L645">645</span>
<span id="L646" rel="#L646">646</span>
<span id="L647" rel="#L647">647</span>
<span id="L648" rel="#L648">648</span>
<span id="L649" rel="#L649">649</span>
<span id="L650" rel="#L650">650</span>
<span id="L651" rel="#L651">651</span>
<span id="L652" rel="#L652">652</span>
<span id="L653" rel="#L653">653</span>
<span id="L654" rel="#L654">654</span>
<span id="L655" rel="#L655">655</span>
<span id="L656" rel="#L656">656</span>
<span id="L657" rel="#L657">657</span>
<span id="L658" rel="#L658">658</span>
<span id="L659" rel="#L659">659</span>
<span id="L660" rel="#L660">660</span>
<span id="L661" rel="#L661">661</span>
<span id="L662" rel="#L662">662</span>
<span id="L663" rel="#L663">663</span>
<span id="L664" rel="#L664">664</span>
<span id="L665" rel="#L665">665</span>
<span id="L666" rel="#L666">666</span>
<span id="L667" rel="#L667">667</span>
<span id="L668" rel="#L668">668</span>
<span id="L669" rel="#L669">669</span>
<span id="L670" rel="#L670">670</span>
<span id="L671" rel="#L671">671</span>
<span id="L672" rel="#L672">672</span>
<span id="L673" rel="#L673">673</span>
<span id="L674" rel="#L674">674</span>
<span id="L675" rel="#L675">675</span>
<span id="L676" rel="#L676">676</span>
<span id="L677" rel="#L677">677</span>
<span id="L678" rel="#L678">678</span>
<span id="L679" rel="#L679">679</span>
<span id="L680" rel="#L680">680</span>
<span id="L681" rel="#L681">681</span>
<span id="L682" rel="#L682">682</span>
<span id="L683" rel="#L683">683</span>
<span id="L684" rel="#L684">684</span>
<span id="L685" rel="#L685">685</span>
<span id="L686" rel="#L686">686</span>
<span id="L687" rel="#L687">687</span>
<span id="L688" rel="#L688">688</span>
<span id="L689" rel="#L689">689</span>
<span id="L690" rel="#L690">690</span>
<span id="L691" rel="#L691">691</span>
<span id="L692" rel="#L692">692</span>
<span id="L693" rel="#L693">693</span>
<span id="L694" rel="#L694">694</span>
<span id="L695" rel="#L695">695</span>
<span id="L696" rel="#L696">696</span>
<span id="L697" rel="#L697">697</span>
<span id="L698" rel="#L698">698</span>
<span id="L699" rel="#L699">699</span>
<span id="L700" rel="#L700">700</span>
<span id="L701" rel="#L701">701</span>
<span id="L702" rel="#L702">702</span>
<span id="L703" rel="#L703">703</span>
<span id="L704" rel="#L704">704</span>
<span id="L705" rel="#L705">705</span>
<span id="L706" rel="#L706">706</span>
<span id="L707" rel="#L707">707</span>
<span id="L708" rel="#L708">708</span>
<span id="L709" rel="#L709">709</span>
<span id="L710" rel="#L710">710</span>
<span id="L711" rel="#L711">711</span>
<span id="L712" rel="#L712">712</span>
<span id="L713" rel="#L713">713</span>
<span id="L714" rel="#L714">714</span>
<span id="L715" rel="#L715">715</span>
<span id="L716" rel="#L716">716</span>
<span id="L717" rel="#L717">717</span>
<span id="L718" rel="#L718">718</span>
<span id="L719" rel="#L719">719</span>
<span id="L720" rel="#L720">720</span>
<span id="L721" rel="#L721">721</span>
<span id="L722" rel="#L722">722</span>
<span id="L723" rel="#L723">723</span>
<span id="L724" rel="#L724">724</span>
<span id="L725" rel="#L725">725</span>
<span id="L726" rel="#L726">726</span>
<span id="L727" rel="#L727">727</span>
<span id="L728" rel="#L728">728</span>
<span id="L729" rel="#L729">729</span>
<span id="L730" rel="#L730">730</span>
<span id="L731" rel="#L731">731</span>
<span id="L732" rel="#L732">732</span>
<span id="L733" rel="#L733">733</span>
<span id="L734" rel="#L734">734</span>
<span id="L735" rel="#L735">735</span>
<span id="L736" rel="#L736">736</span>
<span id="L737" rel="#L737">737</span>
<span id="L738" rel="#L738">738</span>
<span id="L739" rel="#L739">739</span>
<span id="L740" rel="#L740">740</span>
<span id="L741" rel="#L741">741</span>
<span id="L742" rel="#L742">742</span>
<span id="L743" rel="#L743">743</span>
<span id="L744" rel="#L744">744</span>
<span id="L745" rel="#L745">745</span>
<span id="L746" rel="#L746">746</span>
<span id="L747" rel="#L747">747</span>
<span id="L748" rel="#L748">748</span>
<span id="L749" rel="#L749">749</span>
<span id="L750" rel="#L750">750</span>
<span id="L751" rel="#L751">751</span>
<span id="L752" rel="#L752">752</span>
<span id="L753" rel="#L753">753</span>
<span id="L754" rel="#L754">754</span>
<span id="L755" rel="#L755">755</span>
<span id="L756" rel="#L756">756</span>
<span id="L757" rel="#L757">757</span>
<span id="L758" rel="#L758">758</span>
<span id="L759" rel="#L759">759</span>
<span id="L760" rel="#L760">760</span>
<span id="L761" rel="#L761">761</span>
<span id="L762" rel="#L762">762</span>
<span id="L763" rel="#L763">763</span>
<span id="L764" rel="#L764">764</span>
<span id="L765" rel="#L765">765</span>
<span id="L766" rel="#L766">766</span>
<span id="L767" rel="#L767">767</span>
<span id="L768" rel="#L768">768</span>
<span id="L769" rel="#L769">769</span>
<span id="L770" rel="#L770">770</span>
<span id="L771" rel="#L771">771</span>
<span id="L772" rel="#L772">772</span>
<span id="L773" rel="#L773">773</span>
<span id="L774" rel="#L774">774</span>
<span id="L775" rel="#L775">775</span>
<span id="L776" rel="#L776">776</span>
<span id="L777" rel="#L777">777</span>
<span id="L778" rel="#L778">778</span>
<span id="L779" rel="#L779">779</span>
<span id="L780" rel="#L780">780</span>
<span id="L781" rel="#L781">781</span>
<span id="L782" rel="#L782">782</span>
<span id="L783" rel="#L783">783</span>
<span id="L784" rel="#L784">784</span>
<span id="L785" rel="#L785">785</span>
<span id="L786" rel="#L786">786</span>
<span id="L787" rel="#L787">787</span>
<span id="L788" rel="#L788">788</span>
<span id="L789" rel="#L789">789</span>
<span id="L790" rel="#L790">790</span>
<span id="L791" rel="#L791">791</span>
<span id="L792" rel="#L792">792</span>
<span id="L793" rel="#L793">793</span>
<span id="L794" rel="#L794">794</span>
<span id="L795" rel="#L795">795</span>
<span id="L796" rel="#L796">796</span>
<span id="L797" rel="#L797">797</span>
<span id="L798" rel="#L798">798</span>
<span id="L799" rel="#L799">799</span>
<span id="L800" rel="#L800">800</span>
<span id="L801" rel="#L801">801</span>
<span id="L802" rel="#L802">802</span>
<span id="L803" rel="#L803">803</span>
<span id="L804" rel="#L804">804</span>
<span id="L805" rel="#L805">805</span>
<span id="L806" rel="#L806">806</span>
<span id="L807" rel="#L807">807</span>
<span id="L808" rel="#L808">808</span>
<span id="L809" rel="#L809">809</span>
<span id="L810" rel="#L810">810</span>
<span id="L811" rel="#L811">811</span>
<span id="L812" rel="#L812">812</span>
<span id="L813" rel="#L813">813</span>
<span id="L814" rel="#L814">814</span>
<span id="L815" rel="#L815">815</span>
<span id="L816" rel="#L816">816</span>
<span id="L817" rel="#L817">817</span>
<span id="L818" rel="#L818">818</span>
<span id="L819" rel="#L819">819</span>
<span id="L820" rel="#L820">820</span>
<span id="L821" rel="#L821">821</span>
<span id="L822" rel="#L822">822</span>
<span id="L823" rel="#L823">823</span>
<span id="L824" rel="#L824">824</span>
<span id="L825" rel="#L825">825</span>
<span id="L826" rel="#L826">826</span>
<span id="L827" rel="#L827">827</span>
<span id="L828" rel="#L828">828</span>
<span id="L829" rel="#L829">829</span>
<span id="L830" rel="#L830">830</span>
<span id="L831" rel="#L831">831</span>
<span id="L832" rel="#L832">832</span>
<span id="L833" rel="#L833">833</span>
<span id="L834" rel="#L834">834</span>
<span id="L835" rel="#L835">835</span>
<span id="L836" rel="#L836">836</span>
<span id="L837" rel="#L837">837</span>
<span id="L838" rel="#L838">838</span>
<span id="L839" rel="#L839">839</span>
<span id="L840" rel="#L840">840</span>
<span id="L841" rel="#L841">841</span>
<span id="L842" rel="#L842">842</span>
<span id="L843" rel="#L843">843</span>
<span id="L844" rel="#L844">844</span>
<span id="L845" rel="#L845">845</span>
<span id="L846" rel="#L846">846</span>
<span id="L847" rel="#L847">847</span>
<span id="L848" rel="#L848">848</span>
<span id="L849" rel="#L849">849</span>
<span id="L850" rel="#L850">850</span>
<span id="L851" rel="#L851">851</span>
<span id="L852" rel="#L852">852</span>
<span id="L853" rel="#L853">853</span>
<span id="L854" rel="#L854">854</span>
<span id="L855" rel="#L855">855</span>
<span id="L856" rel="#L856">856</span>
<span id="L857" rel="#L857">857</span>
<span id="L858" rel="#L858">858</span>
<span id="L859" rel="#L859">859</span>
<span id="L860" rel="#L860">860</span>
<span id="L861" rel="#L861">861</span>
<span id="L862" rel="#L862">862</span>
<span id="L863" rel="#L863">863</span>
<span id="L864" rel="#L864">864</span>
<span id="L865" rel="#L865">865</span>
<span id="L866" rel="#L866">866</span>
<span id="L867" rel="#L867">867</span>
<span id="L868" rel="#L868">868</span>
<span id="L869" rel="#L869">869</span>
<span id="L870" rel="#L870">870</span>
<span id="L871" rel="#L871">871</span>
<span id="L872" rel="#L872">872</span>
<span id="L873" rel="#L873">873</span>
<span id="L874" rel="#L874">874</span>
<span id="L875" rel="#L875">875</span>
<span id="L876" rel="#L876">876</span>
<span id="L877" rel="#L877">877</span>
<span id="L878" rel="#L878">878</span>
<span id="L879" rel="#L879">879</span>
<span id="L880" rel="#L880">880</span>
<span id="L881" rel="#L881">881</span>
<span id="L882" rel="#L882">882</span>
<span id="L883" rel="#L883">883</span>
<span id="L884" rel="#L884">884</span>
<span id="L885" rel="#L885">885</span>
<span id="L886" rel="#L886">886</span>
<span id="L887" rel="#L887">887</span>
<span id="L888" rel="#L888">888</span>
<span id="L889" rel="#L889">889</span>
<span id="L890" rel="#L890">890</span>
<span id="L891" rel="#L891">891</span>
<span id="L892" rel="#L892">892</span>
<span id="L893" rel="#L893">893</span>
<span id="L894" rel="#L894">894</span>
<span id="L895" rel="#L895">895</span>
<span id="L896" rel="#L896">896</span>
<span id="L897" rel="#L897">897</span>
<span id="L898" rel="#L898">898</span>
<span id="L899" rel="#L899">899</span>
<span id="L900" rel="#L900">900</span>
<span id="L901" rel="#L901">901</span>
<span id="L902" rel="#L902">902</span>
<span id="L903" rel="#L903">903</span>
<span id="L904" rel="#L904">904</span>
<span id="L905" rel="#L905">905</span>
<span id="L906" rel="#L906">906</span>
<span id="L907" rel="#L907">907</span>
<span id="L908" rel="#L908">908</span>
<span id="L909" rel="#L909">909</span>
<span id="L910" rel="#L910">910</span>
<span id="L911" rel="#L911">911</span>
<span id="L912" rel="#L912">912</span>
<span id="L913" rel="#L913">913</span>
<span id="L914" rel="#L914">914</span>
<span id="L915" rel="#L915">915</span>
<span id="L916" rel="#L916">916</span>
<span id="L917" rel="#L917">917</span>
<span id="L918" rel="#L918">918</span>
<span id="L919" rel="#L919">919</span>
<span id="L920" rel="#L920">920</span>
<span id="L921" rel="#L921">921</span>
<span id="L922" rel="#L922">922</span>
<span id="L923" rel="#L923">923</span>
<span id="L924" rel="#L924">924</span>
<span id="L925" rel="#L925">925</span>
<span id="L926" rel="#L926">926</span>
<span id="L927" rel="#L927">927</span>
<span id="L928" rel="#L928">928</span>
<span id="L929" rel="#L929">929</span>
<span id="L930" rel="#L930">930</span>
<span id="L931" rel="#L931">931</span>
<span id="L932" rel="#L932">932</span>
<span id="L933" rel="#L933">933</span>
<span id="L934" rel="#L934">934</span>
<span id="L935" rel="#L935">935</span>
<span id="L936" rel="#L936">936</span>
<span id="L937" rel="#L937">937</span>
<span id="L938" rel="#L938">938</span>
<span id="L939" rel="#L939">939</span>
<span id="L940" rel="#L940">940</span>
<span id="L941" rel="#L941">941</span>
<span id="L942" rel="#L942">942</span>
<span id="L943" rel="#L943">943</span>
<span id="L944" rel="#L944">944</span>
<span id="L945" rel="#L945">945</span>
<span id="L946" rel="#L946">946</span>
<span id="L947" rel="#L947">947</span>
<span id="L948" rel="#L948">948</span>
<span id="L949" rel="#L949">949</span>
<span id="L950" rel="#L950">950</span>
<span id="L951" rel="#L951">951</span>
<span id="L952" rel="#L952">952</span>
<span id="L953" rel="#L953">953</span>
<span id="L954" rel="#L954">954</span>
<span id="L955" rel="#L955">955</span>
<span id="L956" rel="#L956">956</span>
<span id="L957" rel="#L957">957</span>
<span id="L958" rel="#L958">958</span>
<span id="L959" rel="#L959">959</span>
<span id="L960" rel="#L960">960</span>
<span id="L961" rel="#L961">961</span>
<span id="L962" rel="#L962">962</span>
<span id="L963" rel="#L963">963</span>
<span id="L964" rel="#L964">964</span>
<span id="L965" rel="#L965">965</span>
<span id="L966" rel="#L966">966</span>
<span id="L967" rel="#L967">967</span>
<span id="L968" rel="#L968">968</span>
<span id="L969" rel="#L969">969</span>
<span id="L970" rel="#L970">970</span>
<span id="L971" rel="#L971">971</span>
<span id="L972" rel="#L972">972</span>
<span id="L973" rel="#L973">973</span>
<span id="L974" rel="#L974">974</span>
<span id="L975" rel="#L975">975</span>
<span id="L976" rel="#L976">976</span>
<span id="L977" rel="#L977">977</span>
<span id="L978" rel="#L978">978</span>
<span id="L979" rel="#L979">979</span>
<span id="L980" rel="#L980">980</span>
<span id="L981" rel="#L981">981</span>
<span id="L982" rel="#L982">982</span>
<span id="L983" rel="#L983">983</span>
<span id="L984" rel="#L984">984</span>
<span id="L985" rel="#L985">985</span>
<span id="L986" rel="#L986">986</span>
<span id="L987" rel="#L987">987</span>
<span id="L988" rel="#L988">988</span>
<span id="L989" rel="#L989">989</span>
<span id="L990" rel="#L990">990</span>
<span id="L991" rel="#L991">991</span>
<span id="L992" rel="#L992">992</span>
<span id="L993" rel="#L993">993</span>
<span id="L994" rel="#L994">994</span>
<span id="L995" rel="#L995">995</span>
<span id="L996" rel="#L996">996</span>
<span id="L997" rel="#L997">997</span>
<span id="L998" rel="#L998">998</span>
<span id="L999" rel="#L999">999</span>
<span id="L1000" rel="#L1000">1000</span>
<span id="L1001" rel="#L1001">1001</span>
<span id="L1002" rel="#L1002">1002</span>
<span id="L1003" rel="#L1003">1003</span>
<span id="L1004" rel="#L1004">1004</span>
<span id="L1005" rel="#L1005">1005</span>
<span id="L1006" rel="#L1006">1006</span>
<span id="L1007" rel="#L1007">1007</span>
<span id="L1008" rel="#L1008">1008</span>
<span id="L1009" rel="#L1009">1009</span>
<span id="L1010" rel="#L1010">1010</span>
<span id="L1011" rel="#L1011">1011</span>
<span id="L1012" rel="#L1012">1012</span>
<span id="L1013" rel="#L1013">1013</span>
<span id="L1014" rel="#L1014">1014</span>
<span id="L1015" rel="#L1015">1015</span>
<span id="L1016" rel="#L1016">1016</span>
<span id="L1017" rel="#L1017">1017</span>
<span id="L1018" rel="#L1018">1018</span>
<span id="L1019" rel="#L1019">1019</span>
<span id="L1020" rel="#L1020">1020</span>
<span id="L1021" rel="#L1021">1021</span>
<span id="L1022" rel="#L1022">1022</span>
<span id="L1023" rel="#L1023">1023</span>
<span id="L1024" rel="#L1024">1024</span>
<span id="L1025" rel="#L1025">1025</span>
<span id="L1026" rel="#L1026">1026</span>
<span id="L1027" rel="#L1027">1027</span>
<span id="L1028" rel="#L1028">1028</span>
<span id="L1029" rel="#L1029">1029</span>
<span id="L1030" rel="#L1030">1030</span>
<span id="L1031" rel="#L1031">1031</span>
<span id="L1032" rel="#L1032">1032</span>
<span id="L1033" rel="#L1033">1033</span>
<span id="L1034" rel="#L1034">1034</span>
<span id="L1035" rel="#L1035">1035</span>
<span id="L1036" rel="#L1036">1036</span>
<span id="L1037" rel="#L1037">1037</span>
<span id="L1038" rel="#L1038">1038</span>
<span id="L1039" rel="#L1039">1039</span>
<span id="L1040" rel="#L1040">1040</span>
<span id="L1041" rel="#L1041">1041</span>
<span id="L1042" rel="#L1042">1042</span>
<span id="L1043" rel="#L1043">1043</span>
<span id="L1044" rel="#L1044">1044</span>
<span id="L1045" rel="#L1045">1045</span>
<span id="L1046" rel="#L1046">1046</span>
<span id="L1047" rel="#L1047">1047</span>
<span id="L1048" rel="#L1048">1048</span>
<span id="L1049" rel="#L1049">1049</span>
<span id="L1050" rel="#L1050">1050</span>
<span id="L1051" rel="#L1051">1051</span>
<span id="L1052" rel="#L1052">1052</span>
<span id="L1053" rel="#L1053">1053</span>
<span id="L1054" rel="#L1054">1054</span>
<span id="L1055" rel="#L1055">1055</span>
<span id="L1056" rel="#L1056">1056</span>
<span id="L1057" rel="#L1057">1057</span>
<span id="L1058" rel="#L1058">1058</span>
<span id="L1059" rel="#L1059">1059</span>
<span id="L1060" rel="#L1060">1060</span>
<span id="L1061" rel="#L1061">1061</span>
<span id="L1062" rel="#L1062">1062</span>
<span id="L1063" rel="#L1063">1063</span>
<span id="L1064" rel="#L1064">1064</span>
<span id="L1065" rel="#L1065">1065</span>
<span id="L1066" rel="#L1066">1066</span>
<span id="L1067" rel="#L1067">1067</span>
<span id="L1068" rel="#L1068">1068</span>
<span id="L1069" rel="#L1069">1069</span>
<span id="L1070" rel="#L1070">1070</span>
<span id="L1071" rel="#L1071">1071</span>
<span id="L1072" rel="#L1072">1072</span>
<span id="L1073" rel="#L1073">1073</span>
<span id="L1074" rel="#L1074">1074</span>
<span id="L1075" rel="#L1075">1075</span>
<span id="L1076" rel="#L1076">1076</span>
<span id="L1077" rel="#L1077">1077</span>
<span id="L1078" rel="#L1078">1078</span>
<span id="L1079" rel="#L1079">1079</span>
<span id="L1080" rel="#L1080">1080</span>
<span id="L1081" rel="#L1081">1081</span>
<span id="L1082" rel="#L1082">1082</span>
<span id="L1083" rel="#L1083">1083</span>
<span id="L1084" rel="#L1084">1084</span>
<span id="L1085" rel="#L1085">1085</span>
<span id="L1086" rel="#L1086">1086</span>
<span id="L1087" rel="#L1087">1087</span>
<span id="L1088" rel="#L1088">1088</span>
<span id="L1089" rel="#L1089">1089</span>
<span id="L1090" rel="#L1090">1090</span>
<span id="L1091" rel="#L1091">1091</span>
<span id="L1092" rel="#L1092">1092</span>
<span id="L1093" rel="#L1093">1093</span>
<span id="L1094" rel="#L1094">1094</span>
<span id="L1095" rel="#L1095">1095</span>
<span id="L1096" rel="#L1096">1096</span>
<span id="L1097" rel="#L1097">1097</span>
<span id="L1098" rel="#L1098">1098</span>
<span id="L1099" rel="#L1099">1099</span>
<span id="L1100" rel="#L1100">1100</span>
<span id="L1101" rel="#L1101">1101</span>
<span id="L1102" rel="#L1102">1102</span>
<span id="L1103" rel="#L1103">1103</span>
<span id="L1104" rel="#L1104">1104</span>
<span id="L1105" rel="#L1105">1105</span>
<span id="L1106" rel="#L1106">1106</span>
<span id="L1107" rel="#L1107">1107</span>
<span id="L1108" rel="#L1108">1108</span>
<span id="L1109" rel="#L1109">1109</span>
<span id="L1110" rel="#L1110">1110</span>
<span id="L1111" rel="#L1111">1111</span>
<span id="L1112" rel="#L1112">1112</span>
<span id="L1113" rel="#L1113">1113</span>
<span id="L1114" rel="#L1114">1114</span>
<span id="L1115" rel="#L1115">1115</span>
<span id="L1116" rel="#L1116">1116</span>
<span id="L1117" rel="#L1117">1117</span>
<span id="L1118" rel="#L1118">1118</span>
<span id="L1119" rel="#L1119">1119</span>
<span id="L1120" rel="#L1120">1120</span>
<span id="L1121" rel="#L1121">1121</span>
<span id="L1122" rel="#L1122">1122</span>
<span id="L1123" rel="#L1123">1123</span>
<span id="L1124" rel="#L1124">1124</span>
<span id="L1125" rel="#L1125">1125</span>
<span id="L1126" rel="#L1126">1126</span>
<span id="L1127" rel="#L1127">1127</span>
<span id="L1128" rel="#L1128">1128</span>
<span id="L1129" rel="#L1129">1129</span>
<span id="L1130" rel="#L1130">1130</span>
<span id="L1131" rel="#L1131">1131</span>
<span id="L1132" rel="#L1132">1132</span>
<span id="L1133" rel="#L1133">1133</span>
<span id="L1134" rel="#L1134">1134</span>
<span id="L1135" rel="#L1135">1135</span>
<span id="L1136" rel="#L1136">1136</span>
<span id="L1137" rel="#L1137">1137</span>
<span id="L1138" rel="#L1138">1138</span>
<span id="L1139" rel="#L1139">1139</span>
<span id="L1140" rel="#L1140">1140</span>
<span id="L1141" rel="#L1141">1141</span>
<span id="L1142" rel="#L1142">1142</span>
<span id="L1143" rel="#L1143">1143</span>
<span id="L1144" rel="#L1144">1144</span>
<span id="L1145" rel="#L1145">1145</span>
<span id="L1146" rel="#L1146">1146</span>
<span id="L1147" rel="#L1147">1147</span>
<span id="L1148" rel="#L1148">1148</span>
<span id="L1149" rel="#L1149">1149</span>
<span id="L1150" rel="#L1150">1150</span>
<span id="L1151" rel="#L1151">1151</span>
<span id="L1152" rel="#L1152">1152</span>
<span id="L1153" rel="#L1153">1153</span>
<span id="L1154" rel="#L1154">1154</span>
<span id="L1155" rel="#L1155">1155</span>
<span id="L1156" rel="#L1156">1156</span>
<span id="L1157" rel="#L1157">1157</span>
<span id="L1158" rel="#L1158">1158</span>
<span id="L1159" rel="#L1159">1159</span>
<span id="L1160" rel="#L1160">1160</span>
<span id="L1161" rel="#L1161">1161</span>
<span id="L1162" rel="#L1162">1162</span>
<span id="L1163" rel="#L1163">1163</span>
<span id="L1164" rel="#L1164">1164</span>
<span id="L1165" rel="#L1165">1165</span>
<span id="L1166" rel="#L1166">1166</span>
<span id="L1167" rel="#L1167">1167</span>
<span id="L1168" rel="#L1168">1168</span>
<span id="L1169" rel="#L1169">1169</span>
<span id="L1170" rel="#L1170">1170</span>
<span id="L1171" rel="#L1171">1171</span>
<span id="L1172" rel="#L1172">1172</span>
<span id="L1173" rel="#L1173">1173</span>
<span id="L1174" rel="#L1174">1174</span>
<span id="L1175" rel="#L1175">1175</span>
<span id="L1176" rel="#L1176">1176</span>
<span id="L1177" rel="#L1177">1177</span>
<span id="L1178" rel="#L1178">1178</span>
<span id="L1179" rel="#L1179">1179</span>
<span id="L1180" rel="#L1180">1180</span>
<span id="L1181" rel="#L1181">1181</span>
<span id="L1182" rel="#L1182">1182</span>
<span id="L1183" rel="#L1183">1183</span>
<span id="L1184" rel="#L1184">1184</span>
<span id="L1185" rel="#L1185">1185</span>
<span id="L1186" rel="#L1186">1186</span>
<span id="L1187" rel="#L1187">1187</span>
<span id="L1188" rel="#L1188">1188</span>
<span id="L1189" rel="#L1189">1189</span>
<span id="L1190" rel="#L1190">1190</span>
<span id="L1191" rel="#L1191">1191</span>
<span id="L1192" rel="#L1192">1192</span>
<span id="L1193" rel="#L1193">1193</span>
<span id="L1194" rel="#L1194">1194</span>
<span id="L1195" rel="#L1195">1195</span>
<span id="L1196" rel="#L1196">1196</span>
<span id="L1197" rel="#L1197">1197</span>
<span id="L1198" rel="#L1198">1198</span>
<span id="L1199" rel="#L1199">1199</span>
<span id="L1200" rel="#L1200">1200</span>
<span id="L1201" rel="#L1201">1201</span>
<span id="L1202" rel="#L1202">1202</span>
<span id="L1203" rel="#L1203">1203</span>
<span id="L1204" rel="#L1204">1204</span>
<span id="L1205" rel="#L1205">1205</span>
<span id="L1206" rel="#L1206">1206</span>
<span id="L1207" rel="#L1207">1207</span>
<span id="L1208" rel="#L1208">1208</span>
<span id="L1209" rel="#L1209">1209</span>
<span id="L1210" rel="#L1210">1210</span>
<span id="L1211" rel="#L1211">1211</span>
<span id="L1212" rel="#L1212">1212</span>
<span id="L1213" rel="#L1213">1213</span>
<span id="L1214" rel="#L1214">1214</span>
<span id="L1215" rel="#L1215">1215</span>
<span id="L1216" rel="#L1216">1216</span>
<span id="L1217" rel="#L1217">1217</span>
<span id="L1218" rel="#L1218">1218</span>
<span id="L1219" rel="#L1219">1219</span>
<span id="L1220" rel="#L1220">1220</span>
<span id="L1221" rel="#L1221">1221</span>
<span id="L1222" rel="#L1222">1222</span>
<span id="L1223" rel="#L1223">1223</span>
<span id="L1224" rel="#L1224">1224</span>
<span id="L1225" rel="#L1225">1225</span>
<span id="L1226" rel="#L1226">1226</span>
<span id="L1227" rel="#L1227">1227</span>
<span id="L1228" rel="#L1228">1228</span>
<span id="L1229" rel="#L1229">1229</span>
<span id="L1230" rel="#L1230">1230</span>
<span id="L1231" rel="#L1231">1231</span>
<span id="L1232" rel="#L1232">1232</span>
<span id="L1233" rel="#L1233">1233</span>
<span id="L1234" rel="#L1234">1234</span>
<span id="L1235" rel="#L1235">1235</span>
<span id="L1236" rel="#L1236">1236</span>
<span id="L1237" rel="#L1237">1237</span>
<span id="L1238" rel="#L1238">1238</span>
<span id="L1239" rel="#L1239">1239</span>
<span id="L1240" rel="#L1240">1240</span>
<span id="L1241" rel="#L1241">1241</span>
<span id="L1242" rel="#L1242">1242</span>
<span id="L1243" rel="#L1243">1243</span>
<span id="L1244" rel="#L1244">1244</span>
<span id="L1245" rel="#L1245">1245</span>
<span id="L1246" rel="#L1246">1246</span>
<span id="L1247" rel="#L1247">1247</span>
<span id="L1248" rel="#L1248">1248</span>
<span id="L1249" rel="#L1249">1249</span>
<span id="L1250" rel="#L1250">1250</span>
<span id="L1251" rel="#L1251">1251</span>
<span id="L1252" rel="#L1252">1252</span>
<span id="L1253" rel="#L1253">1253</span>
<span id="L1254" rel="#L1254">1254</span>
<span id="L1255" rel="#L1255">1255</span>
<span id="L1256" rel="#L1256">1256</span>
<span id="L1257" rel="#L1257">1257</span>
<span id="L1258" rel="#L1258">1258</span>
<span id="L1259" rel="#L1259">1259</span>
<span id="L1260" rel="#L1260">1260</span>
<span id="L1261" rel="#L1261">1261</span>
<span id="L1262" rel="#L1262">1262</span>
<span id="L1263" rel="#L1263">1263</span>
<span id="L1264" rel="#L1264">1264</span>
<span id="L1265" rel="#L1265">1265</span>
<span id="L1266" rel="#L1266">1266</span>
<span id="L1267" rel="#L1267">1267</span>
<span id="L1268" rel="#L1268">1268</span>
<span id="L1269" rel="#L1269">1269</span>
<span id="L1270" rel="#L1270">1270</span>
<span id="L1271" rel="#L1271">1271</span>
<span id="L1272" rel="#L1272">1272</span>
<span id="L1273" rel="#L1273">1273</span>
<span id="L1274" rel="#L1274">1274</span>
<span id="L1275" rel="#L1275">1275</span>
<span id="L1276" rel="#L1276">1276</span>
<span id="L1277" rel="#L1277">1277</span>
<span id="L1278" rel="#L1278">1278</span>
<span id="L1279" rel="#L1279">1279</span>
<span id="L1280" rel="#L1280">1280</span>
<span id="L1281" rel="#L1281">1281</span>
<span id="L1282" rel="#L1282">1282</span>
<span id="L1283" rel="#L1283">1283</span>
<span id="L1284" rel="#L1284">1284</span>

           </td>
           <td class="blob-line-code"><div class="code-body highlight"><pre><div class='line' id='LC1'><span class="k">\documentclass</span><span class="na">[a4paper,french,12pt]</span><span class="nb">{</span>article<span class="nb">}</span></div><div class='line' id='LC2'><span class="k">\usepackage</span><span class="nb">{</span>babel,amssymb,amsmath<span class="nb">}</span></div><div class='line' id='LC3'><span class="k">\usepackage</span><span class="na">[utf8]</span><span class="nb">{</span>inputenc<span class="nb">}</span></div><div class='line' id='LC4'><span class="k">\usepackage</span><span class="nb">{</span>array,colortbl<span class="nb">}</span></div><div class='line' id='LC5'><span class="k">\usepackage</span><span class="na">[T1]</span><span class="nb">{</span>fontenc<span class="nb">}</span></div><div class='line' id='LC6'><span class="k">\usepackage</span><span class="nb">{</span>multicol<span class="nb">}</span></div><div class='line' id='LC7'><span class="c">%\usepackage{multirow}</span></div><div class='line' id='LC8'><span class="c">%\usepackage[8pt]{pstricks}</span></div><div class='line' id='LC9'><span class="k">\usepackage</span><span class="nb">{</span>textcomp<span class="nb">}</span></div><div class='line' id='LC10'><span class="k">\usepackage</span><span class="nb">{</span>fancyhdr<span class="nb">}</span></div><div class='line' id='LC11'><span class="k">\usepackage</span><span class="nb">{</span>geometry<span class="nb">}</span></div><div class='line' id='LC12'><span class="k">\usepackage</span><span class="nb">{</span>eurosym<span class="nb">}</span></div><div class='line' id='LC13'><span class="k">\usepackage</span><span class="nb">{</span>listings<span class="nb">}</span></div><div class='line' id='LC14'><span class="k">\usepackage</span><span class="nb">{</span>color<span class="nb">}</span></div><div class='line' id='LC15'><span class="k">\usepackage</span><span class="nb">{</span>placeins<span class="nb">}</span></div><div class='line' id='LC16'><span class="k">\usepackage</span><span class="nb">{</span>mathtools<span class="nb">}</span></div><div class='line' id='LC17'><span class="k">\definecolor</span><span class="nb">{</span>mygreen<span class="nb">}{</span>rgb<span class="nb">}{</span>0,0.6,0<span class="nb">}</span></div><div class='line' id='LC18'><span class="k">\definecolor</span><span class="nb">{</span>mygray<span class="nb">}{</span>rgb<span class="nb">}{</span>0.5,0.5,0.5<span class="nb">}</span></div><div class='line' id='LC19'><span class="k">\definecolor</span><span class="nb">{</span>mymauve<span class="nb">}{</span>rgb<span class="nb">}{</span>0.58,0,0.82<span class="nb">}</span></div><div class='line' id='LC20'><br></div><div class='line' id='LC21'><span class="k">\lstset</span><span class="nb">{</span> <span class="c">%</span></div><div class='line' id='LC22'>&nbsp;&nbsp;backgroundcolor=<span class="k">\color</span><span class="nb">{</span>white<span class="nb">}</span>,   <span class="c">% choose the background color; you must add \usepackage{color} or \usepackage{xcolor}</span></div><div class='line' id='LC23'>&nbsp;&nbsp;basicstyle=<span class="k">\footnotesize</span>,        <span class="c">% the size of the fonts that are used for the code</span></div><div class='line' id='LC24'>&nbsp;&nbsp;breakatwhitespace=false,         <span class="c">% sets if automatic breaks should only happen at whitespace</span></div><div class='line' id='LC25'>&nbsp;&nbsp;breaklines=true,                 <span class="c">% sets automatic line breaking</span></div><div class='line' id='LC26'>&nbsp;&nbsp;captionpos=b,                    <span class="c">% sets the caption-position to bottom</span></div><div class='line' id='LC27'>&nbsp;&nbsp;commentstyle=<span class="k">\color</span><span class="nb">{</span>green<span class="nb">}</span>,    <span class="c">% comment style</span></div><div class='line' id='LC28'>&nbsp;&nbsp;deletekeywords=<span class="nb">{</span>...<span class="nb">}</span>,            <span class="c">% if you want to delete keywords from the given language</span></div><div class='line' id='LC29'>&nbsp;&nbsp;escapeinside=<span class="nb">{</span><span class="k">\%*</span><span class="nb">}{</span>*)<span class="nb">}</span>,          <span class="c">% if you want to add LaTeX within your code</span></div><div class='line' id='LC30'>&nbsp;&nbsp;extendedchars=true,              <span class="c">% lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8</span></div><div class='line' id='LC31'>&nbsp;&nbsp;frame=single,                    <span class="c">% adds a frame around the code</span></div><div class='line' id='LC32'>&nbsp;&nbsp;keepspaces=true,                 <span class="c">% keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)</span></div><div class='line' id='LC33'>&nbsp;&nbsp;keywordstyle=<span class="k">\color</span><span class="nb">{</span>blue<span class="nb">}</span>,       <span class="c">% keyword style</span></div><div class='line' id='LC34'>&nbsp;&nbsp;language=C++,                 <span class="c">% the language of the code</span></div><div class='line' id='LC35'>&nbsp;&nbsp;morekeywords=<span class="nb">{</span>*,...<span class="nb">}</span>,            <span class="c">% if you want to add more keywords to the set</span></div><div class='line' id='LC36'>&nbsp;&nbsp;numbers=left,                    <span class="c">% where to put the line-numbers; possible values are (none, left, right)</span></div><div class='line' id='LC37'>&nbsp;&nbsp;numbersep=5pt,                   <span class="c">% how far the line-numbers are from the code</span></div><div class='line' id='LC38'>&nbsp;&nbsp;numberstyle=<span class="k">\tiny\color</span><span class="nb">{</span>mygray<span class="nb">}</span>, <span class="c">% the style that is used for the line-numbers</span></div><div class='line' id='LC39'>&nbsp;&nbsp;rulecolor=<span class="k">\color</span><span class="nb">{</span>black<span class="nb">}</span>,         <span class="c">% if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))</span></div><div class='line' id='LC40'>&nbsp;&nbsp;showspaces=false,                <span class="c">% show spaces everywhere adding particular underscores; it overrides &#39;showstringspaces&#39;</span></div><div class='line' id='LC41'>&nbsp;&nbsp;showstringspaces=false,          <span class="c">% underline spaces within strings only</span></div><div class='line' id='LC42'>&nbsp;&nbsp;showtabs=false,                  <span class="c">% show tabs within strings adding particular underscores</span></div><div class='line' id='LC43'>&nbsp;&nbsp;stepnumber=1,                    <span class="c">% the step between two line-numbers. If it&#39;s 1, each line will be numbered</span></div><div class='line' id='LC44'>&nbsp;&nbsp;stringstyle=<span class="k">\color</span><span class="nb">{</span>mymauve<span class="nb">}</span>,     <span class="c">% string literal style</span></div><div class='line' id='LC45'>&nbsp;&nbsp;tabsize=2,                       <span class="c">% sets default tabsize to 2 spaces</span></div><div class='line' id='LC46'>&nbsp;&nbsp;title=<span class="k">\lstname</span>                   <span class="c">% show the filename of files included with \lstinputlisting; also try caption instead of title</span></div><div class='line' id='LC47'><span class="nb">}</span></div><div class='line' id='LC48'><span class="c">% \usepackage{titling}</span></div><div class='line' id='LC49'><span class="c">%\usepackage{makeidx}</span></div><div class='line' id='LC50'><span class="c">% \usepackage[maxfloats=50]{morefloats}</span></div><div class='line' id='LC51'><span class="c">% \usepackage{hyperref}</span></div><div class='line' id='LC52'><span class="k">\usepackage</span><span class="nb">{</span>ulem<span class="nb">}</span></div><div class='line' id='LC53'><br></div><div class='line' id='LC54'><span class="k">\usepackage</span><span class="nb">{</span>epigraph<span class="nb">}</span></div><div class='line' id='LC55'><span class="k">\geometry</span><span class="nb">{</span>rmargin=2.5cm, lmargin=2.5cm, hmargin=2cm, bmargin=2cm<span class="nb">}</span></div><div class='line' id='LC56'><span class="k">\pagestyle</span><span class="nb">{</span>plain<span class="nb">}</span></div><div class='line' id='LC57'><span class="k">\usepackage</span><span class="na">[pdftex]</span><span class="nb">{</span>thumbpdf<span class="nb">}</span></div><div class='line' id='LC58'><span class="c">%\definecolor{vert}{rgb}{0.25,0.65,0.04}</span></div><div class='line' id='LC59'><span class="k">\usepackage</span>[pdftex,</div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;bookmarks         = true,</div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;bookmarksnumbered = true,</div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;pdfpagemode       = None,</div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;pdfstartview      = FitH,</div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;pdfpagelayout     = SinglePage,</div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;colorlinks        = true,</div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;linkcolor	      = black,</div><div class='line' id='LC67'>&nbsp;&nbsp;&nbsp;&nbsp;pdfborder         = <span class="nb">{</span>0 0 0<span class="nb">}</span></div><div class='line' id='LC68'>&nbsp;&nbsp;&nbsp;&nbsp;]<span class="nb">{</span>hyperref<span class="nb">}</span></div><div class='line' id='LC69'><span class="k">\usepackage</span><span class="nb">{</span>graphicx<span class="nb">}</span></div><div class='line' id='LC70'><span class="k">\usepackage</span><span class="na">[ruled]</span><span class="nb">{</span>algorithm2e<span class="nb">}</span></div><div class='line' id='LC71'><br></div><div class='line' id='LC72'><span class="k">\newcommand</span><span class="nb">{</span><span class="k">\HRule</span><span class="nb">}{</span><span class="k">\rule</span><span class="nb">{</span><span class="k">\linewidth</span><span class="nb">}{</span>0.5mm<span class="nb">}}</span></div><div class='line' id='LC73'><span class="c">% \hypersetup{</span></div><div class='line' id='LC74'><span class="c">% 	pdfauthor = {Philippe \textsc{GAULTIER}},</span></div><div class='line' id='LC75'><span class="c">% 	pdftitle = {Rapport de stage du 17/06/2013 au 23/08/2013},</span></div><div class='line' id='LC76'><span class="c">% 	pdfsubject = {},</span></div><div class='line' id='LC77'><span class="c">% 	pdfkeywords = {},</span></div><div class='line' id='LC78'><span class="c">% 	pdfcreator = {},</span></div><div class='line' id='LC79'><span class="c">% }</span></div><div class='line' id='LC80'><span class="c">% \newcommand{\filename}[1]{\textbf{\#1}}</span></div><div class='line' id='LC81'><span class="c">% \newcommand{\fonction}[1]{\textbf{\itshape{\#1}}} </span></div><div class='line' id='LC82'><span class="c">% \newcommand{\tabl}[1]{\textbf{\itshape{\#1}}[ ]} </span></div><div class='line' id='LC83'><span class="k">\begin</span><span class="nb">{</span>document<span class="nb">}</span></div><div class='line' id='LC84'><span class="k">\begin</span><span class="nb">{</span>titlepage<span class="nb">}</span></div><div class='line' id='LC85'><span class="k">\begin</span><span class="nb">{</span>center<span class="nb">}</span></div><div class='line' id='LC86'><br></div><div class='line' id='LC87'><span class="c">%Logo</span></div><div class='line' id='LC88'><span class="k">\includegraphics</span><span class="na">[width=0.4\textwidth]</span><span class="nb">{</span>./logo<span class="nb">_</span>ENSIIE.png<span class="nb">}</span>~<span class="k">\\</span><span class="na">[1cm]</span></div><div class='line' id='LC89'><span class="k">\textsc</span><span class="nb">{</span><span class="k">\huge</span> Ensiie Strasbourg<span class="nb">}</span><span class="k">\\</span><span class="na">[1.5cm]</span></div><div class='line' id='LC90'><br></div><div class='line' id='LC91'><span class="c">%Title</span></div><div class='line' id='LC92'><span class="k">\HRule</span> <span class="k">\\</span><span class="na">[0.4cm]</span></div><div class='line' id='LC93'><span class="nb">{</span></div><div class='line' id='LC94'>	<span class="k">\huge</span> <span class="k">\bfseries</span> Rapport de stage</div><div class='line' id='LC95'><span class="k">\\</span><span class="na">[0.4cm]</span> <span class="nb">}</span></div><div class='line' id='LC96'><span class="k">\HRule</span> <span class="k">\\</span><span class="na">[1.5cm]</span></div><div class='line' id='LC97'><br></div><div class='line' id='LC98'><span class="c">% Author and supervisor</span></div><div class='line' id='LC99'><span class="k">\begin</span><span class="nb">{</span>minipage<span class="nb">}{</span>0.4<span class="k">\textwidth</span><span class="nb">}</span></div><div class='line' id='LC100'><span class="k">\begin</span><span class="nb">{</span>flushleft<span class="nb">}</span> <span class="k">\huge</span></div><div class='line' id='LC101'><span class="k">\emph</span><span class="nb">{</span>Auteur:<span class="nb">}</span><span class="k">\\</span></div><div class='line' id='LC102'>Philippe <span class="k">\textsc</span><span class="nb">{</span>Gaultier<span class="nb">}</span>,<span class="k">\\</span><span class="na">[0.5cm]</span></div><div class='line' id='LC103'><span class="k">\Large</span> élève ingénieur à l&#39;Ensiie Strasbourg</div><div class='line' id='LC104'><span class="k">\end</span><span class="nb">{</span>flushleft<span class="nb">}</span></div><div class='line' id='LC105'><span class="k">\end</span><span class="nb">{</span>minipage<span class="nb">}</span></div><div class='line' id='LC106'><span class="k">\begin</span><span class="nb">{</span>minipage<span class="nb">}{</span>0.4<span class="k">\textwidth</span><span class="nb">}</span></div><div class='line' id='LC107'><span class="k">\begin</span><span class="nb">{</span>flushright<span class="nb">}</span> <span class="k">\huge</span></div><div class='line' id='LC108'><span class="k">\emph</span><span class="nb">{</span>Maître de stage:<span class="nb">}</span> <span class="k">\\</span></div><div class='line' id='LC109'>André <span class="k">\textsc</span><span class="nb">{</span>schaafff<span class="nb">}</span>,<span class="k">\\</span><span class="na">[0.5cm]</span></div><div class='line' id='LC110'><span class="k">\Large</span> Ingénieur de recherche au CNRS</div><div class='line' id='LC111'><span class="k">\end</span><span class="nb">{</span>flushright<span class="nb">}</span></div><div class='line' id='LC112'><span class="k">\end</span><span class="nb">{</span>minipage<span class="nb">}</span></div><div class='line' id='LC113'><br></div><div class='line' id='LC114'><span class="k">\vfill</span></div><div class='line' id='LC115'><br></div><div class='line' id='LC116'><span class="c">% Bottom of the page</span></div><div class='line' id='LC117'><span class="nb">{</span><span class="k">\large</span> Strasbourg, le <span class="k">\today</span><span class="nb">}</span></div><div class='line' id='LC118'><br></div><div class='line' id='LC119'><br></div><div class='line' id='LC120'><br></div><div class='line' id='LC121'><span class="c">%\maketitle</span></div><div class='line' id='LC122'><span class="c">% \theauthor</span></div><div class='line' id='LC123'><span class="c">% \thetitle</span></div><div class='line' id='LC124'><span class="c">% \thedate</span></div><div class='line' id='LC125'><span class="c">% \makeindex</span></div><div class='line' id='LC126'><span class="k">\end</span><span class="nb">{</span>center<span class="nb">}</span></div><div class='line' id='LC127'><span class="k">\end</span><span class="nb">{</span>titlepage<span class="nb">}</span></div><div class='line' id='LC128'><br></div><div class='line' id='LC129'><span class="k">\newpage</span></div><div class='line' id='LC130'><span class="nb">{</span></div><div class='line' id='LC131'>&nbsp;&nbsp;<span class="k">\centering</span></div><div class='line' id='LC132'>&nbsp;&nbsp;<span class="nb">{</span></div><div class='line' id='LC133'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\vspace</span><span class="nb">{</span>3cm<span class="nb">}</span></div><div class='line' id='LC134'>&nbsp;&nbsp;</div><div class='line' id='LC135'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\vspace</span><span class="nb">{</span>3cm<span class="nb">}</span></div><div class='line' id='LC136'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\epigraph</span><span class="nb">{</span>The road is long and in the end the journey is the destination<span class="nb">}{</span>Unknown<span class="nb">}</span></div><div class='line' id='LC137'>&nbsp;&nbsp;<span class="nb">}</span></div><div class='line' id='LC138'><span class="nb">}</span></div><div class='line' id='LC139'><span class="k">\newpage</span></div><div class='line' id='LC140'><span class="k">\textit</span><span class="nb">{</span><span class="k">\normalsize</span> Dans toute la suite du rapport, l&#39;&lt;&lt;Observatoire&gt;&gt; désigne l&#39;&lt;&lt;Observatoire astronomique de Strasbourg&gt;&gt;</div><div class='line' id='LC141'>et l&#39;&lt;&lt;Unistra&gt;&gt; ou l&#39;&lt;&lt;UDS&gt;&gt; désignent l&#39;&lt;&lt;Université de Strasbourg&gt;&gt;.<span class="nb">}</span></div><div class='line' id='LC142'><span class="k">\setlength</span><span class="nb">{</span><span class="k">\columnseprule</span><span class="nb">}{</span>0.5pt<span class="nb">}</span></div><div class='line' id='LC143'><br></div><div class='line' id='LC144'><span class="k">\tableofcontents</span></div><div class='line' id='LC145'><span class="k">\listoffigures</span></div><div class='line' id='LC146'><br></div><div class='line' id='LC147'><span class="k">\newpage</span></div><div class='line' id='LC148'><br></div><div class='line' id='LC149'><span class="k">\section</span><span class="nb">{</span>Introduction<span class="nb">}</span></div><div class='line' id='LC150'><br></div><div class='line' id='LC151'>	L&#39;Observatoire est un établissement de recherche et d&#39;enseignement centré sur l&#39;astronomie, mais c&#39;est aussi un </div><div class='line' id='LC152'>	centre de données astronomiques réputé mondialement. Il représente la continuité entre</div><div class='line' id='LC153'>	l&#39;ancien et le nouveau car il dispose d&#39;un riche patrimoine mais est aussi à la pointe de la recherche en astronomie.  <span class="k">\\</span></div><div class='line' id='LC154'>	De plus l&#39;Observatoire est le parfait exemple de l&#39;informatique au service d&#39;autres spécialités scientifiques,</div><div class='line' id='LC155'>	à la fois dans le domaine de l&#39;expertise, mais aussi sous un aspect éducatif.<span class="k">\\</span></div><div class='line' id='LC156'>	Pour toutes ces raisons, j&#39;ai choisi d&#39;effectuer mon stage de deuxième année au sein de l&#39;Observatoire,</div><div class='line' id='LC157'>	au contact de technologies émergentes à savoir l&#39;Oculus Rift et le rendu graphique 3D moderne.</div><div class='line' id='LC158'><br></div><div class='line' id='LC159'><span class="k">\section</span><span class="nb">{</span>Présentation de l&#39;observatoire<span class="nb">}</span></div><div class='line' id='LC160'><br></div><div class='line' id='LC161'>	<span class="k">\subsection</span><span class="nb">{</span>Histoire<span class="nb">}</span></div><div class='line' id='LC162'>		L&#39;Observatoire a été fondé en 1881 sur l&#39;initiative de l&#39;empereur Guillaume II, l&#39;Alsace étant allemande</div><div class='line' id='LC163'>		à cette époque.<span class="k">\\</span></div><div class='line' id='LC164'>		Il est constitué de trois bâtiments : une Grande Coupole, un bâtiment des salles méridiennes avec deux coupoles,</div><div class='line' id='LC165'>		et un bâtiment à usage de bureau et de résidence.<span class="k">\\</span></div><div class='line' id='LC166'>		La Grande Coupole en fer, de 9,2 mètres de diamètre et pesant 34 tonnes, contient le Grand Réfracteur,</div><div class='line' id='LC167'>		une lunette de 48,7 cm d&#39;ouverture et 7 m de focale, construite en 1877, la plus grande d&#39;Europe</div><div class='line' id='LC168'>		au moment de son installation et aujourd&#39;hui (2014) la troisième de France en taille.<span class="k">\\</span></div><div class='line' id='LC169'>		Il dispose également d’un riche patrimoine d’instruments et d’ouvrage anciens.</div><div class='line' id='LC170'><br></div><div class='line' id='LC171'>	<span class="k">\subsection</span><span class="nb">{</span>Centre de données astronomiques de Strasbourg (CDS)<span class="nb">}</span></div><div class='line' id='LC172'><br></div><div class='line' id='LC173'>		Le CDS est à la fois une équipe de recherche et un service d’observation.</div><div class='line' id='LC174'>		Les services de bases de données (SIMBAD, Vizier) et de visualisation (ALADIN) développés par le CDS</div><div class='line' id='LC175'>		sont utilisés par l’ensemble de la communauté astronomique mondiale. <span class="k">\\</span></div><div class='line' id='LC176'>		Celui-ci est l&#39;un des acteurs majeurs du développement de l&#39;Observatoire Virtuel International en astronomie.</div><div class='line' id='LC177'>		Fin 2008, le CDS a été labellisé TGIR (Très Grande Infrastructure de Recherche) par le Ministère de l&#39;Enseignement Supérieur et de la Recherche, </div><div class='line' id='LC178'>		reconfirmé comme Infrastructure de Recherche en 2012, ce qui le range au même niveau que des infrastructures internationales</div><div class='line' id='LC179'>		comme l’European Southern Observatory ou RENATER à l’échelon national.</div><div class='line' id='LC180'><br></div><div class='line' id='LC181'>		Le CDS est l&#39;un des fondateurs de l&#39;IVOA (&lt;&lt;International Virtual Observatory Alliance&gt;&gt;) qui travaille à</div><div class='line' id='LC182'>		l&#39;élaboration de standards d&#39;interopérabilité pour les données astronomiques.</div><div class='line' id='LC183'><br></div><div class='line' id='LC184'>	<span class="k">\subsection</span><span class="nb">{</span>Equipe de recherche Galaxies<span class="nb">}</span></div><div class='line' id='LC185'><br></div><div class='line' id='LC186'>		L’équipe &lt;&lt;Galaxies&gt;&gt; étudie la formation et l’évolution des galaxies et de notre Galaxie </div><div class='line' id='LC187'>		au travers de leurs populations stellaires et de la dynamique des étoiles et de la matière noire. <span class="k">\\</span></div><div class='line' id='LC188'>		Elle est impliquée dans la préparation de la mission satellitaire astrométrique Gaia de l’Agence Spatiale Européenne </div><div class='line' id='LC189'>		dont le lancement est prévu en 2012 et dans le grand relevé cinématique RAVE. </div><div class='line' id='LC190'><br></div><div class='line' id='LC191'>	<span class="k">\subsection</span><span class="nb">{</span>Equipe de recherche Hautes Énergies<span class="nb">}</span> </div><div class='line' id='LC192'><br></div><div class='line' id='LC193'>		L’équipe &lt;&lt;Hautes Énergies&gt;&gt; s’intéresse aux sources galactiques et extragalactiques émettrices en rayons X,</div><div class='line' id='LC194'>		objets compacts (étoiles à neutron, naines blanches, etc.) et noyaux actifs de galaxies.<span class="k">\\</span></div><div class='line' id='LC195'>		Elle est impliquée dans le SSC-XMM, un consortium international de laboratoires sélectionné par l’ESA</div><div class='line' id='LC196'>		et labellisé par l’INSU comme Service d’Observation, qui est en charge de fournir des catalogues complets</div><div class='line' id='LC197'>		de sources X observées par le satellite XMM-Newton à la communauté internationale. </div><div class='line' id='LC198'><br></div><div class='line' id='LC199'><span class="k">\section</span><span class="nb">{</span>Mon stage<span class="nb">}</span></div><div class='line' id='LC200'><br></div><div class='line' id='LC201'>	<span class="k">\subsection</span><span class="nb">{</span>Objectif<span class="nb">}</span>	</div><div class='line' id='LC202'><br></div><div class='line' id='LC203'>		L’objectif de ce stage était centré autour de l&#39;Oculus Rift et était double:<span class="k">\\</span></div><div class='line' id='LC204'><br></div><div class='line' id='LC205'>		<span class="k">\begin</span><span class="nb">{</span>enumerate<span class="nb">}</span></div><div class='line' id='LC206'>		<span class="k">\item</span> Intégration de l&#39;Oculus Rift à une visualisation 3D du système solaire existante (Skybot 3D),</div><div class='line' id='LC207'>		<span class="k">\item</span> Développement d&#39;un programme de simulation 3D  d&#39;objets célestes avec intégration de l&#39;Oculus Rift (Simulation)</div><div class='line' id='LC208'>		<span class="k">\end</span><span class="nb">{</span>enumerate<span class="nb">}</span>~</div><div class='line' id='LC209'><br></div><div class='line' id='LC210'>		J&#39;ai donc travaillé sur deux projets distincts mais néanmoins complémentaires.</div><div class='line' id='LC211'><br></div><div class='line' id='LC212'>		Le but a donc été d&#39;expérimenter en profondeur les possibilités de l&#39;Oculus Rift, de développer </div><div class='line' id='LC213'>		les deux applications citées ci-dessus en tant que preuve de concept de l&#39;utilisation de cette nouvelle technologie</div><div class='line' id='LC214'>		dans le domaine de l&#39;éducation et de la simulation, et enfin d&#39;obtenir des performances et une expérience</div><div class='line' id='LC215'>		utilisateur correctes. Ce fut donc un stage de recherche avec un rendu final concret.</div><div class='line' id='LC216'><br></div><div class='line' id='LC217'>	    <span class="k">\subsubsection</span><span class="nb">{</span>Skybot 3D<span class="nb">}</span></div><div class='line' id='LC218'>		Skybot 3D est un logiciel développé en C par l&#39;institut de mécanique céleste et de calcul des éphémérides (IMCCE),</div><div class='line' id='LC219'>		conjointement avec l&#39;Observatoire de Paris et le CNRS. Son propos est de faire un rendu graphique réaliste</div><div class='line' id='LC220'>		en 3D à partir des données célestes de ces instituts. En pratique, c&#39;est une visualisation 3D du système solaire</div><div class='line' id='LC221'>		où les échelles sont respectées, avec gestion du temps. Il est encore en développement à la date d&#39;écriture de ce document et</div><div class='line' id='LC222'>		sa sortie est prévue pour fin 2014.</div><div class='line' id='LC223'>		Il fonctionne sur toutes les distributions Linux et utilise OpenGL pour le rendu graphique.</div><div class='line' id='LC224'><br></div><div class='line' id='LC225'>		Mon travail a donc consisté en l&#39;intégration du rendu Oculus dans cette application, tout en gardant</div><div class='line' id='LC226'>		le rendu existant.</div><div class='line' id='LC227'><br></div><div class='line' id='LC228'>	    <span class="k">\subsubsection</span><span class="nb">{</span>Simulation<span class="nb">}</span></div><div class='line' id='LC229'>		Ce projet a consisté en la représentation 3D de données provenant du Centre de Données</div><div class='line' id='LC230'>		de l&#39;Observatoire, décrivant la taille, la position, l&#39;âge et la densité de corps célestes.</div><div class='line' id='LC231'>		Ces données sont stockées dans des fichiers texte ou binaires, pouvant contenir plusieurs millions</div><div class='line' id='LC232'>		d&#39;objets.</div><div class='line' id='LC233'><br></div><div class='line' id='LC234'>		J&#39;ai eu la liberté de choisir les outils, le langage et les bibliothèques  externes utilisées dans ce programme,</div><div class='line' id='LC235'>		n&#39;ayant pas de base de code préexistante.</div><div class='line' id='LC236'><br></div><div class='line' id='LC237'><br></div><div class='line' id='LC238'>	<span class="k">\subsection</span><span class="nb">{</span>L&#39;Oculus Rift<span class="nb">}</span></div><div class='line' id='LC239'><br></div><div class='line' id='LC240'>		<span class="k">\subsubsection</span><span class="nb">{</span>Aperçu<span class="nb">}</span></div><div class='line' id='LC241'>		  L&#39;Oculus Rift est un masque de réalité virtuelle, développé par Oculus VR, une entreprise </div><div class='line' id='LC242'>		  basée en Californie et rachetée par Facebook en mars 2014 pour  2 milliards <span class="k">\$</span>.</div><div class='line' id='LC243'>		  L&#39;Oculus Rift a été initialement financé via une plateforme de financement collaboratif, Kickstarter,</div><div class='line' id='LC244'>		  et a levé 91 millions <span class="k">\$</span> à cette occasion. <span class="k">\\</span></div><div class='line' id='LC245'>		  Il permet une immersion  réaliste dans une scène en trois dimensions, en donnant l&#39;impression d&#39;y être physiquement</div><div class='line' id='LC246'>		  présent, et crée ainsi une nouvelle expérience</div><div class='line' id='LC247'>		  utilisateur. <span class="k">\\</span></div><div class='line' id='LC248'>		  De plus, son prix est relativement peu élevé (350 <span class="k">\$</span>, environ 300 <span class="k">\euro</span>), ce qui le rend accessible au grand public. <span class="k">\\</span></div><div class='line' id='LC249'>		  Pour toutes ces raisons, l&#39;Oculus Rift est adapté à un usage éducatif et professionnel, dans des domaines aussi variés</div><div class='line' id='LC250'>		  que la simulation scientifique, le divertissement, l&#39;éducation, <span class="k">\ldots</span></div><div class='line' id='LC251'><br></div><div class='line' id='LC252'>		  La version grand public est prévue pour fin 2014 ou début 2015. J&#39;ai pour ma part travaillé avec la première</div><div class='line' id='LC253'>		  version du masque, le DK1, tandis que la deuxième version, le DK2 a été distribuée à partir d&#39;août 2014.</div><div class='line' id='LC254'>		  <span class="k">\FloatBarrier</span></div><div class='line' id='LC255'>		  <span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span>[h!]</div><div class='line' id='LC256'>		    <span class="k">\centering</span></div><div class='line' id='LC257'>		      <span class="k">\includegraphics</span><span class="na">[width=0.3\textwidth]</span><span class="nb">{</span>dk1.jpg<span class="nb">}</span></div><div class='line' id='LC258'>		    <span class="k">\caption</span><span class="nb">{</span>L&#39;Oculus Rift (DK1)<span class="nb">}</span></div><div class='line' id='LC259'>		  <span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC260'>		  <span class="k">\FloatBarrier</span></div><div class='line' id='LC261'>		  <span class="k">\subsubsection</span><span class="nb">{</span>Fonctionnement<span class="nb">}</span></div><div class='line' id='LC262'><br></div><div class='line' id='LC263'>			<span class="k">\paragraph</span><span class="nb">{</span>Matériel<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC264'><br></div><div class='line' id='LC265'>				L&#39;Oculus Rift est composé de:<span class="k">\\</span></div><div class='line' id='LC266'><br></div><div class='line' id='LC267'>				<span class="k">\begin</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC268'>				<span class="k">\item</span> Un écran 60 Hz d&#39;une résolution de <span class="s">$</span><span class="m">1280</span><span class="o">*</span><span class="m">800</span><span class="s">$</span></div><div class='line' id='LC269'>				<span class="k">\item</span> Deux lentilles (une pour chaque oeil),</div><div class='line' id='LC270'>				<span class="k">\item</span> Un gyroscope à 3 axes pour mesurer l&#39;accélération angulaire,</div><div class='line' id='LC271'>				<span class="k">\item</span> Un magnétomètre à 3 axes pour mesurer les champs magnétiques,</div><div class='line' id='LC272'>				<span class="k">\item</span> Un accéloromètre à 3 axes pour mesurer l&#39;accélération, y compris gravitationnelle</div><div class='line' id='LC273'>				<span class="k">\item</span> Un port USB</div><div class='line' id='LC274'>				<span class="k">\item</span> Un port HDMI</div><div class='line' id='LC275'>				<span class="k">\end</span><span class="nb">{</span>itemize<span class="nb">}</span> ~</div><div class='line' id='LC276'><br></div><div class='line' id='LC277'>				Il est à noter que la résolution de l&#39;écran est à diviser par deux, chaque oeil voyant seulement</div><div class='line' id='LC278'>				une moitié de l&#39;écran, la résolution effective est donc de <span class="s">$</span><span class="m">640</span><span class="o">*</span><span class="m">800</span><span class="s">$</span>.</div><div class='line' id='LC279'><br></div><div class='line' id='LC280'>			<span class="k">\paragraph</span><span class="nb">{</span>Logiciel<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC281'><br></div><div class='line' id='LC282'>			    L&#39;utilisation de l&#39;Oculus Rift s&#39;effectue au moyen de son SDK, qui permet:<span class="k">\\</span></div><div class='line' id='LC283'><br></div><div class='line' id='LC284'>			    <span class="k">\begin</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC285'>			    <span class="k">\item</span> D&#39;accéder aux différents capteurs,</div><div class='line' id='LC286'>			    <span class="k">\item</span> D&#39;accéder aux propriétés du masque (distance inter-pupillaire, hauteur des yeux, <span class="k">\ldots</span>),</div><div class='line' id='LC287'>			    <span class="k">\item</span> D&#39;appliquer les &lt;&lt;filtres&gt;&gt; au rendu graphique afin d&#39;avoir un rendu réaliste</div><div class='line' id='LC288'>			    <span class="k">\end</span><span class="nb">{</span>itemize<span class="nb">}</span> ~</div><div class='line' id='LC289'><br></div><div class='line' id='LC290'>			    Le SDK est écrit en C++ et possède une API en C.</div><div class='line' id='LC291'>			    Pour mon stage, j&#39;ai utilisé la version 0.2.5 puis la version 0.3.2.</div><div class='line' id='LC292'><br></div><div class='line' id='LC293'>			<span class="k">\paragraph</span><span class="nb">{</span>Théorie<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC294'><br></div><div class='line' id='LC295'>			    L&#39;Oculus Rift exige que la scène soit rendue graphiquement en &lt;&lt;split-screen stereo&gt;&gt;, </div><div class='line' id='LC296'>			    c&#39;est-à-dire avec l&#39;écran divisé en deux verticalement, la partie gauche réservée à l&#39;oeil gauche</div><div class='line' id='LC297'>			    et la partie droite à l&#39;oeil droit.</div><div class='line' id='LC298'><br></div><div class='line' id='LC299'>			    La distance inter-pupillaire est la distance entre les deux yeux. Elle varie d&#39;un individu</div><div class='line' id='LC300'>			    à l&#39;autre mais elle est en moyenne de 65 mm. Cette distance est importante dans le procédé </div><div class='line' id='LC301'>			    de rendu car ce dernier consiste à rendre graphiquement la scène deux fois, une fois pour</div><div class='line' id='LC302'>			    chaque oeil, en translatant la caméra de la distance inter-pupillaire entre les deux rendus.</div><div class='line' id='LC303'>			    C&#39;est ce qui contribue à créer l&#39;effet stéréoscopique, ce qui engendre l&#39;impression d&#39;immersion.</div><div class='line' id='LC304'><br></div><div class='line' id='LC305'>			    Un autre aspect à prendre en compte est la présence des lentilles. Ces dernières agrandissent</div><div class='line' id='LC306'>			    l&#39;image pour fournir un champ de vision très large, pour améliorer l&#39;immersion.</div><div class='line' id='LC307'>			    Cependant ce procédé déforme l&#39;image de façon significative, ce qui créerait une distorsion</div><div class='line' id='LC308'>			    en coussinets si les &lt;&lt;filtres&gt;&gt;, dont nous parleront plus tard,</div><div class='line' id='LC309'>			    n&#39;étaient pas appliqués au niveau logiciel au rendu graphique de l&#39;application.<span class="k">\\</span></div><div class='line' id='LC310'>			    <span class="k">\FloatBarrier</span></div><div class='line' id='LC311'>			    <span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span>[h!]</div><div class='line' id='LC312'>			      <span class="k">\centering</span></div><div class='line' id='LC313'>				<span class="k">\includegraphics</span><span class="na">[width=3cm]</span><span class="nb">{</span>pincushion<span class="nb">_</span>distortion.png<span class="nb">}</span></div><div class='line' id='LC314'>			      <span class="k">\caption</span><span class="nb">{</span>Distorsion en coussinets (&lt;&lt;pincushion distorsion&gt;&gt;)<span class="nb">}</span><span class="k">\par\medskip</span></div><div class='line' id='LC315'><br></div><div class='line' id='LC316'>			    <span class="k">\FloatBarrier</span></div><div class='line' id='LC317'>			    Pour contrebalancer cette distorsion, le programme doit, comme énoncé plus haut, appliquer</div><div class='line' id='LC318'>			    un effet post-rendu. Il s&#39;agit d&#39;une distorsion égale et opposée, appelée distorsion en </div><div class='line' id='LC319'>			    barillets.<span class="k">\par\bigskip</span></div><div class='line' id='LC320'><br></div><div class='line' id='LC321'>			    <span class="nb">{</span></div><div class='line' id='LC322'>			      <span class="k">\centering</span></div><div class='line' id='LC323'>				<span class="k">\includegraphics</span><span class="na">[width=3cm]</span><span class="nb">{</span>barrel<span class="nb">_</span>distortion.png<span class="nb">}</span></div><div class='line' id='LC324'>			      <span class="k">\caption</span><span class="nb">{</span>Distorsion en barillets (&lt;&lt;barrel distorsion&gt;&gt;)<span class="nb">}</span></div><div class='line' id='LC325'>			    <span class="nb">}</span><span class="k">\par\medskip</span></div><div class='line' id='LC326'>			    <span class="k">\FloatBarrier</span></div><div class='line' id='LC327'>			    De plus, le programme doit corriger les aberrations chromatiques, qui consistent en un effet</div><div class='line' id='LC328'>			    d&#39;arc en ciel aux contours des objets. Cet effet est causé par les lentilles et est</div><div class='line' id='LC329'>			    bien connu dans le domaine de l&#39;optique.<span class="k">\par\bigskip</span></div><div class='line' id='LC330'>			    <span class="k">\FloatBarrier</span></div><div class='line' id='LC331'>			  <span class="nb">{</span></div><div class='line' id='LC332'>			      <span class="k">\centering</span></div><div class='line' id='LC333'>				<span class="k">\includegraphics</span><span class="na">[width=4cm]</span><span class="nb">{</span>chromatic<span class="nb">_</span>aberration.jpg<span class="nb">}</span></div><div class='line' id='LC334'>			      <span class="k">\caption</span><span class="nb">{</span>Aberration chromatique (&lt;&lt;chromatic abberration&gt;&gt;)<span class="nb">}</span></div><div class='line' id='LC335'>			  <span class="nb">}</span></div><div class='line' id='LC336'>			    <span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span>  ~ <span class="k">\\</span></div><div class='line' id='LC337'><br></div><div class='line' id='LC338'>			    <span class="k">\FloatBarrier</span></div><div class='line' id='LC339'>			<span class="k">\paragraph</span><span class="nb">{</span>Pratique<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC340'><br></div><div class='line' id='LC341'>			    Pour le développeur, ces éléments théoriques sont gérés de manière interne par le SDK Oculus.</div><div class='line' id='LC342'><br></div><div class='line' id='LC343'>			    Pour une application qui fait un rendu graphique, la programme est typiquement de</div><div class='line' id='LC344'>			    la forme:<span class="k">\\</span></div><div class='line' id='LC345'><br></div><div class='line' id='LC346'>			    <span class="k">\label</span><span class="nb">{</span>mainloop<span class="nb">_</span>normal<span class="nb">}</span></div><div class='line' id='LC347'>			    <span class="k">\begin</span><span class="nb">{</span>algorithm<span class="nb">}</span>[H]</div><div class='line' id='LC348'>			      initialize the graphic ressources<span class="k">\;</span></div><div class='line' id='LC349'>			      fill the scene with graphic objects<span class="k">\;</span></div><div class='line' id='LC350'>			      <span class="k">\While</span><span class="nb">{</span>the application is running<span class="nb">}{</span></div><div class='line' id='LC351'>				process the user input<span class="k">\;</span></div><div class='line' id='LC352'>				update the objects in the scene<span class="k">\;</span></div><div class='line' id='LC353'>				render the objects in the scene<span class="k">\;</span></div><div class='line' id='LC354'>			      <span class="nb">}</span></div><div class='line' id='LC355'>			      release the graphic ressources<span class="k">\;</span></div><div class='line' id='LC356'>			      <span class="k">\caption</span><span class="nb">{</span>Application de rendu graphique<span class="nb">}</span></div><div class='line' id='LC357'>			    <span class="k">\end</span><span class="nb">{</span>algorithm<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC358'><br></div><div class='line' id='LC359'>			    Un programme qui fait un rendu Oculus exclusivement aura pour sa part la forme suivante:<span class="k">\\</span></div><div class='line' id='LC360'>			    <span class="k">\label</span><span class="nb">{</span>mainloop<span class="nb">_</span>oculus<span class="nb">}</span></div><div class='line' id='LC361'>			    <span class="k">\begin</span><span class="nb">{</span>algorithm<span class="nb">}</span>[H]</div><div class='line' id='LC362'>			      initialize the graphic ressources<span class="k">\;</span></div><div class='line' id='LC363'>			      initialize the Oculus SDK<span class="k">\;</span></div><div class='line' id='LC364'>			      fill the scene with graphic objects<span class="k">\;</span></div><div class='line' id='LC365'>			      <span class="k">\While</span><span class="nb">{</span>the application is running<span class="nb">}{</span></div><div class='line' id='LC366'>				process the Oculus input<span class="k">\;</span></div><div class='line' id='LC367'>				update the objects in the scene<span class="k">\;</span></div><div class='line' id='LC368'>				<span class="k">\For</span><span class="nb">{</span>each eye<span class="nb">}{</span></div><div class='line' id='LC369'>				  translate the camera by the inter-pupillary distance<span class="k">\;</span></div><div class='line' id='LC370'>				  apply the Oculus distorsion effects<span class="k">\;</span></div><div class='line' id='LC371'>				  render the objects in the scene<span class="k">\;</span></div><div class='line' id='LC372'>				  <span class="nb">}</span></div><div class='line' id='LC373'>			      <span class="nb">}</span></div><div class='line' id='LC374'>			      release the Oculus SDK<span class="k">\;</span></div><div class='line' id='LC375'>			      release the graphic ressources<span class="k">\;</span></div><div class='line' id='LC376'>			      <span class="k">\caption</span><span class="nb">{</span>Application de rendu graphique<span class="nb">}</span></div><div class='line' id='LC377'>			    <span class="k">\end</span><span class="nb">{</span>algorithm<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC378'>			    Plus précisément, l&#39;opération &lt;&lt;apply the Oculus distorsion effects&gt;&gt; se fait de façon graphique</div><div class='line' id='LC379'>			    au moyen de shaders, qui sont des programmes qui appliquent des transformations à chaque pixel de l&#39;image.</div><div class='line' id='LC380'><br></div><div class='line' id='LC381'><br></div><div class='line' id='LC382'>			    Nous avons alors le rendu suivant, pour une scène simple composée d&#39;un cube texturé, d&#39;un plan</div><div class='line' id='LC383'>			    et d&#39;une skybox rudimentaire, avec le même point de vue:</div><div class='line' id='LC384'><br></div><div class='line' id='LC385'>			    <span class="k">\FloatBarrier</span></div><div class='line' id='LC386'><br></div><div class='line' id='LC387'>			    <span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC388'>			      <span class="k">\centering</span></div><div class='line' id='LC389'>				<span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>scene<span class="nb">_</span>normal4.png<span class="nb">}</span></div><div class='line' id='LC390'>			      <span class="k">\caption</span><span class="nb">{</span>Scène OpenGL simple avec le rendu normal<span class="nb">}</span></div><div class='line' id='LC391'><br></div><div class='line' id='LC392'>				<span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>scene<span class="nb">_</span>oculus4.png<span class="nb">}</span></div><div class='line' id='LC393'>			      <span class="k">\caption</span><span class="nb">{</span>Scène OpenGL simple avec le rendu Oculus<span class="nb">}</span></div><div class='line' id='LC394'>			    <span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC395'>			    <span class="k">\clearpage</span></div><div class='line' id='LC396'><br></div><div class='line' id='LC397'>			    <span class="k">\FloatBarrier</span></div><div class='line' id='LC398'><br></div><div class='line' id='LC399'>			    Les applications que j&#39;ai développées durant de mon stage peuvent fournir le rendu normal </div><div class='line' id='LC400'>			    et le rendu Oculus, selon l&#39;option spécifiée.</div><div class='line' id='LC401'><br></div><div class='line' id='LC402'><br></div><div class='line' id='LC403'>	<span class="k">\subsection</span><span class="nb">{</span>Contraintes<span class="nb">}</span></div><div class='line' id='LC404'><br></div><div class='line' id='LC405'>	<span class="k">\subsubsection</span><span class="nb">{</span>Skybot 3D<span class="nb">}</span></div><div class='line' id='LC406'>	    <span class="k">\paragraph</span><span class="nb">{</span>Existant<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC407'><br></div><div class='line' id='LC408'>		La contrainte principale pour le projet Skybot 3D a été de travailler avec du code existant non documenté,</div><div class='line' id='LC409'>		de taille conséquente (3840 fichiers, 22863 lignes de code).</div><div class='line' id='LC410'>		En effet, j&#39;ai eu accès à une version de développement non finalisée et non encore publiée. Cependant j&#39;ai </div><div class='line' id='LC411'>		eu de riches échanges avec les développeurs par mail et vidéoconférence, et j&#39;ai eu la chance</div><div class='line' id='LC412'>		de les rencontrer à la fin du stage.</div><div class='line' id='LC413'><br></div><div class='line' id='LC414'>	    <span class="k">\paragraph</span><span class="nb">{</span>Langages<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC415'><br></div><div class='line' id='LC416'>		Une contrainte supplémentaire a été le conflit de langages: le programme existant est écrit en C, et le</div><div class='line' id='LC417'>		SDK Oculus en C++, exigeant en conséquence un compilateur C++. </div><div class='line' id='LC418'>		C et C++ sont des langages proches de par leur origine et leur histoire, C++ étant issu de C, </div><div class='line' id='LC419'>		ils sont donc en grande partie compatibles. La majorité du code n&#39;a donc pas posé de problème, </div><div class='line' id='LC420'>		mais certains motifs ont dû être modifiés, notamment les conversions de types implicites,</div><div class='line' id='LC421'>		les arithmétiques de pointeurs et les pointeurs de fonctions ont du être réécrits de manière</div><div class='line' id='LC422'>		idiomatique en C++.</div><div class='line' id='LC423'><br></div><div class='line' id='LC424'>	    <span class="k">\paragraph</span><span class="nb">{</span>Versions d&#39;OpenGL<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC425'><br></div><div class='line' id='LC426'>		Une contrainte additionnelle, et peut-être la plus importante, a été l&#39;utilisation de différentes </div><div class='line' id='LC427'>		fonctionnalités d&#39;OpenGL, appartenant à des versions différentes.</div><div class='line' id='LC428'>		En effet, la totalité du rendu graphique dans l&#39;application existante se fait avec le &lt;&lt;fixed pipeline&gt;&gt; </div><div class='line' id='LC429'>		d&#39;OpenGL, c&#39;est-à dire une suite d&#39;opérations fixes de rendu. Cela consiste a faire un rendu graphique basé sur des</div><div class='line' id='LC430'>		appels à des fonctions OpenGL qui fournissent des fonctionnalités bien pratiques, comme des transformations</div><div class='line' id='LC431'>		matricielles, des lumières, <span class="k">\ldots</span> Cependant ces appels, typiques d&#39;OpenGL 1.x et 2.x, </div><div class='line' id='LC432'>		utilisent principalement le CPU et ont donc</div><div class='line' id='LC433'>		été dépréciés pour des raisons de performances dans OpenGL 3.x et 4.x, au profit d&#39;une programmation</div><div class='line' id='LC434'>		&lt;&lt;tout shader&gt;&gt;. Les shaders sont des programmes appliquant des effets sur chaque pixel de l&#39;image et qui</div><div class='line' id='LC435'>		sont exécutés sur la carte graphique.</div><div class='line' id='LC436'><br></div><div class='line' id='LC437'>		Le développeur doit donc maintenant tout faire manuellement mais cela au profit des performances et de l&#39;éventail</div><div class='line' id='LC438'>		de possibilités, mais au détriment de la simplicité.</div><div class='line' id='LC439'><br></div><div class='line' id='LC440'>		Le SDK Oculus utilise les shaders pour appliquer les effets graphiques mentionnés plus tôt (distorsion, </div><div class='line' id='LC441'>		correction des aberrations, <span class="k">\ldots</span>), et cela a créé quelques conflits au niveau du rendu graphique, </div><div class='line' id='LC442'>		avec le rendu existant n&#39;utilisant pas ces shaders.</div><div class='line' id='LC443'><br></div><div class='line' id='LC444'>	    <span class="k">\paragraph</span><span class="nb">{</span>Échelles<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC445'>	      Skybot 3D est une simulation du système solaire et en tant que telle manipule des distances très grandes.</div><div class='line' id='LC446'>	      Cela n&#39;est pas gênant sauf lorsque deux distances très grandes sont multipliées entre elles, par exemple</div><div class='line' id='LC447'>	      dans un calcul matriciel.</div><div class='line' id='LC448'>	      Cela peut provoquer un &lt;&lt;overflow&gt;&gt; (&lt;&lt;dépassement&gt;&gt;), phénomène consistant en une variable ayant une valeur</div><div class='line' id='LC449'>	      plus grande que ce que son type peut stocker en mémoire. Dans le meilleur des cas cela occasionne des </div><div class='line' id='LC450'>	      erreurs d&#39;arrondis causant des tremblements de la caméra ou des objets, des effets de &lt;&lt;flashing&gt;&gt; et</div><div class='line' id='LC451'>	      &lt;&lt;tearing&gt;&gt; dans le rendu, et dans le pire des cas un crash du programme.</div><div class='line' id='LC452'><br></div><div class='line' id='LC453'>	      Dans mon cas, ce phénomène a provoqué un phénomène de &lt;&lt;cross-eye&gt;&gt; gênant pour l&#39;utilisateur en mode</div><div class='line' id='LC454'>	      Oculus (cf paragraphe <span class="k">\ref</span><span class="nb">{</span>cross<span class="nb">_</span>eye<span class="nb">}</span>).</div><div class='line' id='LC455'><br></div><div class='line' id='LC456'>	    <span class="k">\subsubsection</span><span class="nb">{</span>Simulation<span class="nb">}</span></div><div class='line' id='LC457'>		<span class="k">\paragraph</span><span class="nb">{</span>Portabilité<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC458'>		  <span class="k">\epigraph</span><span class="nb">{</span>I don’t care if it works on your machine!  We are not shipping your machine!<span class="nb">}{</span>Vidiu Platon<span class="nb">}</span></div><div class='line' id='LC459'><br></div><div class='line' id='LC460'>		  Pour ce projet, nous avons convenus dès le départ d&#39;assurer la portabilité du programme, c&#39;est-à-dire</div><div class='line' id='LC461'>		  le fonctionnement multiplateforme.</div><div class='line' id='LC462'><br></div><div class='line' id='LC463'>		  Dans cette optique, j&#39;ai choisi un langage fonctionnant sur n&#39;importe quelle plateforme existante </div><div class='line' id='LC464'>		  (dès lors qu&#39;il existe un compilateur adéquat), le C++, et</div><div class='line' id='LC465'>		  des bibliothèques multiplateformes, notamment pour le rendu graphique,</div><div class='line' id='LC466'>		  pour permettre l&#39;abstraction d&#39;une API spécifique à une plateforme donnée, en fournissant une API générique.</div><div class='line' id='LC467'>		  Un exemple est l&#39;utilisation de la SDL, une bibliothèque de fenêtrage, ou d&#39;OpenGL, une API de rendu</div><div class='line' id='LC468'>		  graphique.</div><div class='line' id='LC469'><br></div><div class='line' id='LC470'>		  De plus, un soin particulier a été porté dans le développement à éviter l&#39;introduction </div><div class='line' id='LC471'>		  de code spécifique à une plateforme donnée. Une solution a été l&#39;utilisation maximale de la libraire </div><div class='line' id='LC472'>		  standard du langage.</div><div class='line' id='LC473'><br></div><div class='line' id='LC474'>		  Enfin j&#39;ai utilisé un outil de compilation multi-plateforme, qmake, qui permet de compiler le code</div><div class='line' id='LC475'>		  sur plusieurs plateformes différentes automatiquement.</div><div class='line' id='LC476'><br></div><div class='line' id='LC477'>		  Au final, j&#39;ai uniquement travaillé sur Linux mais le code fonctionne selon toute probabilité sur </div><div class='line' id='LC478'>		  Windows et OSX, avec des drivers à jour, sur des versions relativement récentes de ces systèmes d&#39;exploitation.</div><div class='line' id='LC479'><br></div><div class='line' id='LC480'>		<span class="k">\paragraph</span><span class="nb">{</span>Taille des données<span class="nb">}</span> ~<span class="k">\\</span></div><div class='line' id='LC481'><br></div><div class='line' id='LC482'>		  Comme évoqué plus haut, j&#39;ai travaillé sur des données avoisinant le million d&#39;objets. Cela a posé</div><div class='line' id='LC483'>		  principalement un problème de performances. En effet, c&#39;est en travaillant avec de tels nombres que</div><div class='line' id='LC484'>		  l&#39;on se rend compte de la disparité CPU (processeur) / GPU (carte graphique).</div><div class='line' id='LC485'>		  En effet, malgré un processeur avec 16 GB de RAM, le fait de parcourir tous les objets pour les afficher (une fois par frame, <span class="s">$</span><span class="nv">\mathcal</span><span class="nb">{O}</span><span class="o">(</span><span class="nb">n</span><span class="o">)</span><span class="s">$</span>),</div><div class='line' id='LC486'>		  prenait plus de 16 millisecondes, nombre critique dans le domaine du rendu graphique, puisqu&#39;il</div><div class='line' id='LC487'>		  correspond au temps de rendu maximal d&#39;une frame si l&#39;on veut un rendu à 60 FPS (frame per seconds),</div><div class='line' id='LC488'>		  ce qui fournit une expérience correcte pour l&#39;utilisateur: <span class="s">$</span><span class="m">1000</span><span class="nb"> ms </span><span class="o">/</span><span class="nb"> </span><span class="m">60</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">16</span><span class="nb">.</span><span class="m">666</span><span class="nb"> ms</span><span class="s">$</span>.</div><div class='line' id='LC489'><br></div><div class='line' id='LC490'>		  En sus, comme j&#39;ai travaillé avec des +cubes de données (corps célestes dont les cooordonnées spatiales se trouvent toutes</div><div class='line' id='LC491'>		  contenues dans un cube, typiquement de taille 64*64*64 ou 100*100*100), ce qui peut donner une boucle de rendu</div><div class='line' id='LC492'>		  de complexité <span class="s">$</span><span class="nv">\mathcal</span><span class="nb">{O}</span><span class="o">(</span><span class="nb">n^</span><span class="m">3</span><span class="o">)</span><span class="s">$</span>, empirant alors le temps de rendu.</div><div class='line' id='LC493'><br></div><div class='line' id='LC494'>		  De plus, il faut garder à l&#39;esprit que l&#39;objectif final est d&#39;avoir un rendu Oculus valide. Or le</div><div class='line' id='LC495'>		  SDK Oculus fait un double rendu (un pour chaque oeil), en appliquant des transformations matricielles</div><div class='line' id='LC496'>		  pour chacun des rendus. Il est donc primordial d&#39;avoir des FPS corrects dans le rendu graphique normal.</div><div class='line' id='LC497'><br></div><div class='line' id='LC498'>		  Cependant, je me suis aperçu que la carte graphique ne rencontrait pas de problème de temps de rendu,</div><div class='line' id='LC499'>		  gardant la plupart du temps un temps de rendu d&#39;une frame inférieur à la milliseconde.</div><div class='line' id='LC500'><br></div><div class='line' id='LC501'>		  Dès lors, plusieurs solutions se sont présentées:</div><div class='line' id='LC502'><br></div><div class='line' id='LC503'>		  <span class="k">\begin</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC504'>		  <span class="k">\item</span> [Travailler avec un seul objet graphique]~<span class="k">\\</span> Cela consiste à avoir un seul objet dans le programme qui </div><div class='line' id='LC505'>		  contient les coordonnées de tous les objets célestes. On &lt;&lt;boucle&gt;&gt; donc sur un seul objet et on envoie toute</div><div class='line' id='LC506'>		  les positions des objets célestes en une seule fois comme s&#39;il n&#39;y avait q&#39;un objet et la carte</div><div class='line' id='LC507'>		  graphique fait tout le travail. Cela fonctionne mais est peu flexible (comment faire pour sélectionner</div><div class='line' id='LC508'>		  un seul objet céleste pour afficher des informations à son sujet?) et on atteint les limites de la</div><div class='line' id='LC509'>		  carte graphique pour un très grand nombre d&#39;objets. Cependant le CPU a un minimum de travail.</div><div class='line' id='LC510'><br></div><div class='line' id='LC511'>		  <span class="k">\item</span> [Octree]~<span class="k">\\</span> Un Octree est un arbre où chaque noeud (appelé &lt;&lt;octant&gt;&gt;) compte jusqu&#39;à 8 fils. Il correspond à partition</div><div class='line' id='LC512'>		  d&#39;un espace cubique, à la manière d&#39;un quadtree en 2D, et permet de diviser notre scène en régions,</div><div class='line' id='LC513'>		  contenant elles-mêmes des sous-régions et ainsi de suite. On peut alors décider d&#39;afficher seulement les</div><div class='line' id='LC514'>		  régions voisines de notre position sans afficher les régions que l&#39;on ne peut pas voir ou qui sont</div><div class='line' id='LC515'>		  trop lointaines. C&#39;est la solution que j&#39;ai choisie car c&#39;est la plus flexible et celle qui offre le</div><div class='line' id='LC516'>		  plus de possibilités. A noter cependant que cela impose une taille de cube d&#39;une puissance de deux.</div><div class='line' id='LC517'>		  <span class="k">\FloatBarrier</span></div><div class='line' id='LC518'>		  <span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC519'>			      <span class="k">\centering</span></div><div class='line' id='LC520'>				<span class="k">\includegraphics</span><span class="na">[width=0.5\textwidth]</span><span class="nb">{</span>octree.png<span class="nb">}</span></div><div class='line' id='LC521'>			      <span class="k">\caption</span><span class="nb">{</span>Schématisation d&#39;un octree<span class="nb">}</span></div><div class='line' id='LC522'><br></div><div class='line' id='LC523'>		   <span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span> </div><div class='line' id='LC524'><br></div><div class='line' id='LC525'><br></div><div class='line' id='LC526'><br></div><div class='line' id='LC527'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span> </div><div class='line' id='LC528'>			<span class="k">\centering</span></div><div class='line' id='LC529'>				<span class="k">\includegraphics</span><span class="na">[width=0.4\textwidth]</span><span class="nb">{</span>octree2.jpg<span class="nb">}</span></div><div class='line' id='LC530'>			      <span class="k">\caption</span><span class="nb">{</span>Octree en action<span class="nb">}</span></div><div class='line' id='LC531'><br></div><div class='line' id='LC532'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC533'>		  <span class="k">\FloatBarrier</span></div><div class='line' id='LC534'>		<span class="k">\end</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC535'><br></div><div class='line' id='LC536'><br></div><div class='line' id='LC537'>		On optimise alors le rendu à la fois sur le CPU (moins d&#39;objets parcourus dans la boucle</div><div class='line' id='LC538'>			      de rendu à chaque frame) et sur le GPU (moins de données envoyées et </div><div class='line' id='LC539'>			      rendues graphiquement à chaque frame).  </div><div class='line' id='LC540'><br></div><div class='line' id='LC541'><br></div><div class='line' id='LC542'>		Initialement, mes objets étaient tous stockés dans un tableau que je parcourais à chaque frame pour les afficher.</div><div class='line' id='LC543'>		Pour 1000 objets, j&#39;avais une moyenne de 5 FPS. </div><div class='line' id='LC544'>		J&#39;ai alors mis en place un Octree. J&#39;ai eu alors des FPS variant entre 30 et 60 FPS, avec une moyenne de 55 FPS</div><div class='line' id='LC545'>		(le rendu est limité à 60 FPS maximum</div><div class='line' id='LC546'>		pour ne pas surcharger le CPU/GPU), quelque soit le nombre d&#39;objets présents dans la scène, ce qui est acceptable.</div><div class='line' id='LC547'>		En effet, l&#39;Octree permet d&#39;afficher un nombre moyen constant d&#39;objets quelque soit notre position.</div><div class='line' id='LC548'>		Avec un cube de taille 128*128*128 et 32768 objets, le temps de génération de l&#39;Octree est d&#39;environ 120s.</div><div class='line' id='LC549'>		J&#39;affiche l&#39;octant (et donc tous les objets célestes se trouvant dans cet octant) où la caméra se trouve</div><div class='line' id='LC550'>		et les 6 octants immédiatement voisins, avec une taille d&#39;octant de 8.</div><div class='line' id='LC551'>		Pour résumer, on sacrifie le temps de démarrage du programme au profit des performances à l&#39;exécution.</div><div class='line' id='LC552'><br></div><div class='line' id='LC553'><br></div><div class='line' id='LC554'><br></div><div class='line' id='LC555'><br></div><div class='line' id='LC556'>	<span class="k">\subsection</span><span class="nb">{</span>Déroulement du stage<span class="nb">}</span></div><div class='line' id='LC557'><br></div><div class='line' id='LC558'>	   <span class="k">\epigraph</span><span class="nb">{</span>Premature optimization is the source of all evil<span class="nb">}{</span>Donald Knuth<span class="nb">}</span></div><div class='line' id='LC559'><br></div><div class='line' id='LC560'>		Mon stage s&#39;est principalement déroulé en trois temps: formation, développement, optimisation.</div><div class='line' id='LC561'><br></div><div class='line' id='LC562'>		La première semaine a été consacrée à la découverte de l&#39;Oculus Rift, l&#39;essai de démos, et l&#39;installation</div><div class='line' id='LC563'>		des outils de développement.</div><div class='line' id='LC564'><br></div><div class='line' id='LC565'>		Les deuxième et troisième semaines ont consisté à se former à l&#39;Oculus SDK et OpenGL, et à tester la</div><div class='line' id='LC566'>		faisabilité de l&#39;intégration de l&#39;Oculus Rift à un moteur de rendu 3D existant, Irrlicht. Malheureusement </div><div class='line' id='LC567'>		cela s&#39;est révélé plus complexe que prévu et la décision a été prise d&#39;utiliser OpenGL sans framework,</div><div class='line' id='LC568'>		vu le temps imparti.</div><div class='line' id='LC569'>		Cette période a aussi servi à se (re)former au C++. C&#39;est un langage que j&#39;avais déjà utilisé sur d&#39;anciens</div><div class='line' id='LC570'>		projets mais les nouveautés introduites par C++11 m&#39;étaient inconnues.</div><div class='line' id='LC571'><br></div><div class='line' id='LC572'>		Les quatrième et cinquième semaines ont été centrées sur le développement de programmes minimalistes mettant</div><div class='line' id='LC573'>		en place OpenGL et l&#39;intégration de l&#39;Oculus Rift, et la découverte du code source de Skybot 3D.</div><div class='line' id='LC574'><br></div><div class='line' id='LC575'>		Les sixième, septième et huitième semaines ont été axées sur le développement de mes deux projets.</div><div class='line' id='LC576'><br></div><div class='line' id='LC577'>		Les neuvième et dixième semaines ont porté sur la rédaction de ce rapport et sur les possibles optimisations</div><div class='line' id='LC578'>		des deux projets, ainsi que la refactorisation du code et la documentation complète.</div><div class='line' id='LC579'><br></div><div class='line' id='LC580'>		Je me suis toutefois formé tout au long de mon stage à OpenGL, notamment à propos</div><div class='line' id='LC581'>		des différences entre les versions 1.x/2.x et 3.x/4.x, où la philosophie du &lt;&lt;tout shader&gt;&gt; a été introduite,</div><div class='line' id='LC582'>		et la compatibilité entre ces versions.</div><div class='line' id='LC583'><br></div><div class='line' id='LC584'><br></div><div class='line' id='LC585'><br></div><div class='line' id='LC586'>	<span class="k">\subsection</span><span class="nb">{</span>Développement<span class="nb">}</span></div><div class='line' id='LC587'><br></div><div class='line' id='LC588'>	  <span class="k">\subsubsection</span><span class="nb">{</span>Bonnes pratiques<span class="nb">}</span></div><div class='line' id='LC589'>	    <span class="k">\epigraph</span><span class="nb">{</span>Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live<span class="nb">}{</span>Martin Golding<span class="nb">}</span></div><div class='line' id='LC590'>	    <span class="k">\epigraph</span><span class="nb">{</span>Programs must be written for people to read, and only incidentally for machines to execute<span class="nb">}{</span>Arold Abelson<span class="nb">}</span></div><div class='line' id='LC591'><br></div><div class='line' id='LC592'>	    Comme mentionné plus tôt, j&#39;ai tout au long de mon stage versionné mon code avec git et Github, ce qui a</div><div class='line' id='LC593'>	    permis de le partager facilement avec l&#39;équipe Skybot 3D et André <span class="k">\textsc</span><span class="nb">{</span>schaaff<span class="nb">}</span>.</div><div class='line' id='LC594'><br></div><div class='line' id='LC595'>	    De plus j&#39;ai régulièrement utilisé des outils d&#39;analyse statique et dynamique pour jauger de la qualité de</div><div class='line' id='LC596'>	    mon code et l&#39;améliorer.</div><div class='line' id='LC597'><br></div><div class='line' id='LC598'>	    En sus, j&#39;ai activé les options de compilation aidant dans cette tâche: &lt;&lt;-Wall&gt;&gt;, &lt;&lt;-Wextra&gt;&gt;, &lt;&lt;-Werror&gt;&gt;, <span class="k">\ldots</span></div><div class='line' id='LC599'><br></div><div class='line' id='LC600'><br></div><div class='line' id='LC601'><br></div><div class='line' id='LC602'>	    J&#39;ai également entièrement documenté mon code avec l&#39;outil dédié Doxygen, et gardé une constance dans le nommage des variables,</div><div class='line' id='LC603'>	    l&#39;indentation du code, <span class="k">\ldots</span></div><div class='line' id='LC604'><br></div><div class='line' id='LC605'>	    Enfin, j&#39;ai utilisé deux compilateurs différents, clang et gcc, en comparant leurs performances,</div><div class='line' id='LC606'>	    notamment avec les options d&#39;optimisations &lt;&lt;-O1&gt;&gt;, &lt;&lt;-O2&gt;&gt;, &lt;&lt;-O3&gt;&gt;, &lt;&lt;-Ofast&gt;&gt;.</div><div class='line' id='LC607'>	    Pour finir, j&#39;ai utilisé le déboggeur gdb et l&#39;analyseur de mémoire Valgrind pour vérifier que mon application</div><div class='line' id='LC608'>	    était exempte de fuites mémoires (mis à part celles provenant du SDK Oculus pour lesquelles je ne peux rien faire).</div><div class='line' id='LC609'><br></div><div class='line' id='LC610'><br></div><div class='line' id='LC611'>	  <span class="k">\subsubsection</span><span class="nb">{</span>Design Patterns<span class="nb">}</span></div><div class='line' id='LC612'>	      <span class="k">\epigraph</span><span class="nb">{</span>Controlling complexity is the essence of computer programming<span class="nb">}{</span>Brian Kernighan<span class="nb">}</span></div><div class='line' id='LC613'><br></div><div class='line' id='LC614'><br></div><div class='line' id='LC615'><br></div><div class='line' id='LC616'>	    Les design patterns sont des motifs de programmation, des &lt;&lt;façons de faire&gt;&gt; que l&#39;on retrouve régulièrement </div><div class='line' id='LC617'>	    pour résoudre des problèmes bien connus. Ce ne sont pas des &lt;&lt;tours de magie&gt;&gt; ou des  &lt;&lt;gadgets à la mode&gt;&gt;,</div><div class='line' id='LC618'>	    mais des solutions pratiques à mettre en place quand le besoin s&#39;en fait sentir, ou pour améliorer le code.</div><div class='line' id='LC619'><br></div><div class='line' id='LC620'>	    Pendant ce stage, j&#39;ai utilisé plusieurs design patterns. Voici lesquels et pourquoi:</div><div class='line' id='LC621'><br></div><div class='line' id='LC622'>	    <span class="k">\begin</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC623'>	    <span class="k">\item</span> [NullObject pattern]~<span class="k">\\</span></div><div class='line' id='LC624'>		Ce design pattern sert à gérer élégamment la situation où l&#39;on a un ensemble d&#39;objets à gérer dont certains sont</div><div class='line' id='LC625'>		nuls, sans savoir lesquels à l&#39;avance, ou sans vouloir vérifier à chaque utilisation. Plutôt que d&#39;écrire des dizaine de conditions pour vérifier si l&#39;on peut bien effectuer telle ou telle action</div><div class='line' id='LC626'>		afin d&#39;éviter une segmentation fault, la variable sur laquelle nous sommes en train de travailler</div><div class='line' id='LC627'>		étant nulle (c&#39;est-à-dire ayant pour valeur le pointeur &lt;&lt;NULL&gt;&gt; ou &lt;&lt;nullptr&gt;&gt; en C++11),</div><div class='line' id='LC628'>		ce pattern propose de travailler avec une classe générique. De cette dernière hérite(nt) la ou les classe(s) dont nous nous</div><div class='line' id='LC629'>		servons en pratique dans notre programme, et une classe &lt;&lt;NullObject&gt;&gt; dont le corps des méthodes sont vides (ou</div><div class='line' id='LC630'>		adaptées selon la situation).</div><div class='line' id='LC631'>		Ainsi au lieu de travailler avec des pointeurs nuls, on travaille avec de vrais objets, inoffensifs lorsque</div><div class='line' id='LC632'>		l&#39;on intéragit avec eux, grâce au polymorphisme.</div><div class='line' id='LC633'>		Ce faisant on peut aussi élégamment activer/désactiver des services.<span class="k">\\</span></div><div class='line' id='LC634'><br></div><div class='line' id='LC635'>		Dans mon cas, j&#39;ai travaillé avec la classe &lt;&lt;GraphicObject&gt;&gt;, dont héritent les classes &lt;&lt;Cube&gt;&gt;, &lt;&lt;Plane&gt;&gt;, <span class="k">\ldots</span>,</div><div class='line' id='LC636'>		mais aussi &lt;&lt;NullGraphicObject&gt;&gt;, dont la méthode d&#39;affichage ne faisait rien.</div><div class='line' id='LC637'>		Ainsi dans ma boucle de rendu, je pouvais afficher tous mes objets de la scène, sans avoir peur que certaines parties</div><div class='line' id='LC638'>		de l&#39;Octree soient vides et que cela occasionne un plantage.</div><div class='line' id='LC639'><br></div><div class='line' id='LC640'><br></div><div class='line' id='LC641'>		De la même façon, j&#39;ai utilisé ce pattern pour gérer les deux modes de rendu. J&#39;ai une classe &lt;&lt;GenericOculus&gt;&gt;,</div><div class='line' id='LC642'>		dont héritent les classes &lt;&lt;NullOculus&gt;&gt;, dont les méthodes sont vides, et &lt;&lt;Oculus&gt;&gt;, où est implémenté</div><div class='line' id='LC643'>		le rendu Oculus. Dans le mode normal, j&#39;utilise la classe &lt;&lt;NullOculus&gt;&gt; qui ne fait rien, tandis qu&#39;en mode</div><div class='line' id='LC644'>		Oculus j&#39;utilise la classe &lt;&lt;Oculus&gt;&gt;.</div><div class='line' id='LC645'><br></div><div class='line' id='LC646'>	    <span class="k">\item</span> [Singleton pattern]~<span class="k">\\</span></div><div class='line' id='LC647'>		Design pattern bien connu et parfois décrié, il permet de limiter le nombre d&#39;instances d&#39;un objet, typiquement</div><div class='line' id='LC648'>		à 1.<span class="k">\\</span></div><div class='line' id='LC649'><br></div><div class='line' id='LC650'>		Je l&#39;ai utilisé pour la classe Oculus, afin d&#39;éviter de faire l&#39;initialisation (et la libération) du SDK Oculus plusieurs fois.</div><div class='line' id='LC651'><br></div><div class='line' id='LC652'>	    <span class="k">\item</span> [Game Loop pattern]~<span class="k">\\</span></div><div class='line' id='LC653'>		Ce pattern décrit la boucle de rendu typique d&#39;une application de rendu graphique.</div><div class='line' id='LC654'><br></div><div class='line' id='LC655'>		Je l&#39;ai utilisé pour l&#39;application de simulation, comme décrit ici~(<span class="k">\ref</span><span class="nb">{</span>mainloop<span class="nb">_</span>normal<span class="nb">}</span>) pour le rendu normal</div><div class='line' id='LC656'>		et là~(<span class="k">\ref</span><span class="nb">{</span>mainloop<span class="nb">_</span>oculus<span class="nb">}</span>) pour le rendu Oculus.</div><div class='line' id='LC657'><br></div><div class='line' id='LC658'>	    <span class="k">\item</span> [Flyweight Pattern]~<span class="k">\\</span></div><div class='line' id='LC659'>	      Ce pattern sert à améliorer les performances d&#39;une application où sont présents de nombreux objets identiques,</div><div class='line' id='LC660'>	      mis à part la valeur de certaines propriétés, et qui utilisent des ressources similaires.</div><div class='line' id='LC661'>	      Au lieu que chaque objet possède une instance de la ressource, générant une perte de performances</div><div class='line' id='LC662'>	      inutile, ce pattern propose de mettre en commun tout ce qui peut l&#39;être. Chaque objet aura alors un pointeur</div><div class='line' id='LC663'>	      vers la ressource partagée. Ce partage est transparent pour l&#39;application qui continue à utiliser les objets </div><div class='line' id='LC664'>	      comme bon lui semble, en utilisant les informations particulières de chaque objet.<span class="k">\\</span></div><div class='line' id='LC665'><br></div><div class='line' id='LC666'>	      Dans ma situation, la simulation concernait des milliers voire des millions d&#39;objets célestes. Dans les cas que j&#39;ai</div><div class='line' id='LC667'>	      rencontrés, il s&#39;agissait toujours d&#39;un seul type d&#39;objet céleste, par exemple une étoile.</div><div class='line' id='LC668'>	      Si l&#39;on choisit de représenter une étoile par un modèle 3D, une sphère par exemple, et une</div><div class='line' id='LC669'>	      texture plaquée sur cette sphère, et que l&#39;on charge la ressource &lt;&lt;texture&gt;&gt; à partir d&#39;un fichier, il est inconcevable</div><div class='line' id='LC670'>	      de lire ce fichier des millions de fois par seconde (à chaque rendu), ou même des millions de fois au démarrage du</div><div class='line' id='LC671'>	      programme (initialisation des textures des objets célestes).</div><div class='line' id='LC672'>	      On choisit alors de charger cette ressource une fois pour toute au démarrage. On lit une et une seule fois le fichier.</div><div class='line' id='LC673'>	      Chaque étoile possède un pointeur vers cette texture partagée. </div><div class='line' id='LC674'>	      La seule différence entre les étoiles sont les informations contextuelles (position, densité, âge, <span class="k">\ldots</span>).</div><div class='line' id='LC675'><br></div><div class='line' id='LC676'>	      On peut alors faire le rendu sans problème de performances: au final, on fait une seule lecture de fichier, et</div><div class='line' id='LC677'>	      l&#39;on a une seule texture en mémoire, au lieu de milliers/millions auparavant.</div><div class='line' id='LC678'>	      L&#39;initialisation prend ainsi moins de temps et la libération mémoire également à la fin du programme.</div><div class='line' id='LC679'><br></div><div class='line' id='LC680'>	      En pratique, l&#39;application de ce design pattern a permis de transformer un démarrage poussif (dizaines de secondes) avec 100 objets célestes,</div><div class='line' id='LC681'>	      en un démarrage en environ 3s pour 1000 objets.</div><div class='line' id='LC682'><br></div><div class='line' id='LC683'>	    <span class="k">\item</span> [Factory pattern]~<span class="k">\\</span></div><div class='line' id='LC684'>	      Ce pattern permet typiquement de créer dynamiquement des instances d&#39;objets différents, dont le type </div><div class='line' id='LC685'>	      n&#39;est connu qu&#39;à l&#39;exécution (par exemple conséquence d&#39;un choix utilisateur).</div><div class='line' id='LC686'>	      Cependant il peut aussi être utilisé pour encapsuler la construction d&#39;un objet derrière une interface</div><div class='line' id='LC687'>	      qui fait des vérifications diverses à cette occasion.</div><div class='line' id='LC688'><br></div><div class='line' id='LC689'>	      Dans mon cas, je l&#39;ai utilisé pour implémenter le groupe de textures partagées. En effet lorsqu&#39;un nouvel</div><div class='line' id='LC690'>	      objet graphique texturé est créé, il fait une requête auprès de la fabrique de textures pour obtenir sa texture.</div><div class='line' id='LC691'>	      La fabrique vérifie si la texture existe déjà en mémoire.</div><div class='line' id='LC692'>	      Si oui elle renvoie un pointeur vers cette texture, sinon elle créé la texture correspondante, l&#39;ajoute </div><div class='line' id='LC693'>	      au groupe de textures partagées, et finalement renvoie un pointeur vers cette texture nouvellement créée.</div><div class='line' id='LC694'><br></div><div class='line' id='LC695'>	      L&#39;avantage d&#39;avoir une fabrique de textures est que cette dernière peut être utilisée par plusieurs classes</div><div class='line' id='LC696'>	      différentes: dans mon cas la classe &lt;&lt;Crate&gt;&gt; (&lt;&lt;caisse&gt;&gt;, qui représente un cube texturé) et &lt;&lt;Plane&gt;&gt;, </div><div class='line' id='LC697'>	      (&lt;&lt;plan&gt;&gt;, qui représente un surface plane texturée) utilisent le groupe de textures partagées, et donc </div><div class='line' id='LC698'>	      font appel à la fabrique.</div><div class='line' id='LC699'>	      Ainsi cette logique n&#39;est pas inhérente à une classe et peut être utilisée partout dans le programme.</div><div class='line' id='LC700'>	      De plus si deux classes différentes utilisent la même texture, une seule sera créée, et non deux.</div><div class='line' id='LC701'><br></div><div class='line' id='LC702'>	    <span class="k">\item</span> [RAII]~<span class="k">\\</span></div><div class='line' id='LC703'>	      <span class="k">\label</span><span class="nb">{</span>RAII<span class="nb">}</span></div><div class='line' id='LC704'>	      &lt;&lt;Resource Acquisition Is Initialization&gt;&gt;, l&#39;acquisition de ressources c&#39;est leur initialisation.</div><div class='line' id='LC705'>	      Ce pattern permet une gestion efficace et simple de la mémoire et est inhérent au C++.</div><div class='line' id='LC706'><br></div><div class='line' id='LC707'>	      Il repose sur l&#39;assurance fournie par le langage que le destructeur d&#39;un objet sera appelé lorsque l&#39;on</div><div class='line' id='LC708'>	      sort du bloc où il a été défini.</div><div class='line' id='LC709'>	      Ainsi, lorsque l&#39;on acquiert une ressource, par exemple ouvrir un fichier, et que cette ressource a besoin</div><div class='line' id='LC710'>	      d&#39;être libérée plus tard, par exemple fermer ce fichier, on peut automatiser ces deux actions en les plaçant</div><div class='line' id='LC711'>	      à un endroit adéquat du code.</div><div class='line' id='LC712'><br></div><div class='line' id='LC713'>	      En pratique, on fait l&#39;acquisition dans le constructeur de l&#39;objet utilisant/représentant la ressource (d&#39;où le nom), et </div><div class='line' id='LC714'>	      la libération dans le destructeur. Pour l&#39;utilisateur de la classe ces opérations sont transparentes et il est</div><div class='line' id='LC715'>	      assuré qu&#39;elles seront exécutées automatiquement.</div><div class='line' id='LC716'><br></div><div class='line' id='LC717'><br></div><div class='line' id='LC718'>	      Pour ma part, j&#39;ai utilisé ce pattern pour l&#39;initialisation et la libération des ressources graphiques et</div><div class='line' id='LC719'>	      du SDK Oculus.</div><div class='line' id='LC720'><br></div><div class='line' id='LC721'>	    <span class="k">\item</span> [Data Locality]~<span class="k">\\</span></div><div class='line' id='LC722'><br></div><div class='line' id='LC723'>	      Ce design pattern est un moyen d&#39;optimiser les performances d&#39;un programme en tirant parti du cache du CPU.</div><div class='line' id='LC724'><br></div><div class='line' id='LC725'>	      La fragmentation est l&#39;utilisation inefficace de l&#39;espace mémoire. C&#39;est un phénomène qui se produit lorsque </div><div class='line' id='LC726'>	      sont effectuées de multiples allocations et</div><div class='line' id='LC727'>	      désallocations de mémoire, engendrant alors une baisse de la capacité mémoire et/ou des performances.</div><div class='line' id='LC728'><br></div><div class='line' id='LC729'>	      Dans mon cas, j&#39;ai donc transformé mon tableau de pointeurs sur objets célestes en un tableau d&#39;objets célestes.</div><div class='line' id='LC730'>	      Cela est rendu possible par le fait que je ne dispose que d&#39;un seul type d&#39;objet céleste dans ma simulation.</div><div class='line' id='LC731'>	      De plus l&#39;usage de pointeurs dans mon programme est majoritaire dans la partie génération et rendu d&#39;objets célestes</div><div class='line' id='LC732'>	      de part leur nombre.</div><div class='line' id='LC733'>	      Cependant il est à noter que dans le cas d&#39;un nombre très grand d&#39;objets (de l&#39;ordre du million), il est possible de dépasser</div><div class='line' id='LC734'>	      la taille de la pile, créant alors un &lt;&lt;stack overflow&gt;&gt;.</div><div class='line' id='LC735'><br></div><div class='line' id='LC736'>	      J&#39;ai ensuite mesuré les temps d&#39;exécution dans les deux implémentations, exposés au paragraphe <span class="k">\ref</span><span class="nb">{</span>optimisations<span class="nb">}</span></div><div class='line' id='LC737'>	      et en ait tiré des conclusions suprenantes.</div><div class='line' id='LC738'><br></div><div class='line' id='LC739'>	      Voir le paragraphe <span class="k">\ref</span><span class="nb">{</span>data<span class="nb">_</span>locality<span class="nb">}</span> pour plus de détails.</div><div class='line' id='LC740'><br></div><div class='line' id='LC741'>	    <span class="k">\end</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC742'><span class="c">%“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”</span></div><div class='line' id='LC743'><span class="c">%- Martin Fowler (author and speaker on software development)</span></div><div class='line' id='LC744'><br></div><div class='line' id='LC745'>	<span class="k">\subsubsection</span><span class="nb">{</span>Architecture<span class="nb">}</span></div><div class='line' id='LC746'>	<span class="k">\epigraph</span><span class="nb">{</span>Perfection [in design] is achieved, not when there is nothing more to add, but when there is nothing left to take away<span class="nb">}{</span>Antoine de Saint-Exupéry<span class="nb">}</span></div><div class='line' id='LC747'>	    <span class="k">\FloatBarrier</span></div><div class='line' id='LC748'>	    <span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC749'>				  <span class="k">\centering</span></div><div class='line' id='LC750'>				  <span class="k">\includegraphics</span><span class="na">[width=0.8\textwidth]</span><span class="nb">{</span>uml1.png<span class="nb">}</span></div><div class='line' id='LC751'>				  <span class="k">\caption</span><span class="nb">{</span>Diagramme de classe UML pour les objets graphiques<span class="nb">}</span></div><div class='line' id='LC752'>	    <span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC753'><br></div><div class='line' id='LC754'>	    <span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC755'>			      <span class="k">\centering</span></div><div class='line' id='LC756'>			      <span class="k">\includegraphics</span><span class="na">[width=0.6\textwidth]</span><span class="nb">{</span>uml2.png<span class="nb">}</span></div><div class='line' id='LC757'>			      <span class="k">\caption</span><span class="nb">{</span>Diagramme de classe UML pour la scène<span class="nb">}</span></div><div class='line' id='LC758'>	    <span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC759'><br></div><div class='line' id='LC760'>	    <span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC761'>			      <span class="k">\centering</span></div><div class='line' id='LC762'>			      <span class="k">\includegraphics</span><span class="na">[width=0.8\textwidth]</span><span class="nb">{</span>hierarchy3.png<span class="nb">}</span></div><div class='line' id='LC763'>			      <span class="k">\caption</span><span class="nb">{</span>Hiérarchie des classes<span class="nb">}</span></div><div class='line' id='LC764'>	    <span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC765'><br></div><div class='line' id='LC766'><br></div><div class='line' id='LC767'><br></div><div class='line' id='LC768'>	    <span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC769'>	      <span class="k">\centering</span></div><div class='line' id='LC770'>	      <span class="k">\includegraphics</span><span class="na">[width=0.3\textwidth]</span><span class="nb">{</span>files1.png<span class="nb">}</span></div><div class='line' id='LC771'>	      <span class="k">\caption</span><span class="nb">{</span>Hiérarchie des fichiers<span class="nb">}</span></div><div class='line' id='LC772'>	    <span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC773'>	    <span class="k">\FloatBarrier</span></div><div class='line' id='LC774'><br></div><div class='line' id='LC775'>&nbsp;&nbsp;<span class="k">\subsection</span><span class="nb">{</span>Améliorations - Optimisations<span class="nb">}</span></div><div class='line' id='LC776'>&nbsp;&nbsp;</div><div class='line' id='LC777'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\subsubsection</span><span class="nb">{</span>Structures de données - Data Locality<span class="nb">}</span></div><div class='line' id='LC778'>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC779'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\begin</span><span class="nb">{</span>center<span class="nb">}</span></div><div class='line' id='LC780'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC781'>	<span class="k">\label</span><span class="nb">{</span>optimisations<span class="nb">}</span></div><div class='line' id='LC782'><br></div><div class='line' id='LC783'><br></div><div class='line' id='LC784'>	<span class="k">\begin</span><span class="nb">{</span>tabular<span class="nb">}{</span>| c | c | c | c | c | p<span class="nb">{</span>4cm<span class="nb">}</span> |<span class="nb">}</span></div><div class='line' id='LC785'>	    <span class="k">\hline</span></div><div class='line' id='LC786'>	    Stockage <span class="nb">&amp;</span> Méthode <span class="nb">&amp;</span> Nombre d&#39;objets <span class="nb">&amp;</span> Génération <span class="nb">&amp;</span> FPS moyens <span class="nb">&amp;</span> Remarques <span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC787'><br></div><div class='line' id='LC788'>	    Tableau <span class="nb">&amp;</span> Polymorphisme <span class="nb">&amp;</span> 1024 <span class="nb">&amp;</span> 3.7 s <span class="nb">&amp;</span> 37.2  <span class="nb">&amp;</span> array<span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC789'>	    Tableau <span class="nb">&amp;</span> Polymorphisme <span class="nb">&amp;</span> 10000 <span class="nb">&amp;</span> 38.2 s <span class="nb">&amp;</span> 9.5  <span class="nb">&amp;</span> array<span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC790'><br></div><div class='line' id='LC791'>	    Tableau <span class="nb">&amp;</span> Polymorphisme <span class="nb">&amp;</span> 1024 <span class="nb">&amp;</span> 3.6 s <span class="nb">&amp;</span> 35.9  <span class="nb">&amp;</span> vector, ajout avec push<span class="k">\_</span>back <span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC792'><br></div><div class='line' id='LC793'>	    Tableau <span class="nb">&amp;</span> Polymorphisme <span class="nb">&amp;</span> 10000 <span class="nb">&amp;</span> 36.4 s <span class="nb">&amp;</span> 9.6  <span class="nb">&amp;</span> vector, ajout avec push<span class="k">\_</span>back <span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC794'><br></div><div class='line' id='LC795'><br></div><div class='line' id='LC796'>	    Tableau <span class="nb">&amp;</span> Data locality <span class="nb">&amp;</span> 1024 <span class="nb">&amp;</span> 11 s <span class="nb">&amp;</span> 35.6  <span class="nb">&amp;</span> vector, ajout avec emplace<span class="k">\_</span>back<span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC797'>	    Tableau <span class="nb">&amp;</span> Data locality <span class="nb">&amp;</span> 1024 <span class="nb">&amp;</span> 11 s <span class="nb">&amp;</span> 34.6  <span class="nb">&amp;</span> vector, ajout avec push<span class="k">\_</span>back<span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC798'><br></div><div class='line' id='LC799'><br></div><div class='line' id='LC800'>	    Tableau <span class="nb">&amp;</span> Data locality <span class="nb">&amp;</span> 1024 <span class="nb">&amp;</span> 7.3 s <span class="nb">&amp;</span> 34.2  <span class="nb">&amp;</span> vector, ajout avec emplace<span class="k">\_</span>back, réservation de la taille</div><div class='line' id='LC801'>								    requise à l&#39;avance<span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC802'>	    Tableau <span class="nb">&amp;</span> Data locality <span class="nb">&amp;</span> 1024 <span class="nb">&amp;</span> 7.2 s <span class="nb">&amp;</span> 33.5  <span class="nb">&amp;</span> vector, ajout avec push<span class="k">\_</span>back, réservation de la taille</div><div class='line' id='LC803'>								    requise à l&#39;avance <span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC804'><br></div><div class='line' id='LC805'><br></div><div class='line' id='LC806'>	    Tableau <span class="nb">&amp;</span> Data locality <span class="nb">&amp;</span> 10000 <span class="nb">&amp;</span> 74.4 s <span class="nb">&amp;</span> 9.2  <span class="nb">&amp;</span> vector, ajout avec emplace<span class="k">\_</span>back, réservation de la taille</div><div class='line' id='LC807'>								    requise à l&#39;avance<span class="k">\\</span> <span class="k">\hline</span>								    </div><div class='line' id='LC808'>	    Tableau <span class="nb">&amp;</span> Data locality <span class="nb">&amp;</span> 10000 <span class="nb">&amp;</span> 71 s <span class="nb">&amp;</span> 9.2  <span class="nb">&amp;</span> vector, ajout avec push<span class="k">\_</span>back, réservation de la taille</div><div class='line' id='LC809'>								    requise à l&#39;avance<span class="k">\\</span> <span class="k">\hline</span>	</div><div class='line' id='LC810'><br></div><div class='line' id='LC811'><br></div><div class='line' id='LC812'>	    Octree <span class="nb">&amp;</span> Polymorphisme <span class="nb">&amp;</span> 1024 <span class="nb">&amp;</span> 3.6 s <span class="nb">&amp;</span> 62.5 <span class="nb">&amp;</span> <span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC813'>	    Octree <span class="nb">&amp;</span> Polymorphisme <span class="nb">&amp;</span> 32768 <span class="nb">&amp;</span> 120 s <span class="nb">&amp;</span> 62.5 <span class="nb">&amp;</span> <span class="k">\\</span> <span class="k">\hline</span></div><div class='line' id='LC814'><br></div><div class='line' id='LC815'>	    <span class="k">\hline</span></div><div class='line' id='LC816'>	<span class="k">\end</span><span class="nb">{</span>tabular<span class="nb">}</span></div><div class='line' id='LC817'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\end</span><span class="nb">{</span>center<span class="nb">}</span></div><div class='line' id='LC818'><br></div><div class='line' id='LC819'>	La structure &lt;&lt;vector&gt;&gt; est un tableau dynamique de la librairie standard. </div><div class='line' id='LC820'>	Sa méthode &lt;&lt;reserve&gt;&gt; permet de réserver une certaine taille à l&#39;avance. Cela permet d&#39;éviter, lors de l&#39;ajout</div><div class='line' id='LC821'>	d&#39;un nouvel objet, que la zone mémoire occupée par le &lt;&lt;vector&gt;&gt; se révèle trop petite, et qu&#39;il faille en</div><div class='line' id='LC822'>	réallouer une nouvelle, en y déplaçant tous les éléments existants du &lt;&lt;vector&gt;&gt;. On voit que l&#39;usage de cette méthode</div><div class='line' id='LC823'>	fait gagner quelques secondes pour la génération de 1024 objets (on passe de 11s à 7s).</div><div class='line' id='LC824'>	La structure &lt;&lt;array&gt;&gt; est un tableau statique de la librairie standard.</div><div class='line' id='LC825'><br></div><div class='line' id='LC826'>	On ne remarque cependant pas de différence majeure de performances entre ces deux structures de données une fois</div><div class='line' id='LC827'>	que la taille nécessaire en mémoire est réservée initialement.</div><div class='line' id='LC828'><br></div><div class='line' id='LC829'>	Un autre point à noter est la croissance linéaire du temps de génération en fonction du nombre d&#39;objets, ce qui</div><div class='line' id='LC830'>	est prévisible étant donné que les structures de données array et vector sont de complexité linéaire pour le parcours</div><div class='line' id='LC831'>	et l&#39;ajout.</div><div class='line' id='LC832'><br></div><div class='line' id='LC833'>	Cependant l&#39;évolution du nombre de FPS en fonction du nombre d&#39;objets n&#39;est pas linéaire: cela est probablement</div><div class='line' id='LC834'>	dû au fonctionnement interne d&#39;OpenGL.</div><div class='line' id='LC835'><br></div><div class='line' id='LC836'>	Les résultats de la comparaison entre usage du polymorphisme et usage du pattern Data Locality </div><div class='line' id='LC837'>	sont surprenants: en effet, l&#39;application de ce design pattern a ralenti les performances </div><div class='line' id='LC838'>	de l&#39;application, en tout cas dans la partie génération, le rendu graphique restant inchangé avec </div><div class='line' id='LC839'>	      des FPS constants, au lieu de les améliorer.</div><div class='line' id='LC840'><br></div><div class='line' id='LC841'>	      Cela s&#39;explique par le fait que ce pattern améliore les performances d&#39;applications ralenties par les </div><div class='line' id='LC842'>	      &lt;&lt;cache misses&gt;&gt;. Lors de l&#39;analyse de l&#39;application par un outil d&#39;analyse de cache, Valgrind, il est</div><div class='line' id='LC843'>	      apparu que seulement 0 à 2<span class="k">\%</span> des accès au cache créaient des &lt;&lt;cache misses&gt;&gt;. Le problème de performances</div><div class='line' id='LC844'>	      n&#39;était donc pas dû à cela.</div><div class='line' id='LC845'><br></div><div class='line' id='LC846'>	      Pourquoi alors les performances ne sont-elles pas restées constantes? En fait, au lieu de stocker dans notre</div><div class='line' id='LC847'>	      structure de données un pointeur sur objet, qui prend typiquement 4 octets en mémoire, on stocke </div><div class='line' id='LC848'>	      l&#39;ensemble de l&#39;objets, c&#39;est à dire dans mon cas 136 octets. En C++, le passage d&#39;un argument</div><div class='line' id='LC849'>	      à une fonction se fait par défaut par valeur, c&#39;est à dire qu&#39;il y a une copie de l&#39;objet.</div><div class='line' id='LC850'>	      On copie donc 136 octets (au lieu de 4 auparavant) à chaque fois que l&#39;on ajoute un objet dans la structure de données, et ce </div><div class='line' id='LC851'>	      autant de fois qu&#39;il y a d&#39;objets. C&#39;est ce qui ralentit la génération.</div><div class='line' id='LC852'><br></div><div class='line' id='LC853'>	L&#39;application du pattern Data Locality s&#39;est donc révélé infructueux dans mon cas. Ce pattern reste cependant valide</div><div class='line' id='LC854'>	dans le cas d&#39;applications souffrant de problèmes de &lt;&lt;caches misses&gt;&gt; et de fragmentation.</div><div class='line' id='LC855'><br></div><div class='line' id='LC856'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\subsubsection</span><span class="nb">{</span>Smart pointers (&lt;&lt;Pointeurs intelligents&gt;&gt;)<span class="nb">}</span></div><div class='line' id='LC857'>	<span class="k">\epigraph</span><span class="nb">{</span>You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time<span class="nb">}{</span>Bertrand Meyer<span class="nb">}</span></div><div class='line' id='LC858'><br></div><div class='line' id='LC859'>&nbsp;&nbsp;</div><div class='line' id='LC860'>	Les smart pointers sont des objets de la librairies standard encapsulant les pointeurs.</div><div class='line' id='LC861'>	En se basant sur la RAII (<span class="k">\ref</span><span class="nb">{</span>RAII<span class="nb">}</span>, paragraphe &lt;&lt;Design Pattern&gt;&gt;), ils permettent de s&#39;assurer que les ressources mémoires allouées manuellement</div><div class='line' id='LC862'>	seront bien libérées.</div><div class='line' id='LC863'>	De plus ils fournissent des fonctionnalités bien pratiques, comme le compte de pointeurs pointant sur la variable encapsulée,</div><div class='line' id='LC864'>	 sorte de compte de références, pratique pour implémenter un groupe de ressources partagées: lorsque plus personne</div><div class='line' id='LC865'>	 dans le programme n&#39;utilise ces ressources, on les supprime, ou plutôt elles sont supprimées automatiquement.</div><div class='line' id='LC866'><br></div><div class='line' id='LC867'>	C&#39;est ce qui s&#39;approche en C++ d&#39;un garbage collector, à la différence que la norme du langage assure</div><div class='line' id='LC868'>	à quel endroit du code le destructeur de l&#39;objet sera appelé et que le développeur doit mettre en place manuellement</div><div class='line' id='LC869'>	cette gestion &lt;&lt;automatisée&gt;&gt;, ou plutôt &lt;&lt;aidée&gt;&gt;,  de la mémoire.</div><div class='line' id='LC870'><br></div><div class='line' id='LC871'>	L&#39;utilisation de ces pointeurs intelligents est considérée dans le monde du développement C++ comme une bonne </div><div class='line' id='LC872'>	pratique et est encouragée. De plus il n&#39;y a peu ou pas de baisse de performances par rapport à l&#39;utilisation</div><div class='line' id='LC873'>	de pointeurs nus (&lt;&lt;raw pointers&gt;&gt;, pointeurs traditionnels &lt;&lt;à la C&gt;&gt;).</div><div class='line' id='LC874'><br></div><div class='line' id='LC875'>	Cette optimisation ne vise donc pas les performances mais la maintenabilité, la sécurité et la stabilité du programme.</div><div class='line' id='LC876'>	Au final, pour générer 1024 objets, la différence entre pointeurs nus et pointeurs intelligents est de 0.06 s,</div><div class='line' id='LC877'>	et il n&#39;y a aucune fuite mémoire. De plus le code est plus court et plus simple.</div><div class='line' id='LC878'><br></div><div class='line' id='LC879'><br></div><div class='line' id='LC880'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\subsubsection</span><span class="nb">{</span>Logs<span class="nb">}</span></div><div class='line' id='LC881'>	<span class="k">\epigraph</span><span class="nb">{</span>There are two ways to write error-free programs; only the third one works<span class="nb">}{</span>Alan J. Perlis<span class="nb">}</span></div><div class='line' id='LC882'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC883'>	Les logs sont l&#39;affichage de messages de contrôle au cours du programme. Ils permettent de vérifier son exécution</div><div class='line' id='LC884'>	et de détecter des bugs.</div><div class='line' id='LC885'>	Après avoir utilisé des logs rudimentaires, je me suis intéressé aux bibliothèques de logs existantes, notamment Boost.Log .</div><div class='line' id='LC886'><br></div><div class='line' id='LC887'>	Cependant, ces bibliothèques se sont révelées bien trop riches et complexes pour la taille de ce programme.</div><div class='line' id='LC888'>	J&#39;ai donc développé une classe simple de logs, qui offrent les fonctionnalités simples suivantes:</div><div class='line' id='LC889'><br></div><div class='line' id='LC890'>	<span class="k">\begin</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC891'>	 <span class="k">\item</span> Quatre niveaux de logs différents (trace, debug, info, error),</div><div class='line' id='LC892'>	 <span class="k">\item</span> Logs dans la console (activable/désactivable),</div><div class='line' id='LC893'>	 <span class="k">\item</span> Logs dans des fichiers &lt;&lt;.log&gt;&gt; et &lt;&lt;.err&gt;&gt; selon le niveau du log (activable/désactivable),</div><div class='line' id='LC894'>	 <span class="k">\item</span> Filtre des logs selon le niveau,</div><div class='line' id='LC895'>	 <span class="k">\item</span> Syntaxe simple</div><div class='line' id='LC896'>	<span class="k">\end</span><span class="nb">{</span>itemize<span class="nb">}</span>~</div><div class='line' id='LC897'><br></div><div class='line' id='LC898'>	Cette amélioration n&#39;est pas directement liée aux performances, mais vise à améliorer encore une fois la maintenabilité</div><div class='line' id='LC899'>	et la stabilité du code.</div><div class='line' id='LC900'>	Cependant, les performances de l&#39;application bénéficient du fait que les logs soient désactivables en partie ou complètement, au choix.</div><div class='line' id='LC901'><br></div><div class='line' id='LC902'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\subsubsection</span><span class="nb">{</span>Problèmes restants - Fonctionnalités à améliorer<span class="nb">}</span></div><div class='line' id='LC903'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\paragraph</span><span class="nb">{</span>Skybot 3D<span class="nb">}</span>~<span class="k">\\</span></div><div class='line' id='LC904'>	<span class="k">\label</span><span class="nb">{</span>cross<span class="nb">_</span>eye<span class="nb">}</span></div><div class='line' id='LC905'>	Un problème handicapant restant dans Skybot 3D est la vue Oculus.</div><div class='line' id='LC906'>	En effet cette dernière est fonctionnelle, mais souffre du phénomène de &lt;&lt;cross-eye&gt;&gt; (&lt;&lt;yeux croisés&gt;&gt;).</div><div class='line' id='LC907'>	Cet effet est dû à une inversion du rendu entre les deux yeux: le rendu de l&#39;oeil gauche se retrouve sur la moitié  droite sur</div><div class='line' id='LC908'>	l&#39;écran et vice-versa.</div><div class='line' id='LC909'>	En conséquence, lorsque l&#39;Oculus est équipé, les deux images provenant de chaque oeil ne se superposent pas</div><div class='line' id='LC910'>	parfaitement pour le cerveau comme cela devrait être le cas: une impression de strabisme (fait de loucher ) se produit.</div><div class='line' id='LC911'><br></div><div class='line' id='LC912'>	Malgré de nombreux efforts et de multiples échanges avec l&#39;équipe Skybot 3D, aucune solution n&#39;a émergé de </div><div class='line' id='LC913'>	cette communication. Ce phénomène est donc toujours en place et est probablement dû à une application erronnée</div><div class='line' id='LC914'>	des matrices de tranformation.</div><div class='line' id='LC915'><br></div><div class='line' id='LC916'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">\paragraph</span><span class="nb">{</span>Simulation<span class="nb">}</span>~<span class="k">\\</span></div><div class='line' id='LC917'>	Une fonctionnalité que je n&#39;ai pas eu le temps d&#39;implémenter pour la simulation est l&#39;utilisation du joystick.</div><div class='line' id='LC918'>	En effet la bibliothèque de fenêtrage utilisée, SDL, est capable de détecter un joystick, et ce dernier </div><div class='line' id='LC919'>	facilité l&#39;immersion et le déplacement dans la scène avec l&#39;Oculus Rift masquant le clavier.</div><div class='line' id='LC920'><br></div><div class='line' id='LC921'><br></div><div class='line' id='LC922'><br></div><div class='line' id='LC923'><span class="k">\section</span><span class="nb">{</span>Remerciements<span class="nb">}</span></div><div class='line' id='LC924'><br></div><div class='line' id='LC925'>	Plusieurs personnes m’ont apporté une aide significative sur ce projet et je tiens à les remercier chaleureusement ici: </div><div class='line' id='LC926'><br></div><div class='line' id='LC927'>	<span class="k">\begin</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC928'>	<span class="k">\item</span> André <span class="k">\textsc</span><span class="nb">{</span>schaaff<span class="nb">}</span>, mon maître de stage,</div><div class='line' id='LC929'>	<span class="k">\item</span> L&#39;équipe Skybot 3D: Jérôme <span class="k">\textsc</span><span class="nb">{</span>Berthier<span class="nb">}</span> et Jonathan <span class="k">\textsc</span><span class="nb">{</span>Normand<span class="nb">}</span>,</div><div class='line' id='LC930'>	<span class="k">\item</span> Brad <span class="k">\textsc</span><span class="nb">{</span>Davis<span class="nb">}</span>, auteur du livre &lt;&lt;Oculus Rift in Action&gt;&gt;, pour l&#39;aide qu&#39;il m&#39;a apporté sur les forums d&#39;Oculus Rift</div><div class='line' id='LC931'>	<span class="k">\item</span> Nicolas <span class="k">\textsc</span><span class="nb">{</span>Deparis<span class="nb">}</span> et Romain <span class="k">\textsc</span><span class="nb">{</span>Houpin<span class="nb">}</span>, stagiaires à l&#39;Observatoire sur des sujets de rendu graphique 3D</div><div class='line' id='LC932'>	<span class="k">\end</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC933'><br></div><div class='line' id='LC934'><span class="k">\section</span><span class="nb">{</span>Conclusion<span class="nb">}</span></div><div class='line' id='LC935'><br></div><div class='line' id='LC936'><br></div><div class='line' id='LC937'>	Ce stage de 10 semaines m&#39;a apporté énormément. L&#39;intérêt du stage était à la hauteur des défis rencontrés.</div><div class='line' id='LC938'>	J&#39;ai eu la chance d&#39;expérimenter le travail collaboratif en participant à un gros projet existant, mais aussi </div><div class='line' id='LC939'>	de vivre un projet individuel avec une grande liberté, avec un sujet unique en son genre.</div><div class='line' id='LC940'>	J&#39;ai également pu approfondir mes connaissances sur des sujets génériques et réutilisables tels que le génie logiciel,</div><div class='line' id='LC941'>	l&#39;organisation d&#39;un projet et la collaboration.</div><div class='line' id='LC942'>	Je suis reconnaissant à l&#39;Observatoire et à mon maître de stage de m&#39;avoir fait confiance et donné cette chance.</div><div class='line' id='LC943'><br></div><div class='line' id='LC944'>	Au final, je finis ce stage satisfait de ce qui a été accompli et intéressé dans le future par les domaines abordés, </div><div class='line' id='LC945'>	tel que l&#39;imagerie et le rendu 3D.</div><div class='line' id='LC946'>	<span class="k">\newpage</span></div><div class='line' id='LC947'><span class="c">% \appendix</span></div><div class='line' id='LC948'><span class="k">\section</span><span class="nb">{</span>Annexes<span class="nb">}</span></div><div class='line' id='LC949'><br></div><div class='line' id='LC950'>	<span class="k">\subsection</span><span class="nb">{</span>Design Pattern détaillés<span class="nb">}</span></div><div class='line' id='LC951'>	  <span class="k">\subsubsection</span><span class="nb">{</span>Data Locality<span class="nb">}</span></div><div class='line' id='LC952'>	  <span class="k">\label</span><span class="nb">{</span>data<span class="nb">_</span>locality<span class="nb">}</span></div><div class='line' id='LC953'>	      Tous les CPU modernes disposent d&#39;une certaine quantité de mémoire vive, la RAM, qui représentent</div><div class='line' id='LC954'>	      plusieurs Gigaoctets. Pour accélérer l&#39;accès à cette mémoire, le CPU dispose d&#39;un cache (plusieurs en réalité)</div><div class='line' id='LC955'>	      de taille réduite (sur ma machine je dispose d&#39;un Intel Core i5 cadencé à 3.2 GHz avec 4 coeurs et 6144 kB</div><div class='line' id='LC956'>	      de cache), qui est en fait une zone mémoire à accès très rapide où sont stockées les informations dont l&#39;accès est fréquent</div><div class='line' id='LC957'>	      dans la RAM. On accélère ainsi les opérations les plus régulièrement effectuées: c&#39;est la mise en cache (&lt;&lt;caching&gt;&gt;).</div><div class='line' id='LC958'><br></div><div class='line' id='LC959'>	      Cependant, le polymorphisme impose en C++ l&#39;usage de pointeurs (cas le plus fréquent) ou de références (cas particuliers. </div><div class='line' id='LC960'>	      Mais les pointeurs, par définition, pointent vers différentes zones mémoires.</div><div class='line' id='LC961'>	      Ainsi, lorsque l&#39;on veut afficher tous les objets de la scène, on parcoure la structure de données qui</div><div class='line' id='LC962'>	      stocke les pointeurs sur tous ces objets et on les affiche un par un.</div><div class='line' id='LC963'><br></div><div class='line' id='LC964'>	      Le problème est que contrairement au parcours d&#39;un tableau de valeurs (non pointeurs), qui sont stockées</div><div class='line' id='LC965'>	      contigument dans la mémoire, et sont donc particulièrement adaptées à la mise en cache, le fait de</div><div class='line' id='LC966'>	      parcourir un tableau de pointeurs va silloner toute la RAM, et donc ne va pas du tout se prêter à la mise</div><div class='line' id='LC967'>	      en cache. Le CPU va soit ne pas mettre ces variables (et les zones mémoires voisines) dans le cache, soit le faire</div><div class='line' id='LC968'>	      et en conséquence changer la majeure partie du cache à chaque fois, ce qui n&#39;est pas du tout optimal.</div><div class='line' id='LC969'>	      On passe donc à côté d&#39;un beau gain de performance: c&#39;est le &lt;&lt;cache miss&gt;&gt;.</div><div class='line' id='LC970'><br></div><div class='line' id='LC971'>	      Plus généralement, cette situation se produit dès lors qu&#39;il y a un usage fréquent de pointeurs dans un </div><div class='line' id='LC972'>	      programme, et surtout le déréférencement de ces derniers.</div><div class='line' id='LC973'><br></div><div class='line' id='LC974'>	      Un autre point à considérer est la différence entre l&#39;utilisation , dans une structure de donnée, du polymorphisme (plusieurs objets</div><div class='line' id='LC975'>	      différents coexistent, héritant d&#39;un objet commun) et l&#39;utilisation d&#39;un seul type d&#39;objets.</div><div class='line' id='LC976'>	      Dans le second cas, une méthode appelé par un objet est déterminée à la compilation (on sait quel est le type</div><div class='line' id='LC977'>	      de l&#39;objet puisqu&#39;il n&#39;y en a qu&#39;un) tandis que dans le premier cas, elle est déterminée à l&#39;exécution,</div><div class='line' id='LC978'>	      ce qui peut engendrer une baisse de performances supplémentaires.</div><div class='line' id='LC979'><br></div><div class='line' id='LC980'>	      Pour résumer, le polymorphisme apporte généricité et flexibilité, mais peut engendrer une baisse de </div><div class='line' id='LC981'>	      performances, alors que l&#39;usage d&#39;un seul type d&#39;objets est plus rigide, mais peut améliorer les performances.</div><div class='line' id='LC982'><br></div><div class='line' id='LC983'>	      Un dernier point à envisager est la différence de stockage des variables entre l&#39;utilisation de pointeurs sur variables</div><div class='line' id='LC984'>	      et l&#39;utilisation de variables. Dans le premier cas, les variables sont allouées (et libérées) manuellement et sont placées sur</div><div class='line' id='LC985'>	      le tas (&lt;&lt;heap&gt;&gt;), alors que dans le second cas elles sont allouées automatiquement sur la pile (&lt;&lt;stack&gt;&gt;).</div><div class='line' id='LC986'>	      Ces deux zones mémoires sont présentes dans chaque programme et sont réservées par le système d&#39;exploitation</div><div class='line' id='LC987'>	      pour le programme à son lancement et sont fort différentes:<span class="k">\\</span></div><div class='line' id='LC988'><br></div><div class='line' id='LC989'>	      Stack:</div><div class='line' id='LC990'>	      <span class="k">\begin</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC991'>		<span class="k">\item</span> Accès rapide</div><div class='line' id='LC992'>		<span class="k">\item</span> Limitée en taille</div><div class='line' id='LC993'>		<span class="k">\item</span> L&#39;espace est géré automatiquement et efficacement par le CPU (pas de fragmentation)</div><div class='line' id='LC994'>	      <span class="k">\end</span><span class="nb">{</span>itemize<span class="nb">}</span>~</div><div class='line' id='LC995'><br></div><div class='line' id='LC996'>	      Heap:</div><div class='line' id='LC997'>	      <span class="k">\begin</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC998'>		<span class="k">\item</span> Accès plus lent</div><div class='line' id='LC999'>		<span class="k">\item</span> Pas de limite de taille</div><div class='line' id='LC1000'>		<span class="k">\item</span> Pas de gestion automatique de l&#39;espace (fragmentation)</div><div class='line' id='LC1001'>	      <span class="k">\end</span><span class="nb">{</span>itemize<span class="nb">}</span>~</div><div class='line' id='LC1002'><br></div><div class='line' id='LC1003'>	      Ces allocations/désallocations ne sont pas non plus gratuites en termes de temps d&#39;exécution, puisque</div><div class='line' id='LC1004'>	      elles font appel à un certain nombre de fonctions.</div><div class='line' id='LC1005'><br></div><div class='line' id='LC1006'><br></div><div class='line' id='LC1007'>	<span class="k">\subsection</span><span class="nb">{</span>Outils utilisés<span class="nb">}</span></div><div class='line' id='LC1008'><br></div><div class='line' id='LC1009'>		<span class="k">\subsubsection</span><span class="nb">{</span>Langages utilisés<span class="nb">}</span></div><div class='line' id='LC1010'>		    Les deux projets sur lesquels j&#39;ai travaillé ont été développés en C++, même si la quasi-totalité </div><div class='line' id='LC1011'>		    du projet Skybot 3D est écrite en C, adapté pour pouvoir compiler en C++.</div><div class='line' id='LC1012'>		    Sur le deuxième projet, j&#39;ai de plus mis en oeuvre des fonctionnalités nouvelles de C++, standardisées</div><div class='line' id='LC1013'>		    par la norme C++11 datant de 2011. On peut citer:<span class="k">\\</span></div><div class='line' id='LC1014'><br></div><div class='line' id='LC1015'>		    <span class="k">\begin</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC1016'>		    <span class="k">\item</span> Listes d&#39;initialisation </div><div class='line' id='LC1017'>		    <span class="k">\item</span> Pointeur null &lt;&lt;nullptr&gt;&gt;</div><div class='line' id='LC1018'>		    <span class="k">\item</span> Boucle for sur une plage de valeurs</div><div class='line' id='LC1019'>		    <span class="k">\item</span> Référence sur une rvalue</div><div class='line' id='LC1020'>		    <span class="k">\item</span> Outils de mesure du temps à haute précision</div><div class='line' id='LC1021'>		    <span class="k">\item</span> Mot-clé &lt;&lt;auto&gt;&gt;</div><div class='line' id='LC1022'>		    <span class="k">\item</span> Smart pointers (pointeur intelligents)</div><div class='line' id='LC1023'>		    <span class="k">\end</span><span class="nb">{</span>itemize<span class="nb">}</span></div><div class='line' id='LC1024'><br></div><div class='line' id='LC1025'>		<span class="k">\subsubsection</span><span class="nb">{</span>Bibliothèques utilisées<span class="nb">}</span></div><div class='line' id='LC1026'><br></div><div class='line' id='LC1027'>		  <span class="k">\begin</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC1028'>		  <span class="k">\item</span> [GLEW]~<span class="k">\\</span></div><div class='line' id='LC1029'>		      &lt;&lt;OpenGL Extension Wrangler Library&gt;&gt; est une bibliothèque multiplateforme de chargement des fonctionnalités d&#39;OpenGL.</div><div class='line' id='LC1030'>		      Licence BSD modifiée.<span class="k">\\</span></div><div class='line' id='LC1031'>		      <span class="k">\url</span><span class="nb">{</span>http://glew.sourceforge.net/<span class="nb">}</span></div><div class='line' id='LC1032'>		  <span class="k">\item</span> [GLM]~<span class="k">\\</span></div><div class='line' id='LC1033'>		      &lt;&lt;OpenGL Mathematics&gt;&gt; est une bibliothèque de fonctions mathématiques pour OpenGL.</div><div class='line' id='LC1034'>		      Je l&#39;ai utilisée pour le projet de simulation.</div><div class='line' id='LC1035'>		      Licence MIT.<span class="k">\\</span></div><div class='line' id='LC1036'>		      <span class="k">\url</span><span class="nb">{</span>http://glm.g-truc.net/0.9.5/index.html<span class="nb">}</span></div><div class='line' id='LC1037'>		  <span class="k">\item</span> [GLUT]~<span class="k">\\</span></div><div class='line' id='LC1038'>		      &lt;&lt;OpenGL Utility Toolkit&gt;&gt; est l&#39;équivalent de la SDL en plus restreint. Je m&#39;en suis servi pour le </div><div class='line' id='LC1039'>		      projet Skybot 3D via son implémentation open source &lt;&lt;freeglut&gt;&gt;.</div><div class='line' id='LC1040'>		      Licence X-Consortium.<span class="k">\\</span></div><div class='line' id='LC1041'>		      <span class="k">\url</span><span class="nb">{</span>http://freeglut.sourceforge.net/<span class="nb">}</span> et <span class="k">\url</span><span class="nb">{</span>http://www.opengl.org/ressources/libraries/glut/<span class="nb">}</span></div><div class='line' id='LC1042'>		  <span class="k">\item</span> [Octree]~<span class="k">\\</span></div><div class='line' id='LC1043'>		      Une bibliothèque C++ implémentant les Octree.</div><div class='line' id='LC1044'>		      Licence GPL.<span class="k">\\</span></div><div class='line' id='LC1045'>		      <span class="k">\url</span><span class="nb">{</span>http://nomis80.org/code/octree.html<span class="nb">}</span></div><div class='line' id='LC1046'>		  <span class="k">\item</span> [Oculus SDK]~<span class="k">\\</span></div><div class='line' id='LC1047'>		      Le SDK Oculus est l&#39;interface de programmation permettant d&#39;accéder à l&#39;Oculus Rift et est fourni</div><div class='line' id='LC1048'>		      par Oculus VR (fabriquant de l&#39;Oculus Rift). </div><div class='line' id='LC1049'>		      Je me suis servi des versions 0.2.5 et 0.3.2.</div><div class='line' id='LC1050'>		      Licence particulière mais analogue à une licence MIT, à ceci près qu&#39;elle restreint les utilisations</div><div class='line' id='LC1051'>		      pouvant mettre en danger la vie ou la santé d&#39;individus.</div><div class='line' id='LC1052'>		  <span class="k">\item</span> [OpenGL] ~<span class="k">\\</span></div><div class='line' id='LC1053'>		      &lt;&lt;Open Graphics Library&gt;&gt; est une API multiplateforme pour effectuer des rendus graphiques 2D et 3D.</div><div class='line' id='LC1054'>		      L&#39;implémentation est laissée à la charge des constructeurs de cartes graphiques et est fournie</div><div class='line' id='LC1055'>		      par les drivers. Pour ma part j&#39;ai travaillé avec la carte graphique AMD Radeon HD 8570 disposant d&#39;1Gb de RAM dédiée  </div><div class='line' id='LC1056'>		      et le driver ATI Fire GL datant de mai 2014, implémentant OpenGL 4.4 (dernière version d&#39;OpenGL).</div><div class='line' id='LC1057'>		      Je l&#39;ai utilisée pour les deux projets.</div><div class='line' id='LC1058'>		      Pas de licence.<span class="k">\\</span></div><div class='line' id='LC1059'>		      <span class="k">\url</span><span class="nb">{</span>http://www.opengl.org/<span class="nb">}</span></div><div class='line' id='LC1060'>		  <span class="k">\item</span> [SDL]~<span class="k">\\</span></div><div class='line' id='LC1061'>		      &lt;&lt;Simple DirectMedia Layer&gt;&gt; est une bibliothèque multiplateforme donnant accès au système de fenêtrage,</div><div class='line' id='LC1062'>		      au clavier, à la souris et à un éventuel joystick. Je l&#39;ai utilisée pour le projet de simulation.</div><div class='line' id='LC1063'>		      Licence zlib.<span class="k">\\</span></div><div class='line' id='LC1064'>		      <span class="k">\url</span><span class="nb">{</span>https://www.libsdl.org/<span class="nb">}</span></div><div class='line' id='LC1065'>		  <span class="k">\end</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC1066'><br></div><div class='line' id='LC1067'><br></div><div class='line' id='LC1068'><br></div><div class='line' id='LC1069'>		<span class="k">\subsubsection</span><span class="nb">{</span>Outils divers utilisés<span class="nb">}</span></div><div class='line' id='LC1070'>		  <span class="k">\begin</span><span class="nb">{</span>description<span class="nb">}</span>  </div><div class='line' id='LC1071'>		  <span class="k">\item</span> [Clang]~<span class="k">\\</span></div><div class='line' id='LC1072'>		      Compilateur/interface de compilation C/C++ open source développé par Google.</div><div class='line' id='LC1073'>		      Licence de l&#39;Université de l&#39;Illinois / licence  NCSA open source.<span class="k">\\</span></div><div class='line' id='LC1074'>		      <span class="k">\url</span><span class="nb">{</span>http://clang.llvm.org/<span class="nb">}</span></div><div class='line' id='LC1075'>		  <span class="k">\item</span> [Clang Static Analyzer]~<span class="k">\\</span></div><div class='line' id='LC1076'>		      Outil d&#39;analyse statique (à la compilation) de code et qui fait partie du projet Clang. <span class="k">\\</span></div><div class='line' id='LC1077'>		      <span class="k">\url</span><span class="nb">{</span>http://clang-analyzer.llvm.org/scan-build.html<span class="nb">}</span></div><div class='line' id='LC1078'>		  <span class="k">\item</span> [CMake]~<span class="k">\\</span></div><div class='line' id='LC1079'>		      Outil multiplateforme &#39;aide à la compilation et de génération de Makefiles.</div><div class='line' id='LC1080'>		      Licence BSD.<span class="k">\\</span></div><div class='line' id='LC1081'>		      <span class="k">\url</span><span class="nb">{</span>http://www.cmake.org/<span class="nb">}</span></div><div class='line' id='LC1082'>		  <span class="k">\item</span> [Doxygen]~<span class="k">\\</span></div><div class='line' id='LC1083'>		    Outil de documentation de projets informatiques et de code sources.</div><div class='line' id='LC1084'>		    Licence GPL<span class="k">\\</span></div><div class='line' id='LC1085'>		    <span class="k">\url</span><span class="nb">{</span>http://www.stack.nl/~dimitri/doxygen/<span class="nb">}</span></div><div class='line' id='LC1086'>		  <span class="k">\item</span> [GCC]~<span class="k">\\</span></div><div class='line' id='LC1087'>		      &lt;&lt;GNU Compiler Collection&gt;&gt;, compilateur C/C++.</div><div class='line' id='LC1088'>		      Licence GNU GPL 3+.<span class="k">\\</span></div><div class='line' id='LC1089'>		      <span class="k">\url</span><span class="nb">{</span>https://gcc.gnu.org/<span class="nb">}</span></div><div class='line' id='LC1090'>		  item [GDB]~<span class="k">\\</span></div><div class='line' id='LC1091'>		      &lt;&lt;GNU Project Debugger&gt;&gt;, le déboggeur standard sur Linux.</div><div class='line' id='LC1092'>		      Licence GNU GPL.<span class="k">\\</span></div><div class='line' id='LC1093'>		      <span class="k">\url</span><span class="nb">{</span>http://www.gnu.org/software/gdb/<span class="nb">}</span></div><div class='line' id='LC1094'>		  <span class="k">\item</span> [Git]~<span class="k">\\</span></div><div class='line' id='LC1095'>		      Logiciel de gestion de version.</div><div class='line' id='LC1096'>		      Licence GNU GPL v2.<span class="k">\\</span></div><div class='line' id='LC1097'>		      <span class="k">\url</span><span class="nb">{</span>http://git-scm.com/<span class="nb">}</span></div><div class='line' id='LC1098'>		  <span class="k">\item</span> [Github]~<span class="k">\\</span></div><div class='line' id='LC1099'>		      Site web de stockage en ligne de projets open source via git.<span class="k">\\</span></div><div class='line' id='LC1100'>		      <span class="k">\url</span><span class="nb">{</span>https://github.com/<span class="nb">}</span></div><div class='line' id='LC1101'>		  <span class="k">\item</span> [Qmake]~<span class="k">\\</span></div><div class='line' id='LC1102'>		    Outil d&#39;aide à la compilation multi-plateforme, semblable à Cmake.</div><div class='line' id='LC1103'>		    Licence LGPL.<span class="k">\\</span></div><div class='line' id='LC1104'>		    <span class="k">\url</span><span class="nb">{</span>http://qt-project.org/doc/qt-4.8/qmake-manual.html<span class="nb">}</span></div><div class='line' id='LC1105'>		    <span class="k">\item</span> [QtCreator]~<span class="k">\\</span></div><div class='line' id='LC1106'>		      IDE C++ open source avec débuggeur et outils d&#39;analyses intégrés.</div><div class='line' id='LC1107'>		      Licence LGPL.<span class="k">\\</span></div><div class='line' id='LC1108'>		      <span class="k">\url</span><span class="nb">{</span>http://qt-project.org/wiki/category:tools::qtcreator<span class="nb">}</span></div><div class='line' id='LC1109'>		  <span class="k">\item</span> [Valgrind]~<span class="k">\\</span></div><div class='line' id='LC1110'>		      Outil d&#39;analyse dynamique (à l&#39;exécution) de programme, pour notamment traquer les fuites de mémoire.</div><div class='line' id='LC1111'>		      Licence GPL v2.<span class="k">\\</span></div><div class='line' id='LC1112'>		      <span class="k">\url</span><span class="nb">{</span>http://valgrind.org/<span class="nb">}</span></div><div class='line' id='LC1113'>		  <span class="k">\end</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC1114'><br></div><div class='line' id='LC1115'>		Tous ces outils sont open source et multiplateformes.</div><div class='line' id='LC1116'><br></div><div class='line' id='LC1117'>	<span class="k">\subsection</span><span class="nb">{</span>Captures d&#39;écran<span class="nb">}</span></div><div class='line' id='LC1118'>		<span class="k">\FloatBarrier</span></div><div class='line' id='LC1119'>		<span class="k">\newpage</span></div><div class='line' id='LC1120'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1121'>			      <span class="k">\centering</span></div><div class='line' id='LC1122'>			      <span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>skybot<span class="nb">_</span>normal<span class="nb">_</span>earth.png<span class="nb">}</span></div><div class='line' id='LC1123'>			      <span class="k">\caption</span><span class="nb">{</span>Visualisation de la planète Terre dans Skybot 3D en vue normale<span class="nb">}</span></div><div class='line' id='LC1124'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1125'><br></div><div class='line' id='LC1126'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1127'>			      <span class="k">\centering</span></div><div class='line' id='LC1128'>			      <span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>skybot<span class="nb">_</span>oculus<span class="nb">_</span>earth.png<span class="nb">}</span></div><div class='line' id='LC1129'>			      <span class="k">\caption</span><span class="nb">{</span>Visualisation de la planète Terre dans Skybot 3D en vue Oculus<span class="nb">}</span></div><div class='line' id='LC1130'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1131'><br></div><div class='line' id='LC1132'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1133'>			      <span class="k">\centering</span></div><div class='line' id='LC1134'>			      <span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>skybot<span class="nb">_</span>normal.png<span class="nb">}</span></div><div class='line' id='LC1135'>			      <span class="k">\caption</span><span class="nb">{</span>Visualisation du systême solaire dans Skybot 3D en vue normale<span class="nb">}</span></div><div class='line' id='LC1136'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1137'><br></div><div class='line' id='LC1138'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1139'>			      <span class="k">\centering</span></div><div class='line' id='LC1140'>			      <span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>skybot<span class="nb">_</span>oculus.png<span class="nb">}</span></div><div class='line' id='LC1141'>			      <span class="k">\caption</span><span class="nb">{</span>Visualisation du systême solaire dans Skybot 3D en vue Oculus<span class="nb">}</span></div><div class='line' id='LC1142'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1143'><br></div><div class='line' id='LC1144'>		<span class="k">\FloatBarrier</span></div><div class='line' id='LC1145'>		Les images suivantes présentent l&#39;application de simulation d&#39;un cube de données d&#39;objets célestes, </div><div class='line' id='LC1146'>		organisés en un Octree  de taille 128*128*128, divisé en octants de taille 8.</div><div class='line' id='LC1147'><br></div><div class='line' id='LC1148'>		Les objets céleste sont modélisés par des cubes texturés de taille 1.</div><div class='line' id='LC1149'><br></div><div class='line' id='LC1150'>		Seul l&#39;octant actuel et les octants directement voisins sont visibles pour des raisons de performances.</div><div class='line' id='LC1151'><br></div><div class='line' id='LC1152'>		La caméra est dirigeable par les mouvements de la tête en mode Oculus.</div><div class='line' id='LC1153'><br></div><div class='line' id='LC1154'><br></div><div class='line' id='LC1155'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1156'>			      <span class="k">\centering</span></div><div class='line' id='LC1157'>			      <span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>octree<span class="nb">_</span>normal.png<span class="nb">}</span></div><div class='line' id='LC1158'>			      <span class="k">\caption</span><span class="nb">{</span>Simulation en vue normale<span class="nb">}</span></div><div class='line' id='LC1159'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1160'><br></div><div class='line' id='LC1161'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1162'>			      <span class="k">\centering</span></div><div class='line' id='LC1163'>			      <span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>octree<span class="nb">_</span>oculus.png<span class="nb">}</span></div><div class='line' id='LC1164'>			      <span class="k">\caption</span><span class="nb">{</span>Simulation en vue normale<span class="nb">}</span></div><div class='line' id='LC1165'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1166'>		<span class="k">\FloatBarrier</span></div><div class='line' id='LC1167'><br></div><div class='line' id='LC1168'>		Les images suivantes présentent l&#39;application de simulation d&#39;un cube de données d&#39;objets célestes, </div><div class='line' id='LC1169'>		organisés en un tableau simple.</div><div class='line' id='LC1170'><br></div><div class='line' id='LC1171'>		Les objets céleste sont modélisés par des cubes texturés de taille 1.</div><div class='line' id='LC1172'><br></div><div class='line' id='LC1173'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1174'>			      <span class="k">\centering</span></div><div class='line' id='LC1175'>			      <span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>basic<span class="nb">_</span>normal.png<span class="nb">}</span></div><div class='line' id='LC1176'>			      <span class="k">\caption</span><span class="nb">{</span>Simulation en vue normale<span class="nb">}</span></div><div class='line' id='LC1177'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1178'><br></div><div class='line' id='LC1179'>		<span class="k">\begin</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1180'>			      <span class="k">\centering</span></div><div class='line' id='LC1181'>			      <span class="k">\includegraphics</span><span class="na">[width=1.0\textwidth]</span><span class="nb">{</span>basic<span class="nb">_</span>oculus.png<span class="nb">}</span></div><div class='line' id='LC1182'>			      <span class="k">\caption</span><span class="nb">{</span>Simulation en vue normale<span class="nb">}</span></div><div class='line' id='LC1183'>		<span class="k">\end</span><span class="nb">{</span>figure<span class="nb">}</span></div><div class='line' id='LC1184'>		<span class="k">\FloatBarrier</span></div><div class='line' id='LC1185'><br></div><div class='line' id='LC1186'>	<span class="k">\newpage</span>	</div><div class='line' id='LC1187'>	<span class="k">\subsection</span><span class="nb">{</span>Code source<span class="nb">}</span></div><div class='line' id='LC1188'>	<span class="k">\epigraph</span><span class="nb">{</span>Talk is cheap. Show me the code<span class="nb">}{</span>Linus Torvalds<span class="nb">}</span></div><div class='line' id='LC1189'><br></div><div class='line' id='LC1190'>	<span class="k">\FloatBarrier</span></div><div class='line' id='LC1191'>	&lt;&lt;Oculus.h&gt;&gt; est un fichier d&#39;en-tête décrivant la classe Oculus. Il prend comme argument de template la scene</div><div class='line' id='LC1192'>	OpenGL générique que l&#39;on veut afficher en mode Oculus. La seule contrainte est que cette scène fournisse </div><div class='line' id='LC1193'>	la méthode &lt;&lt;render&gt;&gt;.</div><div class='line' id='LC1194'>	<span class="k">\lstinputlisting</span><span class="na">[language=C++]</span><span class="nb">{</span>Oculus.h<span class="nb">}</span></div><div class='line' id='LC1195'>	<span class="k">\FloatBarrier</span></div><div class='line' id='LC1196'><br></div><div class='line' id='LC1197'>	<span class="k">\subsection</span><span class="nb">{</span>Glossaire<span class="nb">}</span></div><div class='line' id='LC1198'>		<span class="k">\begin</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC1199'><br></div><div class='line' id='LC1200'>		<span class="k">\item</span> [API]~<span class="k">\\</span></div><div class='line' id='LC1201'>		    &lt;&lt;Application Programming Interface&gt;&gt;, interface de programmation. Ensemble normalisé de classes et de </div><div class='line' id='LC1202'>		    fonctions qui sert de façade par laquelle un logiciel offre des services à d&#39;autres logiciels.</div><div class='line' id='LC1203'><br></div><div class='line' id='LC1204'>		<span class="k">\item</span> [C] ~<span class="k">\\</span></div><div class='line' id='LC1205'>		    Langage de programmation impératif, procédural utilisé dans des applications ayant un besoin critique</div><div class='line' id='LC1206'>		    de performances.</div><div class='line' id='LC1207'><br></div><div class='line' id='LC1208'>		<span class="k">\item</span> [C++] ~<span class="k">\\</span></div><div class='line' id='LC1209'>		    Langage de programmation mutliplateforme, multiparadigme, générique, compilé, largement utilisé</div><div class='line' id='LC1210'>		    dans les domaines scientifiques, industriels, de l&#39;entreprise, de l&#39;image, <span class="k">\ldots</span></div><div class='line' id='LC1211'><br></div><div class='line' id='LC1212'>		<span class="k">\item</span> [CPU]~<span class="k">\\</span></div><div class='line' id='LC1213'>		    &lt;&lt;Central Processing Unit&gt;&gt;, processeur. </div><div class='line' id='LC1214'>		    Composant de l&#39;ordinateur qui exécute les instructions machine des programmes informatiques.</div><div class='line' id='LC1215'><br></div><div class='line' id='LC1216'>		<span class="k">\item</span> [FPS] ~<span class="k">\\</span></div><div class='line' id='LC1217'>		      &lt;&lt;Frame Per Seconds&gt;&gt;, mesure de la fluidité du rendu graphique en images par seconde.</div><div class='line' id='LC1218'><br></div><div class='line' id='LC1219'>		<span class="k">\item</span> [Frame]~<span class="k">\\</span></div><div class='line' id='LC1220'>		    Image rendue graphiquement par un programme, typiquement 60 fois par seconde.</div><div class='line' id='LC1221'><br></div><div class='line' id='LC1222'>		<span class="k">\item</span> [Framework]~<span class="k">\\</span></div><div class='line' id='LC1223'>		    Ensemble cohérent de composants logiciels structurels.</div><div class='line' id='LC1224'><br></div><div class='line' id='LC1225'>		<span class="k">\item</span> [GPU]~<span class="k">\\</span></div><div class='line' id='LC1226'>		    &lt;&lt;Graphics Processing Unit&gt;&gt;, processeur graphique.</div><div class='line' id='LC1227'>		    Circuit intégré présent sur une carte graphique et assurant les fonctions de calcul de l&#39;affichage.</div><div class='line' id='LC1228'><br></div><div class='line' id='LC1229'>		<span class="k">\item</span> [Oculus Rift]~<span class="k">\\</span></div><div class='line' id='LC1230'>		    Masque de réalité virtuelle fournissant une expérience d&#39;immersion inédite.</div><div class='line' id='LC1231'><br></div><div class='line' id='LC1232'>		<span class="k">\item</span> [Oculus VR]~<span class="k">\\</span></div><div class='line' id='LC1233'>		    Entreprise de réalité virtuelle fabriquant l&#39;Oculus Rift.</div><div class='line' id='LC1234'><br></div><div class='line' id='LC1235'><br></div><div class='line' id='LC1236'>		<span class="k">\item</span> [SDK]~<span class="k">\\</span></div><div class='line' id='LC1237'>		    &lt;&lt;Software Develoment Kit&gt;&gt;, kit de développement. </div><div class='line' id='LC1238'>		    Ensemble d&#39;outils permettant aux développeurs de créer des applications de type défini.</div><div class='line' id='LC1239'><br></div><div class='line' id='LC1240'>		<span class="k">\item</span> [Shader]~<span class="k">\\</span></div><div class='line' id='LC1241'>		    Programme informatique, utilisé en image de synthèse, </div><div class='line' id='LC1242'>		    pour paramétrer une partie du processus de rendu réalisé par une carte graphique ou un moteur de rendu logiciel.</div><div class='line' id='LC1243'>		    Ils peuvent permettre de décrire l&#39;absorption et la diffusion de la lumière, la texture à utiliser, </div><div class='line' id='LC1244'>		    les réflexions et réfractions, l&#39;ombrage, le déplacement de primitives </div><div class='line' id='LC1245'>		    et des effets post-traitement. </div><div class='line' id='LC1246'><br></div><div class='line' id='LC1247'>		<span class="k">\end</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC1248'><br></div><div class='line' id='LC1249'>	<span class="k">\subsection</span><span class="nb">{</span>Ressources<span class="nb">}</span></div><div class='line' id='LC1250'>	  <span class="k">\begin</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC1251'>	  <span class="k">\item</span> [Site web du créateur du langage C++]~<span class="k">\\</span></div><div class='line' id='LC1252'>	      <span class="k">\url</span><span class="nb">{</span>http://www.stroustrup.com/<span class="nb">}</span></div><div class='line' id='LC1253'>	  <span class="k">\item</span> [Conventions de code C++]~<span class="k">\\</span></div><div class='line' id='LC1254'>	      <span class="k">\url</span><span class="nb">{</span>http://www.stroustrup.com/JSF-AV-rules.pdf<span class="nb">}</span></div><div class='line' id='LC1255'>	  <span class="k">\item</span> [Site d&#39;Oculus pour les développeurs]~<span class="k">\\</span></div><div class='line' id='LC1256'>	      <span class="k">\url</span><span class="nb">{</span>https://developer.oculusvr.com/<span class="nb">}</span></div><div class='line' id='LC1257'>	  <span class="k">\item</span> [Wiki officiel d&#39;OpenGL]~<span class="k">\\</span></div><div class='line' id='LC1258'>	      <span class="k">\url</span><span class="nb">{</span>http://www.opengl.org/wiki/Main<span class="nb">_</span>Page<span class="nb">}</span></div><div class='line' id='LC1259'>	  <span class="k">\item</span> [Site web sur les design patterns]~<span class="k">\\</span></div><div class='line' id='LC1260'>	      <span class="k">\url</span><span class="nb">{</span>http://gameprogrammingpatterns.com/<span class="nb">}</span></div><div class='line' id='LC1261'>	  <span class="k">\item</span> [Blog sur le développement Oculus Rift]~<span class="k">\\</span></div><div class='line' id='LC1262'>	      <span class="k">\url</span><span class="nb">{</span>http://rifty-business.blogspot.fr<span class="nb">}</span></div><div class='line' id='LC1263'>	  <span class="k">\item</span> [Tutoriel C++]~<span class="k">\\</span></div><div class='line' id='LC1264'>	      <span class="k">\url</span><span class="nb">{</span>http://cpp.developpez.com/faq/cpp/<span class="nb">}</span></div><div class='line' id='LC1265'>	  <span class="k">\item</span> [Tutoriel OpenGL 3.x]~<span class="k">\\</span></div><div class='line' id='LC1266'>	      <span class="k">\url</span><span class="nb">{</span>http://tomdalling.com/blog/category/modern-opengl/<span class="nb">}</span>  </div><div class='line' id='LC1267'>	  <span class="k">\item</span> [Site web de Skybot 3D]~<span class="k">\\</span></div><div class='line' id='LC1268'>	      <span class="k">\url</span><span class="nb">{</span>http://vo.imcce.fr/webservices/skybot3d<span class="nb">}</span>  </div><div class='line' id='LC1269'>	  <span class="k">\item</span> [Site web de l&#39;Observatoire]~<span class="k">\\</span></div><div class='line' id='LC1270'>	      <span class="k">\url</span><span class="nb">{</span>http://astro.unistra.fr/<span class="nb">}</span>  </div><div class='line' id='LC1271'>	  <span class="k">\item</span> [Site web traitant du problème d&#39;échelle et des grands nombres dans OpenGL]~<span class="k">\\</span></div><div class='line' id='LC1272'>	      <span class="k">\url</span><span class="nb">{</span>http://www.floatingorigin.com/<span class="nb">}</span>  </div><div class='line' id='LC1273'>	  <span class="k">\item</span> [Autre tutoriel OpenGL 3.x]~<span class="k">\\</span></div><div class='line' id='LC1274'>	      <span class="k">\url</span><span class="nb">{</span>http://open.gl/<span class="nb">}</span>  </div><div class='line' id='LC1275'>	  <span class="k">\item</span> [Oculus SDK]~<span class="k">\\</span></div><div class='line' id='LC1276'>	      <span class="k">\url</span><span class="nb">{</span>https://developer.oculusvr.com/?action=dl<span class="nb">}</span>  </div><div class='line' id='LC1277'>	  <span class="k">\item</span> [Page Github du projet de Simulation]~<span class="k">\\</span></div><div class='line' id='LC1278'>	    <span class="k">\url</span><span class="nb">{</span>https://github.com/gaultier/Simulation<span class="nb">_</span>Stage<span class="nb">_</span>2014<span class="nb">}</span></div><div class='line' id='LC1279'>	  <span class="k">\end</span><span class="nb">{</span>description<span class="nb">}</span></div><div class='line' id='LC1280'><br></div><div class='line' id='LC1281'><br></div><div class='line' id='LC1282'><br></div><div class='line' id='LC1283'><span class="k">\end</span><span class="nb">{</span>document<span class="nb">}</span></div><div class='line' id='LC1284'><br></div></pre></div></td>
         </tr>
       </table>
  </div>

  </div>
</div>

<a href="#jump-to-line" rel="facebox[.linejump]" data-hotkey="l" style="display:none">Jump to Line</a>
<div id="jump-to-line" style="display:none">
  <form accept-charset="UTF-8" class="js-jump-to-line-form">
    <input class="linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" autofocus>
    <button type="submit" class="button">Go</button>
  </form>
</div>

        </div>

      </div><!-- /.repo-container -->
      <div class="modal-backdrop"></div>
    </div><!-- /.container -->
  </div><!-- /.site -->


    </div><!-- /.wrapper -->

      <div class="container">
  <div class="site-footer">
    <ul class="site-footer-links right">
      <li><a href="https://status.github.com/">Status</a></li>
      <li><a href="http://developer.github.com">API</a></li>
      <li><a href="http://training.github.com">Training</a></li>
      <li><a href="http://shop.github.com">Shop</a></li>
      <li><a href="/blog">Blog</a></li>
      <li><a href="/about">About</a></li>

    </ul>

    <a href="/" aria-label="Homepage">
      <span class="mega-octicon octicon-mark-github" title="GitHub"></span>
    </a>

    <ul class="site-footer-links">
      <li>&copy; 2014 <span title="0.03613s from github-fe126-cp1-prd.iad.github.net">GitHub</span>, Inc.</li>
        <li><a href="/site/terms">Terms</a></li>
        <li><a href="/site/privacy">Privacy</a></li>
        <li><a href="/security">Security</a></li>
        <li><a href="/contact">Contact</a></li>
    </ul>
  </div><!-- /.site-footer -->
</div><!-- /.container -->


    <div class="fullscreen-overlay js-fullscreen-overlay" id="fullscreen_overlay">
  <div class="fullscreen-container js-suggester-container">
    <div class="textarea-wrap">
      <textarea name="fullscreen-contents" id="fullscreen-contents" class="fullscreen-contents js-fullscreen-contents js-suggester-field" placeholder=""></textarea>
    </div>
  </div>
  <div class="fullscreen-sidebar">
    <a href="#" class="exit-fullscreen js-exit-fullscreen tooltipped tooltipped-w" aria-label="Exit Zen Mode">
      <span class="mega-octicon octicon-screen-normal"></span>
    </a>
    <a href="#" class="theme-switcher js-theme-switcher tooltipped tooltipped-w"
      aria-label="Switch themes">
      <span class="octicon octicon-color-mode"></span>
    </a>
  </div>
</div>



    <div id="ajax-error-message" class="flash flash-error">
      <span class="octicon octicon-alert"></span>
      <a href="#" class="octicon octicon-x close js-ajax-error-dismiss" aria-label="Dismiss error"></a>
      Something went wrong with that request. Please try again.
    </div>


      <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/frameworks-12d5fda141e78e513749dddbc56445fe172cbd9a.js" type="text/javascript"></script>
      <script async="async" crossorigin="anonymous" src="https://assets-cdn.github.com/assets/github-d6c1b1bf57282d37212d63f58b44e4059b37fba5.js" type="text/javascript"></script>
      
      
        <script async src="https://www.google-analytics.com/analytics.js"></script>
  </body>
</html>

