jsxgraph 1.10.0 → 1.10.1

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 (239) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/distrib/docs/files.html +2 -61
  3. package/distrib/docs/index.html +2 -58
  4. package/distrib/docs/static/jsxgraphcore.js +2 -2
  5. package/distrib/docs/symbols/Angle.html +2 -18
  6. package/distrib/docs/symbols/Arc.html +2 -18
  7. package/distrib/docs/symbols/Arrow.html +2 -18
  8. package/distrib/docs/symbols/Arrowparallel.html +2 -18
  9. package/distrib/docs/symbols/Axes3D.html +2 -18
  10. package/distrib/docs/symbols/Axis.html +2 -18
  11. package/distrib/docs/symbols/Axis3D.html +2 -18
  12. package/distrib/docs/symbols/Bisector.html +2 -18
  13. package/distrib/docs/symbols/Bisectorlines.html +2 -18
  14. package/distrib/docs/symbols/Boxplot.html +2 -18
  15. package/distrib/docs/symbols/Button.html +2 -18
  16. package/distrib/docs/symbols/Cardinalspline.html +2 -18
  17. package/distrib/docs/symbols/Chart.html +2 -18
  18. package/distrib/docs/symbols/Checkbox.html +2 -18
  19. package/distrib/docs/symbols/Circle.html +2 -18
  20. package/distrib/docs/symbols/Circle3D.html +2 -18
  21. package/distrib/docs/symbols/Circumcenter.html +2 -18
  22. package/distrib/docs/symbols/Circumcircle.html +2 -18
  23. package/distrib/docs/symbols/CircumcircleArc.html +2 -18
  24. package/distrib/docs/symbols/CircumcircleSector.html +2 -18
  25. package/distrib/docs/symbols/Comb.html +2 -18
  26. package/distrib/docs/symbols/Conic.html +2 -18
  27. package/distrib/docs/symbols/Curve.html +2 -18
  28. package/distrib/docs/symbols/Curve3D.html +2 -18
  29. package/distrib/docs/symbols/CurveDifference.html +2 -18
  30. package/distrib/docs/symbols/CurveIntersection.html +2 -18
  31. package/distrib/docs/symbols/CurveUnion.html +2 -18
  32. package/distrib/docs/symbols/Derivative.html +2 -18
  33. package/distrib/docs/symbols/Ellipse.html +2 -18
  34. package/distrib/docs/symbols/ForeignObject.html +2 -18
  35. package/distrib/docs/symbols/Functiongraph.html +2 -18
  36. package/distrib/docs/symbols/Functiongraph3D.html +2 -18
  37. package/distrib/docs/symbols/Glider.html +2 -18
  38. package/distrib/docs/symbols/Grid.html +2 -18
  39. package/distrib/docs/symbols/Group.html +2 -18
  40. package/distrib/docs/symbols/Hatch.html +2 -18
  41. package/distrib/docs/symbols/Hyperbola.html +2 -18
  42. package/distrib/docs/symbols/Image.html +2 -18
  43. package/distrib/docs/symbols/ImplicitCurve.html +2 -18
  44. package/distrib/docs/symbols/Incenter.html +2 -18
  45. package/distrib/docs/symbols/Incircle.html +2 -18
  46. package/distrib/docs/symbols/Inequality.html +2 -18
  47. package/distrib/docs/symbols/Input.html +2 -18
  48. package/distrib/docs/symbols/Integral.html +2 -18
  49. package/distrib/docs/symbols/Intersection.html +2 -18
  50. package/distrib/docs/symbols/IntersectionCircle3D.html +2 -18
  51. package/distrib/docs/symbols/IntersectionLine3D.html +2 -18
  52. package/distrib/docs/symbols/JXG.AbstractRenderer.html +2 -18
  53. package/distrib/docs/symbols/JXG.Board.html +4 -20
  54. package/distrib/docs/symbols/JXG.Board.infobox.html +2 -18
  55. package/distrib/docs/symbols/JXG.C.html +2 -18
  56. package/distrib/docs/symbols/JXG.CA.html +2 -18
  57. package/distrib/docs/symbols/JXG.CanvasRenderer.html +2 -18
  58. package/distrib/docs/symbols/JXG.Chart.html +2 -18
  59. package/distrib/docs/symbols/JXG.Circle.html +2 -18
  60. package/distrib/docs/symbols/JXG.Circle3D.html +2 -18
  61. package/distrib/docs/symbols/JXG.Complex.html +2 -18
  62. package/distrib/docs/symbols/JXG.Composition.html +2 -18
  63. package/distrib/docs/symbols/JXG.Coords.html +2 -18
  64. package/distrib/docs/symbols/JXG.CoordsElement.html +98 -22
  65. package/distrib/docs/symbols/JXG.Curve.html +2 -18
  66. package/distrib/docs/symbols/JXG.Curve3D.html +2 -18
  67. package/distrib/docs/symbols/JXG.Dump.html +2 -18
  68. package/distrib/docs/symbols/JXG.EventEmitter.html +2 -18
  69. package/distrib/docs/symbols/JXG.Expect.html +2 -18
  70. package/distrib/docs/symbols/JXG.ForeignObject.html +2 -18
  71. package/distrib/docs/symbols/JXG.GeometryElement.html +2 -18
  72. package/distrib/docs/symbols/JXG.GeometryElement3D.html +2 -18
  73. package/distrib/docs/symbols/JXG.GeonextParser.html +2 -18
  74. package/distrib/docs/symbols/JXG.Group.html +2 -18
  75. package/distrib/docs/symbols/JXG.Image.html +2 -18
  76. package/distrib/docs/symbols/JXG.JSXGraph.html +2 -18
  77. package/distrib/docs/symbols/JXG.JessieCode.html +2 -18
  78. package/distrib/docs/symbols/JXG.Legend.html +2 -18
  79. package/distrib/docs/symbols/JXG.Line.html +2 -18
  80. package/distrib/docs/symbols/JXG.Line3D.html +2 -18
  81. package/distrib/docs/symbols/JXG.Math.BoxQuadtree.html +2 -18
  82. package/distrib/docs/symbols/JXG.Math.Clip.html +2 -18
  83. package/distrib/docs/symbols/JXG.Math.Extrapolate.html +2 -18
  84. package/distrib/docs/symbols/JXG.Math.Geometry.html +2 -18
  85. package/distrib/docs/symbols/JXG.Math.ImplicitPlot.html +2 -18
  86. package/distrib/docs/symbols/JXG.Math.IntervalArithmetic.html +2 -18
  87. package/distrib/docs/symbols/JXG.Math.Metapost.html +2 -18
  88. package/distrib/docs/symbols/JXG.Math.Nlp.html +2 -18
  89. package/distrib/docs/symbols/JXG.Math.Numerics.html +2 -18
  90. package/distrib/docs/symbols/JXG.Math.Plot.html +2 -18
  91. package/distrib/docs/symbols/JXG.Math.Poly.Monomial.html +2 -18
  92. package/distrib/docs/symbols/JXG.Math.Poly.Polynomial.html +2 -18
  93. package/distrib/docs/symbols/JXG.Math.Poly.Ring.html +2 -18
  94. package/distrib/docs/symbols/JXG.Math.Poly.html +2 -18
  95. package/distrib/docs/symbols/JXG.Math.ProbFuncs.html +2 -18
  96. package/distrib/docs/symbols/JXG.Math.Quadtree.html +2 -18
  97. package/distrib/docs/symbols/JXG.Math.Statistics.html +22 -34
  98. package/distrib/docs/symbols/JXG.Math.html +2 -18
  99. package/distrib/docs/symbols/JXG.NoRenderer.html +2 -18
  100. package/distrib/docs/symbols/JXG.Options.html +2 -18
  101. package/distrib/docs/symbols/JXG.Plane3D.html +2 -18
  102. package/distrib/docs/symbols/JXG.Point.html +2 -18
  103. package/distrib/docs/symbols/JXG.Point3D.html +2 -18
  104. package/distrib/docs/symbols/JXG.Polygon.html +2 -18
  105. package/distrib/docs/symbols/JXG.Polygon3D.html +2 -18
  106. package/distrib/docs/symbols/JXG.PrefixParser.html +2 -18
  107. package/distrib/docs/symbols/JXG.SVGRenderer.html +2 -18
  108. package/distrib/docs/symbols/JXG.Sphere3D.html +2 -18
  109. package/distrib/docs/symbols/JXG.Surface3D.html +2 -18
  110. package/distrib/docs/symbols/JXG.Text.html +2 -18
  111. package/distrib/docs/symbols/JXG.Text3D.html +2 -18
  112. package/distrib/docs/symbols/JXG.Ticks.html +2 -18
  113. package/distrib/docs/symbols/JXG.Transformation.html +2 -18
  114. package/distrib/docs/symbols/JXG.Turtle.html +2 -18
  115. package/distrib/docs/symbols/JXG.Util.Base64.html +2 -18
  116. package/distrib/docs/symbols/JXG.Util.UTF8.html +2 -18
  117. package/distrib/docs/symbols/JXG.Util.Unzip.html +2 -18
  118. package/distrib/docs/symbols/JXG.Util.html +2 -18
  119. package/distrib/docs/symbols/JXG.VMLRenderer.html +2 -18
  120. package/distrib/docs/symbols/JXG.View3D.html +4 -19
  121. package/distrib/docs/symbols/JXG.XML.html +2 -18
  122. package/distrib/docs/symbols/JXG.html +2 -18
  123. package/distrib/docs/symbols/Label.html +2 -18
  124. package/distrib/docs/symbols/Legend.html +2 -18
  125. package/distrib/docs/symbols/Line.html +2 -18
  126. package/distrib/docs/symbols/Line3D.html +2 -18
  127. package/distrib/docs/symbols/MajorArc.html +2 -18
  128. package/distrib/docs/symbols/MajorSector.html +2 -18
  129. package/distrib/docs/symbols/Measurement.html +2 -18
  130. package/distrib/docs/symbols/Mesh3D.html +2 -18
  131. package/distrib/docs/symbols/Metapostspline.html +2 -18
  132. package/distrib/docs/symbols/Midpoint.html +2 -18
  133. package/distrib/docs/symbols/MinorArc.html +2 -18
  134. package/distrib/docs/symbols/MinorSector.html +2 -18
  135. package/distrib/docs/symbols/Mirrorpoint.html +2 -18
  136. package/distrib/docs/symbols/NonReflexAngle.html +2 -18
  137. package/distrib/docs/symbols/Normal.html +2 -18
  138. package/distrib/docs/symbols/Orthogonalprojection.html +2 -18
  139. package/distrib/docs/symbols/OtherIntersection.html +2 -18
  140. package/distrib/docs/symbols/Parabola.html +2 -18
  141. package/distrib/docs/symbols/Parallel.html +2 -18
  142. package/distrib/docs/symbols/Parallelogram.html +2 -18
  143. package/distrib/docs/symbols/Parallelpoint.html +2 -18
  144. package/distrib/docs/symbols/ParametricSurface3D.html +2 -18
  145. package/distrib/docs/symbols/Perpendicular.html +2 -18
  146. package/distrib/docs/symbols/PerpendicularPoint.html +2 -18
  147. package/distrib/docs/symbols/PerpendicularSegment.html +2 -18
  148. package/distrib/docs/symbols/Point.html +2 -18
  149. package/distrib/docs/symbols/Point3D.html +2 -18
  150. package/distrib/docs/symbols/PolarLine.html +2 -18
  151. package/distrib/docs/symbols/PolePoint.html +2 -18
  152. package/distrib/docs/symbols/Polygon.html +2 -18
  153. package/distrib/docs/symbols/PolygonalChain.html +2 -18
  154. package/distrib/docs/symbols/RadicalAxis.html +2 -18
  155. package/distrib/docs/symbols/Reflection.html +2 -18
  156. package/distrib/docs/symbols/ReflexAngle.html +2 -18
  157. package/distrib/docs/symbols/RegularPolygon.html +2 -18
  158. package/distrib/docs/symbols/Riemannsum.html +2 -18
  159. package/distrib/docs/symbols/Sector.html +2 -18
  160. package/distrib/docs/symbols/Segment.html +2 -18
  161. package/distrib/docs/symbols/Semicircle.html +2 -18
  162. package/distrib/docs/symbols/Slider.html +2 -18
  163. package/distrib/docs/symbols/Slopefield.html +2 -18
  164. package/distrib/docs/symbols/Slopetriangle.html +2 -18
  165. package/distrib/docs/symbols/Smartlabel.html +2 -18
  166. package/distrib/docs/symbols/Sphere3D.html +2 -18
  167. package/distrib/docs/symbols/Spline.html +2 -18
  168. package/distrib/docs/symbols/Stepfunction.html +2 -18
  169. package/distrib/docs/symbols/Tangent.html +2 -18
  170. package/distrib/docs/symbols/TangentTo.html +2 -18
  171. package/distrib/docs/symbols/Tapemeasure.html +2 -18
  172. package/distrib/docs/symbols/Text.html +12 -26
  173. package/distrib/docs/symbols/Text3D.html +2 -18
  174. package/distrib/docs/symbols/Ticks.html +2 -18
  175. package/distrib/docs/symbols/Ticks3D.html +2 -18
  176. package/distrib/docs/symbols/Tracecurve.html +2 -18
  177. package/distrib/docs/symbols/Transformation.html +2 -18
  178. package/distrib/docs/symbols/Turtle.html +2 -18
  179. package/distrib/docs/symbols/Vectorfield.html +2 -18
  180. package/distrib/docs/symbols/Vectorfield3D.html +53 -18
  181. package/distrib/docs/symbols/View3D.html +2 -18
  182. package/distrib/docs/symbols/_global_.html +2 -18
  183. package/distrib/docs/symbols/mirrorelement.html +2 -18
  184. package/distrib/docs/symbols/src/src_3d_box3d.js.html +261 -259
  185. package/distrib/docs/symbols/src/src_3d_curve3d.js.html +205 -156
  186. package/distrib/docs/symbols/src/src_3d_linspace3d.js.html +337 -327
  187. package/distrib/docs/symbols/src/src_3d_point3d.js.html +204 -187
  188. package/distrib/docs/symbols/src/src_3d_text3d.js.html +189 -177
  189. package/distrib/docs/symbols/src/src_3d_view3d.js.html +1246 -1236
  190. package/distrib/docs/symbols/src/src_base_board.js.html +2058 -2057
  191. package/distrib/docs/symbols/src/src_base_constants.js.html +1 -1
  192. package/distrib/docs/symbols/src/src_base_coordselement.js.html +383 -274
  193. package/distrib/docs/symbols/src/src_element_sector.js.html +1 -1
  194. package/distrib/docs/symbols/src/src_math_geometry.js.html +609 -604
  195. package/distrib/docs/symbols/src/src_math_statistics.js.html +418 -411
  196. package/distrib/docs/symbols/src/src_options.js.html +504 -502
  197. package/distrib/docs/symbols/src/src_options3d.js.html +952 -944
  198. package/distrib/docs.zip +0 -0
  199. package/distrib/geogebra.min.js +1 -1
  200. package/distrib/geonext.min.js +1 -1
  201. package/distrib/intergeo.min.js +1 -1
  202. package/distrib/jsxgraph.zip +0 -0
  203. package/distrib/jsxgraphcore.js +2 -2
  204. package/distrib/jsxgraphcore.mjs +2 -2
  205. package/distrib/jsxgraphcore.mjs.map +1 -1
  206. package/distrib/jsxgraphsrc.js +15405 -16038
  207. package/distrib/jsxgraphsrc.mjs +15405 -16038
  208. package/distrib/jsxgraphsrc.mjs.map +1 -1
  209. package/distrib/sketch.min.js +1 -1
  210. package/package.json +1 -1
  211. package/src/3d/box3d.js +2 -0
  212. package/src/3d/curve3d.js +53 -4
  213. package/src/3d/linspace3d.js +17 -7
  214. package/src/3d/point3d.js +20 -3
  215. package/src/3d/text3d.js +20 -8
  216. package/src/3d/view3d.js +17 -7
  217. package/src/base/board.js +1 -0
  218. package/src/base/constants.js +1 -1
  219. package/src/base/coordselement.js +119 -10
  220. package/src/element/sector.js +1 -1
  221. package/src/index.js +0 -3
  222. package/src/math/geometry.js +27 -22
  223. package/src/math/statistics.js +29 -22
  224. package/src/options.js +8 -6
  225. package/src/options3d.js +10 -2
  226. package/src/{server → unused/server}/JXGServer.py +4 -9
  227. package/src/{server → unused/server}/JXGServerModule.py +2 -2
  228. package/src/{server → unused/server}/README.md +25 -14
  229. package/src/{server → unused/server}/RStats.py +1 -1
  230. package/src/{server → unused/server}/YahooFinance.py +4 -4
  231. package/src/{server → unused/server}/fft.py +6 -6
  232. package/src/{server → unused/server}/geoloci.py +17 -17
  233. package/src/{server → unused/server}/jxggroebner.py +22 -22
  234. package/src/index2.js +0 -105
  235. /package/src/{element → unused}/locus.js +0 -0
  236. /package/src/{server → unused/server}/JXG.py +0 -0
  237. /package/src/{server → unused/server}/jxgtestplugin.py +0 -0
  238. /package/src/{server → unused/server}/server.js +0 -0
  239. /package/src/{math → unused}/symbolic.js +0 -0
