rubyneat 0.3.5.alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. checksums.yaml +7 -0
  2. data/.directory +4 -0
  3. data/.gitignore.orig +20 -0
  4. data/.idea/.name +1 -0
  5. data/.idea/.rakeTasks +7 -0
  6. data/.idea/dictionaries/trader.xml +3 -0
  7. data/.idea/encodings.xml +5 -0
  8. data/.idea/misc.xml +5 -0
  9. data/.idea/modules.xml +9 -0
  10. data/.idea/rubyneat.iml +197 -0
  11. data/.idea/runConfigurations/invpend_neat.xml +26 -0
  12. data/.idea/runConfigurations/sigdebug_neat.xml +24 -0
  13. data/.idea/runConfigurations/xor_neat.xml +26 -0
  14. data/.idea/runConfigurations/xordebug_neat.xml +24 -0
  15. data/.idea/runConfigurations/xorsin_neat.xml +24 -0
  16. data/.idea/scopes/scope_settings.xml +5 -0
  17. data/.idea/vcs.xml +7 -0
  18. data/.idea/workspace.xml +1124 -0
  19. data/.semver +5 -0
  20. data/.yardoc/checksums +11 -0
  21. data/.yardoc/object_types +0 -0
  22. data/.yardoc/objects/root.dat +0 -0
  23. data/.yardoc/proxy_types +0 -0
  24. data/Gemfile +32 -0
  25. data/Gemfile.lock +135 -0
  26. data/Gemfile.lock.orig +147 -0
  27. data/Guardfile +8 -0
  28. data/Rakefile +61 -0
  29. data/bin/neat +83 -0
  30. data/config/application.rb +5 -0
  31. data/doc/ControllerPoint.html +125 -0
  32. data/doc/CuteA.html +286 -0
  33. data/doc/CuteB.html +297 -0
  34. data/doc/DSL.html +883 -0
  35. data/doc/NEAT/BasicNeuronTypes/BiasNeuron.html +518 -0
  36. data/doc/NEAT/BasicNeuronTypes/CosineNeuron.html +274 -0
  37. data/doc/NEAT/BasicNeuronTypes/InputNeuron.html +366 -0
  38. data/doc/NEAT/BasicNeuronTypes/SigmoidNeuron.html +275 -0
  39. data/doc/NEAT/BasicNeuronTypes/SineNeuron.html +274 -0
  40. data/doc/NEAT/BasicNeuronTypes/TanhNeuron.html +274 -0
  41. data/doc/NEAT/BasicNeuronTypes.html +136 -0
  42. data/doc/NEAT/Controller/NeatSettings.html +3985 -0
  43. data/doc/NEAT/Controller.html +2490 -0
  44. data/doc/NEAT/Critter/Genotype/Gene.html +979 -0
  45. data/doc/NEAT/Critter/Genotype.html +1601 -0
  46. data/doc/NEAT/Critter/Phenotype.html +603 -0
  47. data/doc/NEAT/Critter.html +1037 -0
  48. data/doc/NEAT/DSL.html +1255 -0
  49. data/doc/NEAT/Evaluator.html +420 -0
  50. data/doc/NEAT/Evolver/CritterOp.html +551 -0
  51. data/doc/NEAT/Evolver.html +602 -0
  52. data/doc/NEAT/Expressor.html +327 -0
  53. data/doc/NEAT/Graph/DependencyResolver.html +478 -0
  54. data/doc/NEAT/Graph/GraphException.html +123 -0
  55. data/doc/NEAT/Graph.html +402 -0
  56. data/doc/NEAT/NeatException.html +123 -0
  57. data/doc/NEAT/NeatOb.html +567 -0
  58. data/doc/NEAT/Neuron.html +1067 -0
  59. data/doc/NEAT/Operator.html +162 -0
  60. data/doc/NEAT/Population.html +1961 -0
  61. data/doc/NEAT/Trait.html +169 -0
  62. data/doc/NEAT.html +588 -0
  63. data/doc/_index.html +373 -0
  64. data/doc/class_list.html +54 -0
  65. data/doc/css/common.css +1 -0
  66. data/doc/css/full_list.css +57 -0
  67. data/doc/css/style.css +339 -0
  68. data/doc/file_list.html +53 -0
  69. data/doc/frames.html +26 -0
  70. data/doc/index.html +373 -0
  71. data/doc/js/app.js +219 -0
  72. data/doc/js/full_list.js +178 -0
  73. data/doc/js/jquery.js +4 -0
  74. data/doc/method_list.html +1415 -0
  75. data/doc/top-level-namespace.html +164 -0
  76. data/foo/foo_aquarium_example.rb +38 -0
  77. data/foo/foo_gosu.rb +99 -0
  78. data/foo/foo_rubygoo.rb +104 -0
  79. data/foo/foo_sdl.rb +34 -0
  80. data/foo/icon.png +0 -0
  81. data/lib/rubyneat/critter.rb +374 -0
  82. data/lib/rubyneat/default_neat.rb +10 -0
  83. data/lib/rubyneat/dsl.rb +130 -0
  84. data/lib/rubyneat/evaluator.rb +51 -0
  85. data/lib/rubyneat/evolver.rb +315 -0
  86. data/lib/rubyneat/expressor.rb +110 -0
  87. data/lib/rubyneat/graph.rb +95 -0
  88. data/lib/rubyneat/neuron.rb +152 -0
  89. data/lib/rubyneat/population.rb +227 -0
  90. data/lib/rubyneat/rubyneat.rb +429 -0
  91. data/lib/rubyneat.rb +8 -0
  92. data/neater/invpend_neat.rb +150 -0
  93. data/neater/rnlib/inverted_pendulum.rb +380 -0
  94. data/neater/rnlib/xor.rb +10 -0
  95. data/neater/sigdebug_neat.rb +136 -0
  96. data/neater/xor_neat.rb +137 -0
  97. data/neater/xoranalog_neat.rb +138 -0
  98. data/neater/xorsin_neat.rb +143 -0
  99. data/projectFilesBackup/.idea/rubyneat.iml +180 -0
  100. data/public/.directory +4 -0
  101. data/public/background.png +0 -0
  102. data/public/background.xcf +0 -0
  103. data/public/cart.png +0 -0
  104. data/public/cart.xcf +0 -0
  105. data/public/metalpoles_molton_ball_l.jpg +0 -0
  106. data/public/old_background.png +0 -0
  107. data/public/pointer.png +0 -0
  108. data/public/pointer.xcf +0 -0
  109. data/public/pole.kra +0 -0
  110. data/public/pole.png +0 -0
  111. data/public/pole.xcf +0 -0
  112. data/public/wheel-of-year-stone-DD-131-WOYS.jpg +0 -0
  113. data/public/wheel.png +0 -0
  114. data/public/wheel.xcf +0 -0
  115. data/public/wood-planks-texture.jpg +0 -0
  116. data/rdoc/ControllerPoint.html +116 -0
  117. data/rdoc/CuteA.html +177 -0
  118. data/rdoc/CuteB.html +178 -0
  119. data/rdoc/DSLSetup.html +177 -0
  120. data/rdoc/GameTestWindow.html +242 -0
  121. data/rdoc/GameWindow.html +292 -0
  122. data/rdoc/Gemfile.html +215 -0
  123. data/rdoc/Gemfile_lock.html +327 -0
  124. data/rdoc/GraphTest.html +210 -0
  125. data/rdoc/Guardfile.html +198 -0
  126. data/rdoc/InvertedPendulum/Cart.html +668 -0
  127. data/rdoc/InvertedPendulum/DSL.html +259 -0
  128. data/rdoc/InvertedPendulum/InvPendWindow.html +402 -0
  129. data/rdoc/InvertedPendulum.html +198 -0
  130. data/rdoc/Logger.html +98 -0
  131. data/rdoc/NEAT/BasicNeuronTypes/BiasNeuron.html +265 -0
  132. data/rdoc/NEAT/BasicNeuronTypes/CosineNeuron.html +162 -0
  133. data/rdoc/NEAT/BasicNeuronTypes/InputNeuron.html +206 -0
  134. data/rdoc/NEAT/BasicNeuronTypes/SigmoidNeuron.html +162 -0
  135. data/rdoc/NEAT/BasicNeuronTypes/SineNeuron.html +162 -0
  136. data/rdoc/NEAT/BasicNeuronTypes/TanhNeuron.html +161 -0
  137. data/rdoc/NEAT/BasicNeuronTypes.html +107 -0
  138. data/rdoc/NEAT/Controller/NeatSettings.html +880 -0
  139. data/rdoc/NEAT/Controller.html +729 -0
  140. data/rdoc/NEAT/Critter/Genotype/Gene.html +457 -0
  141. data/rdoc/NEAT/Critter/Genotype.html +735 -0
  142. data/rdoc/NEAT/Critter/Phenotype.html +330 -0
  143. data/rdoc/NEAT/Critter.html +489 -0
  144. data/rdoc/NEAT/DSL.html +729 -0
  145. data/rdoc/NEAT/Evaluator.html +256 -0
  146. data/rdoc/NEAT/Evolver/CritterOp.html +349 -0
  147. data/rdoc/NEAT/Evolver.html +891 -0
  148. data/rdoc/NEAT/Expressor.html +402 -0
  149. data/rdoc/NEAT/Graph/DependencyResolver.html +291 -0
  150. data/rdoc/NEAT/Graph/GraphException.html +105 -0
  151. data/rdoc/NEAT/Graph.html +263 -0
  152. data/rdoc/NEAT/NeatException.html +105 -0
  153. data/rdoc/NEAT/NeatOb.html +325 -0
  154. data/rdoc/NEAT/Neuron.html +481 -0
  155. data/rdoc/NEAT/Operator.html +109 -0
  156. data/rdoc/NEAT/Population.html +935 -0
  157. data/rdoc/NEAT/Trait.html +117 -0
  158. data/rdoc/NEAT.html +422 -0
  159. data/rdoc/Object.html +384 -0
  160. data/rdoc/Phi.html +98 -0
  161. data/rdoc/Player.html +383 -0
  162. data/rdoc/Rakefile.html +254 -0
  163. data/rdoc/RubyNEAT/Application.html +105 -0
  164. data/rdoc/RubyNEAT.html +98 -0
  165. data/rdoc/SDL/Event2.html +98 -0
  166. data/rdoc/SDL.html +98 -0
  167. data/rdoc/Vector.html +195 -0
  168. data/rdoc/created.rid +125 -0
  169. data/rdoc/doc/ControllerPoint_html.html +299 -0
  170. data/rdoc/doc/CuteA_html.html +438 -0
  171. data/rdoc/doc/CuteB_html.html +436 -0
  172. data/rdoc/doc/DSL_html.html +992 -0
  173. data/rdoc/doc/NEAT/BasicNeuronTypes/BiasNeuron_html.html +617 -0
  174. data/rdoc/doc/NEAT/BasicNeuronTypes/CosineNeuron_html.html +413 -0
  175. data/rdoc/doc/NEAT/BasicNeuronTypes/InputNeuron_html.html +498 -0
  176. data/rdoc/doc/NEAT/BasicNeuronTypes/SigmoidNeuron_html.html +413 -0
  177. data/rdoc/doc/NEAT/BasicNeuronTypes/SineNeuron_html.html +413 -0
  178. data/rdoc/doc/NEAT/BasicNeuronTypes/TanhNeuron_html.html +412 -0
  179. data/rdoc/doc/NEAT/BasicNeuronTypes_html.html +310 -0
  180. data/rdoc/doc/NEAT/Controller/NeatSettings_html.html +3324 -0
  181. data/rdoc/doc/NEAT/Controller_html.html +2212 -0
  182. data/rdoc/doc/NEAT/Critter/Genotype/Gene_html.html +997 -0
  183. data/rdoc/doc/NEAT/Critter/Genotype_html.html +1556 -0
  184. data/rdoc/doc/NEAT/Critter/Phenotype_html.html +687 -0
  185. data/rdoc/doc/NEAT/Critter_html.html +1037 -0
  186. data/rdoc/doc/NEAT/DSL_html.html +1349 -0
  187. data/rdoc/doc/NEAT/Evaluator_html.html +556 -0
  188. data/rdoc/doc/NEAT/Evolver/CritterOp_html.html +690 -0
  189. data/rdoc/doc/NEAT/Evolver_html.html +677 -0
  190. data/rdoc/doc/NEAT/Expressor_html.html +468 -0
  191. data/rdoc/doc/NEAT/Graph/DependencyResolver_html.html +598 -0
  192. data/rdoc/doc/NEAT/Graph/GraphException_html.html +299 -0
  193. data/rdoc/doc/NEAT/Graph_html.html +527 -0
  194. data/rdoc/doc/NEAT/NeatException_html.html +299 -0
  195. data/rdoc/doc/NEAT/NeatOb_html.html +671 -0
  196. data/rdoc/doc/NEAT/Neuron_html.html +1095 -0
  197. data/rdoc/doc/NEAT/Operator_html.html +337 -0
  198. data/rdoc/doc/NEAT/Population_html.html +1795 -0
  199. data/rdoc/doc/NEAT/Trait_html.html +344 -0
  200. data/rdoc/doc/NEAT_html.html +736 -0
  201. data/rdoc/doc/_index_html.html +559 -0
  202. data/rdoc/doc/class_list_html.html +369 -0
  203. data/rdoc/doc/css/common_css.html +188 -0
  204. data/rdoc/doc/css/full_list_css.html +243 -0
  205. data/rdoc/doc/css/style_css.html +530 -0
  206. data/rdoc/doc/file_list_html.html +240 -0
  207. data/rdoc/doc/frames_html.html +217 -0
  208. data/rdoc/doc/index_html.html +559 -0
  209. data/rdoc/doc/js/app_js.html +423 -0
  210. data/rdoc/doc/js/full_list_js.html +372 -0
  211. data/rdoc/doc/js/jquery_js.html +1536 -0
  212. data/rdoc/doc/method_list_html.html +1375 -0
  213. data/rdoc/doc/top-level-namespace_html.html +317 -0
  214. data/rdoc/fonts/Lato-Light.ttf +0 -0
  215. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  216. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  217. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  218. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  219. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  220. data/rdoc/fonts.css +167 -0
  221. data/rdoc/images/add.png +0 -0
  222. data/rdoc/images/arrow_up.png +0 -0
  223. data/rdoc/images/brick.png +0 -0
  224. data/rdoc/images/brick_link.png +0 -0
  225. data/rdoc/images/bug.png +0 -0
  226. data/rdoc/images/bullet_black.png +0 -0
  227. data/rdoc/images/bullet_toggle_minus.png +0 -0
  228. data/rdoc/images/bullet_toggle_plus.png +0 -0
  229. data/rdoc/images/date.png +0 -0
  230. data/rdoc/images/delete.png +0 -0
  231. data/rdoc/images/find.png +0 -0
  232. data/rdoc/images/loadingAnimation.gif +0 -0
  233. data/rdoc/images/macFFBgHack.png +0 -0
  234. data/rdoc/images/package.png +0 -0
  235. data/rdoc/images/page_green.png +0 -0
  236. data/rdoc/images/page_white_text.png +0 -0
  237. data/rdoc/images/page_white_width.png +0 -0
  238. data/rdoc/images/plugin.png +0 -0
  239. data/rdoc/images/ruby.png +0 -0
  240. data/rdoc/images/tag_blue.png +0 -0
  241. data/rdoc/images/tag_green.png +0 -0
  242. data/rdoc/images/transparent.png +0 -0
  243. data/rdoc/images/wrench.png +0 -0
  244. data/rdoc/images/wrench_orange.png +0 -0
  245. data/rdoc/images/zoom.png +0 -0
  246. data/rdoc/index.html +282 -0
  247. data/rdoc/js/darkfish.js +140 -0
  248. data/rdoc/js/jquery.js +18 -0
  249. data/rdoc/js/navigation.js +142 -0
  250. data/rdoc/js/search.js +109 -0
  251. data/rdoc/js/search_index.js +1 -0
  252. data/rdoc/js/searcher.js +228 -0
  253. data/rdoc/rdoc.css +580 -0
  254. data/rdoc/rubyneat_gemspec.html +387 -0
  255. data/rdoc/table_of_contents.html +2502 -0
  256. data/rdoc/xordebug_log.html +170598 -0
  257. data/rdoc/xorsin_log.html +22569 -0
  258. data/rubyneat.gemspec +347 -0
  259. data/rubyneat.gemspec.orig +375 -0
  260. data/spec/lib/rubyneat/rubyneat_spec.rb +132 -0
  261. metadata +555 -0
