<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//TaxonX//DTD Taxonomic Treatment Publishing DTD v0 20100105//EN" "../../nlm/tax-treatment-NS0.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tp="http://www.plazi.org/taxpub" article-type="research-article">
  <front>
    <journal-meta>
      <journal-id journal-id-type="publisher-id">17</journal-id>
      <journal-id journal-id-type="index">urn:lsid:arphahub.com:pub:8E638694-B4E0-570A-856A-746FF325BF6B</journal-id>
      <journal-title-group>
        <journal-title xml:lang="en">Research Ideas and Outcomes</journal-title>
        <abbrev-journal-title xml:lang="en">RIO</abbrev-journal-title>
      </journal-title-group>
      <issn pub-type="epub">2367-7163</issn>
      <publisher>
        <publisher-name>Pensoft Publishers</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.3897/rio.4.e25485</article-id>
      <article-id pub-id-type="publisher-id">25485</article-id>
      <article-id pub-id-type="manuscript">9074</article-id>
      <article-categories>
        <subj-group subj-group-type="heading">
          <subject>R Package</subject>
        </subj-group>
        <subj-group subj-group-type="scientific_subject">
          <subject>Computer &amp; Information sciences</subject>
          <subject>Mathematics</subject>
          <subject>Social sciences</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Novel pedagogical tool for simultaneous learning of plane geometry and R programming</article-title>
      </title-group>
      <contrib-group content-type="authors">
        <contrib contrib-type="author" corresp="no">
          <name name-style="western">
            <surname>Briz-Redón</surname>
            <given-names>Álvaro</given-names>
          </name>
          <xref ref-type="aff" rid="A1">1</xref>
        </contrib>
        <contrib contrib-type="author" corresp="yes">
          <name name-style="western">
            <surname>Serrano-Aroca</surname>
            <given-names>Ángel</given-names>
          </name>
          <email xlink:type="simple">angel.serrano@ucv.es</email>
          <uri content-type="orcid">https://orcid.org/0000-0002-9953-3848</uri>
          <xref ref-type="aff" rid="A2">2</xref>
        </contrib>
      </contrib-group>
      <aff id="A1">
        <label>1</label>
        <addr-line content-type="verbatim">Departament d’Estadística i Investigació Operativa, Facultat de Matemàtiques, Universitat de València, Valencia, Spain</addr-line>
        <institution>Departament d’Estadística i Investigació Operativa, Facultat de Matemàtiques, Universitat de València</institution>
        <addr-line content-type="city">Valencia</addr-line>
        <country>Spain</country>
      </aff>
      <aff id="A2">
        <label>2</label>
        <addr-line content-type="verbatim">Facultad de Veterinaria y Ciencias Experimentales, Universidad Católica de Valencia San Vicente Mártir, Valencia, Spain</addr-line>
        <institution>Facultad de Veterinaria y Ciencias Experimentales, Universidad Católica de Valencia San Vicente Mártir</institution>
        <addr-line content-type="city">Valencia</addr-line>
        <country>Spain</country>
      </aff>
      <author-notes>
        <fn fn-type="corresp">
          <p>Corresponding author: Ángel Serrano-Aroca (<email xlink:type="simple">angel.serrano@ucv.es</email>).</p>
        </fn>
        <fn fn-type="edited-by">
          <p>Academic editor: </p>
        </fn>
      </author-notes>
      <pub-date pub-type="collection">
        <year>2018</year>
      </pub-date>
      <pub-date pub-type="epub">
        <day>05</day>
        <month>04</month>
        <year>2018</year>
      </pub-date>
      <volume>4</volume>
      <elocation-id>e25485</elocation-id>
      <uri content-type="arpha" xlink:href="http://openbiodiv.net/B3D6D6E9-01EA-5B47-9747-57D96251F1EB">B3D6D6E9-01EA-5B47-9747-57D96251F1EB</uri>
      <uri content-type="zenodo_dep_id" xlink:href="https://zenodo.org/record/1222619">1222619</uri>
      <history>
        <date date-type="received">
          <day>03</day>
          <month>04</month>
          <year>2018</year>
        </date>
      </history>
      <permissions>
        <copyright-statement>Álvaro Briz-Redón, Ángel Serrano-Aroca</copyright-statement>
        <license license-type="creative-commons-attribution" xlink:href="http://creativecommons.org/licenses/by/4.0" xlink:type="simple">
          <license-p>This is an open access article distributed under the terms of the Creative Commons Attribution License 4.0 (CC-BY), which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited.</license-p>
        </license>
      </permissions>
      <abstract>
        <label>Abstract</label>
        <p>Programming a computer is an activity that can be very beneficial to undergraduate students in terms of improving their mental capabilities, collaborative attitudes and levels of engagement in learning. Despite the initial difficulties that typically arise when learning to program, there are several well-known strategies to overcome them, providing a very high benefit-cost ratio to most of the students. Moreover, the use of a programming language usually raises the interest of students to learn any specific concept, which has caused that many teachers around the world employ a programming language as a learning environment to treat almost every possible topic. Particularly, mathematics can be taught and learnt while using a suitable programming language. The R programming language is endowed with a wide range of capabilities that allow its use to learn different kind of concepts while programming. Therefore, complex subjects such as mathematics could be learnt with the help of this powerful programming language. In addition, since the R language provides numerous graphical functions, it could be very useful to acquire simultaneously basic plane geometry and programming knowledge at the undergraduate level. This paper describes the LearnGeom R package, a novel pedagogical tool, which contains multiple functions to learn geometry in R at different levels of difficulty, from the most basic geometric objects to high-complexity geometric constructions, while developing numerous programming skills.</p>
      </abstract>
      <kwd-group>
        <label>Keywords</label>
        <kwd>Mathematics Education</kwd>
        <kwd>Geometry Education</kwd>
        <kwd>Computational Thinking</kwd>
        <kwd>Programming Language</kwd>
        <kwd>R package</kwd>
      </kwd-group>
      <funding-group>
        <funding-statement>The authors would like to acknowledge the Universidad Católica de Valencia San Vicente Mártir and the Ministry of Economy, Industry and Competitiveness for the financial support of this work through the 2018-231-001UCV and MAT2015-69315-C3-1-R grants respectively.</funding-statement>
      </funding-group>
      <counts>
        <fig-count count="7"/>
        <table-count count="3"/>
        <ref-count count="40"/>
      </counts>
    </article-meta>
  </front>
  <body>
    <sec sec-type="Introduction">
      <title>Introduction</title>
      <p>In the field of informatics, programming is the activity that basically consists of translating from human language to the language understood by a computer <xref ref-type="bibr" rid="B4262550">McCracken (1957)</xref>.</p>
      <p>In addition to its inherent importance in the computational sciences, learning to program provides powerful strategies for thinking, designing and solving problems <xref ref-type="bibr" rid="B4262444">Booth (1958)</xref>, <xref ref-type="bibr" rid="B4242890">Howe et al. (1981)</xref>, <xref ref-type="bibr" rid="B4262626">Soloway (1993)</xref>. In fact, these authors describe a two-phase process, consisting of finding the problem solution and then rewriting this solution in an alternative and precise language that can be understood by the computer.</p>
      <p>The nature of programming provides certain advantages to the user that very few mental activities can offer. For example, it allows the programmer to explore thinking processes, improve logical reasoning and increase capacity to correct mistakes <xref ref-type="bibr" rid="B4262559">Papert (1980)</xref>. Moreover, the practice of programming is highly correlated with the development of a good linguistic capacity and, consequently, with a better academic performance <xref ref-type="bibr" rid="B4242915">Lehrer and DeBernard (1987)</xref>, <xref ref-type="bibr" rid="B4242975">Palumbo (1990)</xref>.</p>
      <p>There are multiple studies that have confirmed the benefits of programming on young students. For example, already in the early 1970s, it was concluded in a survey conducted by <xref ref-type="bibr" rid="B4242870">Feurzeig et al. 2011</xref> that the use of LOGO programming language could enhance the reading ability of some students, as well as increasing the interest in learning and the level of self-confidence of many of them.</p>
      <p>At the same time, there is little disagreement about the declaration of programming as a complex activity <xref ref-type="bibr" rid="B4262435">Govender (2009)</xref>. More precisely, <xref ref-type="bibr" rid="B4262425">Du Boulay (1986)</xref> identified five kinds of difficulties: lack of orientation, ignorance about the machine being employed (usually a computer), inadaptation to the language, problems of comprehension and absence of method. Although these five frequent difficulties are interconnected, students specially tend to have problems with the programming language itself. Language's syntax, that is, the collection of words and symbols that allow a human to communicate with a machine, can be excessively rigid to a novel user of a programming language. In connection with the syntax, the meaning of each of its elements forces the students to carry out processes of abstraction and reasoning that they are not always able to assume, deriving sometimes in misconceptions and wrong analogies <xref ref-type="bibr" rid="B4262646">Spohrer et al. (1985)</xref>. Furthermore, it is really difficult to teach students to systematize their programming practices in order to be more efficient and make less mistakes. In this regard, the common stages recommended when programming could be summarized as follows: problem approach, language development, testing and correction/improvement.</p>
      <p>In view of all these difficulties, what strategies should be followed for the correct teaching of programming? While being aware that each student learns in a different way, there are some accepted strategies in order to reduce, at least to a certain extent, the difficulties that arise when programming. In the first place, the choice of the programming language is key. The basic operating rules and the rigid syntax are common to all programming languages, but not all of them are equally accessible, especially from the point of view of a totally inexperienced user. The wide variety of languages available today, the majority of which are free software, render this task much easier.</p>
      <p>Once the language has been conveniently chosen, different strategies can be carried out. Some methodological examples of successful programming teaching approaches include: simplifying and dividing problems into simpler sub-problems, defining and explaining a model based on the machine-language environment in which the student is working <xref ref-type="bibr" rid="B4262660">Statz and Miller (1978)</xref>, slightly modifying sets of instructions to solve similar problems <xref ref-type="bibr" rid="B4242935">Linn and Dalbey (1985)</xref>, or constantly addressing applied problems.</p>
      <p>Learning through the use of a programming language can result more interesting and exciting for a student, and explains somehow why it has been used to teach and study mathematics during the last decades, with overall successful results, as described by <xref ref-type="bibr" rid="B4243056">Wang et al. (2015)</xref>. In addition, the use of programming as a learning vehicle favours collaboration between students and the development of competencies related to autonomous learning <xref ref-type="bibr" rid="B4242860">Falloon (2016)</xref>.</p>
      <p>Currently, there are already some languages and programs focused on mathematics learning and teaching at undergraduate level, being Scratch <xref ref-type="bibr" rid="B4262752">Resnick et al. (2009)</xref> and GeoGebra <xref ref-type="bibr" rid="B4262463">Hohenwarter (2002)</xref> two of the most important by far.</p>
      <p>Scratch possesses most of the common features that are associated to a programming language. However, its style is predominantly graphical, which differs to the vast majority of programming languages. This graphical orientation clearly reduces the initial difficulty of learning to program, but also avoids the development of some other programming skills usually acquired in the classical educational way.</p>
      <p>The ScratchMaths project <xref ref-type="bibr" rid="B4262406">Benton et al. (2016)</xref> was developed in four schools located in London with students aged 9 to 11 years to learn mathematics through Scratch programming on four basic objectives: to explore, explain, predict and share. This project is still in progress and has recently shown that the correct design and sequencing of activities around a mathematical concept, together with the continuous help of specialized teachers, allows students to learn with interest and in a meaningful way <xref ref-type="bibr" rid="B4242839">Benton et al. (2018)</xref>.</p>
      <p>In addition, researchers such as <xref ref-type="bibr" rid="B4262778">Foerster (2016)</xref> and <xref ref-type="bibr" rid="B4242809">Akpinar and Aslan (2015)</xref> proved that the application of the Scratch language to teaching mathematics can be very successful. Thus, <xref ref-type="bibr" rid="B4262778">Foerster (2016)</xref> applied this Scratch programming methodology in a class of about 11-year-old students while developing mathematical concepts related to polygon congruence and tessellation construction. The results of this study showed that the learning process run very smoothly and pleasantly for the students, and after about two years, the students achieved an excellent knowledge of geometry in comparison with the other students who did not follow this pedagogical methodology. These results clearly demonstrate the possible long-term positive effects that this learning methodology can produce. In the same line of research, <xref ref-type="bibr" rid="B4242809">Akpinar and Aslan (2015)</xref> applied Scratch language to create a learning environment that allowed the study of probability. Although Scratch does not have specific elements for dealing with probabilistic concepts, the implementation of experimental and simulated situations was really helpful to improve students' proficiency in this branch of mathematics. The tests carried out before and after the sessions showed that the students significantly increased their knowledge of probability. At the same time, the sessions allowed students to exploit their creative facets by designing multiple games associated with random experiments.</p>
      <p>On the other hand, GeoGebra is dynamic mathematics software, which brings together geometry, algebra, spreadsheets, graphing, statistics and calculus in one easy-to-use package. Several works confirm the advantages of using GeoGebra at undergraduate level. <xref ref-type="bibr" rid="B4243066">Zengin et al. (2012)</xref> designed an assisted instruction of trigonometry with GeoGebra that resulted more effective than the classical approach, based on constructionist theory. In the same way, <xref ref-type="bibr" rid="B4262578">Priatna (2017)</xref> showed that students being taught with the aid of GeoGebra significantly outperformed students subject to classical education in terms of mathematical representation ability. Other researchers such as <xref ref-type="bibr" rid="B4242799">Akkaya et al. (2011)</xref> proposed the learning of symmetry with GeoGebra, facilitating students to visualize, generalize and share with their classmates, producing an active and collaborative learning environment. Very recently, <xref ref-type="bibr" rid="B4262539">Masri et al. (2017)</xref> tested GeoGebra with some degree of success with a group of Malaysian students, whose mathematical level was later compared to students of the same year that had followed traditional teaching techniques. Despite there were not found significant differences between the two groups of students regarding the mathematical level acquired, students that were taught with GeoGebra clearly appreciated the use of this program during the development of the lessons. Finally, a very interesting finding was achieved by <xref ref-type="bibr" rid="B4243032">Saha et al. (2010)</xref>. The use of GeoGebra to teach plane geometry did not appear as significantly better for students already possessing a high visual-spatial ability, when compared to students being taught without the help of the program. However, these differences were clearly revealed when considering students with a low visual-spatial ability, confirming the positive effects of using this software.</p>
      <p>Another programming language, which is currently very popular is <xref ref-type="bibr" rid="B4262617">R Team (2018)</xref>. This language, even though it has always been conceived as an environment for performing statistical analysis, is also endowed with a wide range of capabilities that allow its use to learn different kind of concepts while programming. Therefore, complex subjects such as mathematics could be learnt with the help of this powerful programming language.</p>
      <p>For example, <xref ref-type="bibr" rid="B4262588">Pruim et al. (2017)</xref> have recently developed the Mosaic project, which integrates a set of functions to facilitate the introduction of basic statistics and data science concepts such as visualization, modelling and simulation. Other authors such as <xref ref-type="bibr" rid="B4262525">Mascaró et al. (2014)</xref> and <xref ref-type="bibr" rid="B4242965">Mascaró et al. (2016)</xref> have shown how beneficial can be for a university student to be taught statistics with the aid of the R language, in terms of understanding and engagement to the subject matter.</p>
      <p>In addition, since the R language provides numerous graphical functions, it can be very useful to simultaneously acquire basic plane geometry and R programming knowledge at the undergraduate level.</p>
      <p>Therefore, in this work we present a novel pedagogical tool to simultaneously learn plane geometry and programming based on R, which we have denominated LearnGeom. This tool is available for secondary school teachers, which may be interested in teaching plane geometry and R programming skills at the same time, and may desire to complement the use of other languages and software with this R package. It can be downloaded once the R programming language is installed in your computer (<ext-link ext-link-type="uri" xlink:href="https://www.r-project.org">https://www.r-project.org</ext-link>) and after typing <italic>install.packages(LearnGeom)</italic> in the program console to install the developed LearnGeom R package. The LearnGeom R-package can also be found as a github repository in <xref ref-type="bibr" rid="B4311642">Briz-Redón and Serrano-Aroca (2018)</xref>.</p>
    </sec>
    <sec sec-type="Basic functions of the package">
      <title>Basic functions of the package</title>
      <p>The LearnGeom R package provides basic functions to treat plane geometry. Therefore, the user is expected to work on a coordinate plane in order to manipulate different geometric objects and constructions. Thus, the function <italic>CoordinatePlane</italic> allows the user to plot an empty coordinate plane with customizable limits for the X and Y axis. For example, <italic>CoordinatePlane(-5, 5, -5, 5)</italic> can be typed to set a coordinate plane in the range [-5,5] x [-5,5], which is the one used for most of the examples included in the paper. Once a coordinate plane is started, different geometric objects can be created and plotted on it. The basic geometric objects that can be utilised in this version of the package are five: points, segments, arcs, lines and polygons.</p>
      <p>All of them can be plotted in the coordinate plane with function <italic>Draw</italic>, and the appropriate use of the methods that R offers can lead to different mathematical concepts and many kind of geometric problems. A point can be created by simply defining a two-dimensional vector in R, e.g., <italic>P = c(0,0)</italic> for the usual origin of coordinates. This definition is also used for the creation of a geometric vector to determine a direction in the plane. The coincidence of both definitions also exists if classical mathematical notations are followed. Therefore, it should not be a source of confusion for the user.</p>
      <p>The first method to define a segment in the plane, which is the most basic one, consists of the choice of two points of the plane, P and Q, and applying the shortest path (in euclidean distance) to connect them. There is another common method to define a segment in the plane: from a starting point, choosing an angle and a length for the segment. Both possibilities can be achieved with the <italic>CreateSegmentPoints</italic> and <italic>CreateSegmentAngle</italic> functions of the package. A line, as a segment, can be defined from two points, or from a point and an angle. Moreover, there is a standard combination of parameters to characterize every line in the plane: the slope and the intercept. For this reason, <italic>CreateLinePoints</italic> and <italic>CreateLineAngle</italic> functions return a two-dimensional vector that contains the slope and intercept of the line, regardless of the way it is defined. The use of the pair slope-intercept has a problem with vertical lines, which are parallel to Y axis. In the case that the user defines a line of this kind, with any of the two available functions, the returning object will be a string two-dimensional vector. It will include the word "<italic>Inf</italic>" for the first position (infinite slope) and the constant X-value for the line in the second (as a character).</p>
      <p>An arc is simply a part of a circumference, or even the circumference itself. The <italic>CreateArcAngle</italic> function allows the user to make an arc from a circumference with four parameters to choose: the center of the circumference, the radius of the circumference and the two angles, from 0 to 360 degrees that determine the part of the circumference to be plotted. Another possibility to create an arc in the plane consists of connecting two points. The <italic>CreateArcPointsDist</italic> function allows the user to connect any two given points in the plane by an arc. Of course, there are many (infinite) arcs that pass through every two points in a plane. The parameter <italic>radius</italic> fixes a radius for the arc to be built. If the selected radius is smaller than half the distance between the points, the problem has no solution and no arc is produced (a message is shown on the screen to inform the user).</p>
      <p>Polygons are closed figures made of a finite number of points (there must be 3 points at least). The segments that join the points of a polygon are called the sides of the polygon, and each of the sides must intersect only at the two points that connects (auto-intersections are not allowed in a polygon). It is usual to represent a polygon by an ordered list of points, which indicates the way the points are connected. For example, if a polygon is represented by a list of points [P1, P2,P3], it means that the three segments of this polygon (a triangle) join P1 with P2, P2 with P3 and P3 with P1. The <italic>CreatePolygon</italic> function admits any finite number of points to produce a polygon, which corresponds to the definition of a polygon as a list of points. It is important to introduce the points in a certain order to get the desired output because the same combination of points can lead to different figures. In order to make a polygon without self-intersections, the points must be passed to the function following a clockwise (or counterclockwise) direction. Moreover, this function includes a procedure to detect collinearity between the points, which makes the function to show the message "Some of the inserted points are collinear. This could lead to a defective polygon" when this occurs. If the user is interested in building a regular polygon given its center, number of sides and side length, the <italic>CreateRegularPolygon</italic> function can do it.</p>
      <p>It is quite simple to make these objects with basic graphical R functions. However, the goal was to create a homogeneous group of functions with a minimal number of parameters. Although the already existing functions in the R language are simple for a programmer, they may contain too many parameters for a novice user. Moreover, it is essential to define the functions with a little number of parameters in order to highlight the different existing methods to define the same geometric object.</p>
      <p>Finally, the <italic>Draw</italic> function is programmed to be able to accept all kind of geometric objects as a parameter. This fact seems to be essential to understand geometric ideas because of providing the user a quick and intuitive tool to easily visualize while programming. The only visible difference among the different geometric objects and <italic>Draw</italic> function occurs with polygons. This function adds, only for polygons, the option of using two colours and the possibility of inserting labels at each of the points of the object.</p>
      <p>As a summary, Table <xref ref-type="table" rid="T4243242">1</xref> describes the eight basic functions included in the package to create geometric objects.</p>
      <p>A brief explanation of the parameters which are associated to each of these functions can be found in Table <xref ref-type="table" rid="T4261989">2</xref>.</p>
      <p>Table <xref ref-type="table" rid="T4252729">3</xref> clarifies the structure of the outputs produced by each of the functions and the information which they provide about the geometric object that they represent.</p>
      <p>Fig. <xref ref-type="fig" rid="F4299887">1</xref> contains examples of use of several functions of the LearnGeom R package, including some of the R instructions needed to use them and their graphical outputs. Fig. <xref ref-type="fig" rid="F4299887">1</xref><xref ref-type="fig" rid="F4299907">a</xref> shows three polygons of 3, 4 and 5 sides that can be freely defined with the <italic>CreatePolygon</italic> function. Fig. <xref ref-type="fig" rid="F4299887">1</xref><xref ref-type="fig" rid="F4299908">b</xref> includes the first nine regular polygons as can created by the function <italic>CreateRegularPolygon</italic> with lengthside <italic>l</italic> = 1 and varying center. Fig. <xref ref-type="fig" rid="F4299887">1</xref><xref ref-type="fig" rid="F4299909">c</xref>, <xref ref-type="fig" rid="F4299910">d</xref> also contains examples of removing and adding points with the <italic>RemovePointPoly</italic> and <italic>AddPointPoly</italic> functions, along with the lines of code required to obtain these polygons after a regular pentagon (<italic>Penta</italic>) is defined. Fig. <xref ref-type="fig" rid="F4299887">1</xref><xref ref-type="fig" rid="F4299911">e</xref>, <xref ref-type="fig" rid="F4299912">f</xref> show examples of use of the <italic>CreateArcAngles</italic> and <italic>CreateArcPointsDist</italic> functions, which attempt to clarify the use of each oftheir parameters.</p>
      <p>Fig. <xref ref-type="fig" rid="F4300006">2</xref> contains a couple of examples of use of the specific functions available for creating lines and segments, including the required R code. This figure shows that both lines and segments are the same because the introduced parameters are equivalent. Depending on the situation and the available information, users may find one or the other one as the most suitable tool.</p>
      <p>Moreover, if a more experienced user of the language aims to create a line by specifying its slope and intercept, even though there is no function in the package to perform this, it can be achieved by simply defining a two-dimensional vector containing these basic parameters of the line and appending the class <italic>Line</italic> to it. This also applies to the other three geometric objects. However, this is not the use of the package we would expect for a new user of it. The rest of this paper contains multiple examples of use of some functions of the package that have not been mentioned yet and several applications which are possible to perform by combining classical geometric problems, different programming techniques and all the functions included in the package. These applications are thus classified into three categories according to their level of difficulty: basic, intermediate and advanced.</p>
    </sec>
    <sec sec-type="Basic level">
      <title>Basic level</title>
      <sec sec-type="Affine transformations">
        <title>Affine transformations</title>
        <p>Affine functions are geometric transformations that preserve collinearity and ratios of distances. LearnGeom contains functions to apply six different affine transformations: homothety, reflection, rotation, shear, similarity and translation. Each of these transformations is associated with a 2 x 2 matrix, depending on one or several specific parameters.</p>
        <p>All of these functions apply to polygons. However, they also can be used with lines and segments in the case of rotation and translation. For this reason, the names for the functions related to these transformation miss the word <italic>Polygon</italic>.</p>
        <p>The use of the affine transformations functions included in the package can be seen in Fig. <xref ref-type="fig" rid="F4300077">3</xref>. The lines of code that a user needs to type to produce the outputs included in this figure are also provided. The prior setting of a coordinate plane and the creation and drawing of a triangle (the blue one in Fig. <xref ref-type="fig" rid="F4300077">3</xref>) is needed but omitted for greater clarity. Once a triangle has been created, each of the transformations can be applied to it, and both the original triangle and the transformed one can be plotted in the same coordinate plane (in blue and orange, respectively, in Fig. <xref ref-type="fig" rid="F4300077">3</xref>).</p>
        <sec sec-type="Reflection">
          <title>Reflection</title>
          <p>A reflection needs the definition of a line to be used as the axis of reflection, which can be built by the <italic>CreateLinePoints</italic> or <italic>CreateLineAngle</italic> functions (Fig. <xref ref-type="fig" rid="F4300077">3</xref><xref ref-type="fig" rid="F4300087">a</xref>).</p>
        </sec>
        <sec sec-type="Rotation">
          <title>Rotation</title>
          <p>The most familiar parameter related to this transformation is the angle of rotation, which is defined as 30º this time. However, this angle does not fully characterise this transformation because it is also necessary the only point remaining fixed after the transformation (for this example, point (2,0) of the triangle) (Fig. <xref ref-type="fig" rid="F4300077">3</xref><xref ref-type="fig" rid="F4300088">b</xref>).</p>
        </sec>
        <sec sec-type="Similarity">
          <title>Similarity</title>
          <p>A similarity only needs the selection of one parameter, <italic>k</italic>, in the <italic>SimilarPolygon</italic> package function. This parameter allows the user to create a polygon similar to the original one, which can be a contraction (<italic>k</italic> &lt; 1) or an expansion (<italic>k</italic> &gt; 1), altering the size of the polygon without changing its shape (Fig. <xref ref-type="fig" rid="F4300077">3</xref><xref ref-type="fig" rid="F4300089">c</xref>).</p>
        </sec>
        <sec sec-type="Translation">
          <title>Translation</title>
          <p>Translation simply represents the movement of a polygon in the direction of vector <italic>v</italic>, conserving the angles and lengths of the initial polygon (Fig. <xref ref-type="fig" rid="F4300077">3</xref><xref ref-type="fig" rid="F4300090">d</xref>).</p>
        </sec>
        <sec sec-type="Shear and Homothety">
          <title>Shear and Homothety</title>
          <p>Shear and homothety are the remaining affine transformations available in the package. Even though they are less common and known than the other four, they offer many possibilities to the user.</p>
          <p><italic>ShearedPolygon</italic> shares parameter <italic>k</italic> with <italic>SimilarPolygon</italic>, as both transformations enable a change in the size of the polygon. However, the transformation produced by <italic>ShearedPolygon</italic> does not conserve the shape of the object. The <italic>direction</italic> parameter has two possible values, <italic>horizontal</italic> and <italic>vertical</italic>, which allow the deformation of the initial polygon in the two directions of the plane (Fig. <xref ref-type="fig" rid="F4300077">3</xref><xref ref-type="fig" rid="F4300091">e</xref>).</p>
          <p>On the other hand, the function <italic>Homothety</italic> can also produce an enlargement or reduction of a polygon in relation to a point of the plane called the center of the homothety. The function contains an option to display all the lines that connect the points of the original and the transformed polygons passing through the center (Fig. <xref ref-type="fig" rid="F4300077">3</xref><xref ref-type="fig" rid="F4300092">f</xref>).</p>
        </sec>
      </sec>
      <sec sec-type="Points of the triangle">
        <title>Points of the triangle</title>
        <p>We can appreciate a combined use of the package fuctions and the R language capabilities by obtaining a notable point of a triangle: its circumcenter, that is, the intersection of its three perpendicular bisector lines.</p>
        <sec sec-type="Building a triangle and its middle points">
          <title>Building a triangle and its middle points</title>
          <p>For example, consider the triangle of points (0,0), (1,1) and (2,0). The <italic>CreatePolygon</italic> function is used for this step. Letters A, B and C are used to represent the three points of the triangle. It is also convenient to calculate and visualize the middle points of the triangle sides. The <italic>MidPoint</italic> function of this package can perform this task (see Fig. <xref ref-type="fig" rid="F4300195">4</xref><xref ref-type="fig" rid="F4300200">a</xref>).</p>
        </sec>
        <sec sec-type="Orthogonal vectors and auxiliary points">
          <title>Orthogonal vectors and auxiliary points</title>
          <p>In order to find the bisectors of the sides, it is necessary to find an orthogonal vector to each of them. Prior to that, the vectors that connect the three points have to be computed (defined as the difference between the points). Now, one alternative to find the orthogonal of each of these vectors consists of changing the order of the coordinates and the sign of one of them, as it is shown in the code in Fig. <xref ref-type="fig" rid="F4300195">4</xref><xref ref-type="fig" rid="F4300200">a</xref>. Following the orthogonal direction, and starting from each of the middle points, three auxiliary new points are found (see Fig. <xref ref-type="fig" rid="F4300195">4</xref><xref ref-type="fig" rid="F4300200">a</xref>).</p>
        </sec>
        <sec sec-type="Lines creation and intersection">
          <title>Lines creation and intersection</title>
          <p>The auxiliary points previously obtained are then connected to the middle points of the sides of the triangle through a line (see Figure Fig. <xref ref-type="fig" rid="F4300195">4</xref><xref ref-type="fig" rid="F4300201">b</xref>).</p>
          <p>As it can be observed in these blocks of code, several functions of the package reduce the difficulty of some of the steps, allowing the user to focus on the most advanced topics involved in the resolution of the problem, such as orthogonality and operations on points and vectors.</p>
        </sec>
      </sec>
    </sec>
    <sec sec-type="Intermediate level">
      <title>Intermediate level</title>
      <sec sec-type="Tessellations">
        <title>Tessellations</title>
        <p>A tessellation, also known as a tiling, is a pattern that is made by repeating a basic geometric figure, or combination of figures, along a plane <xref ref-type="bibr" rid="B4262453">Grunbaum and Shephard (1977)</xref>. Tessellations appear sometimes in nature and are often present in architectural constructions <xref ref-type="bibr" rid="B4242945">Lu and Steinhardt (2007)</xref>. For example, beehives, the perfect structures created by bees to produce their honey, can be considered as a tessellation made of regular hexagons. Therefore, with the help of the function <italic>Tessellation</italic>, a user with some experience using this package could be able to generate a pattern that reminds a beehive. Besides, the user could divide the problem into two parts: setting an initial regular hexagon in the plane finding two other hexagons that are contiguous to it and a second part consisting of allowing the extension of the pattern to a wider region of the plane by the appropriate use of the <italic>Tessellation</italic> function.</p>
        <sec sec-type="Setting an initial hexagon">
          <title>Setting an initial hexagon</title>
          <p>The process starts with the creation of a regular hexagon in the plane (see Fig. <xref ref-type="fig" rid="F4300271">5</xref><xref ref-type="fig" rid="F4300276">a</xref>).</p>
        </sec>
        <sec sec-type="Contiguous hexagons">
          <title>Contiguous hexagons</title>
          <p>In order to obtain two hexagons that are contiguous to the initial one, <italic>Hexa0</italic> can be translated in the direction determined by its center and the middle point of the segment that joins points 1 and 6 (for <italic>Hexa1</italic>) and the one that joins 2 and 3 (for <italic>Hexa2</italic>) (see Fig. <xref ref-type="fig" rid="F4300271">5</xref><xref ref-type="fig" rid="F4300277">b</xref>).</p>
        </sec>
        <sec sec-type="Creating tessellations">
          <title>Creating tessellations</title>
          <p>The final step requires the use of the <italic>Tessellation</italic> function with the right separation parameter (see Fig. <xref ref-type="fig" rid="F4300271">5</xref><xref ref-type="fig" rid="F4300278">c</xref>). The use of the <italic>MidPoint</italic> function and visualization are essential for this task. Moreover, it should be noted that the hexagons are passed to the <italic>Tessellation</italic> function as a list. In general, this fact allows to apply simultaneously the tessellation function to a set of several polygons. In order to achieve the desired pattern, it is very important to set correctly the separation parameter of the function. Otherwise, the resulting pattern could contain some overlaps, which are uncommon in the creation of tessellations. Moreover, one could minimize the code to get the <italic>Hexa1</italic> and <italic>Hexa2</italic> hexagons by using the <italic>ReflectedPolygon</italic> function. It is clearly noticeable that these two hexagons must be symmetric to <italic>Hexa0</italic> about the two lines that connect point 1 with 6, and 2 with 3. The optimized code and its output is included in Fig. <xref ref-type="fig" rid="F4300271">5</xref><xref ref-type="fig" rid="F4300279">d</xref>. The two options to create <italic>Hexa1</italic> and <italic>Hexa2</italic> seem enough to show that the use of this learning approach could be beneficial to improve, simultaneously, geometric thinking and programming skills.As another possible application, <italic>Tessellation</italic> could allow the user to attempt a classical mathematical problem: to complete a plane region by tiling polygons <xref ref-type="bibr" rid="B4243042">Schattschneider (1981)</xref>. Some functions of the package such as <italic>RotatedPolygon</italic> or <italic>TranslatedPolygon</italic> would be necessary for this matter.</p>
        </sec>
      </sec>
      <sec sec-type="Working on the real world">
        <title>Working on the real world</title>
        <p>The <italic>GetMap</italic> function of the <italic>RgoogleMaps</italic> package gives users the possibility to treat geometric objects over a plane that represents a piece of the world we live in. The zoom parameter ranges from 0 to 21, depending on the location, allowing the user to visualize big pictures of the world but also little details of some buildings.</p>
        <p>The function <italic>CoordinateImage</italic> of this package works as <italic>CoordinatePlane</italic>. However, in this case, it is capable of setting the axis and the grid over an image obtained from Google Maps. As an illustration, the approximation of the British coast with a polygon can be performed, which is a problem that is connected to the posterior definition of fractal <xref ref-type="bibr" rid="B4242955">Mandelbrot (1967)</xref>. The last lines of this section contain an R code (in <italic>italics</italic>) for achieving this task, in which a polygon of 30 points is created with the aid of the <italic>SelectPoints</italic> function of the package. The first argument of the <italic>GetMap</italic> function is a vector containing the latitude and longitude, in degrees, which are chosen as the center of the picture. Latitude and longitude can range from -90º to 90º and from -180º to 180º respectively as usual. A zoom of 5 is selected for being able to visualize the complete British coast.</p>
        <p>&gt; <italic>library(RgoogleMaps)</italic></p>
        <p>&gt; <italic>ima &lt;- GetMap(c(53.404059,-3.351493), zoom = 5, maptype = "satellite")</italic></p>
        <p>&gt; <italic>ima &lt;- ima[[4</italic>]]</p>
        <p>&gt; <italic>CoordinateImage(-10, 10, -10, 10, ima)</italic></p>
        <p>&gt; <italic>S &lt;- SelectPoints(30)</italic></p>
        <p>&gt; <italic>Draw(S, c("transparent","white"))</italic></p>
      </sec>
    </sec>
    <sec sec-type="Advanced level">
      <title>Advanced level</title>
      <sec sec-type="Recursive programming">
        <title>Recursive programming</title>
        <p>Recursive programming is one of the most efficient strategies to find the solution of some problems. However, it is also a difficult task for novice programmers. For quite advanced students, recursive programming could be treated to build a well-known mathematical structure: a fractal <xref ref-type="bibr" rid="B4262482">Mandelbrot (1977)</xref>. Fractals are geometric objects which satisfy the property of self-similarity, which basically means that each of their parts satisfy the same properties and internal relationships as the complete object does.</p>
        <p>As an illustration, this definition can be easily imagined with the help of one of the most famous fractals: the Sierpinski triangle <xref ref-type="bibr" rid="B4242905">Knaster and Kuratowski (1927)</xref>. The process of building this triangle consists of the following steps:</p>
        <list list-type="order">
          <list-item>
            <p>Start from an equilateral triangle.</p>
          </list-item>
          <list-item>
            <p>Find the middle points of each side of this triangle.</p>
          </list-item>
          <list-item>
            <p>Connect the three points obtained in step 2 to obtain a new triangle. This triangle is also equilateral and rotated 180º with respect to the initial position.</p>
          </list-item>
          <list-item>
            <p>Remove the triangle built in step 2 from the initial triangle. Now you have three little triangles inside the initial one. This is the first iteration to build the Sierpinski triangle.</p>
          </list-item>
        </list>
        <p>If the steps 1-4 are repeated in each of these three triangles, nine smaller triangles will be obtained, which are similar to the previous ones. This is already the second iteration of the construction and a constant repetition of the steps leads to any iteration of the triangle. The Sierpinski triangle is theoretically defined as the infinite repetition of the steps 1-4. However, from a practical point of view, we consider interesting only the building of the first iterations. This process can be implemented in R with a few lines of code due to the efficiency of recursive programming and some of the functions contained in the LearnGeom R package. For example, the code available in the following lines (in <italic>italics</italic>) is a possible approach to produce the first six iterations of the Sierpinski triangle. It is necessary to create a function <italic>Sierpinski</italic> to call it recursively during the triangle construction:</p>
        <p>&gt; <italic>x_min &lt;- -6; x_max &lt;- 6; y_min &lt;- -6; y_max &lt;- 6</italic></p>
        <p>&gt; <italic>CoordinatePlane(x_min, x_max, y_min, y_max)</italic></p>
        <p>&gt; <italic>n &lt;- 3; C &lt;- c(0,0); l &lt;- 5</italic></p>
        <p>&gt;<italic> Tri &lt;- CreateRegularPolygon(n, C, l)</italic></p>
        <p>&gt;<italic> it &lt;- 6</italic></p>
        <p>&gt; <italic>Sierpinski &lt;- function(Tri, it){</italic></p>
        <p>
          <italic>         if (it==1){</italic>
        </p>
        <p>
          <italic>            Draw(Tri,"black")</italic>
        </p>
        <p>
          <italic>         }</italic>
        </p>
        <p>
          <italic>         if (it&gt;1){</italic>
        </p>
        <p>
          <italic>            Sierpinski(CreatePolygon(Tri[1,], MidPoint(Tri[1,],Tri[2,]), MidPoint(Tri[1,],Tri[3,])), it-1)</italic>
        </p>
        <p>
          <italic>            Sierpinski(CreatePolygon(Tri[2,] ,MidPoint(Tri[1,],Tri[2,]), MidPoint(Tri[2,],Tri[3,])), it-1)</italic>
        </p>
        <p>
          <italic>            Sierpinski(CreatePolygon(Tri[3,] ,MidPoint(Tri[1,],Tri[3,]), MidPoint(Tri[2,],Tri[3,])), it-1)</italic>
        </p>
        <p>
          <italic>         }</italic>
        </p>
        <p>
          <italic>}</italic>
        </p>
        <p>&gt; <italic>Sierpinski(Tri, it)</italic></p>
        <p>The R code included just displayed is basically the same one that contains the function <italic>Sierpinski</italic> of the package. This function allows users to visualize the first iterations of the fractal avoiding the difficulty of building it (see Fig. <xref ref-type="fig" rid="F4300303">6</xref><xref ref-type="fig" rid="F4300308">a</xref>). However, for users ready to learn recursive programming, the best option would be to propose the construction on their own. The package also contains a function related to the Koch curve, another very well-known fractal <xref ref-type="bibr" rid="B4262472">Koch (1904)</xref>. The most famous version of this fractal is called Koch's snowflake, which can be obtained by following the next three steps, starting from a segment in the plane (see Fig. <xref ref-type="fig" rid="F4300303">6</xref><xref ref-type="fig" rid="F4300309">b</xref>):</p>
        <list list-type="order">
          <list-item>
            <p>Divide the segment into three equal segments.</p>
          </list-item>
          <list-item>
            <p>Replace the middle segment by the two sides of an equilateral triangle whose side length is the same as for the segment being removed. Now, there are four segments of the same length.</p>
          </list-item>
          <list-item>
            <p>Build an equilateral triangle by using the middle segment as its base. Remove this segment to leave four different segments in the picture.</p>
          </list-item>
        </list>
        <p>The continuous application of these steps to each of the new segments that are created after each iteration produces every state of the fractal. The <italic>FractalSegment</italic> function, available in this package, allows the user to create an infinity number of curves whose construction is based on these steps. The user can experiment with <italic>cut</italic>, <italic>angle</italic> and <italic>f</italic> parameters to achieve all kind of fractals (starting from iteration <italic>it = 0</italic>). The <italic>cut</italic> parameter allows a non-equal division of the segments at step 1, however, the <italic>angle</italic> parameter allows the user to build more than an equilateral triangle at step 2. Finally, the <italic>f</italic> parameter, which is a positive number, produces a length enlargement or a reduction for the new segments at each iteration. Users are free to try these parameters and produce some fractals like those shown in figures Fig. <xref ref-type="fig" rid="F4300303">6</xref><xref ref-type="fig" rid="F4300310">c</xref>, <xref ref-type="fig" rid="F4300311">d</xref>, <xref ref-type="fig" rid="F4300312">e</xref>, <xref ref-type="fig" rid="F4300313">f</xref>. As it can be observed in these figures, the fractal complexities and diversities are enormous, including auto-intersections. For this reason, to display fractals for the first iterations is really helpful to better understand the underlying process of construction.</p>
      </sec>
      <sec sec-type="Generation of curves">
        <title>Generation of curves</title>
        <p>A trochoid is a closed curve that can be obtained by the conjunction of three geometric figures: two circles, from which one of them is fixed and the other mobile, and a mobile point, which is connected to the mobile circle. There are three parameters to characterize each trochoid: the fixed circle radius, the mobile circle radius and the distance from the mobile point to the center of the mobile circle <xref ref-type="bibr" rid="B4242819">Armon (1996)</xref>.</p>
        <p>The presence of these parameters can be used to define a trochoid as a set of parametrical equations, involving trigonometry functions. However, as it was first proposed by <xref ref-type="bibr" rid="B4262714">Abelson and DiSessa (1986)</xref> with the aid of the LOGO turtle, these curves can be approximated by iteratively drawing segments of certain lengths and angles. The LOGO turtle, which originally was a real robot developed at Massachusetts Institute of Technology at the end of the 60s, refers to an on-screen cursor implemented in the LOGO language that was capable of responding to easy instructions from the user (basic direction setting of the turtle and rectilinear movements). This turtle is also available in R in the package TurtleGraphics. As it is shown in the publication of <xref ref-type="bibr" rid="B4262714">Abelson and DiSessa (1986)</xref>, the procedure to obtain any trochoid needs a pair of angles and a pair of lengths (and an initial point to start the curve). An iterative process is then defined based on these angles and lengths, which makes possible the continuous generation of every kind of trochoid.</p>
        <p>This package also includes a function called <italic>Star</italic>, which can be utilised to represent very different star-like objects as another application of the LOGO turtle also taken from <xref ref-type="bibr" rid="B4262714">Abelson and DiSessa (1986)</xref>. This function is based on the generation of the object by drawing segments iteratively as <italic>Duopoly</italic>. The variation of the parameters included in the function render possible to understand the basis of the process and can incite the user to achieve many kinds of star-like shapes. Thus, Fig. <xref ref-type="fig" rid="F4300407">7</xref> represents some examples of use of the functions <italic>Duopoly</italic> (Fig. <xref ref-type="fig" rid="F4300407">7</xref><xref ref-type="fig" rid="F4300412">a</xref>, <xref ref-type="fig" rid="F4300413">b</xref>, <xref ref-type="fig" rid="F4300414">c</xref>) and <italic>Star</italic> (Fig. <xref ref-type="fig" rid="F4300407">7</xref><xref ref-type="fig" rid="F4300415">d</xref>, <xref ref-type="fig" rid="F4300416">e</xref>, <xref ref-type="fig" rid="F4300417">f</xref>). The parameters <italic>color</italic> and <italic>time</italic> available in the function let the user to appreciate all the points that are drawn in the generation of the curve and the order at which they are drawn.</p>
      </sec>
    </sec>
    <sec sec-type="Conclusions">
      <title>Conclusions</title>
      <p>Currently, there are some powerful and useful free software products, such as GeoGebra and Scratch, to learn geometry at undergraduate level. However, all of them present some limitations when compared to common programming languages. Although the R programming language is mainly focused on statistical computing, it can also be employed as a pedagogical tool for simultaneously learning mathematical concepts and advanced programming skills. In this work, an R programming package named LearnGeom is presented as a novel pedagogical tool that provides a set of functions to facilitate the exploration of plane geometry while programming in R. Beginning with some easy functions and definitions, the combined use of the functions included in the package with the own capabilities of the language itself offers a novel teaching source for current secondary educators.</p>
    </sec>
    <sec sec-type="Conflict of Interest">
      <title>Conflict of Interest</title>
      <p>The authors declare that they have no conflict of interest.</p>
    </sec>
  </body>
  <back>
    <ack>
      <title>Acknowledgements</title>
      <p>The authors would like to acknowledge the Universidad Católica de Valencia San Vicente Mártir and the Ministry of Economy, Industry and Competitiveness for the financial support of this work through the 2018-231-001UCV and MAT2015-69315-C3-1-R grants respectively.</p>
    </ack>
    <ref-list>
      <title>References</title>
      <ref id="B4262714">
        <element-citation publication-type="book">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Abelson</surname>
              <given-names>H</given-names>
            </name>
            <name name-style="western">
              <surname>DiSessa</surname>
              <given-names>Andrea A</given-names>
            </name>
          </person-group>
          <year>1986</year>
          <source>Turtle geometry: The computer as a medium for exploring mathematics</source>
          <publisher-name>MIT press</publisher-name>
        </element-citation>
      </ref>
      <ref id="B4242799">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Akkaya</surname>
              <given-names>Adnan</given-names>
            </name>
            <name name-style="western">
              <surname>Tatar</surname>
              <given-names>Enver</given-names>
            </name>
            <name name-style="western">
              <surname>Kağızmanlı</surname>
              <given-names>Türkan Berrin</given-names>
            </name>
          </person-group>
          <year>2011</year>
          <article-title>Using Dynamic Software in Teaching of the Symmetry in Analytic Geometry: The Case of GeoGebra</article-title>
          <source>Procedia - Social and Behavioral Sciences</source>
          <volume>15</volume>
          <fpage>2540</fpage>
          <lpage>2544</lpage>
          <uri>http://dx.doi.org/10.1016/j.sbspro.2011.04.141</uri>
          <pub-id pub-id-type="doi">10.1016/j.sbspro.2011.04.141</pub-id>
        </element-citation>
      </ref>
      <ref id="B4242809">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Akpinar</surname>
              <given-names>Yavuz</given-names>
            </name>
            <name name-style="western">
              <surname>Aslan</surname>
              <given-names>Ümit</given-names>
            </name>
          </person-group>
          <year>2015</year>
          <article-title>Supporting Children’s Learning of Probability Through Video Game Programming</article-title>
          <source>Journal of Educational Computing Research</source>
          <volume>53</volume>
          <issue>2</issue>
          <fpage>228</fpage>
          <lpage>259</lpage>
          <uri>http://dx.doi.org/10.1177/0735633115598492</uri>
          <pub-id pub-id-type="doi">10.1177/0735633115598492</pub-id>
        </element-citation>
      </ref>
      <ref id="B4242819">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Armon</surname>
              <given-names>Uzi</given-names>
            </name>
          </person-group>
          <year>1996</year>
          <article-title>Representing trochoid curves by DUOPOLY procedure</article-title>
          <source>International Journal of Mathematical Education in Science and Technology</source>
          <volume>27</volume>
          <issue>2</issue>
          <fpage>177</fpage>
          <lpage>187</lpage>
          <uri>http://dx.doi.org/10.1080/0020739960270202</uri>
          <pub-id pub-id-type="doi">10.1080/0020739960270202</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262406">
        <element-citation publication-type="conference-preoceeding">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Benton</surname>
              <given-names>Laura</given-names>
            </name>
            <name name-style="western">
              <surname>Hoyles</surname>
              <given-names>Celia</given-names>
            </name>
            <name name-style="western">
              <surname>Kalas</surname>
              <given-names>Ivan</given-names>
            </name>
            <name name-style="western">
              <surname>Noss</surname>
              <given-names>R</given-names>
            </name>
          </person-group>
          <year>2016</year>
          <source>Building mathematical knowledge with programming: insights from the ScratchMaths project</source>
        </element-citation>
      </ref>
      <ref id="B4242839">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Benton</surname>
              <given-names>Laura</given-names>
            </name>
            <name name-style="western">
              <surname>Saunders</surname>
              <given-names>Piers</given-names>
            </name>
            <name name-style="western">
              <surname>Kalas</surname>
              <given-names>Ivan</given-names>
            </name>
            <name name-style="western">
              <surname>Hoyles</surname>
              <given-names>Celia</given-names>
            </name>
            <name name-style="western">
              <surname>Noss</surname>
              <given-names>Richard</given-names>
            </name>
          </person-group>
          <year>2018</year>
          <article-title>Designing for learning mathematics through programming: A case study of pupils engaging with place value</article-title>
          <source>International Journal of Child-Computer Interaction</source>
          <uri>http://dx.doi.org/10.1016/j.ijcci.2017.12.004</uri>
          <pub-id pub-id-type="doi">10.1016/j.ijcci.2017.12.004</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262444">
        <element-citation publication-type="book">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Booth</surname>
              <given-names>Kathleen Hylda Valerie</given-names>
            </name>
          </person-group>
          <year>1958</year>
          <source>Programming for an automatic digital calculator</source>
          <publisher-name>Butterworths</publisher-name>
        </element-citation>
      </ref>
      <ref id="B4311642">
        <element-citation publication-type="software">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Briz-Redón</surname>
              <given-names>Á</given-names>
            </name>
            <name name-style="western">
              <surname>Serrano-Aroca</surname>
              <given-names>Á</given-names>
            </name>
          </person-group>
          <year>2018</year>
          <article-title>LearnGeom: An R-package for Learning Plane Geometry</article-title>
          <uri>https://doi.org/10.5281/zenodo.1211646</uri>
        </element-citation>
      </ref>
      <ref id="B4262425">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Du Boulay</surname>
              <given-names>Benedict</given-names>
            </name>
          </person-group>
          <year>1986</year>
          <article-title>Some difficulties of learning to program</article-title>
          <source>Journal of Educational Computing Research</source>
          <volume>2</volume>
          <issue>1</issue>
          <fpage>57</fpage>
          <lpage>73</lpage>
        </element-citation>
      </ref>
      <ref id="B4242860">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Falloon</surname>
              <given-names>G.</given-names>
            </name>
          </person-group>
          <year>2016</year>
          <article-title>An analysis of young students' thinking when completing basic coding tasks using Scratch Jnr. On the iPad</article-title>
          <source>Journal of Computer Assisted Learning</source>
          <volume>32</volume>
          <issue>6</issue>
          <fpage>576</fpage>
          <lpage>593</lpage>
          <uri>http://dx.doi.org/10.1111/jcal.12155</uri>
          <pub-id pub-id-type="doi">10.1111/jcal.12155</pub-id>
        </element-citation>
      </ref>
      <ref id="B4242870">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Feurzeig</surname>
              <given-names>Wallace</given-names>
            </name>
            <name name-style="western">
              <surname>Papert</surname>
              <given-names>Seymour A.</given-names>
            </name>
            <name name-style="western">
              <surname>Lawler</surname>
              <given-names>Bob</given-names>
            </name>
          </person-group>
          <year>2011</year>
          <article-title>Programming-languages as a conceptual framework for teaching mathematics</article-title>
          <source>Interactive Learning Environments</source>
          <volume>19</volume>
          <issue>5</issue>
          <fpage>487</fpage>
          <lpage>501</lpage>
          <uri>http://dx.doi.org/10.1080/10494820903520040</uri>
          <pub-id pub-id-type="doi">10.1080/10494820903520040</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262778">
        <element-citation publication-type="chapter">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Foerster</surname>
              <given-names>Klaus-Tycho</given-names>
            </name>
          </person-group>
          <year>2016</year>
          <chapter-title>Integrating Programming into the Mathematics Curriculum: Combining Scratch and Geometry in Grades} 6 and 7</chapter-title>
          <source>Proceedings of the 17th Annual Conference on Information Technology Education</source>
        </element-citation>
      </ref>
      <ref id="B4262435">
        <element-citation publication-type="thesis">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Govender</surname>
              <given-names>Irene</given-names>
            </name>
          </person-group>
          <year>2009</year>
          <source>Learning to program, learning to teach programming: pre-and in service teachers' experiences of an object-oriented language</source>
          <publisher-name>University of South Africa</publisher-name>
        </element-citation>
      </ref>
      <ref id="B4262453">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Grunbaum</surname>
              <given-names>Branko</given-names>
            </name>
            <name name-style="western">
              <surname>Shephard</surname>
              <given-names>Geoffrey C</given-names>
            </name>
          </person-group>
          <year>1977</year>
          <article-title>Tilings by regular polygons</article-title>
          <source>Mathematics Magazine</source>
          <volume>50</volume>
          <issue>5</issue>
          <fpage>227</fpage>
          <lpage>247</lpage>
        </element-citation>
      </ref>
      <ref id="B4262463">
        <element-citation publication-type="thesis">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Hohenwarter</surname>
              <given-names>Markus</given-names>
            </name>
          </person-group>
          <year>2002</year>
          <source>GeoGebra: Ein Softwaresystem für dynamische Geometrie und Algebra der Ebene</source>
          <publisher-name>Paris Lodron University, Salzburg, Austria</publisher-name>
        </element-citation>
      </ref>
      <ref id="B4242890">
        <element-citation publication-type="chapter">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Howe</surname>
              <given-names>J. A.M.</given-names>
            </name>
            <name name-style="western">
              <surname>Ross</surname>
              <given-names>P. M.</given-names>
            </name>
            <name name-style="western">
              <surname>Johnson</surname>
              <given-names>K. R.</given-names>
            </name>
            <name name-style="western">
              <surname>Plane</surname>
              <given-names>F.</given-names>
            </name>
            <name name-style="western">
              <surname>Inglis</surname>
              <given-names>R.</given-names>
            </name>
          </person-group>
          <year>1981</year>
          <chapter-title>Teaching mathematics through programming in the classroom</chapter-title>
          <source>Computer Assisted Learning</source>
          <uri>http://dx.doi.org/10.1016/b978-0-08-028111-7.50017-9</uri>
          <pub-id pub-id-type="doi">10.1016/b978-0-08-028111-7.50017-9</pub-id>
        </element-citation>
      </ref>
      <ref id="B4242905">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Knaster</surname>
              <given-names>B.</given-names>
            </name>
            <name name-style="western">
              <surname>Kuratowski</surname>
              <given-names>C.</given-names>
            </name>
          </person-group>
          <year>1927</year>
          <article-title>A connected and connected im kleinen point set which contains no perfect subset</article-title>
          <source>Bulletin of the American Mathematical Society</source>
          <volume>33</volume>
          <issue>1</issue>
          <fpage>106</fpage>
          <lpage>110</lpage>
          <uri>http://dx.doi.org/10.1090/s0002-9904-1927-04326-9</uri>
          <pub-id pub-id-type="doi">10.1090/s0002-9904-1927-04326-9</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262472">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Koch</surname>
              <given-names>H</given-names>
            </name>
          </person-group>
          <year>1904</year>
          <article-title>On a Continuous Curve Without Tangent Constructable from Elementary Geometry</article-title>
          <source>Classics on fractals</source>
        </element-citation>
      </ref>
      <ref id="B4242915">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Lehrer</surname>
              <given-names>Richard</given-names>
            </name>
            <name name-style="western">
              <surname>DeBernard</surname>
              <given-names>Ann</given-names>
            </name>
          </person-group>
          <year>1987</year>
          <article-title>Language of learning and language of computing: The perceptual-language model.</article-title>
          <source>Journal of Educational Psychology</source>
          <volume>79</volume>
          <issue>1</issue>
          <fpage>41</fpage>
          <lpage>48</lpage>
          <uri>http://dx.doi.org/10.1037/0022-0663.79.1.41</uri>
          <pub-id pub-id-type="doi">10.1037/0022-0663.79.1.41</pub-id>
        </element-citation>
      </ref>
      <ref id="B4242935">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Linn</surname>
              <given-names>Marcia C.</given-names>
            </name>
            <name name-style="western">
              <surname>Dalbey</surname>
              <given-names>John</given-names>
            </name>
          </person-group>
          <year>1985</year>
          <article-title>Cognitive consequences of Programming Instruction: Instruction, Access, and Ability</article-title>
          <source>Educational Psychologist</source>
          <volume>20</volume>
          <issue>4</issue>
          <fpage>191</fpage>
          <lpage>206</lpage>
          <uri>http://dx.doi.org/10.1207/s15326985ep2004_4</uri>
          <pub-id pub-id-type="doi">10.1207/s15326985ep2004_4</pub-id>
        </element-citation>
      </ref>
      <ref id="B4242945">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Lu</surname>
              <given-names>P. J.</given-names>
            </name>
            <name name-style="western">
              <surname>Steinhardt</surname>
              <given-names>P. J.</given-names>
            </name>
          </person-group>
          <year>2007</year>
          <article-title>Decagonal and Quasi-Crystalline Tilings in Medieval Islamic Architecture</article-title>
          <source>Science</source>
          <volume>315</volume>
          <issue>5815</issue>
          <fpage>1106</fpage>
          <lpage>1110</lpage>
          <uri>http://dx.doi.org/10.1126/science.1135491</uri>
          <pub-id pub-id-type="doi">10.1126/science.1135491</pub-id>
        </element-citation>
      </ref>
      <ref id="B4242955">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Mandelbrot</surname>
              <given-names>B.</given-names>
            </name>
          </person-group>
          <year>1967</year>
          <article-title>How Long Is the Coast of Britain? Statistical Self-Similarity and Fractional Dimension</article-title>
          <source>Science</source>
          <volume>156</volume>
          <issue>3775</issue>
          <fpage>636</fpage>
          <lpage>638</lpage>
          <uri>http://dx.doi.org/10.1126/science.156.3775.636</uri>
          <pub-id pub-id-type="doi">10.1126/science.156.3775.636</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262482">
        <element-citation publication-type="book">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Mandelbrot</surname>
              <given-names>Benoit B</given-names>
            </name>
          </person-group>
          <year>1977</year>
          <source>Fractals</source>
          <publisher-name>Wiley Online Library</publisher-name>
        </element-citation>
      </ref>
      <ref id="B4262525">
        <element-citation publication-type="chapter">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Mascaró</surname>
              <given-names>Maite</given-names>
            </name>
            <name name-style="western">
              <surname>Sacristán</surname>
              <given-names>Ana Isabel</given-names>
            </name>
            <name name-style="western">
              <surname>Rufino</surname>
              <given-names>M</given-names>
            </name>
          </person-group>
          <year>2014</year>
          <chapter-title>Teaching and learning statistics and experimental analysis for environmental science students, through programming activities in R</chapter-title>
          <source>Constructionism and Creativity-Proceedings 3rd Intl. Constructionism Conf</source>
        </element-citation>
      </ref>
      <ref id="B4242965">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Mascaró</surname>
              <given-names>Maite</given-names>
            </name>
            <name name-style="western">
              <surname>Sacristán</surname>
              <given-names>Ana Isabel</given-names>
            </name>
            <name name-style="western">
              <surname>Rufino</surname>
              <given-names>Marta M.</given-names>
            </name>
          </person-group>
          <year>2016</year>
          <article-title>For the love of statistics: appreciating and learning to apply experimental analysis and statistics through computer programming activities</article-title>
          <source>Teaching Mathematics and its Applications</source>
          <volume>35</volume>
          <issue>2</issue>
          <fpage>74</fpage>
          <lpage>87</lpage>
          <uri>http://dx.doi.org/10.1093/teamat/hrw006</uri>
          <pub-id pub-id-type="doi">10.1093/teamat/hrw006</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262539">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Masri</surname>
              <given-names>Rohaidah Masri</given-names>
            </name>
            <name name-style="western">
              <surname>Ting</surname>
              <given-names>Siew Hiong</given-names>
            </name>
            <name name-style="western">
              <surname>Zamzamir</surname>
              <given-names>Zamzana</given-names>
            </name>
            <name name-style="western">
              <surname>Ma'amor</surname>
              <given-names>Raja Lailatul Zuraida Raja</given-names>
            </name>
          </person-group>
          <year>2017</year>
          <article-title>The effects of using GeoGebra teaching strategy in Malaysian secondary schools: A case study from Sibu, Sarawak</article-title>
          <source>Geografia-Malaysian Journal of Society and Space</source>
          <volume>12</volume>
          <issue>7</issue>
        </element-citation>
      </ref>
      <ref id="B4262550">
        <element-citation publication-type="book">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>McCracken</surname>
              <given-names>Daniel D</given-names>
            </name>
          </person-group>
          <year>1957</year>
          <source>Digital computer programming</source>
          <publisher-name>John Wiley &amp; Sons</publisher-name>
        </element-citation>
      </ref>
      <ref id="B4242975">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Palumbo</surname>
              <given-names>David B.</given-names>
            </name>
          </person-group>
          <year>1990</year>
          <article-title>Programming Language/Problem-Solving Research: A Review of Relevant Issues</article-title>
          <source>Review of Educational Research</source>
          <volume>60</volume>
          <issue>1</issue>
          <fpage>65</fpage>
          <uri>http://dx.doi.org/10.2307/1170225</uri>
          <pub-id pub-id-type="doi">10.2307/1170225</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262559">
        <element-citation publication-type="book">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Papert</surname>
              <given-names>Seymour</given-names>
            </name>
          </person-group>
          <year>1980</year>
          <source>Mindstorms: Children, computers, and powerful ideas</source>
          <publisher-name>Basic Books, Inc.</publisher-name>
        </element-citation>
      </ref>
      <ref id="B4262578">
        <element-citation publication-type="conference-preoceeding">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Priatna</surname>
              <given-names>Nanang</given-names>
            </name>
          </person-group>
          <year>2017</year>
          <source>AIP Conference Proceedings</source>
          <conf-name>The application of brain-based learning principles aided by GeoGebra to improve mathematical representation ability</conf-name>
          <uri>http://dx.doi.org/10.1063/1.4995157</uri>
          <pub-id pub-id-type="doi">10.1063/1.4995157</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262588">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Pruim</surname>
              <given-names>Randall</given-names>
            </name>
            <name name-style="western">
              <surname>Kaplan</surname>
              <given-names>Daniel T</given-names>
            </name>
            <name name-style="western">
              <surname>Horton</surname>
              <given-names>Nicholas J</given-names>
            </name>
          </person-group>
          <year>2017</year>
          <article-title>The mosaic Package: Helping Students to Think with Data Using R</article-title>
          <source>R Journal</source>
        </element-citation>
      </ref>
      <ref id="B4262752">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Resnick</surname>
              <given-names>Mitchel</given-names>
            </name>
            <name name-style="western">
              <surname>Maloney</surname>
              <given-names>John</given-names>
            </name>
            <name name-style="western">
              <surname>Monroy-Hernández</surname>
              <given-names>Andrés</given-names>
            </name>
            <name name-style="western">
              <surname>Rusk</surname>
              <given-names>Natalie</given-names>
            </name>
            <name name-style="western">
              <surname>Eastmond</surname>
              <given-names>Evelyn</given-names>
            </name>
            <name name-style="western">
              <surname>Brennan</surname>
              <given-names>Karen</given-names>
            </name>
            <name name-style="western">
              <surname>Millner</surname>
              <given-names>Amon</given-names>
            </name>
            <name name-style="western">
              <surname>Rosenbaum</surname>
              <given-names>Eric</given-names>
            </name>
            <name name-style="western">
              <surname>Silver</surname>
              <given-names>Jay</given-names>
            </name>
            <name name-style="western">
              <surname>Silverman</surname>
              <given-names>Brian</given-names>
            </name>
          </person-group>
          <year>2009</year>
          <article-title>Scratch: programming for all</article-title>
          <source>Communications of the ACM</source>
          <volume>52</volume>
          <issue>11</issue>
          <fpage>60</fpage>
          <lpage>67</lpage>
        </element-citation>
      </ref>
      <ref id="B4243032">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Saha</surname>
              <given-names>Royati Abdul</given-names>
            </name>
            <name name-style="western">
              <surname>Mohd Ayub</surname>
              <given-names>Ahmad Fauzi</given-names>
            </name>
            <name name-style="western">
              <surname>Tarmizi</surname>
              <given-names>Rohani Ahmad</given-names>
            </name>
          </person-group>
          <year>2010</year>
          <article-title>The Effects of GeoGebra on Mathematics Achievement: Enlightening Coordinate Geometry Learning</article-title>
          <source>Procedia - Social and Behavioral Sciences</source>
          <volume>8</volume>
          <fpage>686</fpage>
          <lpage>693</lpage>
          <uri>http://dx.doi.org/10.1016/j.sbspro.2010.12.095</uri>
          <pub-id pub-id-type="doi">10.1016/j.sbspro.2010.12.095</pub-id>
        </element-citation>
      </ref>
      <ref id="B4243042">
        <element-citation publication-type="chapter">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Schattschneider</surname>
              <given-names>Doris</given-names>
            </name>
          </person-group>
          <year>1981</year>
          <chapter-title>In Praise of Amateurs</chapter-title>
          <source>The Mathematical Gardner</source>
          <uri>http://dx.doi.org/10.1007/978-1-4684-6686-7_16</uri>
          <pub-id pub-id-type="doi">10.1007/978-1-4684-6686-7_16</pub-id>
        </element-citation>
      </ref>
      <ref id="B4262626">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Soloway</surname>
              <given-names>Elliot</given-names>
            </name>
          </person-group>
          <year>1993</year>
          <article-title>Should we teach students to program?</article-title>
          <source>Communications of the ACM</source>
          <volume>36</volume>
          <issue>10</issue>
          <fpage>21</fpage>
          <lpage>25</lpage>
        </element-citation>
      </ref>
      <ref id="B4262646">
        <element-citation publication-type="chapter">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Spohrer</surname>
              <given-names>James C</given-names>
            </name>
            <name name-style="western">
              <surname>Soloway</surname>
              <given-names>Elliot</given-names>
            </name>
            <name name-style="western">
              <surname>Pope</surname>
              <given-names>Edgar</given-names>
            </name>
          </person-group>
          <year>1985</year>
          <chapter-title>Where the bugs are</chapter-title>
          <source>ACM SIGCHI Bulletin</source>
        </element-citation>
      </ref>
      <ref id="B4262660">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Statz</surname>
              <given-names>Joyce</given-names>
            </name>
            <name name-style="western">
              <surname>Miller</surname>
              <given-names>Leland</given-names>
            </name>
          </person-group>
          <year>1978</year>
          <article-title>The Egg Series: Using Simple Computer Models</article-title>
          <source>The Mathematics Teacher</source>
          <volume>71</volume>
          <issue>5</issue>
          <fpage>459</fpage>
          <lpage>467</lpage>
        </element-citation>
      </ref>
      <ref id="B4262617">
        <element-citation publication-type="software">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Team</surname>
              <given-names>R Core</given-names>
            </name>
          </person-group>
          <year>2018</year>
          <article-title>R: A Language and Environment for Statistical Computing</article-title>
          <uri>https://www.R-project.org/</uri>
        </element-citation>
      </ref>
      <ref id="B4243056">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Wang</surname>
              <given-names>Hsiu-Ying</given-names>
            </name>
            <name name-style="western">
              <surname>Huang</surname>
              <given-names>Iwen</given-names>
            </name>
            <name name-style="western">
              <surname>Hwang</surname>
              <given-names>Gwo-Jen</given-names>
            </name>
          </person-group>
          <year>2015</year>
          <article-title>Comparison of the effects of project-based computer programming activities between mathematics-gifted students and average students</article-title>
          <source>Journal of Computers in Education</source>
          <volume>3</volume>
          <issue>1</issue>
          <fpage>33</fpage>
          <lpage>45</lpage>
          <uri>http://dx.doi.org/10.1007/s40692-015-0047-9</uri>
          <pub-id pub-id-type="doi">10.1007/s40692-015-0047-9</pub-id>
        </element-citation>
      </ref>
      <ref id="B4243066">
        <element-citation publication-type="article">
          <person-group person-group-type="author">
            <name name-style="western">
              <surname>Zengin</surname>
              <given-names>Yılmaz</given-names>
            </name>
            <name name-style="western">
              <surname>Furkan</surname>
              <given-names>Hasan</given-names>
            </name>
            <name name-style="western">
              <surname>Kutluca</surname>
              <given-names>Tamer</given-names>
            </name>
          </person-group>
          <year>2012</year>
          <article-title>The effect of dynamic mathematics software geogebra on student achievement in teaching of trigonometry</article-title>
          <source>Procedia - Social and Behavioral Sciences</source>
          <volume>31</volume>
          <fpage>183</fpage>
          <lpage>187</lpage>
          <uri>http://dx.doi.org/10.1016/j.sbspro.2011.12.038</uri>
          <pub-id pub-id-type="doi">10.1016/j.sbspro.2011.12.038</pub-id>
        </element-citation>
      </ref>
    </ref-list>
  </back>
  <floats-group>
    <fig-group id="F4299887" position="float" orientation="portrait">
      <caption>
        <p>Several examples of use of some of the basic functions included in the LearnGeom R package with their required lines of code to produce them.</p>
      </caption>
      <fig id="F4299907" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure1a</object-id>
        <label>Figure 1a.</label>
        <caption>
          <p>Three polygons created with the <italic>CreatePolygon</italic> function.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g001_a.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193494.jpg"/>
      </fig>
      <fig id="F4299908" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure1b</object-id>
        <label>Figure 1b.</label>
        <caption>
          <p>Regular polygons with 9 or less sides created with <italic>CreateRegularPolygon</italic>.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g001_b.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193495.jpg"/>
      </fig>
      <fig id="F4299909" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure1c</object-id>
        <label>Figure 1c.</label>
        <caption>
          <p>Example of use of the <italic>RemovePointPoly function</italic>. A point is removed from a regular pentagon.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g001_c.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193496.jpg"/>
      </fig>
      <fig id="F4299910" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure1d</object-id>
        <label>Figure 1d.</label>
        <caption>
          <p>Example of use of the <italic>AddPointPoly</italic> function. A point is added to a regular pentagon.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g001_d.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193497.jpg"/>
      </fig>
      <fig id="F4299911" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure1e</object-id>
        <label>Figure 1e.</label>
        <caption>
          <p>Examples of use of the <italic>CreateArcAngles</italic> function. The red arc follows the anti-clockwise direction; the blue one the clockwise direction.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g001_e.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193498.jpg"/>
      </fig>
      <fig id="F4299912" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure1f</object-id>
        <label>Figure 1f.</label>
        <caption>
          <p>Examples of use of the <italic>CreateArcPointsDist</italic> function. The combination of the parameters direction and choice allows the creation of four different arcs</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g001_f.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193499.jpg"/>
      </fig>
    </fig-group>
    <fig-group id="F4300006" position="float" orientation="portrait">
      <caption>
        <p>Examples of use of the specific functions for lines and segments creation. The coincidence in the outputs is due to the choice of equivalent parameters, which are visible in their corresponding figures.</p>
      </caption>
      <fig id="F4300011" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure2a</object-id>
        <label>Figure 2a.</label>
        <caption>
          <p>Example of use of <italic>CreateSegmentAngle.</italic></p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g002_a.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193508.jpg"/>
      </fig>
      <fig id="F4300012" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure2b</object-id>
        <label>Figure 2b.</label>
        <caption>
          <p>Example of use of <italic>CreateSegmentPoints.</italic></p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g002_b.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193509.jpg"/>
      </fig>
      <fig id="F4300013" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure2c</object-id>
        <label>Figure 2c.</label>
        <caption>
          <p>Example of use of <italic>CreateLineAngle.</italic></p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g002_c.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193510.jpg"/>
      </fig>
      <fig id="F4300014" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure2d</object-id>
        <label>Figure 2d.</label>
        <caption>
          <p>Example of use of <italic>CreateLinePoints.</italic></p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g002_d.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193511.jpg"/>
      </fig>
    </fig-group>
    <fig-group id="F4300077" position="float" orientation="portrait">
      <caption>
        <p>Examples of use of the functions included in the package that represent affine transformations in the plane. In all the pictures, the blue triangle, placed at the points A(0,0), B(2,0) and C(1,1), is the one passed to each of the functions, being the orange triangle the output resulting for each of the transformations.</p>
      </caption>
      <fig id="F4300087" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure3a</object-id>
        <label>Figure 3a.</label>
        <caption>
          <p>A reflection.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g003_a.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193512.jpg"/>
      </fig>
      <fig id="F4300088" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure3b</object-id>
        <label>Figure 3b.</label>
        <caption>
          <p>A rotation.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g003_b.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193513.jpg"/>
      </fig>
      <fig id="F4300089" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure3c</object-id>
        <label>Figure 3c.</label>
        <caption>
          <p>A similarity.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g003_c.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193514.jpg"/>
      </fig>
      <fig id="F4300090" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure3d</object-id>
        <label>Figure 3d.</label>
        <caption>
          <p>A translation.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g003_d.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193515.jpg"/>
      </fig>
      <fig id="F4300091" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure3e</object-id>
        <label>Figure 3e.</label>
        <caption>
          <p>A shear transformation.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g003_e.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193516.jpg"/>
      </fig>
      <fig id="F4300092" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure3f</object-id>
        <label>Figure 3f.</label>
        <caption>
          <p>A homothety.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g003_f.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193517.jpg"/>
      </fig>
    </fig-group>
    <fig-group id="F4300195" position="float" orientation="portrait">
      <caption>
        <p>Partial results during the process of finding the circumcenter of the triangle of points (-1,0), (0,1) and (1,0).</p>
      </caption>
      <fig id="F4300200" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure4a</object-id>
        <label>Figure 4a.</label>
        <caption>
          <p>Triangle creation and obtention of the middle points of the sides and three auxiliary points in the orthogonal direction of each of the sides.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g004_a.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193518.jpg"/>
      </fig>
      <fig id="F4300201" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure4b</object-id>
        <label>Figure 4b.</label>
        <caption>
          <p>Bisector lines and intersection in the circumcenter of the triangle.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g004_b.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193519.jpg"/>
      </fig>
    </fig-group>
    <fig-group id="F4300271" position="float" orientation="portrait">
      <caption>
        <p>Different stages of the creation of a beehive structure with the aid of tessellations.</p>
      </caption>
      <fig id="F4300276" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure5a</object-id>
        <label>Figure 5a.</label>
        <caption>
          <p>Creating a regular hexagon that works as the start of the tessellation.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g005_a.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193521.jpg"/>
      </fig>
      <fig id="F4300277" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure5b</object-id>
        <label>Figure 5b.</label>
        <caption>
          <p>Creating two contiguous hexagons to the starting one. These hexagons are derived from the middle points of some of the sides of the initial hexagon.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g005_b.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193522.jpg"/>
      </fig>
      <fig id="F4300278" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure5c</object-id>
        <label>Figure 5c.</label>
        <caption>
          <p>Once the contiguous hexagons are obtained, function <italic>Tessellation</italic> allows the creation of the structure.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g005_c.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193523.jpg"/>
      </fig>
      <fig id="F4300279" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure5d</object-id>
        <label>Figure 5d.</label>
        <caption>
          <p>Alternative to step in <bold>b</bold>, which minimizes the R code required to obtain the output. This strategy is based on the property of reflection.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g005_d.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193524.jpg"/>
      </fig>
    </fig-group>
    <fig-group id="F4300303" position="float" orientation="portrait">
      <caption>
        <p>Examples of different fractals produced with the functions of the LearnGeom package. The examples obtained with <italic>FractalSegment</italic> show how minimal modifications of the parameters can lead to very different curves.</p>
      </caption>
      <fig id="F4300308" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure6a</object-id>
        <label>Figure 6a.</label>
        <caption>
          <p>First seven iterations of the Sierpinski triangle.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g006_a.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193526.jpg"/>
      </fig>
      <fig id="F4300309" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure6b</object-id>
        <label>Figure 6b.</label>
        <caption>
          <p>First three first iterations of the Koch's curve.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g006_b.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193527.jpg"/>
      </fig>
      <fig id="F4300310" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure6c</object-id>
        <label>Figure 6c.</label>
        <caption>
          <p>First five first iterations of the Koch's as obtained with <italic>FractalSegment</italic>.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g006_c.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193528.jpg"/>
      </fig>
      <fig id="F4300311" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure6d</object-id>
        <label>Figure 6d.</label>
        <caption>
          <p>A modificaction of the first five iterations of the Koch's (<bold>c</bold>) by changing parameter <italic>angle</italic> from 60º to 90º.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g006_d.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193529.jpg"/>
      </fig>
      <fig id="F4300312" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure6e</object-id>
        <label>Figure 6e.</label>
        <caption>
          <p>A modificaction of the first five iterations of the Koch's (<bold>c</bold>) by changing parameter <italic>f</italic> from 1 to 2.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g006_e.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193530.jpg"/>
      </fig>
      <fig id="F4300313" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure6f</object-id>
        <label>Figure 6f.</label>
        <caption>
          <p>A modificaction of the first five iterations of the Koch's (<bold>c</bold>) by changing parameters <italic>cut1</italic> and <italic>cut2</italic> from 1/3 and 2/3 to 1/5 and 4/5, respectively.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g006_f.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193531.jpg"/>
      </fig>
    </fig-group>
    <fig-group id="F4300407" position="float" orientation="portrait">
      <caption>
        <p>Examples of use of the functions <italic>Duopoly</italic> and <italic>Star</italic>.</p>
      </caption>
      <fig id="F4300412" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure7a</object-id>
        <label>Figure 7a.</label>
        <caption>
          <p>Example of use of the function <italic>Duopoly</italic>. Creation of an astroid.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g007_a.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193539.jpg"/>
      </fig>
      <fig id="F4300413" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure7b</object-id>
        <label>Figure 7b.</label>
        <caption>
          <p>Example of use of the function <italic>Duopoly</italic>. Creation of a nefroid.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g007_b.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193540.jpg"/>
      </fig>
      <fig id="F4300414" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure7c</object-id>
        <label>Figure 7c.</label>
        <caption>
          <p>Example of use of the function <italic>Duopoly</italic>. Creation of an epicycloid</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g007_c.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193541.jpg"/>
      </fig>
      <fig id="F4300415" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure7d</object-id>
        <label>Figure 7d.</label>
        <caption>
          <p>Example of use of the function <italic>Star</italic>. Parameter <italic>angle</italic> is set to 0º.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g007_d.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193542.jpg"/>
      </fig>
      <fig id="F4300416" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure7e</object-id>
        <label>Figure 7e.</label>
        <caption>
          <p>Example of use of the function <italic>Star</italic>. Parameter <italic>angle</italic> is set to 20º.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g007_e.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193543.jpg"/>
      </fig>
      <fig id="F4300417" position="float" orientation="portrait">
        <object-id>10.3897/rio.4.e25485.figure7f</object-id>
        <label>Figure 7f.</label>
        <caption>
          <p>Example of use of the function <italic>Star</italic>. Parameter <italic>angle</italic> is set to 80º.</p>
        </caption>
        <graphic xlink:href="rio-04-e25485-g007_f.jpg" xlink:type="simple" position="float" orientation="portrait" id="oo_193544.jpg"/>
      </fig>
    </fig-group>
    <table-wrap id="T4243242" position="float" orientation="portrait">
      <label>Table 1.</label>
      <caption>
        <p>The basic functions available in the LearnGeom R package to create geometric objects and the parameters that must be used to precisely define these objects. The third column refers to the geometric object that is created by each of the functions, which is also the class that the functions assign to their outputs.</p>
      </caption>
      <table rules="all" border="0">
        <tbody>
          <tr>
            <td rowspan="1" colspan="1">
              <bold>Function</bold>
            </td>
            <td rowspan="1" colspan="1">
              <bold>Parameters</bold>
            </td>
            <td rowspan="1" colspan="1">
              <bold>Geometric object</bold>
            </td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreateArcAngles</italic>
            </td>
            <td rowspan="1" colspan="1">
              <italic>C, r, angle1, angle2, direction</italic>
            </td>
            <td rowspan="2" colspan="1">
              <italic>Arc</italic>
            </td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreateArcPointsDist</italic>
            </td>
            <td rowspan="1" colspan="1">
              <italic>P1, P2, r, choice, direction</italic>
            </td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreateLineAngle</italic>
            </td>
            <td rowspan="1" colspan="1">
              <italic>P, angle</italic>
            </td>
            <td rowspan="2" colspan="1">
              <italic>Line</italic>
            </td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreateLinePoints</italic>
            </td>
            <td rowspan="1" colspan="1">
              <italic>P1, P2</italic>
            </td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreatePolygon</italic>
            </td>
            <td rowspan="1" colspan="1">
              <italic>List of points</italic>
            </td>
            <td rowspan="2" colspan="1">
              <italic>Polygon</italic>
            </td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreateRegularPolygon</italic>
            </td>
            <td rowspan="1" colspan="1">
              <italic>n, C, l</italic>
            </td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreateSegmentAngle</italic>
            </td>
            <td rowspan="1" colspan="1">
              <italic>P, angle, l</italic>
            </td>
            <td rowspan="2" colspan="1">
              <italic>Segment</italic>
            </td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreateSegmentPoints</italic>
            </td>
            <td rowspan="1" colspan="1">
              <italic>P1, P2</italic>
            </td>
          </tr>
        </tbody>
      </table>
    </table-wrap>
    <table-wrap id="T4261989" position="float" orientation="portrait">
      <label>Table 2.</label>
      <caption>
        <p>Short description of all the parameters available in the basic functions of the LearnGeom R package.</p>
      </caption>
      <table rules="all" border="0">
        <tbody>
          <tr>
            <td rowspan="1" colspan="1">
              <bold>Function</bold>
            </td>
            <td rowspan="1" colspan="1">
              <bold>Parameters description</bold>
            </td>
          </tr>
          <tr>
            <td rowspan="5" colspan="1">
              <italic>CreateArcAngles</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>C</italic> - Center for the circumference which generates the arc</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>r</italic> - Radius for the circumference which generates the arc</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>angle1</italic> - Angle (0-360) from which the arc starts</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>angle2</italic> - Angle (0-360) at which the arc arrives</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>direction</italic> - Clockwise or anti-clockwise direction to properly define the arc</td>
          </tr>
          <tr>
            <td rowspan="5" colspan="1">
              <italic>CreateArcPointsDist</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>P1</italic> - Point 1 to be joined by an arc to point 2</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>P2</italic> - Point 2 to be joined by an arc to point 1</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>r</italic> - Radius for the arc being built</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>choice</italic> - Integer which allows the user to choose every arc from two possibilities</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>direction</italic> - Clockwise or anti-clockwise direction to properly define the arc</td>
          </tr>
          <tr>
            <td rowspan="2" colspan="1">
              <italic>CreateLineAngle</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>P</italic> - Point through which the line passes</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>angle</italic> - Angle (0-360) that the line must form with X-axis</td>
          </tr>
          <tr>
            <td rowspan="2" colspan="1">
              <italic>CreateLinePoints</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>P1</italic> - Point 1 to be joined by a line to point 2</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>P2</italic> - Point 2 to be joined by a line to point 1</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1">
              <italic>CreatePolygon</italic>
            </td>
            <td rowspan="1" colspan="1">... - Ordered list of points to build the polygon</td>
          </tr>
          <tr>
            <td rowspan="3" colspan="1">
              <italic>CreateRegularPolygon</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>n</italic> - Number of sides for the polygon</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>C</italic> - Center for regular polygon</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>l</italic> - Side length for the polygon</td>
          </tr>
          <tr>
            <td rowspan="3" colspan="1">
              <italic>CreateSegmentAngle</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>P</italic> - Starting point for the segment being built</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>angle</italic> - Angle (0-360) that the segment must form with X-axis</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>l</italic> - Length for the segment</td>
          </tr>
          <tr>
            <td rowspan="2" colspan="1">
              <italic>CreateSegmentPoints</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>P1</italic> - Point 1 to be joined by a segment to point 2</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>P2</italic> - Point 2 to be joined by a segment to point 1</td>
          </tr>
        </tbody>
      </table>
    </table-wrap>
    <table-wrap id="T4252729" position="float" orientation="portrait">
      <label>Table 3.</label>
      <caption>
        <p>Information contained in each of the possible objects that are produced by the basic functions. As it is shown in the table, the outputs of these functions are basically a vector or a matrix which contain the points that make the geometric object or the parameters that define the object unambiguously.</p>
      </caption>
      <table rules="all" border="0">
        <tbody>
          <tr>
            <td rowspan="1" colspan="1">
              <bold>Geometric object</bold>
            </td>
            <td rowspan="1" colspan="1">
              <bold>Data type</bold>
            </td>
            <td rowspan="1" colspan="1">
              <bold>Object fields</bold>
            </td>
          </tr>
          <tr>
            <td rowspan="6" colspan="1">
              <italic>Arc</italic>
            </td>
            <td rowspan="6" colspan="1">
              <italic>Vector</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>X</italic> – X-coordinate for the center of the arc</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>Y</italic> – Y-coordinate for the center of the arc</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>r</italic> – radius of the arc</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>angle1</italic> – Angle (0º-360º) from which the arc starts</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>angle2</italic> – Angle (0º-360º) at which the arc arrives</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>dir</italic> – 1 for anti-clockwise direction, 2 for clockwise</td>
          </tr>
          <tr>
            <td rowspan="2" colspan="1">
              <italic>Line</italic>
            </td>
            <td rowspan="2" colspan="1">
              <italic>Vector</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>slope</italic> – Slope of the line</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>intercept</italic> – Intercept (Y-axis cut) of the line</td>
          </tr>
          <tr>
            <td rowspan="2" colspan="1">
              <italic>Polygon</italic>
            </td>
            <td rowspan="2" colspan="1">
              <italic>Matrix</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>X</italic> – X-coordinates for the points that are part of the polygon</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>Y</italic> – Y-coordinates for the points that are part of the polygon</td>
          </tr>
          <tr>
            <td rowspan="2" colspan="1">
              <italic>Segment</italic>
            </td>
            <td rowspan="2" colspan="1">
              <italic>Matrix</italic>
            </td>
            <td rowspan="1" colspan="1"><italic>X</italic> – X-coordinates for the two points that form the segment</td>
          </tr>
          <tr>
            <td rowspan="1" colspan="1"><italic>Y</italic> – Y-coordinates for the two points that form the segment</td>
          </tr>
        </tbody>
      </table>
    </table-wrap>
  </floats-group>
</article>