@@ -3150,31 +3150,31 @@
3150
3150
  <span class='line'>3143</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">curve.visProp.curvetype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'functiongraph'</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3151
3151
  <span class='line'>3144</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3152
3152
  <span class='line'>3145</span> </span><span class="WHIT"> </span><span class="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.projectCoordsToCurve</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3153
- <span class='line'>3146</span>
3154
- <span class='line'>3147</span> </span><span class="WHIT"> </span><span class="COMM">// point.position = result[1];</span><span class="WHIT">
3155
- <span class='line'>3148</span>
3156
- <span class='line'>3149</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
3157
- <span class='line'>3150</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3158
- <span class='line'>3151</span>
3159
- <span class='line'>3152</span> </span><span class="WHIT"> </span><span class="COMM">/**
3160
- <span class='line'>3153</span> * Calculates the coordinates of the projection of a coordinates pair on a given curve. In case of
3161
- <span class='line'>3154</span> * function graphs this is the
3162
- <span class='line'>3155</span> * intersection point of the curve and the parallel to y-axis through the given point.
3163
- <span class='line'>3156</span> * @param {Number} x coordinate to project.
3164
- <span class='line'>3157</span> * @param {Number} y coordinate to project.
3165
- <span class='line'>3158</span> * @param {Number} t start value for newtons method
3166
- <span class='line'>3159</span> * @param {JXG.Curve} curve Curve on that the point is projected.
3167
- <span class='line'>3160</span> * @param {JXG.Board} [board=curve.board] Reference to a board.
3168
- <span class='line'>3161</span> * @see #projectPointToCurve
3169
- <span class='line'>3162</span> * @returns {JXG.Coords} Array containing the coordinates of the projection of the given point on the given curve and
3170
- <span class='line'>3163</span> * the position on the curve.
3171
- <span class='line'>3164</span> */</span><span class="WHIT">
3172
- <span class='line'>3165</span> </span><span class="WHIT"> </span><span class="NAME">projectCoordsToCurve</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3173
- <span class='line'>3166</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newCoords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newCoordsObj</span><span class="PUNC">,</span><span class="WHIT">
3174
- <span class='line'>3167</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mindist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="PUNC">,</span><span class="WHIT">
3175
- <span class='line'>3168</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">coords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minfunc</span><span class="PUNC">,</span><span class="WHIT">
3176
- <span class='line'>3169</span> </span><span class="WHIT"> </span><span class="NAME">t_new</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f_new</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">,</span><span class="WHIT">
3177
- <span class='line'>3170</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="PUNC">,</span><span class="WHIT">
3153
+ <span class='line'>3146</span> </span><span class="WHIT"> </span><span class="COMM">// point.position = result[1];</span><span class="WHIT">
3154
+ <span class='line'>3147</span>
3155
+ <span class='line'>3148</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
3156
+ <span class='line'>3149</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3157
+ <span class='line'>3150</span>
3158
+ <span class='line'>3151</span> </span><span class="WHIT"> </span><span class="COMM">/**
3159
+ <span class='line'>3152</span> * Calculates the coordinates of the projection of a coordinates pair on a given curve. In case of
3160
+ <span class='line'>3153</span> * function graphs this is the
3161
+ <span class='line'>3154</span> * intersection point of the curve and the parallel to y-axis through the given point.
3162
+ <span class='line'>3155</span> * @param {Number} x coordinate to project.
3163
+ <span class='line'>3156</span> * @param {Number} y coordinate to project.
3164
+ <span class='line'>3157</span> * @param {Number} t start value for newtons method
3165
+ <span class='line'>3158</span> * @param {JXG.Curve} curve Curve on that the point is projected.
3166
+ <span class='line'>3159</span> * @param {JXG.Board} [board=curve.board] Reference to a board.
3167
+ <span class='line'>3160</span> * @see #projectPointToCurve
3168
+ <span class='line'>3161</span> * @returns {JXG.Coords} Array containing the coordinates of the projection of the given point on the given curve and
3169
+ <span class='line'>3162</span> * the position on the curve.
3170
+ <span class='line'>3163</span> */</span><span class="WHIT">
3171
+ <span class='line'>3164</span> </span><span class="WHIT"> </span><span class="NAME">projectCoordsToCurve</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curve</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3172
+ <span class='line'>3165</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newCoords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newCoordsObj</span><span class="PUNC">,</span><span class="WHIT">
3173
+ <span class='line'>3166</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mindist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dist</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="PUNC">,</span><span class="WHIT">
3174
+ <span class='line'>3167</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">coords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minfunc</span><span class="PUNC">,</span><span class="WHIT">
3175
+ <span class='line'>3168</span> </span><span class="WHIT"> </span><span class="NAME">t_new</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f_new</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">,</span><span class="WHIT">
3176
+ <span class='line'>3169</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="PUNC">,</span><span class="WHIT">
3177
+ <span class='line'>3170</span> </span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minX_glob</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxX_glob</span><span class="PUNC">,</span><span class="WHIT">
3178
3178
  <span class='line'>3171</span> </span><span class="WHIT"> </span><span class="NAME">infty</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Number.POSITIVE_INFINITY</span><span class="PUNC">;</span><span class="WHIT">
3179
3179
  <span class='line'>3172</span>
3180
3180
  <span class='line'>3173</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">Type.exists</span><span class="PUNC">(</span><span class="NAME">board</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
@@ -3239,584 +3239,589 @@
3239
3239
  <span class='line'>3232</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3240
3240
  <span class='line'>3233</span> </span><span class="WHIT"> </span><span class="COMM">// 'parameter', 'polar', 'functiongraph'</span><span class="WHIT">
3241
3241
  <span class='line'>3234</span>