@@ -0,0 +1,668 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class InvertedPendulum::Cart - rubyneat 0.3.4</title>
8
+
9
+ <link href="../fonts.css" rel="stylesheet">
10
+ <link href="../rdoc.css" rel="stylesheet">
11
+
12
+ <script type="text/javascript">
13
+ var rdoc_rel_prefix = "../";
14
+ </script>
15
+
16
+ <script src="../js/jquery.js"></script>
17
+ <script src="../js/navigation.js"></script>
18
+ <script src="../js/search_index.js"></script>
19
+ <script src="../js/search.js"></script>
20
+ <script src="../js/searcher.js"></script>
21
+ <script src="../js/darkfish.js"></script>
22
+
23
+
24
+ <body id="top" role="document" class="class">
25
+ <nav role="navigation">
26
+ <div id="project-navigation">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
+ <h2>
29
+ <a href="../index.html" rel="home">Home</a>
30
+ </h2>
31
+
32
+ <div id="table-of-contents-navigation">
33
+ <a href="../table_of_contents.html#pages">Pages</a>
34
+ <a href="../table_of_contents.html#classes">Classes</a>
35
+ <a href="../table_of_contents.html#methods">Methods</a>
36
+ </div>
37
+ </div>
38
+
39
+ <div id="search-section" role="search" class="project-section initially-hidden">
40
+ <form action="#" method="get" accept-charset="utf-8">
41
+ <div id="search-field-wrapper">
42
+ <input id="search-field" role="combobox" aria-label="Search"
43
+ aria-autocomplete="list" aria-controls="search-results"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
+ title="Type to search, Up and Down to navigate, Enter to load">
46
+ </div>
47
+
48
+ <ul id="search-results" aria-label="Search Results"
49
+ aria-busy="false" aria-expanded="false"
50
+ aria-atomic="false" class="initially-hidden"></ul>
51
+ </form>
52
+ </div>
53
+
54
+ </div>
55
+
56
+
57
+
58
+ <div id="class-metadata">
59
+
60
+ <div id="parent-class-section" class="nav-section">
61
+ <h3>Parent</h3>
62
+
63
+
64
+ <p class="link"><a href="../Object.html">Object</a>
65
+
66
+ </div>
67
+
68
+
69
+
70
+ <!-- Method Quickref -->
71
+ <div id="method-list-section" class="nav-section">
72
+ <h3>Methods</h3>
73
+
74
+ <ul class="link-list" role="directory">
75
+
76
+ <li ><a href="#method-c-new">::new</a>
77
+
78
+ <li ><a href="#method-i-big_bang">#big_bang</a>
79
+
80
+ <li ><a href="#method-i-button_down">#button_down</a>
81
+
82
+ <li ><a href="#method-i-button_up">#button_up</a>
83
+
84
+ <li ><a href="#method-i-draw">#draw</a>
85
+
86
+ <li ><a href="#method-i-ipwin-3D">#ipwin=</a>
87
+
88
+ <li ><a href="#method-i-update">#update</a>
89
+
90
+ <li ><a href="#method-i-update_cart">#update_cart</a>
91
+
92
+ </ul>
93
+ </div>
94
+
95
+ </div>
96
+ </nav>
97
+
98
+ <main role="main" aria-labelledby="class-InvertedPendulum::Cart">
99
+ <h1 id="class-InvertedPendulum::Cart" class="class">
100
+ class InvertedPendulum::Cart
101
+ </h1>
102
+
103
+ <section class="description">
104
+
105
+ </section>
106
+
107
+
108
+
109
+
110
+ <section id="5Buntitled-5D" class="documentation-section">
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+ <section class="attribute-method-details" class="method-section">
119
+ <header>
120
+ <h3>Attributes</h3>
121
+ </header>
122
+
123
+
124
+ <div id="attribute-i-ipwin" class="method-detail">
125
+ <div class="method-heading attribute-method-heading">
126
+ <span class="method-name">ipwin</span><span
127
+ class="attribute-access-type">[RW]</span>
128
+ </div>
129
+
130
+ <div class="method-description">
131
+
132
+
133
+
134
+ </div>
135
+ </div>
136
+
137
+ <div id="attribute-i-pix_meters" class="method-detail">
138
+ <div class="method-heading attribute-method-heading">
139
+ <span class="method-name">pix_meters</span><span
140
+ class="attribute-access-type">[RW]</span>
141
+ </div>
142
+
143
+ <div class="method-description">
144
+
145
+
146
+
147
+ </div>
148
+ </div>
149
+
150
+ </section>
151
+
152
+
153
+
154
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
155
+ <header>
156
+ <h3>Public Class Methods</h3>
157
+ </header>
158
+
159
+
160
+ <div id="method-c-new" class="method-detail ">
161
+
162
+ <div class="method-heading">
163
+ <span class="method-name">new</span><span
164
+ class="method-args">(ipwin: nil, scale: 0.50, ang: 90.1, xpos: 500.0, ypos: 845.0, cartmass: 200.0, polemass: 100.10, bang: 10.0, thrust_decay: 2.0, window_pix_width: 1280, update_interval: 16.666666, naked: false)</span>
165
+
166
+ <span class="method-click-advice">click to toggle source</span>
167
+
168
+ </div>
169
+
170
+
171
+ <div class="method-description">
172
+
173
+ <p>@param ipwin – the windowed canvalss this will be shown. @param scale –
174
+ visual scale on the canvas. @param ang – initial angle in degrees, 0
175
+ being the</p>
176
+
177
+ <pre>positive side of the x axis.</pre>
178
+
179
+ <p>@param xpos – initial x position of the center of cart, in pixels. @param
180
+ cartmass – in kg. included are the mass of the wheels.</p>
181
+
182
+ <pre>We will not deal with the angular momentum
183
+ of the wheels, because that&#39;s beyond the scope
184
+ of what this is supposed to accomplish.</pre>
185
+
186
+ <p>@param polemass – in kg. The mass of the pole is assumed to all</p>
187
+
188
+ <pre>reside at a point at
189
+ the knobby end.</pre>
190
+
191
+ <p>@param bang – per mouse event, how much bang (acceleration in m/s) to</p>
192
+
193
+ <pre>deliver to the cart</pre>
194
+
195
+
196
+
197
+
198
+ <div class="method-source-code" id="new-source">
199
+ <pre><span class="ruby-comment"># File neater/rnlib/inverted_pendulum.rb, line 117</span>
200
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">ipwin</span><span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>,
201
+ <span class="ruby-identifier">scale</span><span class="ruby-operator">:</span> <span class="ruby-value">0.50</span>,
202
+ <span class="ruby-identifier">ang</span><span class="ruby-operator">:</span> <span class="ruby-value">90.1</span>,
203
+ <span class="ruby-identifier">xpos</span><span class="ruby-operator">:</span> <span class="ruby-value">500.0</span>,
204
+ <span class="ruby-identifier">ypos</span><span class="ruby-operator">:</span> <span class="ruby-value">845.0</span>,
205
+ <span class="ruby-identifier">cartmass</span><span class="ruby-operator">:</span> <span class="ruby-value">200.0</span>,
206
+ <span class="ruby-identifier">polemass</span><span class="ruby-operator">:</span> <span class="ruby-value">100.10</span>,
207
+ <span class="ruby-identifier">bang</span><span class="ruby-operator">:</span> <span class="ruby-value">10.0</span>, <span class="ruby-comment"># acceleration on a bang event</span>
208
+ <span class="ruby-identifier">thrust_decay</span><span class="ruby-operator">:</span> <span class="ruby-value">2.0</span>, <span class="ruby-comment"># thrust decay percentage per second</span>
209
+ <span class="ruby-identifier">window_pix_width</span><span class="ruby-operator">:</span> <span class="ruby-value">1280</span>,
210
+ <span class="ruby-identifier">update_interval</span><span class="ruby-operator">:</span> <span class="ruby-value">16.666666</span>,
211
+ <span class="ruby-identifier">naked</span><span class="ruby-operator">:</span> <span class="ruby-keyword">false</span>)
212
+ <span class="ruby-ivar">@t</span> = <span class="ruby-value">0</span>
213
+ <span class="ruby-ivar">@bang</span> = <span class="ruby-identifier">bang</span>
214
+ <span class="ruby-ivar">@thrust</span> = <span class="ruby-value">0</span> <span class="ruby-comment"># accumulated bang</span>
215
+ <span class="ruby-ivar">@thrust_decay</span> = <span class="ruby-identifier">thrust_decay</span>
216
+ <span class="ruby-ivar">@scale</span> = <span class="ruby-identifier">scale</span>
217
+ <span class="ruby-ivar">@cart_length</span> = <span class="ruby-value">5.0</span> <span class="ruby-comment"># meters</span>
218
+ <span class="ruby-ivar">@pix_meters</span> = <span class="ruby-value">640.0</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">scale</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@cart_length</span>
219
+ <span class="ruby-ivar">@ipwin</span> = <span class="ruby-identifier">ipwin</span>
220
+ <span class="ruby-ivar">@pix_width</span> = <span class="ruby-ivar">@ipwin</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">window_pix_width</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@ipwin</span>.<span class="ruby-identifier">pix_width</span>
221
+ <span class="ruby-ivar">@update_interval</span> = <span class="ruby-identifier">ipwin</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">update_interval</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@ipwin</span>.<span class="ruby-identifier">update_interval</span>
222
+ <span class="ruby-ivar">@cart</span> = {
223
+ <span class="ruby-identifier">pos</span><span class="ruby-operator">:</span> <span class="ruby-constant">Vector</span>[<span class="ruby-identifier">xpos</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@pix_meters</span>, <span class="ruby-identifier">ypos</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@pix_meters</span>, <span class="ruby-value">0</span>],
224
+ <span class="ruby-identifier">vel</span><span class="ruby-operator">:</span> <span class="ruby-constant">Vector</span>[<span class="ruby-value">0.0</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>], <span class="ruby-comment">#speed in meters per second</span>
225
+ <span class="ruby-identifier">acc</span><span class="ruby-operator">:</span> <span class="ruby-constant">Vector</span>[<span class="ruby-value">0.0</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>], <span class="ruby-comment">#acceleration in meters per second squared</span>
226
+ <span class="ruby-identifier">scale</span><span class="ruby-operator">:</span> <span class="ruby-value">0.2</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">scale</span>,
227
+ <span class="ruby-identifier">length</span><span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>, <span class="ruby-comment"># in meters, calculated from the scaled pixel length.</span>
228
+ <span class="ruby-identifier">height</span><span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>, <span class="ruby-comment"># in meters, calculated from the scaled pixel height</span>
229
+ <span class="ruby-identifier">basis</span><span class="ruby-operator">:</span> {
230
+ <span class="ruby-identifier">horiz</span><span class="ruby-operator">:</span> <span class="ruby-constant">Vector</span>[<span class="ruby-value">1.0</span>, <span class="ruby-value">0.0</span>, <span class="ruby-value">0.0</span>], <span class="ruby-comment"># The cart is resticted to movement on the x axis</span>
231
+ <span class="ruby-identifier">vert</span><span class="ruby-operator">:</span> <span class="ruby-constant">Vector</span>[<span class="ruby-value">0.0</span>, <span class="ruby-value">1.0</span>, <span class="ruby-value">0.0</span>]}, <span class="ruby-comment"># so these basis vectors will never change.</span>
232
+ <span class="ruby-identifier">force</span><span class="ruby-operator">:</span> {},
233
+ <span class="ruby-identifier">mass</span><span class="ruby-operator">:</span> <span class="ruby-identifier">cartmass</span>
234
+ }
235
+
236
+ <span class="ruby-comment"># Pole is relative to cart, and in the image is laying horizontal.</span>
237
+ <span class="ruby-ivar">@pole</span> = {
238
+ <span class="ruby-identifier">z</span><span class="ruby-operator">:</span> <span class="ruby-value">0</span>,
239
+ <span class="ruby-identifier">xoff</span><span class="ruby-operator">:</span> <span class="ruby-value">0.0</span>,
240
+ <span class="ruby-identifier">yoff</span><span class="ruby-operator">:</span> <span class="ruby-value">0.5</span>,
241
+ <span class="ruby-identifier">ang</span><span class="ruby-operator">:</span> <span class="ruby-identifier">ang</span>, <span class="ruby-comment"># angle is in degrees</span>
242
+ <span class="ruby-identifier">dang</span><span class="ruby-operator">:</span> <span class="ruby-value">0.0</span>, <span class="ruby-comment"># degrees per second</span>
243
+ <span class="ruby-identifier">ddang</span><span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>, <span class="ruby-comment"># angular acceleration, degree / second ** 2</span>
244
+ <span class="ruby-identifier">cdang</span><span class="ruby-operator">:</span> <span class="ruby-value">0.0</span>, <span class="ruby-comment"># degrees per second, contribution from cart</span>
245
+ <span class="ruby-identifier">cddang</span><span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>, <span class="ruby-comment"># angular acceleration, degree / second ** 2, contribution from cart</span>
246
+ <span class="ruby-identifier">scale</span><span class="ruby-operator">:</span> <span class="ruby-value">0.2</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">scale</span>,
247
+ <span class="ruby-identifier">force</span><span class="ruby-operator">:</span> {}, <span class="ruby-comment"># shall hold the 2 force vectors :shaft and :radial</span>
248
+ <span class="ruby-identifier">basis</span><span class="ruby-operator">:</span> {}, <span class="ruby-comment"># basis (unit) vectors</span>
249
+ <span class="ruby-identifier">cacc</span><span class="ruby-operator">:</span> <span class="ruby-constant">Vector</span>[<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">0</span>], <span class="ruby-comment"># acceleration from cart</span>
250
+ <span class="ruby-identifier">length</span><span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>, <span class="ruby-comment"># in meters, calculated from the scaled pixel length.</span>
251
+ <span class="ruby-identifier">mass</span><span class="ruby-operator">:</span> <span class="ruby-identifier">polemass</span>
252
+ }
253
+
254
+ <span class="ruby-comment"># Wheels is relative to cart</span>
255
+ <span class="ruby-ivar">@wheels</span> = [
256
+ {
257
+ <span class="ruby-identifier">ang</span><span class="ruby-operator">:</span> <span class="ruby-value">0</span>,
258
+ <span class="ruby-identifier">dang</span><span class="ruby-operator">:</span> <span class="ruby-value">100</span>, <span class="ruby-comment">#FIXME: delete this for this will be overwritten anyway</span>
259
+ <span class="ruby-identifier">xoff</span><span class="ruby-operator">:</span> <span class="ruby-value">-0.7</span>, <span class="ruby-comment"># percentage from center</span>
260
+ <span class="ruby-identifier">yoff</span><span class="ruby-operator">:</span> <span class="ruby-value">0.4</span>, <span class="ruby-comment"># percentage from center</span>
261
+ <span class="ruby-identifier">scale</span><span class="ruby-operator">:</span> <span class="ruby-value">0.2</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">scale</span>
262
+ },
263
+ {
264
+ <span class="ruby-identifier">ang</span><span class="ruby-operator">:</span> <span class="ruby-value">0</span>,
265
+ <span class="ruby-identifier">dang</span><span class="ruby-operator">:</span> <span class="ruby-value">12.33</span>, <span class="ruby-comment">#FIXME: delete this for this will be overwritten anyway</span>
266
+ <span class="ruby-identifier">xoff</span><span class="ruby-operator">:</span> <span class="ruby-value">0.7</span>,
267
+ <span class="ruby-identifier">yoff</span><span class="ruby-operator">:</span> <span class="ruby-value">0.4</span>,
268
+ <span class="ruby-identifier">scale</span><span class="ruby-operator">:</span> <span class="ruby-value">0.2</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">scale</span>
269
+ }
270
+ ]
271
+ <span class="ruby-keyword">end</span></pre>
272
+ </div>
273
+
274
+ </div>
275
+
276
+
277
+
278
+
279
+ </div>
280
+
281
+
282
+ </section>
283
+
284
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
285
+ <header>
286
+ <h3>Public Instance Methods</h3>
287
+ </header>
288
+
289
+
290
+ <div id="method-i-big_bang" class="method-detail ">
291
+
292
+ <div class="method-heading">
293
+ <span class="method-name">big_bang</span><span
294
+ class="method-args">(bb = 0)</span>
295
+
296
+ <span class="method-click-advice">click to toggle source</span>
297
+
298
+ </div>
299
+
300
+
301
+ <div class="method-description">
302
+
303
+ <pre>Provide a bang for the cart.
304
+ Return a thrust (acc) vector (really just x)
305
+ based on thrust</pre>
306
+
307
+ <p>@param bb – bang factor, normally -1, 0, or 1, but could be</p>
308
+
309
+ <pre>other values based on being a multiplier of the actual bang to be
310
+ applied.</pre>
311
+
312
+
313
+
314
+
315
+ <div class="method-source-code" id="big_bang-source">
316
+ <pre><span class="ruby-comment"># File neater/rnlib/inverted_pendulum.rb, line 212</span>
317
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">big_bang</span>(<span class="ruby-identifier">bb</span> = <span class="ruby-value">0</span>)
318
+ <span class="ruby-comment"># FIXME: this is temporary. Eventually this will call a callback in the Neater script.</span>
319
+ <span class="ruby-identifier">v</span> = <span class="ruby-constant">Vector</span>[<span class="ruby-ivar">@thrust</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>]
320
+ <span class="ruby-ivar">@thrust</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@bang</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">bb</span>
321
+ <span class="ruby-ivar">@thrust</span> <span class="ruby-operator">-=</span> <span class="ruby-ivar">@thrust</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@thrust_decay</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@dt</span>
322
+ <span class="ruby-identifier">v</span>
323
+ <span class="ruby-keyword">end</span></pre>
324
+ </div>
325
+
326
+ </div>
327
+
328
+
329
+
330
+
331
+ </div>
332
+
333
+
334
+ <div id="method-i-button_down" class="method-detail ">
335
+
336
+ <div class="method-heading">
337
+ <span class="method-name">button_down</span><span
338
+ class="method-args">(id)</span>
339
+
340
+ <span class="method-click-advice">click to toggle source</span>
341
+
342
+ </div>
343
+
344
+
345
+ <div class="method-description">
346
+
347
+
348
+
349
+
350
+
351
+
352
+ <div class="method-source-code" id="button_down-source">
353
+ <pre><span class="ruby-comment"># File neater/rnlib/inverted_pendulum.rb, line 220</span>
354
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">button_down</span>(<span class="ruby-identifier">id</span>)
355
+ <span class="ruby-identifier">big_bang</span> <span class="ruby-keyword">case</span> <span class="ruby-identifier">id</span>
356
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">MOUSE_ROLL_FOREWARD</span>
357
+ <span class="ruby-value">1.0</span>
358
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">MOUSE_ROLL_BACK</span>
359
+ <span class="ruby-value">-1.0</span>
360
+ <span class="ruby-keyword">else</span>
361
+ <span class="ruby-value">0</span>
362
+ <span class="ruby-keyword">end</span>
363
+ <span class="ruby-keyword">end</span></pre>
364
+ </div>
365
+
366
+ </div>
367
+
368
+
369
+
370
+
371
+ </div>
372
+
373
+
374
+ <div id="method-i-button_up" class="method-detail ">
375
+
376
+ <div class="method-heading">
377
+ <span class="method-name">button_up</span><span
378
+ class="method-args">(id)</span>
379
+
380
+ <span class="method-click-advice">click to toggle source</span>
381
+
382
+ </div>
383
+
384
+
385
+ <div class="method-description">
386
+
387
+
388
+
389
+
390
+
391
+
392
+ <div class="method-source-code" id="button_up-source">
393
+ <pre><span class="ruby-comment"># File neater/rnlib/inverted_pendulum.rb, line 231</span>
394
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">button_up</span>(<span class="ruby-identifier">id</span>)
395
+ <span class="ruby-comment"># no op for now.</span>
396
+ <span class="ruby-keyword">end</span></pre>
397
+ </div>
398
+
399
+ </div>
400
+
401
+
402
+
403
+
404
+ </div>
405
+
406
+
407
+ <div id="method-i-draw" class="method-detail ">
408
+
409
+ <div class="method-heading">
410
+ <span class="method-name">draw</span><span
411
+ class="method-args">()</span>
412
+
413
+ <span class="method-click-advice">click to toggle source</span>
414
+
415
+ </div>
416
+
417
+
418
+ <div class="method-description">
419
+
420
+
421
+
422
+
423
+
424
+
425
+ <div class="method-source-code" id="draw-source">
426
+ <pre><span class="ruby-comment"># File neater/rnlib/inverted_pendulum.rb, line 328</span>
427
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">draw</span>
428
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">draw_rot</span>( <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:_x</span>] <span class="ruby-operator">%</span> <span class="ruby-ivar">@pix_width</span>,
429
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:_y</span>],
430
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:z</span>],
431
+ <span class="ruby-operator">-</span><span class="ruby-ivar">@pole</span>[<span class="ruby-value">:ang</span>], <span class="ruby-comment"># negative because y is inverted on the canvas</span>
432
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:xoff</span>], <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:yoff</span>],
433
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:scale</span>],
434
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:scale</span>])
435
+
436
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">draw</span>(<span class="ruby-ivar">@cart</span>[<span class="ruby-value">:_x</span>] <span class="ruby-operator">%</span> <span class="ruby-ivar">@pix_width</span>,
437
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:_y</span>],
438
+ <span class="ruby-value">0</span>,
439
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:scale</span>],
440
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:scale</span>])
441
+
442
+ <span class="ruby-ivar">@wheels</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">wh</span><span class="ruby-operator">|</span>
443
+ <span class="ruby-identifier">wh</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">draw_rot</span>(<span class="ruby-identifier">wh</span>[<span class="ruby-value">:_x</span>] <span class="ruby-operator">%</span> <span class="ruby-ivar">@pix_width</span>,
444
+ <span class="ruby-identifier">wh</span>[<span class="ruby-value">:_y</span>],
445
+ <span class="ruby-value">0</span>,
446
+ <span class="ruby-identifier">wh</span>[<span class="ruby-value">:ang</span>],
447
+ <span class="ruby-value">0.5</span>, <span class="ruby-value">0.5</span>,
448
+ <span class="ruby-identifier">wh</span>[<span class="ruby-value">:scale</span>],
449
+ <span class="ruby-identifier">wh</span>[<span class="ruby-value">:scale</span>])
450
+ <span class="ruby-keyword">end</span>
451
+ <span class="ruby-keyword">end</span></pre>
452
+ </div>
453
+
454
+ </div>
455
+
456
+
457
+
458
+
459
+ </div>
460
+
461
+
462
+ <div id="method-i-ipwin-3D" class="method-detail ">
463
+
464
+ <div class="method-heading">
465
+ <span class="method-name">ipwin=</span><span
466
+ class="method-args">(ipwin)</span>
467
+
468
+ <span class="method-click-advice">click to toggle source</span>
469
+
470
+ </div>
471
+
472
+
473
+ <div class="method-description">
474
+
475
+
476
+
477
+
478
+
479
+
480
+ <div class="method-source-code" id="ipwin-3D-source">
481
+ <pre><span class="ruby-comment"># File neater/rnlib/inverted_pendulum.rb, line 190</span>
482
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">ipwin=</span>(<span class="ruby-identifier">ipwin</span>)
483
+ <span class="ruby-ivar">@ipwin</span> = <span class="ruby-identifier">ipwin</span>
484
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:image</span>] = <span class="ruby-constant">Gosu</span><span class="ruby-operator">::</span><span class="ruby-constant">Image</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">ipwin</span>, <span class="ruby-string">&#39;public/cart.png&#39;</span>, <span class="ruby-keyword">true</span>)
485
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:image</span>] = <span class="ruby-constant">Gosu</span><span class="ruby-operator">::</span><span class="ruby-constant">Image</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">ipwin</span>, <span class="ruby-string">&#39;public/pole.png&#39;</span>, <span class="ruby-keyword">true</span>)
486
+ <span class="ruby-ivar">@wheels</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">w</span><span class="ruby-operator">|</span>
487
+ <span class="ruby-identifier">w</span>[<span class="ruby-value">:image</span>] = <span class="ruby-constant">Gosu</span><span class="ruby-operator">::</span><span class="ruby-constant">Image</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">ipwin</span>, <span class="ruby-string">&#39;public/wheel.png&#39;</span>, <span class="ruby-keyword">true</span>)
488
+ <span class="ruby-comment"># radius of wheel in meters, need this for rotational velocity calculation</span>
489
+ <span class="ruby-identifier">w</span>[<span class="ruby-value">:radius</span>] = <span class="ruby-identifier">w</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">width</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">w</span>[<span class="ruby-value">:scale</span>] <span class="ruby-operator">/</span> <span class="ruby-ivar">@pix_meters</span> <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span>
490
+ <span class="ruby-identifier">w</span>[<span class="ruby-value">:circumference</span>] = <span class="ruby-identifier">w</span>[<span class="ruby-value">:radius</span>] <span class="ruby-operator">*</span> <span class="ruby-value">2.0</span> <span class="ruby-operator">*</span> <span class="ruby-constant">PI</span>
491
+ }
492
+
493
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:length</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">width</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:scale</span>] <span class="ruby-operator">/</span> <span class="ruby-ivar">@pix_meters</span>
494
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:height</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">height</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:scale</span>] <span class="ruby-operator">/</span> <span class="ruby-ivar">@pix_meters</span>
495
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:length</span>] = <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">width</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:scale</span>] <span class="ruby-operator">/</span> <span class="ruby-ivar">@pix_meters</span>
496
+ <span class="ruby-keyword">end</span></pre>
497
+ </div>
498
+
499
+ </div>
500
+
501
+
502
+
503
+
504
+ </div>
505
+
506
+
507
+ <div id="method-i-update" class="method-detail ">
508
+
509
+ <div class="method-heading">
510
+ <span class="method-name">update</span><span
511
+ class="method-args">()</span>
512
+
513
+ <span class="method-click-advice">click to toggle source</span>
514
+
515
+ </div>
516
+
517
+
518
+ <div class="method-description">
519
+
520
+
521
+
522
+
523
+
524
+
525
+ <div class="method-source-code" id="update-source">
526
+ <pre><span class="ruby-comment"># File neater/rnlib/inverted_pendulum.rb, line 235</span>
527
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">update</span>
528
+ <span class="ruby-comment">## Physics updates</span>
529
+ <span class="ruby-ivar">@dt</span> = <span class="ruby-ivar">@update_interval</span> <span class="ruby-operator">/</span> <span class="ruby-value">1000.0</span>
530
+ <span class="ruby-ivar">@t</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@dt</span>
531
+
532
+ <span class="ruby-comment">## Pole (Pendulum) forces, accelerations, etc.</span>
533
+ <span class="ruby-comment"># basis vectors</span>
534
+ <span class="ruby-identifier">ang</span> = <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:ang</span>] <span class="ruby-operator">*</span> <span class="ruby-constant">TORAD</span>
535
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:time</span>] = <span class="ruby-ivar">@t</span>
536
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:basis</span>][<span class="ruby-value">:shaft</span>] = <span class="ruby-identifier">iShaft</span> = <span class="ruby-constant">Vector</span>[<span class="ruby-identifier">cos</span>(<span class="ruby-identifier">ang</span>), <span class="ruby-identifier">sin</span>(<span class="ruby-identifier">ang</span>), <span class="ruby-value">0</span>]
537
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:basis</span>][<span class="ruby-value">:radial</span>] = <span class="ruby-identifier">iRadial</span> = <span class="ruby-constant">Vector</span>[<span class="ruby-identifier">sin</span>(<span class="ruby-identifier">ang</span>), <span class="ruby-operator">-</span><span class="ruby-identifier">cos</span>(<span class="ruby-identifier">ang</span>), <span class="ruby-value">0</span>]
538
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:r</span>] = <span class="ruby-identifier">r</span> = <span class="ruby-identifier">iShaft</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:length</span>]
539
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:shaft</span>] = <span class="ruby-identifier">iShaft</span>.<span class="ruby-identifier">basis</span>(<span class="ruby-constant">GV</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:mass</span>])
540
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:radial</span>] = <span class="ruby-identifier">radial</span> = <span class="ruby-identifier">iRadial</span>.<span class="ruby-identifier">basis</span>(<span class="ruby-constant">GV</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:mass</span>])
541
+ <span class="ruby-comment"># the magnitude of the radial vector goes to the torque on</span>
542
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:torque</span>] = <span class="ruby-identifier">torque</span> = <span class="ruby-identifier">r</span>.<span class="ruby-identifier">cross_product</span>(<span class="ruby-identifier">radial</span>)
543
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:alpha</span>] = <span class="ruby-identifier">alpha</span> = <span class="ruby-identifier">torque</span> <span class="ruby-operator">/</span> (<span class="ruby-ivar">@pole</span>[<span class="ruby-value">:mass</span>] <span class="ruby-operator">*</span> (<span class="ruby-ivar">@pole</span>[<span class="ruby-value">:length</span>] <span class="ruby-operator">**</span> <span class="ruby-value">2.0</span>))
544
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:ddang</span>] = <span class="ruby-operator">-</span><span class="ruby-identifier">alpha</span>[<span class="ruby-constant">Z</span>] <span class="ruby-operator">/</span> <span class="ruby-constant">TORAD</span> <span class="ruby-comment"># the pseudo vector component Z is the signed magnitude</span>
545
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:dang</span>] <span class="ruby-operator">+=</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:ddang</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@dt</span> <span class="ruby-comment"># angular velocity</span>
546
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:vel</span>] = <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:basis</span>][<span class="ruby-value">:radial</span>] <span class="ruby-operator">*</span> (<span class="ruby-ivar">@pole</span>[<span class="ruby-value">:dang</span>] <span class="ruby-operator">*</span> <span class="ruby-constant">TORAD</span> <span class="ruby-operator">*</span> <span class="ruby-constant">PI2</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:length</span>]) <span class="ruby-comment">#linear velocity at the pole mass</span>
547
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:ang</span>] <span class="ruby-operator">+=</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:dang</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@dt</span>
548
+
549
+ <span class="ruby-comment">## Cart forces from pole [:force][:shaft] and centifugal</span>
550
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:time</span>] = <span class="ruby-ivar">@t</span>
551
+
552
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:centrifugal</span>] = <span class="ruby-identifier">centrifugal</span> = (<span class="ruby-ivar">@pole</span>[<span class="ruby-value">:basis</span>][<span class="ruby-value">:shaft</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:vel</span>].<span class="ruby-identifier">magnitude</span> <span class="ruby-operator">**</span> <span class="ruby-value">2</span>) <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:mass</span>]
553
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:shaft</span>] = <span class="ruby-identifier">shaft</span> = <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:shaft</span>] <span class="ruby-comment"># + centrifugal #FIXME cemtrifugal calculations wonky!</span>
554
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:horiz</span>] = <span class="ruby-identifier">horiz</span> = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:basis</span>][<span class="ruby-value">:horiz</span>].<span class="ruby-identifier">basis</span> <span class="ruby-identifier">shaft</span>
555
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:vert</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:basis</span>][<span class="ruby-value">:vert</span>].<span class="ruby-identifier">basis</span> <span class="ruby-identifier">shaft</span> <span class="ruby-comment"># not that we use the vert</span>
556
+
557
+ <span class="ruby-comment"># Now the horz force induces an acceleration on the cart.</span>
558
+ <span class="ruby-comment"># Any additions to the acceleration vector must be done after</span>
559
+ <span class="ruby-comment"># this point.</span>
560
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:acc</span>] = <span class="ruby-identifier">horiz</span> <span class="ruby-operator">/</span> (<span class="ruby-ivar">@cart</span>[<span class="ruby-value">:mass</span>] <span class="ruby-operator">+</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:mass</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">cos</span>(<span class="ruby-identifier">ang</span>).<span class="ruby-identifier">abs</span>)
561
+
562
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:acc</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">big_bang</span>
563
+
564
+ <span class="ruby-comment">## Cart acceleration also affects angular torque</span>
565
+ <span class="ruby-comment"># FIXME: Note that recalculations are being done here, which</span>
566
+ <span class="ruby-comment"># FIXME: are not DRY. Redo this properly later.</span>
567
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:cacc</span>] = <span class="ruby-identifier">cacc</span> = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:acc</span>] <span class="ruby-operator">*</span> <span class="ruby-value">-1.0</span>
568
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:cradial</span>] = <span class="ruby-identifier">radial</span> = <span class="ruby-identifier">iRadial</span>.<span class="ruby-identifier">basis</span>(<span class="ruby-identifier">cacc</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:mass</span>])
569
+ <span class="ruby-comment"># the magnitude of the radial vector goes to the torque on</span>
570
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:force</span>][<span class="ruby-value">:ctorque</span>] = <span class="ruby-identifier">torque</span> = <span class="ruby-identifier">r</span>.<span class="ruby-identifier">cross_product</span>(<span class="ruby-identifier">radial</span>)
571
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:calpha</span>] = <span class="ruby-identifier">alpha</span> = <span class="ruby-identifier">torque</span> <span class="ruby-operator">/</span> (<span class="ruby-ivar">@pole</span>[<span class="ruby-value">:mass</span>] <span class="ruby-operator">*</span> (<span class="ruby-ivar">@pole</span>[<span class="ruby-value">:length</span>] <span class="ruby-operator">**</span> <span class="ruby-value">2.0</span>))
572
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:cddang</span>] = <span class="ruby-operator">-</span><span class="ruby-identifier">alpha</span>[<span class="ruby-constant">Z</span>] <span class="ruby-operator">/</span> <span class="ruby-constant">TORAD</span> <span class="ruby-comment"># the pseudo vector component Z is the signed magnitude</span>
573
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:cdang</span>] <span class="ruby-operator">+=</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:cddang</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@dt</span>
574
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:ang</span>] <span class="ruby-operator">+=</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:cdang</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@dt</span>
575
+
576
+ <span class="ruby-comment">## Actual cart physics</span>
577
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:vel</span>][<span class="ruby-constant">X</span>] <span class="ruby-operator">+=</span> <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:acc</span>][<span class="ruby-constant">X</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@dt</span>
578
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:pos</span>][<span class="ruby-constant">X</span>] <span class="ruby-operator">+=</span> <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:vel</span>][<span class="ruby-constant">X</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@dt</span>
579
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:x</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:pos</span>][<span class="ruby-constant">X</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@pix_meters</span>
580
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:y</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:pos</span>][<span class="ruby-constant">Y</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@pix_meters</span>
581
+
582
+ <span class="ruby-comment">#puts &#39;=&#39; * 80</span>
583
+ <span class="ruby-comment">#pp({pole: @pole, cart: @cart})</span>
584
+
585
+ <span class="ruby-comment"># wheels physics -- angular velocity of each wheel based</span>
586
+ <span class="ruby-comment"># on the linear velocity of the cart.</span>
587
+ <span class="ruby-ivar">@wheels</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">w</span><span class="ruby-operator">|</span>
588
+ <span class="ruby-identifier">w</span>[<span class="ruby-value">:dang</span>] = <span class="ruby-value">360.0</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:vel</span>][<span class="ruby-constant">X</span>] <span class="ruby-operator">/</span> <span class="ruby-identifier">w</span>[<span class="ruby-value">:circumference</span>]
589
+ <span class="ruby-identifier">w</span>[<span class="ruby-value">:ang</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">w</span>[<span class="ruby-value">:dang</span>] <span class="ruby-operator">*</span> <span class="ruby-ivar">@dt</span>
590
+ <span class="ruby-keyword">end</span>
591
+
592
+ <span class="ruby-comment"># model update</span>
593
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">update_cart</span>
594
+ <span class="ruby-keyword">end</span></pre>
595
+ </div>
596
+
597
+ </div>
598
+
599
+
600
+
601
+
602
+ </div>
603
+
604
+
605
+ <div id="method-i-update_cart" class="method-detail ">
606
+
607
+ <div class="method-heading">
608
+ <span class="method-name">update_cart</span><span
609
+ class="method-args">()</span>
610
+
611
+ <span class="method-click-advice">click to toggle source</span>
612
+
613
+ </div>
614
+
615
+
616
+ <div class="method-description">
617
+
618
+ <p>update the positions of all the compnents of the cart in terms of the
619
+ relative positional relationships</p>
620
+
621
+
622
+
623
+
624
+ <div class="method-source-code" id="update_cart-source">
625
+ <pre><span class="ruby-comment"># File neater/rnlib/inverted_pendulum.rb, line 306</span>
626
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">update_cart</span>
627
+ <span class="ruby-comment"># center of cart is taken as (x, y), actual is (_x, _y)</span>
628
+ <span class="ruby-identifier">pw</span> = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">width</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:scale</span>]
629
+ <span class="ruby-identifier">ph</span> = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">height</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:scale</span>]
630
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:_x</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:x</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">pw</span> <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span>
631
+ <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:_y</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:y</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">ph</span> <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span>
632
+
633
+ <span class="ruby-comment"># Wheels in their respective places</span>
634
+ <span class="ruby-ivar">@wheels</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">wl</span><span class="ruby-operator">|</span>
635
+ <span class="ruby-comment">#ww = wl[:image].width * wl[:scale]</span>
636
+ <span class="ruby-comment">#wh = wl[:image].height * wl[:scale]</span>
637
+ <span class="ruby-identifier">wl</span>[<span class="ruby-value">:_x</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:x</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">wl</span>[<span class="ruby-value">:xoff</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">pw</span> <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span>
638
+ <span class="ruby-identifier">wl</span>[<span class="ruby-value">:_y</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:y</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">wl</span>[<span class="ruby-value">:yoff</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">ph</span> <span class="ruby-operator">/</span> <span class="ruby-value">2.0</span>
639
+ <span class="ruby-keyword">end</span>
640
+
641
+ <span class="ruby-comment"># Pendulum</span>
642
+ <span class="ruby-identifier">polew</span> = <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">width</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:scale</span>]
643
+ <span class="ruby-identifier">poleh</span> = <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:image</span>].<span class="ruby-identifier">height</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:scale</span>]
644
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:_x</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:x</span>]
645
+ <span class="ruby-ivar">@pole</span>[<span class="ruby-value">:_y</span>] = <span class="ruby-ivar">@cart</span>[<span class="ruby-value">:y</span>]
646
+ <span class="ruby-keyword">end</span></pre>
647
+ </div>
648
+
649
+ </div>
650
+
651
+
652
+
653
+
654
+ </div>
655
+
656
+
657
+ </section>
658
+
659
+ </section>
660
+ </main>
661
+
662
+
663
+ <footer id="validator-badges" role="contentinfo">
664
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
665
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.1.
666
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
667
+ </footer>
668
+