3242
- <span class='line'>3235</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">curve.visProp.curvetype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'functiongraph'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3243
- <span class='line'>3236</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">curve.Y</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3244
- <span class='line'>3237</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">dy</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3245
- <span class='line'>3238</span> </span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3246
- <span class='line'>3239</span> </span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3247
- <span class='line'>3240</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3248
- <span class='line'>3241</span> </span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curve.minX</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3249
- <span class='line'>3242</span> </span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curve.maxX</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3250
- <span class='line'>3243</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3251
- <span class='line'>3244</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3252
- <span class='line'>3245</span> </span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curve.minX</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3253
- <span class='line'>3246</span> </span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curve.maxX</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3254
- <span class='line'>3247</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3255
- <span class='line'>3248</span>
3256
- <span class='line'>3249</span> </span><span class="WHIT"> </span><span class="COMM">/** @ignore */</span><span class="WHIT">
3257
- <span class='line'>3250</span> </span><span class="WHIT"> </span><span class="NAME">minfunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3258
- <span class='line'>3251</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3259
- <span class='line'>3252</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">curve.minX</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">curve.maxX</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3260
- <span class='line'>3253</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">;</span><span class="WHIT">
3261
- <span class='line'>3254</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3262
- <span class='line'>3255</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">curve.X</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3263
- <span class='line'>3256</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">curve.Y</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3264
- <span class='line'>3257</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3265
- <span class='line'>3258</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3266
- <span class='line'>3259</span>
3267
- <span class='line'>3260</span> </span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3268
- <span class='line'>3261</span> </span><span class="WHIT"> </span><span class="NAME">steps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="PUNC">;</span><span class="WHIT">
3269
- <span class='line'>3262</span>
3270
- <span class='line'>3263</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="PUNC">;</span><span class="WHIT">
3271
- <span class='line'>3264</span> </span><span class="WHIT"> </span><span class="NAME">t_new</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">;</span><span class="WHIT">
3272
- <span class='line'>3265</span>
3273
- <span class='line'>3266</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3274
- <span class='line'>3267</span> </span><span class="WHIT"> </span><span class="NAME">f_new</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t_new</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3275
- <span class='line'>3268</span>
3276
- <span class='line'>3269</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f_new</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">f_old</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3277
- <span class='line'>3270</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t_new</span><span class="PUNC">;</span><span class="WHIT">
3278
- <span class='line'>3271</span> </span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f_new</span><span class="PUNC">;</span><span class="WHIT">
3279
- <span class='line'>3272</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3280
- <span class='line'>3273</span>
3281
- <span class='line'>3274</span> </span><span class="WHIT"> </span><span class="NAME">t_new</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3282
- <span class='line'>3275</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3283
- <span class='line'>3276</span>
3284
- <span class='line'>3277</span> </span><span class="WHIT"> </span><span class="COMM">// t = Numerics.root(Numerics.D(minfunc), t);</span><span class="WHIT">
3285
- <span class='line'>3278</span> </span><span class="WHIT"> </span><span class="COMM">// Ensure that minfunc is defined on the</span><span class="WHIT">
3286
- <span class='line'>3279</span> </span><span class="WHIT"> </span><span class="COMM">// enclsoing interval [t-delta1, t+delta2]</span><span class="WHIT">
3287
- <span class='line'>3280</span> </span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3288
- <span class='line'>3281</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3289
- <span class='line'>3282</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3290
- <span class='line'>3283</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3291
- <span class='line'>3284</span>
3292
- <span class='line'>3285</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3293
- <span class='line'>3286</span> </span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3294
- <span class='line'>3287</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3295
- <span class='line'>3288</span> </span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3296
- <span class='line'>3289</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3297
- <span class='line'>3290</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3298
- <span class='line'>3291</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3299
- <span class='line'>3292</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3300
- <span class='line'>3293</span> </span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3301
- <span class='line'>3294</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3302
- <span class='line'>3295</span>
3303
- <span class='line'>3296</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Numerics.fminbr</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3304
- <span class='line'>3297</span> </span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3305
- <span class='line'>3298</span> </span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="PUNC">)</span><span class="WHIT">
3306
- <span class='line'>3299</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3307
- <span class='line'>3300</span>
3308
- <span class='line'>3301</span> </span><span class="WHIT"> </span><span class="COMM">// Distinction between closed and open curves is not necessary.</span><span class="WHIT">
3309
- <span class='line'>3302</span> </span><span class="WHIT"> </span><span class="COMM">// If closed, the cyclic projection shift will work anyhow</span><span class="WHIT">
3310
- <span class='line'>3303</span> </span><span class="WHIT"> </span><span class="COMM">// if (Math.abs(curve.X(minX) - curve.X(maxX)) &lt; Mat.eps &&</span><span class="WHIT">
3311
- <span class='line'>3304</span> </span><span class="WHIT"> </span><span class="COMM">// Math.abs(curve.Y(minX) - curve.Y(maxX)) &lt; Mat.eps) {</span><span class="WHIT">
3312
- <span class='line'>3305</span> </span><span class="WHIT"> </span><span class="COMM">// // Cyclically</span><span class="WHIT">
3313
- <span class='line'>3306</span> </span><span class="WHIT"> </span><span class="COMM">// if (t &lt; minX) {console.log(t)</span><span class="WHIT">
3314
- <span class='line'>3307</span> </span><span class="WHIT"> </span><span class="COMM">// t = maxX + t - minX;</span><span class="WHIT">
3315
- <span class='line'>3308</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
3316
- <span class='line'>3309</span> </span><span class="WHIT"> </span><span class="COMM">// if (t > maxX) {</span><span class="WHIT">
3317
- <span class='line'>3310</span> </span><span class="WHIT"> </span><span class="COMM">// t = minX + t - maxX;</span><span class="WHIT">
3318
- <span class='line'>3311</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
3319
- <span class='line'>3312</span> </span><span class="WHIT"> </span><span class="COMM">// } else {</span><span class="WHIT">
3320
- <span class='line'>3313</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3321
- <span class='line'>3314</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3322
- <span class='line'>3315</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
3323
- <span class='line'>3316</span>
3324
- <span class='line'>3317</span> </span><span class="WHIT"> </span><span class="NAME">newCoordsObj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Coords</span><span class="PUNC">(</span><span class="WHIT">
3325
- <span class='line'>3318</span> </span><span class="WHIT"> </span><span class="NAME">Const.COORDS_BY_USER</span><span class="PUNC">,</span><span class="WHIT">
3326
- <span class='line'>3319</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">curve.X</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curve.Y</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3327
- <span class='line'>3320</span> </span><span class="WHIT"> </span><span class="NAME">board</span><span class="WHIT">
3328
- <span class='line'>3321</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3329
- <span class='line'>3322</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3330
- <span class='line'>3323</span>
3331
- <span class='line'>3324</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">curve.updateTransform</span><span class="PUNC">(</span><span class="NAME">newCoordsObj</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3332
- <span class='line'>3325</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3333
- <span class='line'>3326</span>
3334
- <span class='line'>3327</span> </span><span class="WHIT"> </span><span class="COMM">/**
3335
- <span class='line'>3328</span> * Calculates the coordinates of the closest orthogonal projection of a given coordinate array onto the
3336
- <span class='line'>3329</span> * border of a polygon.
3337
- <span class='line'>3330</span> * @param {Array} p Point to project.
3338
- <span class='line'>3331</span> * @param {JXG.Polygon} pol Polygon element
3339
- <span class='line'>3332</span> * @returns {Array} The coordinates of the closest projection of the given point to the border of the polygon.
3340
- <span class='line'>3333</span> */</span><span class="WHIT">
3341
- <span class='line'>3334</span> </span><span class="WHIT"> </span><span class="NAME">projectCoordsToPolygon</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pol</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3342
- <span class='line'>3335</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3343
- <span class='line'>3336</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pol.vertices.length</span><span class="PUNC">,</span><span class="WHIT">
3344
- <span class='line'>3337</span> </span><span class="WHIT"> </span><span class="NAME">d_best</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">,</span><span class="WHIT">
3345
- <span class='line'>3338</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT">
3346
- <span class='line'>3339</span> </span><span class="WHIT"> </span><span class="NAME">projection</span><span class="PUNC">,</span><span class="WHIT">
3347
- <span class='line'>3340</span> </span><span class="WHIT"> </span><span class="NAME">proj</span><span class="PUNC">,</span><span class="WHIT">
3348
- <span class='line'>3341</span> </span><span class="WHIT"> </span><span class="NAME">bestprojection</span><span class="PUNC">;</span><span class="WHIT">
3349
- <span class='line'>3342</span>
3350
- <span class='line'>3343</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3351
- <span class='line'>3344</span> </span><span class="WHIT"> </span><span class="NAME">projection</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JXG.Math.Geometry.projectCoordsToSegment</span><span class="PUNC">(</span><span class="WHIT">
3352
- <span class='line'>3345</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT">
3353
- <span class='line'>3346</span> </span><span class="WHIT"> </span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">,</span><span class="WHIT">
3354
- <span class='line'>3347</span> </span><span class="WHIT"> </span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="WHIT">
3355
- <span class='line'>3348</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3356
- <span class='line'>3349</span>
3357
- <span class='line'>3350</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3358
- <span class='line'>3351</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JXG.Math.Geometry.distance</span><span class="PUNC">(</span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3359
- <span class='line'>3352</span> </span><span class="WHIT"> </span><span class="NAME">proj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3360
- <span class='line'>3353</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3361
- <span class='line'>3354</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JXG.Math.Geometry.distance</span><span class="PUNC">(</span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3362
- <span class='line'>3355</span> </span><span class="WHIT"> </span><span class="NAME">proj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">;</span><span class="WHIT">
3363
- <span class='line'>3356</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3364
- <span class='line'>3357</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JXG.Math.Geometry.distance</span><span class="PUNC">(</span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3365
- <span class='line'>3358</span> </span><span class="WHIT"> </span><span class="NAME">proj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">;</span><span class="WHIT">
3366
- <span class='line'>3359</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3367
- <span class='line'>3360</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">d_best</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3368
- <span class='line'>3361</span> </span><span class="WHIT"> </span><span class="NAME">bestprojection</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">proj.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3369
- <span class='line'>3362</span> </span><span class="WHIT"> </span><span class="NAME">d_best</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="WHIT">
3370
- <span class='line'>3363</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3371
- <span class='line'>3364</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3372
- <span class='line'>3365</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bestprojection</span><span class="PUNC">;</span><span class="WHIT">
3373
- <span class='line'>3366</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3374
- <span class='line'>3367</span>
3375
- <span class='line'>3368</span> </span><span class="WHIT"> </span><span class="COMM">/**
3376
- <span class='line'>3369</span> * Calculates the coordinates of the projection of a given point on a given turtle. A turtle consists of
3377
- <span class='line'>3370</span> * one or more curves of curveType 'plot'. Uses {@link JXG.Math.Geometry.projectPointToCurve}.
3378
- <span class='line'>3371</span> * @param {JXG.Point} point Point to project.
3379
- <span class='line'>3372</span> * @param {JXG.Turtle} turtle on that the point is projected.
3380
- <span class='line'>3373</span> * @param {JXG.Board} [board=point.board] Reference to a board.
3381
- <span class='line'>3374</span> * @returns {Array} [JXG.Coords, position] Array containing the coordinates of the projection of the given point on the turtle and
3382
- <span class='line'>3375</span> * the position on the turtle.
3383
- <span class='line'>3376</span> */</span><span class="WHIT">
3384
- <span class='line'>3377</span> </span><span class="WHIT"> </span><span class="NAME">projectPointToTurtle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">turtle</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3385
- <span class='line'>3378</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newCoords</span><span class="PUNC">,</span><span class="WHIT">
3386
- <span class='line'>3379</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT">
3387
- <span class='line'>3380</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT">
3388
- <span class='line'>3381</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT">
3389
- <span class='line'>3382</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3390
- <span class='line'>3383</span> </span><span class="WHIT"> </span><span class="NAME">dist</span><span class="PUNC">,</span><span class="WHIT">
3391
- <span class='line'>3384</span> </span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">,</span><span class="WHIT">
3392
- <span class='line'>3385</span> </span><span class="WHIT"> </span><span class="NAME">minEl</span><span class="PUNC">,</span><span class="WHIT">
3393
- <span class='line'>3386</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">,</span><span class="WHIT">
3394
- <span class='line'>3387</span> </span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="PUNC">,</span><span class="WHIT">
3395
- <span class='line'>3388</span> </span><span class="WHIT"> </span><span class="NAME">np</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3396
- <span class='line'>3389</span> </span><span class="WHIT"> </span><span class="NAME">npmin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3397
- <span class='line'>3390</span> </span><span class="WHIT"> </span><span class="NAME">mindist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Number.POSITIVE_INFINITY</span><span class="PUNC">,</span><span class="WHIT">
3398
- <span class='line'>3391</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">turtle.objects.length</span><span class="PUNC">;</span><span class="WHIT">
3399
- <span class='line'>3392</span>
3400
- <span class='line'>3393</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">Type.exists</span><span class="PUNC">(</span><span class="NAME">board</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3401
- <span class='line'>3394</span> </span><span class="WHIT"> </span><span class="NAME">board</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.board</span><span class="PUNC">;</span><span class="WHIT">
3402
- <span class='line'>3395</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3403
- <span class='line'>3396</span>
3404
- <span class='line'>3397</span> </span><span class="WHIT"> </span><span class="COMM">// run through all curves of this turtle</span><span class="WHIT">
3405
- <span class='line'>3398</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3406
- <span class='line'>3399</span> </span><span class="WHIT"> </span><span class="NAME">el</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">turtle.objects</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3407
- <span class='line'>3400</span>
3408
- <span class='line'>3401</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">el.elementClass</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Const.OBJECT_CLASS_CURVE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3409
- <span class='line'>3402</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.projectPointToCurve</span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3410
- <span class='line'>3403</span> </span><span class="WHIT"> </span><span class="NAME">newCoords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3411
- <span class='line'>3404</span> </span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3412
- <span class='line'>3405</span> </span><span class="WHIT"> </span><span class="NAME">dist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.distance</span><span class="PUNC">(</span><span class="NAME">newCoords.usrCoords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point.coords.usrCoords</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3413
- <span class='line'>3406</span>
3414
- <span class='line'>3407</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dist</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">mindist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3415
- <span class='line'>3408</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newCoords.usrCoords</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3416
- <span class='line'>3409</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newCoords.usrCoords</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3417
- <span class='line'>3410</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="PUNC">;</span><span class="WHIT">
3418
- <span class='line'>3411</span> </span><span class="WHIT"> </span><span class="NAME">mindist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dist</span><span class="PUNC">;</span><span class="WHIT">
3419
- <span class='line'>3412</span> </span><span class="WHIT"> </span><span class="NAME">minEl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">;</span><span class="WHIT">
3420
- <span class='line'>3413</span> </span><span class="WHIT"> </span><span class="NAME">npmin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">np</span><span class="PUNC">;</span><span class="WHIT">
3421
- <span class='line'>3414</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3422
- <span class='line'>3415</span> </span><span class="WHIT"> </span><span class="NAME">np</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">el.numberPoints</span><span class="PUNC">;</span><span class="WHIT">
3423
- <span class='line'>3416</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3424
- <span class='line'>3417</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3425
- <span class='line'>3418</span>
3426
- <span class='line'>3419</span> </span><span class="WHIT"> </span><span class="NAME">newCoords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Coords</span><span class="PUNC">(</span><span class="NAME">Const.COORDS_BY_USER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3427
- <span class='line'>3420</span> </span><span class="WHIT"> </span><span class="COMM">// point.position = t + npmin;</span><span class="WHIT">
3428
- <span class='line'>3421</span> </span><span class="WHIT"> </span><span class="COMM">// return minEl.updateTransform(newCoords);</span><span class="WHIT">
3429
- <span class='line'>3422</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">minEl.updateTransform</span><span class="PUNC">(</span><span class="NAME">newCoords</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">npmin</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3430
- <span class='line'>3423</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3431
- <span class='line'>3424</span>
3432
- <span class='line'>3425</span> </span><span class="WHIT"> </span><span class="COMM">/**
3433
- <span class='line'>3426</span> * Trivial projection of a point to another point.
3434
- <span class='line'>3427</span> * @param {JXG.Point} point Point to project (not used).
3435
- <span class='line'>3428</span> * @param {JXG.Point} dest Point on that the point is projected.
3436
- <span class='line'>3429</span> * @returns {JXG.Coords} The coordinates of the projection of the given point on the given circle.
3437
- <span class='line'>3430</span> */</span><span class="WHIT">
3438
- <span class='line'>3431</span> </span><span class="WHIT"> </span><span class="NAME">projectPointToPoint</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dest</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3439
- <span class='line'>3432</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dest.coords</span><span class="PUNC">;</span><span class="WHIT">
3440
- <span class='line'>3433</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3441
- <span class='line'>3434</span>
3442
- <span class='line'>3435</span> </span><span class="WHIT"> </span><span class="COMM">/**
3443
- <span class='line'>3436</span> *
3444
- <span class='line'>3437</span> * @param {JXG.Point|JXG.Coords} point
3445
- <span class='line'>3438</span> * @param {JXG.Board} [board]
3446
- <span class='line'>3439</span> */</span><span class="WHIT">
3447
- <span class='line'>3440</span> </span><span class="WHIT"> </span><span class="NAME">projectPointToBoard</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3448
- <span class='line'>3441</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3449
- <span class='line'>3442</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">,</span><span class="WHIT">
3450
- <span class='line'>3443</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT">
3451
- <span class='line'>3444</span> </span><span class="WHIT"> </span><span class="NAME">brd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">board</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">point.board</span><span class="PUNC">,</span><span class="WHIT">
3452
- <span class='line'>3445</span> </span><span class="WHIT"> </span><span class="COMM">// comparison factor, point coord idx, bbox idx, 1st bbox corner x & y idx, 2nd bbox corner x & y idx</span><span class="WHIT">
3453
- <span class='line'>3446</span> </span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3454
- <span class='line'>3447</span> </span><span class="WHIT"> </span><span class="COMM">// left</span><span class="WHIT">
3455
- <span class='line'>3448</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3456
- <span class='line'>3449</span> </span><span class="WHIT"> </span><span class="COMM">// top</span><span class="WHIT">
3457
- <span class='line'>3450</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3458
- <span class='line'>3451</span> </span><span class="WHIT"> </span><span class="COMM">// right</span><span class="WHIT">
3459
- <span class='line'>3452</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3460
- <span class='line'>3453</span> </span><span class="WHIT"> </span><span class="COMM">// bottom</span><span class="WHIT">
3461
- <span class='line'>3454</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT">
3462
- <span class='line'>3455</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3463
- <span class='line'>3456</span> </span><span class="WHIT"> </span><span class="NAME">coords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.coords</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT">
3464
- <span class='line'>3457</span> </span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">brd.getBoundingBox</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3465
- <span class='line'>3458</span>
3466
- <span class='line'>3459</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3467
- <span class='line'>3460</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3468
- <span class='line'>3461</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">coords.usrCoords</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3469
- <span class='line'>3462</span> </span><span class="WHIT"> </span><span class="COMM">// define border</span><span class="WHIT">
3470
- <span class='line'>3463</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="WHIT">
3471
- <span class='line'>3464</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">4</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3472
- <span class='line'>3465</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">5</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">6</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT">
3473
- <span class='line'>3466</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3474
- <span class='line'>3467</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3475
- <span class='line'>3468</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.normalize</span><span class="PUNC">(</span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3476
- <span class='line'>3469</span>
3477
- <span class='line'>3470</span> </span><span class="WHIT"> </span><span class="COMM">// project point</span><span class="WHIT">
3478
- <span class='line'>3471</span> </span><span class="WHIT"> </span><span class="NAME">coords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.projectPointToLine</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">coords</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">coords</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">stdform</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">brd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3479
- <span class='line'>3472</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3480
- <span class='line'>3473</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3242
+ <span class='line'>3235</span> </span><span class="WHIT"> </span><span class="NAME">minX_glob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curve.minX</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3243
+ <span class='line'>3236</span> </span><span class="WHIT"> </span><span class="NAME">maxX_glob</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curve.maxX</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3244
+ <span class='line'>3237</span> </span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minX_glob</span><span class="PUNC">;</span><span class="WHIT">
3245
+ <span class='line'>3238</span> </span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">maxX_glob</span><span class="PUNC">;</span><span class="WHIT">
3246
+ <span class='line'>3239</span>
3247
+ <span class='line'>3240</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">curve.visProp.curvetype</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'functiongraph'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3248
+ <span class='line'>3241</span> </span><span class="WHIT"> </span><span class="COMM">// Restrict the possible position of t</span><span class="WHIT">
3249
+ <span class='line'>3242</span> </span><span class="WHIT"> </span><span class="COMM">// to the projection of a circle to the x-axis (= t-axis)</span><span class="WHIT">
3250
+ <span class='line'>3243</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">curve.Y</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3251
+ <span class='line'>3244</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">dy</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3252
+ <span class='line'>3245</span> </span><span class="WHIT"> </span><span class="NAME">minX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3253
+ <span class='line'>3246</span> </span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3254
+ <span class='line'>3247</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3255
+ <span class='line'>3248</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3256
+ <span class='line'>3249</span>
3257
+ <span class='line'>3250</span> </span><span class="WHIT"> </span><span class="COMM">/**
3258
+ <span class='line'>3251</span> * @ignore
3259
+ <span class='line'>3252</span> * Find t such that the Euclidean distance between
3260
+ <span class='line'>3253</span> * [x, y] and [curve.X(t), curve.Y(t)]
3261
+ <span class='line'>3254</span> * is minimized.
3262
+ <span class='line'>3255</span> */</span><span class="WHIT">
3263
+ <span class='line'>3256</span> </span><span class="WHIT"> </span><span class="NAME">minfunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3264
+ <span class='line'>3257</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3265
+ <span class='line'>3258</span>
3266
+ <span class='line'>3259</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">minX_glob</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">curve.maxX_glob</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3267
+ <span class='line'>3260</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">;</span><span class="WHIT">
3268
+ <span class='line'>3261</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3269
+ <span class='line'>3262</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">curve.X</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3270
+ <span class='line'>3263</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">curve.Y</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3271
+ <span class='line'>3264</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3272
+ <span class='line'>3265</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3273
+ <span class='line'>3266</span>
3274
+ <span class='line'>3267</span> </span><span class="WHIT"> </span><span class="COMM">// Search t which minimizes minfunc(t)</span><span class="WHIT">
3275
+ <span class='line'>3268</span> </span><span class="WHIT"> </span><span class="COMM">// in discrete steps</span><span class="WHIT">
3276
+ <span class='line'>3269</span> </span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3277
+ <span class='line'>3270</span> </span><span class="WHIT"> </span><span class="NAME">steps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">50</span><span class="PUNC">;</span><span class="WHIT">
3278
+ <span class='line'>3271</span> </span><span class="WHIT"> </span><span class="NAME">delta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">maxX</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="PUNC">;</span><span class="WHIT">
3279
+ <span class='line'>3272</span> </span><span class="WHIT"> </span><span class="NAME">t_new</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">;</span><span class="WHIT">
3280
+ <span class='line'>3273</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">steps</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3281
+ <span class='line'>3274</span> </span><span class="WHIT"> </span><span class="NAME">f_new</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t_new</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3282
+ <span class='line'>3275</span>
3283
+ <span class='line'>3276</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">f_new</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">f_old</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3284
+ <span class='line'>3277</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t_new</span><span class="PUNC">;</span><span class="WHIT">
3285
+ <span class='line'>3278</span> </span><span class="WHIT"> </span><span class="NAME">f_old</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">f_new</span><span class="PUNC">;</span><span class="WHIT">
3286
+ <span class='line'>3279</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3287
+ <span class='line'>3280</span>
3288
+ <span class='line'>3281</span> </span><span class="WHIT"> </span><span class="NAME">t_new</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3289
+ <span class='line'>3282</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3290
+ <span class='line'>3283</span>
3291
+ <span class='line'>3284</span> </span><span class="WHIT"> </span><span class="COMM">// t = Numerics.root(Numerics.D(minfunc), t);</span><span class="WHIT">
3292
+ <span class='line'>3285</span>
3293
+ <span class='line'>3286</span> </span><span class="WHIT"> </span><span class="COMM">// Ensure that minfunc is defined on the</span><span class="WHIT">
3294
+ <span class='line'>3287</span> </span><span class="WHIT"> </span><span class="COMM">// enclosing interval [t-delta1, t+delta2]</span><span class="WHIT">
3295
+ <span class='line'>3288</span> </span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3296
+ <span class='line'>3289</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3297
+ <span class='line'>3290</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3298
+ <span class='line'>3291</span> </span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3299
+ <span class='line'>3292</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3300
+ <span class='line'>3293</span> </span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">delta</span><span class="PUNC">;</span><span class="WHIT">
3301
+ <span class='line'>3294</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3302
+ <span class='line'>3295</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3303
+ <span class='line'>3296</span> </span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3304
+ <span class='line'>3297</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3305
+ <span class='line'>3298</span>
3306
+ <span class='line'>3299</span> </span><span class="WHIT"> </span><span class="COMM">// Finally, apply mathemetical optimization in the determined interval</span><span class="WHIT">
3307
+ <span class='line'>3300</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Numerics.fminbr</span><span class="PUNC">(</span><span class="NAME">minfunc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3308
+ <span class='line'>3301</span> </span><span class="WHIT"> </span><span class="NAME">Math.max</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">delta1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">minX</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3309
+ <span class='line'>3302</span> </span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">delta2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxX</span><span class="PUNC">)</span><span class="WHIT">
3310
+ <span class='line'>3303</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3311
+ <span class='line'>3304</span>
3312
+ <span class='line'>3305</span> </span><span class="WHIT"> </span><span class="COMM">// Distinction between closed and open curves is not necessary.</span><span class="WHIT">
3313
+ <span class='line'>3306</span> </span><span class="WHIT"> </span><span class="COMM">// If closed, the cyclic projection shift will work anyhow</span><span class="WHIT">
3314
+ <span class='line'>3307</span> </span><span class="WHIT"> </span><span class="COMM">// if (Math.abs(curve.X(minX) - curve.X(maxX)) &lt; Mat.eps &&</span><span class="WHIT">
3315
+ <span class='line'>3308</span> </span><span class="WHIT"> </span><span class="COMM">// Math.abs(curve.Y(minX) - curve.Y(maxX)) &lt; Mat.eps) {</span><span class="WHIT">
3316
+ <span class='line'>3309</span> </span><span class="WHIT"> </span><span class="COMM">// // Cyclically</span><span class="WHIT">
3317
+ <span class='line'>3310</span> </span><span class="WHIT"> </span><span class="COMM">// if (t &lt; minX) {console.log(t)</span><span class="WHIT">
3318
+ <span class='line'>3311</span> </span><span class="WHIT"> </span><span class="COMM">// t = maxX + t - minX;</span><span class="WHIT">
3319
+ <span class='line'>3312</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
3320
+ <span class='line'>3313</span> </span><span class="WHIT"> </span><span class="COMM">// if (t > maxX) {</span><span class="WHIT">
3321
+ <span class='line'>3314</span> </span><span class="WHIT"> </span><span class="COMM">// t = minX + t - maxX;</span><span class="WHIT">
3322
+ <span class='line'>3315</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
3323
+ <span class='line'>3316</span> </span><span class="WHIT"> </span><span class="COMM">// } else {</span><span class="WHIT">
3324
+ <span class='line'>3317</span>
3325
+ <span class='line'>3318</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">minX_glob</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">minX_glob</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3326
+ <span class='line'>3319</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">maxX_glob</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">maxX_glob</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
3327
+ <span class='line'>3320</span> </span><span class="WHIT"> </span><span class="COMM">// }</span><span class="WHIT">
3328
+ <span class='line'>3321</span>
3329
+ <span class='line'>3322</span> </span><span class="WHIT"> </span><span class="NAME">newCoordsObj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Coords</span><span class="PUNC">(</span><span class="WHIT">
3330
+ <span class='line'>3323</span> </span><span class="WHIT"> </span><span class="NAME">Const.COORDS_BY_USER</span><span class="PUNC">,</span><span class="WHIT">
3331
+ <span class='line'>3324</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">curve.X</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">curve.Y</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3332
+ <span class='line'>3325</span> </span><span class="WHIT"> </span><span class="NAME">board</span><span class="WHIT">
3333
+ <span class='line'>3326</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3334
+ <span class='line'>3327</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3335
+ <span class='line'>3328</span>
3336
+ <span class='line'>3329</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">curve.updateTransform</span><span class="PUNC">(</span><span class="NAME">newCoordsObj</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3337
+ <span class='line'>3330</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3338
+ <span class='line'>3331</span>
3339
+ <span class='line'>3332</span> </span><span class="WHIT"> </span><span class="COMM">/**
3340
+ <span class='line'>3333</span> * Calculates the coordinates of the closest orthogonal projection of a given coordinate array onto the
3341
+ <span class='line'>3334</span> * border of a polygon.
3342
+ <span class='line'>3335</span> * @param {Array} p Point to project.
3343
+ <span class='line'>3336</span> * @param {JXG.Polygon} pol Polygon element
3344
+ <span class='line'>3337</span> * @returns {Array} The coordinates of the closest projection of the given point to the border of the polygon.
3345
+ <span class='line'>3338</span> */</span><span class="WHIT">
3346
+ <span class='line'>3339</span> </span><span class="WHIT"> </span><span class="NAME">projectCoordsToPolygon</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pol</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3347
+ <span class='line'>3340</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3348
+ <span class='line'>3341</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pol.vertices.length</span><span class="PUNC">,</span><span class="WHIT">
3349
+ <span class='line'>3342</span> </span><span class="WHIT"> </span><span class="NAME">d_best</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">,</span><span class="WHIT">
3350
+ <span class='line'>3343</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">,</span><span class="WHIT">
3351
+ <span class='line'>3344</span> </span><span class="WHIT"> </span><span class="NAME">projection</span><span class="PUNC">,</span><span class="WHIT">
3352
+ <span class='line'>3345</span> </span><span class="WHIT"> </span><span class="NAME">proj</span><span class="PUNC">,</span><span class="WHIT">
3353
+ <span class='line'>3346</span> </span><span class="WHIT"> </span><span class="NAME">bestprojection</span><span class="PUNC">;</span><span class="WHIT">
3354
+ <span class='line'>3347</span>
3355
+ <span class='line'>3348</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3356
+ <span class='line'>3349</span> </span><span class="WHIT"> </span><span class="NAME">projection</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JXG.Math.Geometry.projectCoordsToSegment</span><span class="PUNC">(</span><span class="WHIT">
3357
+ <span class='line'>3350</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT">
3358
+ <span class='line'>3351</span> </span><span class="WHIT"> </span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">,</span><span class="WHIT">
3359
+ <span class='line'>3352</span> </span><span class="WHIT"> </span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="WHIT">
3360
+ <span class='line'>3353</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3361
+ <span class='line'>3354</span>
3362
+ <span class='line'>3355</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3363
+ <span class='line'>3356</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JXG.Math.Geometry.distance</span><span class="PUNC">(</span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3364
+ <span class='line'>3357</span> </span><span class="WHIT"> </span><span class="NAME">proj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3365
+ <span class='line'>3358</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">projection</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3366
+ <span class='line'>3359</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JXG.Math.Geometry.distance</span><span class="PUNC">(</span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3367
+ <span class='line'>3360</span> </span><span class="WHIT"> </span><span class="NAME">proj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">;</span><span class="WHIT">
3368
+ <span class='line'>3361</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3369
+ <span class='line'>3362</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">JXG.Math.Geometry.distance</span><span class="PUNC">(</span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3370
+ <span class='line'>3363</span> </span><span class="WHIT"> </span><span class="NAME">proj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pol.vertices</span><span class="PUNC">[</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">coords.usrCoords</span><span class="PUNC">;</span><span class="WHIT">
3371
+ <span class='line'>3364</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3372
+ <span class='line'>3365</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">d_best</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3373
+ <span class='line'>3366</span> </span><span class="WHIT"> </span><span class="NAME">bestprojection</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">proj.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3374
+ <span class='line'>3367</span> </span><span class="WHIT"> </span><span class="NAME">d_best</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">;</span><span class="WHIT">
3375
+ <span class='line'>3368</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3376
+ <span class='line'>3369</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3377
+ <span class='line'>3370</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bestprojection</span><span class="PUNC">;</span><span class="WHIT">
3378
+ <span class='line'>3371</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3379
+ <span class='line'>3372</span>
3380
+ <span class='line'>3373</span> </span><span class="WHIT"> </span><span class="COMM">/**
3381
+ <span class='line'>3374</span> * Calculates the coordinates of the projection of a given point on a given turtle. A turtle consists of
3382
+ <span class='line'>3375</span> * one or more curves of curveType 'plot'. Uses {@link JXG.Math.Geometry.projectPointToCurve}.
3383
+ <span class='line'>3376</span> * @param {JXG.Point} point Point to project.
3384
+ <span class='line'>3377</span> * @param {JXG.Turtle} turtle on that the point is projected.
3385
+ <span class='line'>3378</span> * @param {JXG.Board} [board=point.board] Reference to a board.
3386
+ <span class='line'>3379</span> * @returns {Array} [JXG.Coords, position] Array containing the coordinates of the projection of the given point on the turtle and
3387
+ <span class='line'>3380</span> * the position on the turtle.
3388
+ <span class='line'>3381</span> */</span><span class="WHIT">
3389
+ <span class='line'>3382</span> </span><span class="WHIT"> </span><span class="NAME">projectPointToTurtle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">turtle</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3390
+ <span class='line'>3383</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newCoords</span><span class="PUNC">,</span><span class="WHIT">
3391
+ <span class='line'>3384</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT">
3392
+ <span class='line'>3385</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT">
3393
+ <span class='line'>3386</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT">
3394
+ <span class='line'>3387</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3395
+ <span class='line'>3388</span> </span><span class="WHIT"> </span><span class="NAME">dist</span><span class="PUNC">,</span><span class="WHIT">
3396
+ <span class='line'>3389</span> </span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">,</span><span class="WHIT">
3397
+ <span class='line'>3390</span> </span><span class="WHIT"> </span><span class="NAME">minEl</span><span class="PUNC">,</span><span class="WHIT">
3398
+ <span class='line'>3391</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">,</span><span class="WHIT">
3399
+ <span class='line'>3392</span> </span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="PUNC">,</span><span class="WHIT">
3400
+ <span class='line'>3393</span> </span><span class="WHIT"> </span><span class="NAME">np</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3401
+ <span class='line'>3394</span> </span><span class="WHIT"> </span><span class="NAME">npmin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3402
+ <span class='line'>3395</span> </span><span class="WHIT"> </span><span class="NAME">mindist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Number.POSITIVE_INFINITY</span><span class="PUNC">,</span><span class="WHIT">
3403
+ <span class='line'>3396</span> </span><span class="WHIT"> </span><span class="NAME">len</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">turtle.objects.length</span><span class="PUNC">;</span><span class="WHIT">
3404
+ <span class='line'>3397</span>
3405
+ <span class='line'>3398</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">Type.exists</span><span class="PUNC">(</span><span class="NAME">board</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3406
+ <span class='line'>3399</span> </span><span class="WHIT"> </span><span class="NAME">board</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.board</span><span class="PUNC">;</span><span class="WHIT">
3407
+ <span class='line'>3400</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3408
+ <span class='line'>3401</span>
3409
+ <span class='line'>3402</span> </span><span class="WHIT"> </span><span class="COMM">// run through all curves of this turtle</span><span class="WHIT">
3410
+ <span class='line'>3403</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">len</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3411
+ <span class='line'>3404</span> </span><span class="WHIT"> </span><span class="NAME">el</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">turtle.objects</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3412
+ <span class='line'>3405</span>
3413
+ <span class='line'>3406</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">el.elementClass</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Const.OBJECT_CLASS_CURVE</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3414
+ <span class='line'>3407</span> </span><span class="WHIT"> </span><span class="NAME">res</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.projectPointToCurve</span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3415
+ <span class='line'>3408</span> </span><span class="WHIT"> </span><span class="NAME">newCoords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3416
+ <span class='line'>3409</span> </span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">res</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3417
+ <span class='line'>3410</span> </span><span class="WHIT"> </span><span class="NAME">dist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.distance</span><span class="PUNC">(</span><span class="NAME">newCoords.usrCoords</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point.coords.usrCoords</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3418
+ <span class='line'>3411</span>
3419
+ <span class='line'>3412</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dist</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">mindist</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3420
+ <span class='line'>3413</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newCoords.usrCoords</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3421
+ <span class='line'>3414</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newCoords.usrCoords</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3422
+ <span class='line'>3415</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newPos</span><span class="PUNC">;</span><span class="WHIT">
3423
+ <span class='line'>3416</span> </span><span class="WHIT"> </span><span class="NAME">mindist</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dist</span><span class="PUNC">;</span><span class="WHIT">
3424
+ <span class='line'>3417</span> </span><span class="WHIT"> </span><span class="NAME">minEl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">;</span><span class="WHIT">
3425
+ <span class='line'>3418</span> </span><span class="WHIT"> </span><span class="NAME">npmin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">np</span><span class="PUNC">;</span><span class="WHIT">
3426
+ <span class='line'>3419</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3427
+ <span class='line'>3420</span> </span><span class="WHIT"> </span><span class="NAME">np</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">el.numberPoints</span><span class="PUNC">;</span><span class="WHIT">
3428
+ <span class='line'>3421</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3429
+ <span class='line'>3422</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3430
+ <span class='line'>3423</span>
3431
+ <span class='line'>3424</span> </span><span class="WHIT"> </span><span class="NAME">newCoords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Coords</span><span class="PUNC">(</span><span class="NAME">Const.COORDS_BY_USER</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3432
+ <span class='line'>3425</span> </span><span class="WHIT"> </span><span class="COMM">// point.position = t + npmin;</span><span class="WHIT">
3433
+ <span class='line'>3426</span> </span><span class="WHIT"> </span><span class="COMM">// return minEl.updateTransform(newCoords);</span><span class="WHIT">
3434
+ <span class='line'>3427</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">minEl.updateTransform</span><span class="PUNC">(</span><span class="NAME">newCoords</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">npmin</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3435
+ <span class='line'>3428</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3436
+ <span class='line'>3429</span>
3437
+ <span class='line'>3430</span> </span><span class="WHIT"> </span><span class="COMM">/**
3438
+ <span class='line'>3431</span> * Trivial projection of a point to another point.
3439
+ <span class='line'>3432</span> * @param {JXG.Point} point Point to project (not used).
3440
+ <span class='line'>3433</span> * @param {JXG.Point} dest Point on that the point is projected.
3441
+ <span class='line'>3434</span> * @returns {JXG.Coords} The coordinates of the projection of the given point on the given circle.
3442
+ <span class='line'>3435</span> */</span><span class="WHIT">
3443
+ <span class='line'>3436</span> </span><span class="WHIT"> </span><span class="NAME">projectPointToPoint</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dest</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3444
+ <span class='line'>3437</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dest.coords</span><span class="PUNC">;</span><span class="WHIT">
3445
+ <span class='line'>3438</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3446
+ <span class='line'>3439</span>
3447
+ <span class='line'>3440</span> </span><span class="WHIT"> </span><span class="COMM">/**
3448
+ <span class='line'>3441</span> *
3449
+ <span class='line'>3442</span> * @param {JXG.Point|JXG.Coords} point
3450
+ <span class='line'>3443</span> * @param {JXG.Board} [board]
3451
+ <span class='line'>3444</span> */</span><span class="WHIT">
3452
+ <span class='line'>3445</span> </span><span class="WHIT"> </span><span class="NAME">projectPointToBoard</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">board</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3453
+ <span class='line'>3446</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3454
+ <span class='line'>3447</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">,</span><span class="WHIT">
3455
+ <span class='line'>3448</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">,</span><span class="WHIT">
3456
+ <span class='line'>3449</span> </span><span class="WHIT"> </span><span class="NAME">brd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">board</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">point.board</span><span class="PUNC">,</span><span class="WHIT">
3457
+ <span class='line'>3450</span> </span><span class="WHIT"> </span><span class="COMM">// comparison factor, point coord idx, bbox idx, 1st bbox corner x & y idx, 2nd bbox corner x & y idx</span><span class="WHIT">
3458
+ <span class='line'>3451</span> </span><span class="WHIT"> </span><span class="NAME">config</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3459
+ <span class='line'>3452</span> </span><span class="WHIT"> </span><span class="COMM">// left</span><span class="WHIT">
3460
+ <span class='line'>3453</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3461
+ <span class='line'>3454</span> </span><span class="WHIT"> </span><span class="COMM">// top</span><span class="WHIT">
3462
+ <span class='line'>3455</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3463
+ <span class='line'>3456</span> </span><span class="WHIT"> </span><span class="COMM">// right</span><span class="WHIT">
3464
+ <span class='line'>3457</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3465
+ <span class='line'>3458</span> </span><span class="WHIT"> </span><span class="COMM">// bottom</span><span class="WHIT">
3466
+ <span class='line'>3459</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT">
3467
+ <span class='line'>3460</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3468
+ <span class='line'>3461</span> </span><span class="WHIT"> </span><span class="NAME">coords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">point.coords</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT">
3469
+ <span class='line'>3462</span> </span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">brd.getBoundingBox</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3470
+ <span class='line'>3463</span>
3471
+ <span class='line'>3464</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3472
+ <span class='line'>3465</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">config</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3473
+ <span class='line'>3466</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">coords.usrCoords</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3474
+ <span class='line'>3467</span> </span><span class="WHIT"> </span><span class="COMM">// define border</span><span class="WHIT">
3475
+ <span class='line'>3468</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="WHIT">
3476
+ <span class='line'>3469</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">4</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3477
+ <span class='line'>3470</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">5</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bbox</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">[</span><span class="NUMB">6</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT">
3478
+ <span class='line'>3471</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3479
+ <span class='line'>3472</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
3480
+ <span class='line'>3473</span> </span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.normalize</span><span class="PUNC">(</span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3481
3481
  <span class='line'>3474</span>
3482
- <span class='line'>3475</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">coords</span><span class="PUNC">;</span><span class="WHIT">
3483
- <span class='line'>3476</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3484
- <span class='line'>3477</span>
3485
- <span class='line'>3478</span> </span><span class="WHIT"> </span><span class="COMM">/**
3486
- <span class='line'>3479</span> * Given a the coordinates of a point, finds the nearest point on the given
3487
- <span class='line'>3480</span> * parametric curve or surface, and returns its view-space coordinates.
3488
- <span class='line'>3481</span> * @param {Array} pScr Screen coordinates to project.
3489
- <span class='line'>3482</span> * @param {JXG.Curve3D|JXG.Surface3D} target Parametric curve or surface to project to.
3490
- <span class='line'>3483</span> * @param {Array} params Parameters of point on the target, initially specifying the starting point of
3491
- <span class='line'>3484</span> * the search. The parameters are modified in place during the search, ending up at the nearest point.
3492
- <span class='line'>3485</span> * @returns {Array} Array of length 4 containing the coordinates of the nearest point on the curve or surface.
3493
- <span class='line'>3486</span> */</span><span class="WHIT">
3494
- <span class='line'>3487</span> </span><span class="WHIT"> </span><span class="NAME">projectCoordsToParametric</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3495
- <span class='line'>3488</span> </span><span class="WHIT"> </span><span class="COMM">// The variables and parameters for the Cobyla constrained</span><span class="WHIT">
3496
- <span class='line'>3489</span> </span><span class="WHIT"> </span><span class="COMM">// minimization algorithm are explained in the Cobyla.js comments</span><span class="WHIT">
3497
- <span class='line'>3490</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// initial size of simplex (Cobyla)</span><span class="WHIT">
3498
- <span class='line'>3491</span> </span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// finial size of simplex (Cobyla)</span><span class="WHIT">
3499
- <span class='line'>3492</span> </span><span class="WHIT"> </span><span class="NAME">iprint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// no console output (Cobyla)</span><span class="WHIT">
3500
- <span class='line'>3493</span> </span><span class="WHIT"> </span><span class="NAME">maxfun</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// call objective function at most 200 times (Cobyla)</span><span class="WHIT">
3501
- <span class='line'>3494</span> </span><span class="WHIT"> </span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">params.length</span><span class="PUNC">,</span><span class="WHIT">
3502
- <span class='line'>3495</span> </span><span class="WHIT"> </span><span class="NAME">_minFunc</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// objective function (Cobyla)</span><span class="WHIT">
3503
- <span class='line'>3496</span>
3504
- <span class='line'>3497</span> </span><span class="WHIT"> </span><span class="COMM">// adapt simplex size to parameter range</span><span class="WHIT">
3505
- <span class='line'>3498</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3506
- <span class='line'>3499</span> </span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3507
- <span class='line'>3500</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3508
- <span class='line'>3501</span> </span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="PUNC">(</span><span class="WHIT">
3509
- <span class='line'>3502</span> </span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3510
- <span class='line'>3503</span> </span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT">
3511
- <span class='line'>3504</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3512
- <span class='line'>3505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3513
- <span class='line'>3506</span> </span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="NAME">e6</span><span class="PUNC">;</span><span class="WHIT">
3514
- <span class='line'>3507</span>
3515
- <span class='line'>3508</span> </span><span class="WHIT"> </span><span class="COMM">// minimize screen distance to cursor</span><span class="WHIT">
3516
- <span class='line'>3509</span> </span><span class="WHIT"> </span><span class="NAME">_minFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3517
- <span class='line'>3510</span> </span><span class="WHIT"> </span><span class="COMM">// var xDiff = p[0] - target.X(...w),</span><span class="WHIT">
3518
- <span class='line'>3511</span> </span><span class="WHIT"> </span><span class="COMM">// yDiff = p[1] - target.Y(...w),</span><span class="WHIT">
3519
- <span class='line'>3512</span> </span><span class="WHIT"> </span><span class="COMM">// zDiff = p[2] - target.Z(...w);</span><span class="WHIT">
3520
- <span class='line'>3513</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.X.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3521
- <span class='line'>3514</span> </span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.Y.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3522
- <span class='line'>3515</span> </span><span class="WHIT"> </span><span class="NAME">zDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.Z.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3523
- <span class='line'>3516</span>
3524
- <span class='line'>3517</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3525
- <span class='line'>3518</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3526
- <span class='line'>3519</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3527
- <span class='line'>3520</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3528
- <span class='line'>3521</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3529
- <span class='line'>3522</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3530
- <span class='line'>3523</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3531
- <span class='line'>3524</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3532
- <span class='line'>3525</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3533
- <span class='line'>3526</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">zDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zDiff</span><span class="PUNC">;</span><span class="WHIT">
3534
- <span class='line'>3527</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3535
- <span class='line'>3528</span> </span><span class="WHIT"> </span><span class="NAME">Mat.Nlp.FindMinimum</span><span class="PUNC">(</span><span class="NAME">_minFunc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iprint</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxfun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3536
- <span class='line'>3529</span>
3537
- <span class='line'>3530</span> </span><span class="WHIT"> </span><span class="COMM">// return [1, target.X(...params), target.Y(...params), target.Z(...params)];</span><span class="WHIT">
3538
- <span class='line'>3531</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.X.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.Y.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.Z.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3539
- <span class='line'>3532</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3540
- <span class='line'>3533</span>
3541
- <span class='line'>3534</span> </span><span class="WHIT"> </span><span class="COMM">/**
3542
- <span class='line'>3535</span> * Given a the screen coordinates of a point, finds the point on the
3543
- <span class='line'>3536</span> * given parametric curve or surface which is nearest in screen space,
3544
- <span class='line'>3537</span> * and returns its view-space coordinates.
3545
- <span class='line'>3538</span> * @param {Array} pScr Screen coordinates to project.
3546
- <span class='line'>3539</span> * @param {JXG.Curve3D|JXG.Surface3D} target Parametric curve or surface to project to.
3547
- <span class='line'>3540</span> * @param {Array} params Parameters of point on the target, initially specifying the starting point of
3548
- <span class='line'>3541</span> * the search. The parameters are modified in place during the search, ending up at the nearest point.
3549
- <span class='line'>3542</span> * @returns {Array} Array of length 4 containing the coordinates of the nearest point on the curve or surface.
3550
- <span class='line'>3543</span> */</span><span class="WHIT">
3551
- <span class='line'>3544</span> </span><span class="WHIT"> </span><span class="NAME">projectScreenCoordsToParametric</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pScr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3552
- <span class='line'>3545</span> </span><span class="WHIT"> </span><span class="COMM">// The variables and parameters for the Cobyla constrained</span><span class="WHIT">
3553
- <span class='line'>3546</span> </span><span class="WHIT"> </span><span class="COMM">// minimization algorithm are explained in the Cobyla.js comments</span><span class="WHIT">
3554
- <span class='line'>3547</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// initial size of simplex (Cobyla)</span><span class="WHIT">
3555
- <span class='line'>3548</span> </span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// finial size of simplex (Cobyla)</span><span class="WHIT">
3556
- <span class='line'>3549</span> </span><span class="WHIT"> </span><span class="NAME">iprint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// no console output (Cobyla)</span><span class="WHIT">
3557
- <span class='line'>3550</span> </span><span class="WHIT"> </span><span class="NAME">maxfun</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// call objective function at most 200 times (Cobyla)</span><span class="WHIT">
3558
- <span class='line'>3551</span> </span><span class="WHIT"> </span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">params.length</span><span class="PUNC">,</span><span class="WHIT">
3559
- <span class='line'>3552</span> </span><span class="WHIT"> </span><span class="NAME">_minFunc</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// objective function (Cobyla)</span><span class="WHIT">
3560
- <span class='line'>3553</span>
3561
- <span class='line'>3554</span> </span><span class="WHIT"> </span><span class="COMM">// adapt simplex size to parameter range</span><span class="WHIT">
3562
- <span class='line'>3555</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3563
- <span class='line'>3556</span> </span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3564
- <span class='line'>3557</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3565
- <span class='line'>3558</span> </span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="PUNC">(</span><span class="WHIT">
3566
- <span class='line'>3559</span> </span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3567
- <span class='line'>3560</span> </span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT">
3568
- <span class='line'>3561</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3569
- <span class='line'>3562</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3570
- <span class='line'>3563</span> </span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="NAME">e6</span><span class="PUNC">;</span><span class="WHIT">
3571
- <span class='line'>3564</span>
3572
- <span class='line'>3565</span> </span><span class="WHIT"> </span><span class="COMM">// minimize screen distance to cursor</span><span class="WHIT">
3573
- <span class='line'>3566</span> </span><span class="WHIT"> </span><span class="NAME">_minFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3574
- <span class='line'>3567</span> </span><span class="WHIT"> </span><span class="COMM">// var c3d = [</span><span class="WHIT">
3575
- <span class='line'>3568</span> </span><span class="WHIT"> </span><span class="COMM">// 1,</span><span class="WHIT">
3576
- <span class='line'>3569</span> </span><span class="WHIT"> </span><span class="COMM">// target.X(...w),</span><span class="WHIT">
3577
- <span class='line'>3570</span> </span><span class="WHIT"> </span><span class="COMM">// target.Y(...w),</span><span class="WHIT">
3578
- <span class='line'>3571</span> </span><span class="WHIT"> </span><span class="COMM">// target.Z(...w)</span><span class="WHIT">
3579
- <span class='line'>3572</span> </span><span class="WHIT"> </span><span class="COMM">// ],</span><span class="WHIT">
3580
- <span class='line'>3573</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c3d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3581
- <span class='line'>3574</span> </span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
3582
- <span class='line'>3575</span> </span><span class="WHIT"> </span><span class="NAME">target.X.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3583
- <span class='line'>3576</span> </span><span class="WHIT"> </span><span class="NAME">target.Y.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3584
- <span class='line'>3577</span> </span><span class="WHIT"> </span><span class="NAME">target.Z.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT">
3585
- <span class='line'>3578</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3586
- <span class='line'>3579</span> </span><span class="WHIT"> </span><span class="NAME">c2d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.view.project3DTo2D</span><span class="PUNC">(</span><span class="NAME">c3d</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3587
- <span class='line'>3580</span> </span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pScr</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">c2d</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3588
- <span class='line'>3581</span> </span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pScr</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">c2d</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3589
- <span class='line'>3582</span>
3590
- <span class='line'>3583</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3591
- <span class='line'>3584</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3592
- <span class='line'>3585</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3593
- <span class='line'>3586</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3594
- <span class='line'>3587</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3595
- <span class='line'>3588</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3596
- <span class='line'>3589</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3597
- <span class='line'>3590</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3598
- <span class='line'>3591</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3599
- <span class='line'>3592</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="PUNC">;</span><span class="WHIT">
3600
- <span class='line'>3593</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3601
- <span class='line'>3594</span> </span><span class="WHIT"> </span><span class="NAME">Mat.Nlp.FindMinimum</span><span class="PUNC">(</span><span class="NAME">_minFunc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iprint</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxfun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3602
- <span class='line'>3595</span>
3603
- <span class='line'>3596</span> </span><span class="WHIT"> </span><span class="COMM">// return [1, target.X(...params), target.Y(...params), target.Z(...params)];</span><span class="WHIT">
3604
- <span class='line'>3597</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.X.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.Y.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.Z.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3605
- <span class='line'>3598</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3606
- <span class='line'>3599</span>
3607
- <span class='line'>3600</span> </span><span class="WHIT"> </span><span class="COMM">/**
3608
- <span class='line'>3601</span> * Calculates the distance of a point to a line. The point and the line are given by homogeneous
3609
- <span class='line'>3602</span> * coordinates. For lines this can be line.stdform.
3610
- <span class='line'>3603</span> * @param {Array} point Homogeneous coordinates of a point.
3611
- <span class='line'>3604</span> * @param {Array} line Homogeneous coordinates of a line ([C,A,B] where A*x+B*y+C*z=0).
3612
- <span class='line'>3605</span> * @returns {Number} Distance of the point to the line.
3613
- <span class='line'>3606</span> */</span><span class="WHIT">
3614
- <span class='line'>3607</span> </span><span class="WHIT"> </span><span class="NAME">distPointLine</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">line</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3615
- <span class='line'>3608</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">line</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3616
- <span class='line'>3609</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">line</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3617
- <span class='line'>3610</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">line</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3618
- <span class='line'>3611</span> </span><span class="WHIT"> </span><span class="NAME">nom</span><span class="PUNC">;</span><span class="WHIT">
3619
- <span class='line'>3612</span>
3620
- <span class='line'>3613</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3621
- <span class='line'>3614</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Number.POSITIVE_INFINITY</span><span class="PUNC">;</span><span class="WHIT">
3622
- <span class='line'>3615</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3623
- <span class='line'>3616</span>
3624
- <span class='line'>3617</span> </span><span class="WHIT"> </span><span class="NAME">nom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">;</span><span class="WHIT">
3625
- <span class='line'>3618</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3626
- <span class='line'>3619</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3627
- <span class='line'>3620</span>
3628
- <span class='line'>3621</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">nom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3629
- <span class='line'>3622</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3630
- <span class='line'>3623</span>
3631
- <span class='line'>3624</span> </span><span class="WHIT"> </span><span class="COMM">/**
3632
- <span class='line'>3625</span> * Determine the (Euclidean) distance between a point q and a line segment
3633
- <span class='line'>3626</span> * defined by two points p1 and p2. In case p1 equals p2, the distance to this
3634
- <span class='line'>3627</span> * point is returned.
3635
- <span class='line'>3628</span> *
3636
- <span class='line'>3629</span> * @param {Array} q Homogeneous coordinates of q
3637
- <span class='line'>3630</span> * @param {Array} p1 Homogeneous coordinates of p1
3638
- <span class='line'>3631</span> * @param {Array} p2 Homogeneous coordinates of p2
3639
- <span class='line'>3632</span> * @returns {Number} Distance of q to line segment [p1, p2]
3640
- <span class='line'>3633</span> */</span><span class="WHIT">
3641
- <span class='line'>3634</span> </span><span class="WHIT"> </span><span class="NAME">distPointSegment</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3642
- <span class='line'>3635</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">,</span><span class="WHIT">
3643
- <span class='line'>3636</span> </span><span class="WHIT"> </span><span class="NAME">den</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="PUNC">,</span><span class="WHIT">
3644
- <span class='line'>3637</span> </span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT">
3645
- <span class='line'>3638</span> </span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1000000</span><span class="PUNC">;</span><span class="WHIT">
3646
- <span class='line'>3639</span>
3647
- <span class='line'>3640</span> </span><span class="WHIT"> </span><span class="COMM">// Difference q - p1</span><span class="WHIT">
3648
- <span class='line'>3641</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3649
- <span class='line'>3642</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3650
- <span class='line'>3643</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3651
- <span class='line'>3644</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3652
- <span class='line'>3645</span>
3653
- <span class='line'>3646</span> </span><span class="WHIT"> </span><span class="COMM">// Difference p2 - p1</span><span class="WHIT">
3654
- <span class='line'>3647</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3655
- <span class='line'>3648</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3656
- <span class='line'>3649</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="PUNC">;</span><span class="WHIT">
3657
- <span class='line'>3650</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3658
- <span class='line'>3651</span>
3659
- <span class='line'>3652</span> </span><span class="WHIT"> </span><span class="COMM">// If den==0 then p1 and p2 are identical</span><span class="WHIT">
3660
- <span class='line'>3653</span> </span><span class="WHIT"> </span><span class="COMM">// In this case the distance to p1 is returned</span><span class="WHIT">
3661
- <span class='line'>3654</span> </span><span class="WHIT"> </span><span class="NAME">den</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3662
- <span class='line'>3655</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">den</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3663
- <span class='line'>3656</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">den</span><span class="PUNC">;</span><span class="WHIT">
3664
- <span class='line'>3657</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3665
- <span class='line'>3658</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3666
- <span class='line'>3659</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3667
- <span class='line'>3660</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
3668
- <span class='line'>3661</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3669
- <span class='line'>3662</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="PUNC">;</span><span class="WHIT">
3670
- <span class='line'>3663</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3671
- <span class='line'>3664</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3672
- <span class='line'>3665</span>
3673
- <span class='line'>3666</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Mat.hypot</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3674
- <span class='line'>3667</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3675
- <span class='line'>3668</span>
3676
- <span class='line'>3669</span> </span><span class="WHIT"> </span><span class="COMM">/**
3677
- <span class='line'>3670</span> * Helper function to create curve which displays a Reuleaux polygons.
3678
- <span class='line'>3671</span> * @param {Array} points Array of points which should be the vertices of the Reuleaux polygon. Typically,
3679
- <span class='line'>3672</span> * these point list is the array vertices of a regular polygon.
3680
- <span class='line'>3673</span> * @param {Number} nr Number of vertices
3681
- <span class='line'>3674</span> * @returns {Array} An array containing the two functions defining the Reuleaux polygon and the two values
3682
- <span class='line'>3675</span> * for the start and the end of the paramtric curve. array may be used as parent array of a
3683
- <span class='line'>3676</span> * {@link JXG.Curve}.
3684
- <span class='line'>3677</span> *
3685
- <span class='line'>3678</span> * @example
3686
- <span class='line'>3679</span> * var A = brd.create('point',[-2,-2]);
3687
- <span class='line'>3680</span> * var B = brd.create('point',[0,1]);
3688
- <span class='line'>3681</span> * var pol = brd.create('regularpolygon',[A,B,3], {withLines:false, fillColor:'none', highlightFillColor:'none', fillOpacity:0.0});
3689
- <span class='line'>3682</span> * var reuleauxTriangle = brd.create('curve', JXG.Math.Geometry.reuleauxPolygon(pol.vertices, 3),
3690
- <span class='line'>3683</span> * {strokeWidth:6, strokeColor:'#d66d55', fillColor:'#ad5544', highlightFillColor:'#ad5544'});
3691
- <span class='line'>3684</span> *
3692
- <span class='line'>3685</span> * &lt;/pre>&lt;div class="jxgbox" id="JXG2543a843-46a9-4372-abc1-94d9ad2db7ac" style="width: 300px; height: 300px;">&lt;/div>
3693
- <span class='line'>3686</span> * &lt;script type="text/javascript">
3694
- <span class='line'>3687</span> * var brd = JXG.JSXGraph.initBoard('JXG2543a843-46a9-4372-abc1-94d9ad2db7ac', {boundingbox: [-5, 5, 5, -5], axis: true, showcopyright:false, shownavigation: false});
3695
- <span class='line'>3688</span> * var A = brd.create('point',[-2,-2]);
3696
- <span class='line'>3689</span> * var B = brd.create('point',[0,1]);
3697
- <span class='line'>3690</span> * var pol = brd.create('regularpolygon',[A,B,3], {withLines:false, fillColor:'none', highlightFillColor:'none', fillOpacity:0.0});
3698
- <span class='line'>3691</span> * var reuleauxTriangle = brd.create('curve', JXG.Math.Geometry.reuleauxPolygon(pol.vertices, 3),
3699
- <span class='line'>3692</span> * {strokeWidth:6, strokeColor:'#d66d55', fillColor:'#ad5544', highlightFillColor:'#ad5544'});
3700
- <span class='line'>3693</span> * &lt;/script>&lt;pre>
3701
- <span class='line'>3694</span> */</span><span class="WHIT">
3702
- <span class='line'>3695</span> </span><span class="WHIT"> </span><span class="NAME">reuleauxPolygon</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">points</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3703
- <span class='line'>3696</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">beta</span><span class="PUNC">,</span><span class="WHIT">
3704
- <span class='line'>3697</span> </span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
3705
- <span class='line'>3698</span> </span><span class="WHIT"> </span><span class="NAME">pi2_n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">nr</span><span class="PUNC">,</span><span class="WHIT">
3706
- <span class='line'>3699</span> </span><span class="WHIT"> </span><span class="NAME">diag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nr</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
3707
- <span class='line'>3700</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3708
- <span class='line'>3701</span> </span><span class="WHIT"> </span><span class="NAME">makeFct</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">which</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">trig</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3709
- <span class='line'>3702</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">suspendUpdate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3710
- <span class='line'>3703</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="PUNC">,</span><span class="WHIT">
3711
- <span class='line'>3704</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">pi2_n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">nr</span><span class="PUNC">;</span><span class="WHIT">
3712
- <span class='line'>3705</span>
3713
- <span class='line'>3706</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">suspendUpdate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3714
- <span class='line'>3707</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">Dist</span><span class="PUNC">(</span><span class="NAME">points</span><span class="PUNC">[</span><span class="NAME">diag</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3715
- <span class='line'>3708</span> </span><span class="WHIT"> </span><span class="NAME">beta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.Geometry.rad</span><span class="PUNC">(</span><span class="WHIT">
3716
- <span class='line'>3709</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">points</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">X</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">Y</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3717
- <span class='line'>3710</span> </span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3718
- <span class='line'>3711</span> </span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NAME">diag</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">nr</span><span class="PUNC">]</span><span class="WHIT">
3719
- <span class='line'>3712</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3720
- <span class='line'>3713</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3721
- <span class='line'>3714</span>
3722
- <span class='line'>3715</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3723
- <span class='line'>3716</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">;</span><span class="WHIT">
3724
- <span class='line'>3717</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3725
- <span class='line'>3718</span>
3726
- <span class='line'>3719</span> </span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">pi2_n</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">beta</span><span class="PUNC">;</span><span class="WHIT">
3727
- <span class='line'>3720</span>
3728
- <span class='line'>3721</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">which</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math</span><span class="PUNC">[</span><span class="NAME">trig</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">t1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3729
- <span class='line'>3722</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3730
- <span class='line'>3723</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3731
- <span class='line'>3724</span>
3732
- <span class='line'>3725</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">makeFct</span><span class="PUNC">(</span><span class="STRN">"X"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"cos"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeFct</span><span class="PUNC">(</span><span class="STRN">"Y"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sin"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3733
- <span class='line'>3726</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3734
- <span class='line'>3727</span>
3735
- <span class='line'>3728</span> </span><span class="WHIT"> </span><span class="NAME">meet3Planes</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3736
- <span class='line'>3729</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3737
- <span class='line'>3730</span> </span><span class="WHIT"> </span><span class="NAME">n31</span><span class="PUNC">,</span><span class="WHIT">
3738
- <span class='line'>3731</span> </span><span class="WHIT"> </span><span class="NAME">n12</span><span class="PUNC">,</span><span class="WHIT">
3739
- <span class='line'>3732</span> </span><span class="WHIT"> </span><span class="NAME">n23</span><span class="PUNC">,</span><span class="WHIT">
3740
- <span class='line'>3733</span> </span><span class="WHIT"> </span><span class="NAME">denom</span><span class="PUNC">,</span><span class="WHIT">
3741
- <span class='line'>3734</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
3742
- <span class='line'>3735</span>
3743
- <span class='line'>3736</span> </span><span class="WHIT"> </span><span class="NAME">n31</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">n3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3744
- <span class='line'>3737</span> </span><span class="WHIT"> </span><span class="NAME">n12</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">n1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3745
- <span class='line'>3738</span> </span><span class="WHIT"> </span><span class="NAME">n23</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">n2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3746
- <span class='line'>3739</span> </span><span class="WHIT"> </span><span class="NAME">denom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.innerProduct</span><span class="PUNC">(</span><span class="NAME">n1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n23</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3747
- <span class='line'>3740</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3748
- <span class='line'>3741</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">n23</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">n31</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d3</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">n12</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">denom</span><span class="PUNC">;</span><span class="WHIT">
3749
- <span class='line'>3742</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3750
- <span class='line'>3743</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
3751
- <span class='line'>3744</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3752
- <span class='line'>3745</span>
3753
- <span class='line'>3746</span> </span><span class="WHIT"> </span><span class="NAME">meetPlanePlane</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v11</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v12</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v21</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v22</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3754
- <span class='line'>3747</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3755
- <span class='line'>3748</span> </span><span class="WHIT"> </span><span class="NAME">no1</span><span class="PUNC">,</span><span class="WHIT">
3756
- <span class='line'>3749</span> </span><span class="WHIT"> </span><span class="NAME">no2</span><span class="PUNC">,</span><span class="WHIT">
3757
- <span class='line'>3750</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3758
- <span class='line'>3751</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3759
- <span class='line'>3752</span>
3760
- <span class='line'>3753</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3761
- <span class='line'>3754</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">v11</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3762
- <span class='line'>3755</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">v12</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3763
- <span class='line'>3756</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3764
- <span class='line'>3757</span> </span><span class="WHIT"> </span><span class="NAME">no1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3765
- <span class='line'>3758</span>
3766
- <span class='line'>3759</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3767
- <span class='line'>3760</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">v21</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3768
- <span class='line'>3761</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">v22</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3769
- <span class='line'>3762</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3770
- <span class='line'>3763</span> </span><span class="WHIT"> </span><span class="NAME">no2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3771
- <span class='line'>3764</span>
3772
- <span class='line'>3765</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">no1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">no2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3773
- <span class='line'>3766</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3774
- <span class='line'>3767</span>
3775
- <span class='line'>3768</span> </span><span class="WHIT"> </span><span class="NAME">project3DTo3DPlane</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">normal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">foot</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3776
- <span class='line'>3769</span> </span><span class="WHIT"> </span><span class="COMM">// TODO: homogeneous 3D coordinates</span><span class="WHIT">
3777
- <span class='line'>3770</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3778
- <span class='line'>3771</span> </span><span class="WHIT"> </span><span class="NAME">le</span><span class="PUNC">,</span><span class="WHIT">
3779
- <span class='line'>3772</span> </span><span class="WHIT"> </span><span class="NAME">d1</span><span class="PUNC">,</span><span class="WHIT">
3780
- <span class='line'>3773</span> </span><span class="WHIT"> </span><span class="NAME">d2</span><span class="PUNC">,</span><span class="WHIT">
3781
- <span class='line'>3774</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="PUNC">;</span><span class="WHIT">
3782
- <span class='line'>3775</span>
3783
- <span class='line'>3776</span> </span><span class="WHIT"> </span><span class="NAME">foot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">foot</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3784
- <span class='line'>3777</span>
3785
- <span class='line'>3778</span> </span><span class="WHIT"> </span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.norm</span><span class="PUNC">(</span><span class="NAME">normal</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3786
- <span class='line'>3779</span> </span><span class="WHIT"> </span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.innerProduct</span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">normal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3787
- <span class='line'>3780</span> </span><span class="WHIT"> </span><span class="NAME">d2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.innerProduct</span><span class="PUNC">(</span><span class="NAME">foot</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">normal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3788
- <span class='line'>3781</span> </span><span class="WHIT"> </span><span class="COMM">// (point - lbda * normal / le) * normal / le == foot * normal / le</span><span class="WHIT">
3789
- <span class='line'>3782</span> </span><span class="WHIT"> </span><span class="COMM">// => (point * normal - foot * normal) == lbda * le</span><span class="WHIT">
3790
- <span class='line'>3783</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">le</span><span class="PUNC">;</span><span class="WHIT">
3791
- <span class='line'>3784</span> </span><span class="WHIT"> </span><span class="NAME">sol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.axpy</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">lbda</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">normal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3792
- <span class='line'>3785</span>
3793
- <span class='line'>3786</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">;</span><span class="WHIT">
3794
- <span class='line'>3787</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3795
- <span class='line'>3788</span>
3796
- <span class='line'>3789</span> </span><span class="WHIT"> </span><span class="NAME">getPlaneBounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3797
- <span class='line'>3790</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mat</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">;</span><span class="WHIT">
3798
- <span class='line'>3791</span>
3799
- <span class='line'>3792</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v1</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">v2</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3800
- <span class='line'>3793</span> </span><span class="WHIT"> </span><span class="NAME">mat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3801
- <span class='line'>3794</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">v1</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v2</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3802
- <span class='line'>3795</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">v1</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v2</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT">
3803
- <span class='line'>3796</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3804
- <span class='line'>3797</span> </span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3805
- <span class='line'>3798</span>
3806
- <span class='line'>3799</span> </span><span class="WHIT"> </span><span class="NAME">sol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Numerics.Gauss</span><span class="PUNC">(</span><span class="NAME">mat</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3807
- <span class='line'>3800</span> </span><span class="WHIT"> </span><span class="NAME">s1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3808
- <span class='line'>3801</span> </span><span class="WHIT"> </span><span class="NAME">s2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3809
- <span class='line'>3802</span>
3810
- <span class='line'>3803</span> </span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3482
+ <span class='line'>3475</span> </span><span class="WHIT"> </span><span class="COMM">// project point</span><span class="WHIT">
3483
+ <span class='line'>3476</span> </span><span class="WHIT"> </span><span class="NAME">coords</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.projectPointToLine</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">coords</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">coords</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">stdform</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">l</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">brd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3484
+ <span class='line'>3477</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3485
+ <span class='line'>3478</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3486
+ <span class='line'>3479</span>
3487
+ <span class='line'>3480</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">coords</span><span class="PUNC">;</span><span class="WHIT">
3488
+ <span class='line'>3481</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3489
+ <span class='line'>3482</span>
3490
+ <span class='line'>3483</span> </span><span class="WHIT"> </span><span class="COMM">/**
3491
+ <span class='line'>3484</span> * Given a the coordinates of a point, finds the nearest point on the given
3492
+ <span class='line'>3485</span> * parametric curve or surface, and returns its view-space coordinates.
3493
+ <span class='line'>3486</span> * @param {Array} pScr Screen coordinates to project.
3494
+ <span class='line'>3487</span> * @param {JXG.Curve3D|JXG.Surface3D} target Parametric curve or surface to project to.
3495
+ <span class='line'>3488</span> * @param {Array} params Parameters of point on the target, initially specifying the starting point of
3496
+ <span class='line'>3489</span> * the search. The parameters are modified in place during the search, ending up at the nearest point.
3497
+ <span class='line'>3490</span> * @returns {Array} Array of length 4 containing the coordinates of the nearest point on the curve or surface.
3498
+ <span class='line'>3491</span> */</span><span class="WHIT">
3499
+ <span class='line'>3492</span> </span><span class="WHIT"> </span><span class="NAME">projectCoordsToParametric</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3500
+ <span class='line'>3493</span> </span><span class="WHIT"> </span><span class="COMM">// The variables and parameters for the Cobyla constrained</span><span class="WHIT">
3501
+ <span class='line'>3494</span> </span><span class="WHIT"> </span><span class="COMM">// minimization algorithm are explained in the Cobyla.js comments</span><span class="WHIT">
3502
+ <span class='line'>3495</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// initial size of simplex (Cobyla)</span><span class="WHIT">
3503
+ <span class='line'>3496</span> </span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// finial size of simplex (Cobyla)</span><span class="WHIT">
3504
+ <span class='line'>3497</span> </span><span class="WHIT"> </span><span class="NAME">iprint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// no console output (Cobyla)</span><span class="WHIT">
3505
+ <span class='line'>3498</span> </span><span class="WHIT"> </span><span class="NAME">maxfun</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// call objective function at most 200 times (Cobyla)</span><span class="WHIT">
3506
+ <span class='line'>3499</span> </span><span class="WHIT"> </span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">params.length</span><span class="PUNC">,</span><span class="WHIT">
3507
+ <span class='line'>3500</span> </span><span class="WHIT"> </span><span class="NAME">_minFunc</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// objective function (Cobyla)</span><span class="WHIT">
3508
+ <span class='line'>3501</span>
3509
+ <span class='line'>3502</span> </span><span class="WHIT"> </span><span class="COMM">// adapt simplex size to parameter range</span><span class="WHIT">
3510
+ <span class='line'>3503</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3511
+ <span class='line'>3504</span> </span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3512
+ <span class='line'>3505</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3513
+ <span class='line'>3506</span> </span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="PUNC">(</span><span class="WHIT">
3514
+ <span class='line'>3507</span> </span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3515
+ <span class='line'>3508</span> </span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT">
3516
+ <span class='line'>3509</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3517
+ <span class='line'>3510</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3518
+ <span class='line'>3511</span> </span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="NAME">e6</span><span class="PUNC">;</span><span class="WHIT">
3519
+ <span class='line'>3512</span>
3520
+ <span class='line'>3513</span> </span><span class="WHIT"> </span><span class="COMM">// minimize screen distance to cursor</span><span class="WHIT">
3521
+ <span class='line'>3514</span> </span><span class="WHIT"> </span><span class="NAME">_minFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3522
+ <span class='line'>3515</span> </span><span class="WHIT"> </span><span class="COMM">// var xDiff = p[0] - target.X(...w),</span><span class="WHIT">
3523
+ <span class='line'>3516</span> </span><span class="WHIT"> </span><span class="COMM">// yDiff = p[1] - target.Y(...w),</span><span class="WHIT">
3524
+ <span class='line'>3517</span> </span><span class="WHIT"> </span><span class="COMM">// zDiff = p[2] - target.Z(...w);</span><span class="WHIT">
3525
+ <span class='line'>3518</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.X.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3526
+ <span class='line'>3519</span> </span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.Y.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3527
+ <span class='line'>3520</span> </span><span class="WHIT"> </span><span class="NAME">zDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.Z.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3528
+ <span class='line'>3521</span>
3529
+ <span class='line'>3522</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3530
+ <span class='line'>3523</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3531
+ <span class='line'>3524</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3532
+ <span class='line'>3525</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3533
+ <span class='line'>3526</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3534
+ <span class='line'>3527</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3535
+ <span class='line'>3528</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3536
+ <span class='line'>3529</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3537
+ <span class='line'>3530</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3538
+ <span class='line'>3531</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">zDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">zDiff</span><span class="PUNC">;</span><span class="WHIT">
3539
+ <span class='line'>3532</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3540
+ <span class='line'>3533</span> </span><span class="WHIT"> </span><span class="NAME">Mat.Nlp.FindMinimum</span><span class="PUNC">(</span><span class="NAME">_minFunc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iprint</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxfun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3541
+ <span class='line'>3534</span>
3542
+ <span class='line'>3535</span> </span><span class="WHIT"> </span><span class="COMM">// return [1, target.X(...params), target.Y(...params), target.Z(...params)];</span><span class="WHIT">
3543
+ <span class='line'>3536</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.X.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.Y.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.Z.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3544
+ <span class='line'>3537</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3545
+ <span class='line'>3538</span>
3546
+ <span class='line'>3539</span> </span><span class="WHIT"> </span><span class="COMM">/**
3547
+ <span class='line'>3540</span> * Given a the screen coordinates of a point, finds the point on the
3548
+ <span class='line'>3541</span> * given parametric curve or surface which is nearest in screen space,
3549
+ <span class='line'>3542</span> * and returns its view-space coordinates.
3550
+ <span class='line'>3543</span> * @param {Array} pScr Screen coordinates to project.
3551
+ <span class='line'>3544</span> * @param {JXG.Curve3D|JXG.Surface3D} target Parametric curve or surface to project to.
3552
+ <span class='line'>3545</span> * @param {Array} params Parameters of point on the target, initially specifying the starting point of
3553
+ <span class='line'>3546</span> * the search. The parameters are modified in place during the search, ending up at the nearest point.
3554
+ <span class='line'>3547</span> * @returns {Array} Array of length 4 containing the coordinates of the nearest point on the curve or surface.
3555
+ <span class='line'>3548</span> */</span><span class="WHIT">
3556
+ <span class='line'>3549</span> </span><span class="WHIT"> </span><span class="NAME">projectScreenCoordsToParametric</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">pScr</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3557
+ <span class='line'>3550</span> </span><span class="WHIT"> </span><span class="COMM">// The variables and parameters for the Cobyla constrained</span><span class="WHIT">
3558
+ <span class='line'>3551</span> </span><span class="WHIT"> </span><span class="COMM">// minimization algorithm are explained in the Cobyla.js comments</span><span class="WHIT">
3559
+ <span class='line'>3552</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// initial size of simplex (Cobyla)</span><span class="WHIT">
3560
+ <span class='line'>3553</span> </span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// finial size of simplex (Cobyla)</span><span class="WHIT">
3561
+ <span class='line'>3554</span> </span><span class="WHIT"> </span><span class="NAME">iprint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// no console output (Cobyla)</span><span class="WHIT">
3562
+ <span class='line'>3555</span> </span><span class="WHIT"> </span><span class="NAME">maxfun</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">200</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// call objective function at most 200 times (Cobyla)</span><span class="WHIT">
3563
+ <span class='line'>3556</span> </span><span class="WHIT"> </span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">params.length</span><span class="PUNC">,</span><span class="WHIT">
3564
+ <span class='line'>3557</span> </span><span class="WHIT"> </span><span class="NAME">_minFunc</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// objective function (Cobyla)</span><span class="WHIT">
3565
+ <span class='line'>3558</span>
3566
+ <span class='line'>3559</span> </span><span class="WHIT"> </span><span class="COMM">// adapt simplex size to parameter range</span><span class="WHIT">
3567
+ <span class='line'>3560</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3568
+ <span class='line'>3561</span> </span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3569
+ <span class='line'>3562</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dim</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3570
+ <span class='line'>3563</span> </span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math.min</span><span class="PUNC">(</span><span class="WHIT">
3571
+ <span class='line'>3564</span> </span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3572
+ <span class='line'>3565</span> </span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT">
3573
+ <span class='line'>3566</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3574
+ <span class='line'>3567</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3575
+ <span class='line'>3568</span> </span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">5</span><span class="NAME">e6</span><span class="PUNC">;</span><span class="WHIT">
3576
+ <span class='line'>3569</span>
3577
+ <span class='line'>3570</span> </span><span class="WHIT"> </span><span class="COMM">// minimize screen distance to cursor</span><span class="WHIT">
3578
+ <span class='line'>3571</span> </span><span class="WHIT"> </span><span class="NAME">_minFunc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3579
+ <span class='line'>3572</span> </span><span class="WHIT"> </span><span class="COMM">// var c3d = [</span><span class="WHIT">
3580
+ <span class='line'>3573</span> </span><span class="WHIT"> </span><span class="COMM">// 1,</span><span class="WHIT">
3581
+ <span class='line'>3574</span> </span><span class="WHIT"> </span><span class="COMM">// target.X(...w),</span><span class="WHIT">
3582
+ <span class='line'>3575</span> </span><span class="WHIT"> </span><span class="COMM">// target.Y(...w),</span><span class="WHIT">
3583
+ <span class='line'>3576</span> </span><span class="WHIT"> </span><span class="COMM">// target.Z(...w)</span><span class="WHIT">
3584
+ <span class='line'>3577</span> </span><span class="WHIT"> </span><span class="COMM">// ],</span><span class="WHIT">
3585
+ <span class='line'>3578</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c3d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3586
+ <span class='line'>3579</span> </span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT">
3587
+ <span class='line'>3580</span> </span><span class="WHIT"> </span><span class="NAME">target.X.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3588
+ <span class='line'>3581</span> </span><span class="WHIT"> </span><span class="NAME">target.Y.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3589
+ <span class='line'>3582</span> </span><span class="WHIT"> </span><span class="NAME">target.Z.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="WHIT">
3590
+ <span class='line'>3583</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3591
+ <span class='line'>3584</span> </span><span class="WHIT"> </span><span class="NAME">c2d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.view.project3DTo2D</span><span class="PUNC">(</span><span class="NAME">c3d</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
3592
+ <span class='line'>3585</span> </span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pScr</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">c2d</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3593
+ <span class='line'>3586</span> </span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pScr</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">c2d</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3594
+ <span class='line'>3587</span>
3595
+ <span class='line'>3588</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3596
+ <span class='line'>3589</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3597
+ <span class='line'>3590</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3598
+ <span class='line'>3591</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3599
+ <span class='line'>3592</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3600
+ <span class='line'>3593</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range_u</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3601
+ <span class='line'>3594</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3602
+ <span class='line'>3595</span> </span><span class="WHIT"> </span><span class="NAME">con</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">w</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.range_v</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3603
+ <span class='line'>3596</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3604
+ <span class='line'>3597</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">xDiff</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">yDiff</span><span class="PUNC">;</span><span class="WHIT">
3605
+ <span class='line'>3598</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3606
+ <span class='line'>3599</span> </span><span class="WHIT"> </span><span class="NAME">Mat.Nlp.FindMinimum</span><span class="PUNC">(</span><span class="NAME">_minFunc</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dim</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhobeg</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhoend</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">iprint</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">maxfun</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3607
+ <span class='line'>3600</span>
3608
+ <span class='line'>3601</span> </span><span class="WHIT"> </span><span class="COMM">// return [1, target.X(...params), target.Y(...params), target.Z(...params)];</span><span class="WHIT">
3609
+ <span class='line'>3602</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.X.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.Y.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target.Z.apply</span><span class="PUNC">(</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">params</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3610
+ <span class='line'>3603</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3611
+ <span class='line'>3604</span>
3612
+ <span class='line'>3605</span> </span><span class="WHIT"> </span><span class="COMM">/**
3613
+ <span class='line'>3606</span> * Calculates the distance of a point to a line. The point and the line are given by homogeneous
3614
+ <span class='line'>3607</span> * coordinates. For lines this can be line.stdform.
3615
+ <span class='line'>3608</span> * @param {Array} point Homogeneous coordinates of a point.
3616
+ <span class='line'>3609</span> * @param {Array} line Homogeneous coordinates of a line ([C,A,B] where A*x+B*y+C*z=0).
3617
+ <span class='line'>3610</span> * @returns {Number} Distance of the point to the line.
3618
+ <span class='line'>3611</span> */</span><span class="WHIT">
3619
+ <span class='line'>3612</span> </span><span class="WHIT"> </span><span class="NAME">distPointLine</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">line</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3620
+ <span class='line'>3613</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">line</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3621
+ <span class='line'>3614</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">line</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3622
+ <span class='line'>3615</span> </span><span class="WHIT"> </span><span class="NAME">c</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">line</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3623
+ <span class='line'>3616</span> </span><span class="WHIT"> </span><span class="NAME">nom</span><span class="PUNC">;</span><span class="WHIT">
3624
+ <span class='line'>3617</span>
3625
+ <span class='line'>3618</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">b</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3626
+ <span class='line'>3619</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Number.POSITIVE_INFINITY</span><span class="PUNC">;</span><span class="WHIT">
3627
+ <span class='line'>3620</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3628
+ <span class='line'>3621</span>
3629
+ <span class='line'>3622</span> </span><span class="WHIT"> </span><span class="NAME">nom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">;</span><span class="WHIT">
3630
+ <span class='line'>3623</span> </span><span class="WHIT"> </span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
3631
+ <span class='line'>3624</span> </span><span class="WHIT"> </span><span class="NAME">b</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">;</span><span class="WHIT">
3632
+ <span class='line'>3625</span>
3633
+ <span class='line'>3626</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Math.abs</span><span class="PUNC">(</span><span class="NAME">nom</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">Math.sqrt</span><span class="PUNC">(</span><span class="NAME">a</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">b</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3634
+ <span class='line'>3627</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3635
+ <span class='line'>3628</span>
3636
+ <span class='line'>3629</span> </span><span class="WHIT"> </span><span class="COMM">/**
3637
+ <span class='line'>3630</span> * Determine the (Euclidean) distance between a point q and a line segment
3638
+ <span class='line'>3631</span> * defined by two points p1 and p2. In case p1 equals p2, the distance to this
3639
+ <span class='line'>3632</span> * point is returned.
3640
+ <span class='line'>3633</span> *
3641
+ <span class='line'>3634</span> * @param {Array} q Homogeneous coordinates of q
3642
+ <span class='line'>3635</span> * @param {Array} p1 Homogeneous coordinates of p1
3643
+ <span class='line'>3636</span> * @param {Array} p2 Homogeneous coordinates of p2
3644
+ <span class='line'>3637</span> * @returns {Number} Distance of q to line segment [p1, p2]
3645
+ <span class='line'>3638</span> */</span><span class="WHIT">
3646
+ <span class='line'>3639</span> </span><span class="WHIT"> </span><span class="NAME">distPointSegment</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">q</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3647
+ <span class='line'>3640</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">,</span><span class="WHIT">
3648
+ <span class='line'>3641</span> </span><span class="WHIT"> </span><span class="NAME">den</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="PUNC">,</span><span class="WHIT">
3649
+ <span class='line'>3642</span> </span><span class="WHIT"> </span><span class="NAME">eps</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Mat.eps</span><span class="PUNC">,</span><span class="WHIT">
3650
+ <span class='line'>3643</span> </span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1000000</span><span class="PUNC">;</span><span class="WHIT">
3651
+ <span class='line'>3644</span>
3652
+ <span class='line'>3645</span> </span><span class="WHIT"> </span><span class="COMM">// Difference q - p1</span><span class="WHIT">
3653
+ <span class='line'>3646</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3654
+ <span class='line'>3647</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3655
+ <span class='line'>3648</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">x</span><span class="PUNC">;</span><span class="WHIT">
3656
+ <span class='line'>3649</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
3657
+ <span class='line'>3650</span>
3658
+ <span class='line'>3651</span> </span><span class="WHIT"> </span><span class="COMM">// Difference p2 - p1</span><span class="WHIT">
3659
+ <span class='line'>3652</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3660
+ <span class='line'>3653</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p2</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">p1</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3661
+ <span class='line'>3654</span> </span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="PUNC">;</span><span class="WHIT">
3662
+ <span class='line'>3655</span> </span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">Infinity</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NAME">huge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3663
+ <span class='line'>3656</span>
3664
+ <span class='line'>3657</span> </span><span class="WHIT"> </span><span class="COMM">// If den==0 then p1 and p2 are identical</span><span class="WHIT">
3665
+ <span class='line'>3658</span> </span><span class="WHIT"> </span><span class="COMM">// In this case the distance to p1 is returned</span><span class="WHIT">
3666
+ <span class='line'>3659</span> </span><span class="WHIT"> </span><span class="NAME">den</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3667
+ <span class='line'>3660</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">den</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">eps</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3668
+ <span class='line'>3661</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">den</span><span class="PUNC">;</span><span class="WHIT">
3669
+ <span class='line'>3662</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3670
+ <span class='line'>3663</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0.0</span><span class="PUNC">;</span><span class="WHIT">
3671
+ <span class='line'>3664</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3672
+ <span class='line'>3665</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1.0</span><span class="PUNC">;</span><span class="WHIT">
3673
+ <span class='line'>3666</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3674
+ <span class='line'>3667</span> </span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dx</span><span class="PUNC">;</span><span class="WHIT">
3675
+ <span class='line'>3668</span> </span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">dy</span><span class="PUNC">;</span><span class="WHIT">
3676
+ <span class='line'>3669</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3677
+ <span class='line'>3670</span>
3678
+ <span class='line'>3671</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Mat.hypot</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3679
+ <span class='line'>3672</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3680
+ <span class='line'>3673</span>
3681
+ <span class='line'>3674</span> </span><span class="WHIT"> </span><span class="COMM">/**
3682
+ <span class='line'>3675</span> * Helper function to create curve which displays a Reuleaux polygons.
3683
+ <span class='line'>3676</span> * @param {Array} points Array of points which should be the vertices of the Reuleaux polygon. Typically,
3684
+ <span class='line'>3677</span> * these point list is the array vertices of a regular polygon.
3685
+ <span class='line'>3678</span> * @param {Number} nr Number of vertices
3686
+ <span class='line'>3679</span> * @returns {Array} An array containing the two functions defining the Reuleaux polygon and the two values
3687
+ <span class='line'>3680</span> * for the start and the end of the paramtric curve. array may be used as parent array of a
3688
+ <span class='line'>3681</span> * {@link JXG.Curve}.
3689
+ <span class='line'>3682</span> *
3690
+ <span class='line'>3683</span> * @example
3691
+ <span class='line'>3684</span> * var A = brd.create('point',[-2,-2]);
3692
+ <span class='line'>3685</span> * var B = brd.create('point',[0,1]);
3693
+ <span class='line'>3686</span> * var pol = brd.create('regularpolygon',[A,B,3], {withLines:false, fillColor:'none', highlightFillColor:'none', fillOpacity:0.0});
3694
+ <span class='line'>3687</span> * var reuleauxTriangle = brd.create('curve', JXG.Math.Geometry.reuleauxPolygon(pol.vertices, 3),
3695
+ <span class='line'>3688</span> * {strokeWidth:6, strokeColor:'#d66d55', fillColor:'#ad5544', highlightFillColor:'#ad5544'});
3696
+ <span class='line'>3689</span> *
3697
+ <span class='line'>3690</span> * &lt;/pre>&lt;div class="jxgbox" id="JXG2543a843-46a9-4372-abc1-94d9ad2db7ac" style="width: 300px; height: 300px;">&lt;/div>
3698
+ <span class='line'>3691</span> * &lt;script type="text/javascript">
3699
+ <span class='line'>3692</span> * var brd = JXG.JSXGraph.initBoard('JXG2543a843-46a9-4372-abc1-94d9ad2db7ac', {boundingbox: [-5, 5, 5, -5], axis: true, showcopyright:false, shownavigation: false});
3700
+ <span class='line'>3693</span> * var A = brd.create('point',[-2,-2]);
3701
+ <span class='line'>3694</span> * var B = brd.create('point',[0,1]);
3702
+ <span class='line'>3695</span> * var pol = brd.create('regularpolygon',[A,B,3], {withLines:false, fillColor:'none', highlightFillColor:'none', fillOpacity:0.0});
3703
+ <span class='line'>3696</span> * var reuleauxTriangle = brd.create('curve', JXG.Math.Geometry.reuleauxPolygon(pol.vertices, 3),
3704
+ <span class='line'>3697</span> * {strokeWidth:6, strokeColor:'#d66d55', fillColor:'#ad5544', highlightFillColor:'#ad5544'});
3705
+ <span class='line'>3698</span> * &lt;/script>&lt;pre>
3706
+ <span class='line'>3699</span> */</span><span class="WHIT">
3707
+ <span class='line'>3700</span> </span><span class="WHIT"> </span><span class="NAME">reuleauxPolygon</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">points</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3708
+ <span class='line'>3701</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">beta</span><span class="PUNC">,</span><span class="WHIT">
3709
+ <span class='line'>3702</span> </span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.PI</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
3710
+ <span class='line'>3703</span> </span><span class="WHIT"> </span><span class="NAME">pi2_n</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">nr</span><span class="PUNC">,</span><span class="WHIT">
3711
+ <span class='line'>3704</span> </span><span class="WHIT"> </span><span class="NAME">diag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">nr</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT">
3712
+ <span class='line'>3705</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT">
3713
+ <span class='line'>3706</span> </span><span class="WHIT"> </span><span class="NAME">makeFct</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">which</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">trig</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3714
+ <span class='line'>3707</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">suspendUpdate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3715
+ <span class='line'>3708</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="PUNC">,</span><span class="WHIT">
3716
+ <span class='line'>3709</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Math.floor</span><span class="PUNC">(</span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">pi2_n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">nr</span><span class="PUNC">;</span><span class="WHIT">
3717
+ <span class='line'>3710</span>
3718
+ <span class='line'>3711</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">suspendUpdate</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3719
+ <span class='line'>3712</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">Dist</span><span class="PUNC">(</span><span class="NAME">points</span><span class="PUNC">[</span><span class="NAME">diag</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3720
+ <span class='line'>3713</span> </span><span class="WHIT"> </span><span class="NAME">beta</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.Geometry.rad</span><span class="PUNC">(</span><span class="WHIT">
3721
+ <span class='line'>3714</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">points</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">X</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">Y</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3722
+ <span class='line'>3715</span> </span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3723
+ <span class='line'>3716</span> </span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NAME">diag</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NAME">nr</span><span class="PUNC">]</span><span class="WHIT">
3724
+ <span class='line'>3717</span> </span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3725
+ <span class='line'>3718</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3726
+ <span class='line'>3719</span>
3727
+ <span class='line'>3720</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNaN</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3728
+ <span class='line'>3721</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">;</span><span class="WHIT">
3729
+ <span class='line'>3722</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3730
+ <span class='line'>3723</span>
3731
+ <span class='line'>3724</span> </span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">t1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">pi2_n</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">0.5</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">beta</span><span class="PUNC">;</span><span class="WHIT">
3732
+ <span class='line'>3725</span>
3733
+ <span class='line'>3726</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">points</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">which</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">Math</span><span class="PUNC">[</span><span class="NAME">trig</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">t1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3734
+ <span class='line'>3727</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3735
+ <span class='line'>3728</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
3736
+ <span class='line'>3729</span>
3737
+ <span class='line'>3730</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">makeFct</span><span class="PUNC">(</span><span class="STRN">"X"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"cos"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">makeFct</span><span class="PUNC">(</span><span class="STRN">"Y"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"sin"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">pi2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3738
+ <span class='line'>3731</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3739
+ <span class='line'>3732</span>
3740
+ <span class='line'>3733</span> </span><span class="WHIT"> </span><span class="NAME">meet3Planes</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">n1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">d3</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3741
+ <span class='line'>3734</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3742
+ <span class='line'>3735</span> </span><span class="WHIT"> </span><span class="NAME">n31</span><span class="PUNC">,</span><span class="WHIT">
3743
+ <span class='line'>3736</span> </span><span class="WHIT"> </span><span class="NAME">n12</span><span class="PUNC">,</span><span class="WHIT">
3744
+ <span class='line'>3737</span> </span><span class="WHIT"> </span><span class="NAME">n23</span><span class="PUNC">,</span><span class="WHIT">
3745
+ <span class='line'>3738</span> </span><span class="WHIT"> </span><span class="NAME">denom</span><span class="PUNC">,</span><span class="WHIT">
3746
+ <span class='line'>3739</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
3747
+ <span class='line'>3740</span>
3748
+ <span class='line'>3741</span> </span><span class="WHIT"> </span><span class="NAME">n31</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">n3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3749
+ <span class='line'>3742</span> </span><span class="WHIT"> </span><span class="NAME">n12</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">n1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3750
+ <span class='line'>3743</span> </span><span class="WHIT"> </span><span class="NAME">n23</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">n2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3751
+ <span class='line'>3744</span> </span><span class="WHIT"> </span><span class="NAME">denom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.innerProduct</span><span class="PUNC">(</span><span class="NAME">n1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">n23</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3752
+ <span class='line'>3745</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3753
+ <span class='line'>3746</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">n23</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">n31</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d3</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">n12</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">denom</span><span class="PUNC">;</span><span class="WHIT">
3754
+ <span class='line'>3747</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3755
+ <span class='line'>3748</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
3756
+ <span class='line'>3749</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3757
+ <span class='line'>3750</span>
3758
+ <span class='line'>3751</span> </span><span class="WHIT"> </span><span class="NAME">meetPlanePlane</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v11</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v12</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v21</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v22</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3759
+ <span class='line'>3752</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT">
3760
+ <span class='line'>3753</span> </span><span class="WHIT"> </span><span class="NAME">no1</span><span class="PUNC">,</span><span class="WHIT">
3761
+ <span class='line'>3754</span> </span><span class="WHIT"> </span><span class="NAME">no2</span><span class="PUNC">,</span><span class="WHIT">
3762
+ <span class='line'>3755</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3763
+ <span class='line'>3756</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3764
+ <span class='line'>3757</span>
3765
+ <span class='line'>3758</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3766
+ <span class='line'>3759</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">v11</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3767
+ <span class='line'>3760</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">v12</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3768
+ <span class='line'>3761</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3769
+ <span class='line'>3762</span> </span><span class="WHIT"> </span><span class="NAME">no1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3770
+ <span class='line'>3763</span>
3771
+ <span class='line'>3764</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3772
+ <span class='line'>3765</span> </span><span class="WHIT"> </span><span class="NAME">v</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">v21</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3773
+ <span class='line'>3766</span> </span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Type.evaluate</span><span class="PUNC">(</span><span class="NAME">v22</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3774
+ <span class='line'>3767</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3775
+ <span class='line'>3768</span> </span><span class="WHIT"> </span><span class="NAME">no2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">v</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">w</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3776
+ <span class='line'>3769</span>
3777
+ <span class='line'>3770</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Mat.crossProduct</span><span class="PUNC">(</span><span class="NAME">no1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">no2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3778
+ <span class='line'>3771</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3779
+ <span class='line'>3772</span>
3780
+ <span class='line'>3773</span> </span><span class="WHIT"> </span><span class="NAME">project3DTo3DPlane</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">normal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">foot</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3781
+ <span class='line'>3774</span> </span><span class="WHIT"> </span><span class="COMM">// TODO: homogeneous 3D coordinates</span><span class="WHIT">
3782
+ <span class='line'>3775</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3783
+ <span class='line'>3776</span> </span><span class="WHIT"> </span><span class="NAME">le</span><span class="PUNC">,</span><span class="WHIT">
3784
+ <span class='line'>3777</span> </span><span class="WHIT"> </span><span class="NAME">d1</span><span class="PUNC">,</span><span class="WHIT">
3785
+ <span class='line'>3778</span> </span><span class="WHIT"> </span><span class="NAME">d2</span><span class="PUNC">,</span><span class="WHIT">
3786
+ <span class='line'>3779</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="PUNC">;</span><span class="WHIT">
3787
+ <span class='line'>3780</span>
3788
+ <span class='line'>3781</span> </span><span class="WHIT"> </span><span class="NAME">foot</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">foot</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3789
+ <span class='line'>3782</span>
3790
+ <span class='line'>3783</span> </span><span class="WHIT"> </span><span class="NAME">le</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.norm</span><span class="PUNC">(</span><span class="NAME">normal</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3791
+ <span class='line'>3784</span> </span><span class="WHIT"> </span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.innerProduct</span><span class="PUNC">(</span><span class="NAME">point</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">normal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3792
+ <span class='line'>3785</span> </span><span class="WHIT"> </span><span class="NAME">d2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.innerProduct</span><span class="PUNC">(</span><span class="NAME">foot</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">normal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3793
+ <span class='line'>3786</span> </span><span class="WHIT"> </span><span class="COMM">// (point - lbda * normal / le) * normal / le == foot * normal / le</span><span class="WHIT">
3794
+ <span class='line'>3787</span> </span><span class="WHIT"> </span><span class="COMM">// => (point * normal - foot * normal) == lbda * le</span><span class="WHIT">
3795
+ <span class='line'>3788</span> </span><span class="WHIT"> </span><span class="NAME">lbda</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d1</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">d2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">le</span><span class="PUNC">;</span><span class="WHIT">
3796
+ <span class='line'>3789</span> </span><span class="WHIT"> </span><span class="NAME">sol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Mat.axpy</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NAME">lbda</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">normal</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">point</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3797
+ <span class='line'>3790</span>
3798
+ <span class='line'>3791</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">;</span><span class="WHIT">
3799
+ <span class='line'>3792</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
3800
+ <span class='line'>3793</span>
3801
+ <span class='line'>3794</span> </span><span class="WHIT"> </span><span class="NAME">getPlaneBounds</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3802
+ <span class='line'>3795</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">mat</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">;</span><span class="WHIT">
3803
+ <span class='line'>3796</span>
3804
+ <span class='line'>3797</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">v1</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">v2</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
3805
+ <span class='line'>3798</span> </span><span class="WHIT"> </span><span class="NAME">mat</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
3806
+ <span class='line'>3799</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">v1</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v2</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
3807
+ <span class='line'>3800</span> </span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">v1</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">v2</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="WHIT">
3808
+ <span class='line'>3801</span> </span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3809
+ <span class='line'>3802</span> </span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3810
+ <span class='line'>3803</span>
3811
3811
  <span class='line'>3804</span> </span><span class="WHIT"> </span><span class="NAME">sol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Numerics.Gauss</span><span class="PUNC">(</span><span class="NAME">mat</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3812
- <span class='line'>3805</span> </span><span class="WHIT"> </span><span class="NAME">e1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3813
- <span class='line'>3806</span> </span><span class="WHIT"> </span><span class="NAME">e2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3814
- <span class='line'>3807</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">s1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3815
- <span class='line'>3808</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3816
- <span class='line'>3809</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
3817
- <span class='line'>3810</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3818
- <span class='line'>3811</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3819
- <span class='line'>3812</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3820
- <span class='line'>3813</span>
3821
- <span class='line'>3814</span> </span><span class="NAME">export</span><span class="WHIT"> </span><span class="KEYW">default</span><span class="WHIT"> </span><span class="NAME">Mat.Geometry</span><span class="PUNC">;</span><span class="WHIT">
3822
- <span class='line'>3815</span> </span></pre></body></html>
3812
+ <span class='line'>3805</span> </span><span class="WHIT"> </span><span class="NAME">s1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3813
+ <span class='line'>3806</span> </span><span class="WHIT"> </span><span class="NAME">s2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3814
+ <span class='line'>3807</span>
3815
+ <span class='line'>3808</span> </span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3816
+ <span class='line'>3809</span> </span><span class="WHIT"> </span><span class="NAME">sol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Numerics.Gauss</span><span class="PUNC">(</span><span class="NAME">mat</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rhs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3817
+ <span class='line'>3810</span> </span><span class="WHIT"> </span><span class="NAME">e1</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3818
+ <span class='line'>3811</span> </span><span class="WHIT"> </span><span class="NAME">e2</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sol</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3819
+ <span class='line'>3812</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">s1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">s2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e2</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
3820
+ <span class='line'>3813</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3821
+ <span class='line'>3814</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
3822
+ <span class='line'>3815</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3823
+ <span class='line'>3816</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
3824
+ <span class='line'>3817</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
3825
+ <span class='line'>3818</span>
3826
+ <span class='line'>3819</span> </span><span class="NAME">export</span><span class="WHIT"> </span><span class="KEYW">default</span><span class="WHIT"> </span><span class="NAME">Mat.Geometry</span><span class="PUNC">;</span><span class="WHIT">
3827
+ <span class='line'>3820</span> </span></pre></body></html>