File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/2dLutin-Qp1UHDTi.js.map
{"version":3,"file":"2dLutin-Qp1UHDTi.js","sources":["../../src/modules/2dLutin.js"],"sourcesContent":["/*\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%%%%%%%%%%%%% LES LUTINS %%%%%%%%%%%%%%%%\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n*/\n\nimport { angleModulo } from '../lib/2d/angles.js'\nimport { point } from '../lib/2d/points.js'\nimport { radians } from '../lib/mathFonctions/trigo.js'\nimport { colorToLatexOrHTML, ObjetMathalea2D } from './2dGeneralites.js'\nimport { context } from './context.js'\n\n/**\n * Renvoie la mesure d'angle (entre -180° et 180°) dans le cercle trigonométrique à partir d'une mesure d'angle donnée en degrés, qu'utilise Scratch.\n * Parce que le 0 angulaire de Scratch est dirigé vers le Nord et qu'il croît dans le sens indirect\n * @param {number} x Angle Scratch\n * @example x=angleScratchTo2d(0) // x=90\n * @example x=angleScratchTo2d(90) // x=0\n * @example x=angleScratchTo2d(-90) // x=180\n * @example x=angleScratchTo2d(-120) // x=-150\n * @return {angleModulo}\n */\n// JSDOC Validee par EE Juin 2022\nexport function angleScratchTo2d (x) {\n const angle2d = 90 - x\n return angleModulo(angle2d)\n}\n\nfunction ObjetLutin () {\n ObjetMathalea2D.call(this, {})\n this.x = 0\n this.y = 0\n this.xMin = 0\n this.xMax = 0\n this.yMin = 0\n this.yMax = 0\n this.bordures = [0, 0, 0, 0] // désolé, mais pour pouvoir définir les bordures, il faudrait avoir déjà les traces. Or au moment de la création du lutin, il n'a encore pas bougé !\n this.xSVG = function (coeff) {\n return this.x * coeff\n }\n this.ySVG = function (coeff) {\n return -this.y * coeff\n }\n this.orientation = 0\n this.historiquePositions = []\n this.crayonBaisse = false\n this.isVisible = true\n this.costume = ''\n this.listeTraces = [] // [[x0,y0,x1,y1,style]...]\n this.color = colorToLatexOrHTML('black')\n this.epaisseur = 2\n this.pointilles = ''\n this.opacite = 1\n this.style = ''\n this.animation = ''\n this.svg = function (coeff) {\n let code = ''\n for (const trace of this.listeTraces) {\n const A = point(trace[0], trace[1])\n const B = point(trace[2], trace[3])\n const color = colorToLatexOrHTML(trace[4])\n const epaisseur = trace[5]\n const pointilles = trace[6]\n const opacite = trace[7]\n let style = ''\n if (epaisseur !== 1) {\n style += ` stroke-width=\"${epaisseur}\" `\n }\n if (pointilles) {\n style += ' stroke-dasharray=\"4 3\" '\n }\n if (opacite !== 1) {\n style += ` stroke-opacity=\"${opacite}\" `\n }\n code += `\\n\\t<line x1=\"${A.xSVG(coeff)}\" y1=\"${A.ySVG(\n coeff\n )}\" x2=\"${B.xSVG(coeff)}\" y2=\"${B.ySVG(coeff)}\" stroke=\"${color[0]}\" ${style} />`\n }\n if (this.isVisible && this.animation !== '') {\n code += '\\n <g>' + this.animation + '</g>'\n }\n return code\n }\n this.tikz = function () {\n let code = ''\n for (const trace of this.listeTraces) {\n const A = point(trace[0], trace[1])\n const B = point(trace[2], trace[3])\n const color = colorToLatexOrHTML(trace[4])\n const epaisseur = trace[5]\n const pointilles = trace[6]\n const opacite = trace[7]\n let optionsDraw = []\n const tableauOptions = []\n if (color[1].length > 1 && color[1] !== 'black') {\n tableauOptions.push(`color =${color[1]}`)\n }\n if ((!isNaN(epaisseur)) && epaisseur !== 1) {\n tableauOptions.push(`line width = ${epaisseur}`)\n }\n if ((!isNaN(opacite)) && opacite !== 1) {\n tableauOptions.push(`opacity = ${opacite}`)\n }\n if (pointilles) {\n tableauOptions.push('dashed')\n }\n if (tableauOptions.length > 0) {\n optionsDraw = '[' + tableauOptions.join(',') + ']'\n }\n code += `\\n\\t\\\\draw${optionsDraw} (${A.x},${A.y})--(${B.x},${B.y});`\n }\n return code\n }\n}\n\n/**\n * Crée une nouvelle instance de l'objet lutin\n * @param {...any} args En fait, il n'y a pas d'argument... il faudra les renseigner après la création de l'objet.\n * Voire l'objet lutin pour la liste de ses attributs (lutin.x, lutin.y, lutin.orientation, ...)\n * @returns {object} Instance d'un lutin\n */\nexport function creerLutin (...args) {\n return new ObjetLutin(...args)\n}\n\n/**\n * Fait avancer le lutin de d unités de lutin dans la direction de son orientation\n * @param {number} d Nombre d'unités choisi pour avancer\n * @param {ObjetLutin} lutin Lutin\n * @example avance(5, lutin) // Fait avancer le lutin de 5 unités\n * @author Jean-Claude Lhote\n */\n// JSDOC Validee par EE Juin 2022\nexport function avance (d, lutin = context.lutin) { // A faire avec pointSurCercle pour tenir compte de l'orientation\n const xdepart = lutin.x\n const ydepart = lutin.y\n lutin.x = lutin.x + d / context.unitesLutinParCm * Math.cos(radians(lutin.orientation))\n lutin.y = lutin.y + d / context.unitesLutinParCm * Math.sin(radians(lutin.orientation))\n lutin.historiquePositions.push([lutin.x, lutin.y])\n if (lutin.crayonBaisse) {\n lutin.listeTraces.push([xdepart, ydepart, lutin.x, lutin.y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n }\n lutin.xMin = Math.min(lutin.xMin, lutin.x)\n lutin.yMin = Math.min(lutin.yMin, lutin.y)\n lutin.xMax = Math.max(lutin.xMax, lutin.x)\n lutin.yMax = Math.max(lutin.yMax, lutin.y)\n}\n\n/**\n * Fait entrer le lutin dans le mode \"trace\"\n * @param {ObjetLutin} lutin\n * @example baisseCrayon(lutin) // Met lutin en mode \"trace\"\n */\nexport function baisseCrayon (lutin = context.lutin) {\n lutin.crayonBaisse = true\n}\n\n/**\n * Fait sortir le lutin du mode \"trace\"\n * @param {ObjetLutin} lutin\n * @example leveCrayon(lutin) // Sort lutin du mode \"trace\"\n */\n// JSDOC Validee par EE Juin 2022\nexport function leveCrayon (lutin = context.lutin) {\n lutin.crayonBaisse = false\n}\n\n/**\n * Fixe l'orientation du lutin à a degrés (au sens Mathalea2d=trigo)\n * Voire la fonction angleScratchTo2d(angle_scratch) pour la conversion\n * @param {number} a\n * @param {ObjetLutin} lutin\n */\nexport function orienter (a, lutin = context.lutin) {\n lutin.orientation = angleModulo(a)\n}\n\n/**\n * Fait tourner de a degrés le lutin dans le sens direct\n * @param {number} a\n * @param {ObjetLutin} lutin\n */\nexport function tournerG (a, lutin = context.lutin) {\n lutin.orientation = angleModulo(lutin.orientation + a)\n}\n\n/**\n * Fait tourner de a degrés le lutin dans le sens indirect\n * @param {number} a\n * @param {ObjetLutin} lutin\n */\nexport function tournerD (a, lutin = context.lutin) {\n lutin.orientation = angleModulo(lutin.orientation - a)\n}\n\n/**\n * Déplace le lutin de sa position courante à (x;y)\n * @param {number} x Nouvelle abscisse\n * @param {number} y Nouvelle ordonnée\n * @param {ObjetLutin} lutin Lutin\n * @example allerA(10,-5,lutin) // Le lutin prend pour coordonnées (10 ; -5).\n */\n// JSDOC Validee par EE Juin 2022\nexport function allerA (x, y, lutin = context.lutin) {\n const xdepart = lutin.x\n const ydepart = lutin.y\n lutin.x = x / context.unitesLutinParCm\n lutin.y = y / context.unitesLutinParCm\n lutin.historiquePositions.push([lutin.x, lutin.y])\n if (lutin.crayonBaisse) {\n lutin.listeTraces.push([xdepart, ydepart, lutin.x, lutin.y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n }\n lutin.xMin = Math.min(lutin.xMin, lutin.x)\n lutin.yMin = Math.min(lutin.yMin, lutin.y)\n lutin.xMax = Math.max(lutin.xMax, lutin.x)\n lutin.yMax = Math.max(lutin.yMax, lutin.y)\n}\n\n/**\n * Change en x à l'abscisse du lutin\n * @param {number} x Nouvelle abscisse\n * @param {ObjetLutin} lutin Lutin\n * @example mettrexA(10,lutin) // L'abscisse de lutin devient 10.\n */\nexport function mettrexA (x, lutin = context.lutin) {\n const xdepart = lutin.x\n lutin.x = x / context.unitesLutinParCm\n lutin.historiquePositions.push([lutin.x, lutin.y])\n if (lutin.crayonBaisse) {\n lutin.listeTraces.push([xdepart, lutin.y, lutin.x, lutin.y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n }\n lutin.xMin = Math.min(lutin.xMin, lutin.x)\n lutin.xMax = Math.max(lutin.xMax, lutin.x)\n}\n\n/**\n * change en y l'ordonnée du lutin\n * @param {number} y Nouvelle ordonnée\n * @param {ObjetLutin} lutin Lutin\n * @example mettreyA(10,lutin) // L'ordonnée de lutin devient 10.\n */\nexport function mettreyA (y, lutin = context.lutin) {\n const ydepart = lutin.y\n lutin.y = y / context.unitesLutinParCm\n lutin.historiquePositions.push([lutin.x, lutin.y])\n if (lutin.crayonBaisse) {\n lutin.listeTraces.push([lutin.x, ydepart, lutin.x, lutin.y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n }\n lutin.yMin = Math.min(lutin.yMin, lutin.y)\n lutin.yMax = Math.max(lutin.yMax, lutin.y)\n}\n\n/**\n * Ajoute x à l'abscisse du lutin\n * @param {number} x Valeur à ajouter à l'abscisse\n * @param {ObjetLutin} lutin Lutin\n * @example ajouterAx(10,lutin) // L'abscisse de lutin est augmentée de 10.\n */\n// JSDOC Non Validee EE Juin 2022 (impossible à tester car non utilisée)\nexport function ajouterAx (x, lutin = context.lutin) {\n const xdepart = lutin.x\n lutin.x += x / context.unitesLutinParCm\n lutin.historiquePositions.push([lutin.x, lutin.y])\n if (lutin.crayonBaisse) {\n lutin.listeTraces.push([xdepart, lutin.y, lutin.x, lutin.y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n }\n lutin.xMin = Math.min(lutin.xMin, lutin.x)\n lutin.xMax = Math.max(lutin.xMax, lutin.x)\n}\n\n/**\n * Ajoute y à l'ordonnée du lutin\n * @param {number} y Valeur à ajouter à l'ordonnée\n * @param {ObjetLutin} lutin Lutin\n * @example ajouterAy(10,lutin) // L'ordonnée de lutin est augmentée de 10.\n */\n// JSDOC Non Validee EE Juin 2022 (impossible à tester car non utilisée)\nexport function ajouterAy (y, lutin = context.lutin) {\n const ydepart = lutin.y\n lutin.y += y / context.unitesLutinParCm\n lutin.historiquePositions.push([lutin.x, lutin.y])\n if (lutin.crayonBaisse) {\n lutin.listeTraces.push([lutin.x, ydepart, lutin.x, lutin.y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n }\n lutin.yMin = Math.min(lutin.yMin, lutin.y)\n lutin.yMax = Math.max(lutin.yMax, lutin.y)\n}\n\n/**\n * Fait \"vibrer\" le lutin, tempo fois autour de sa position courante\n * @param {number} tempo Nombre de vibrations\n * @param {ObjetLutin} lutin Lutin\n * @example attendre(5, lutin) // Fait \"vibrer\" 5 fois le lutin\n * @author Jean-Claude Lhote\n */\n// JSDOC Validee par EE Juin 2022\nexport function attendre (tempo, lutin = context.lutin) {\n const x = lutin.x\n const y = lutin.y\n lutin.listeTraces.push([x, y, x + 0.08, y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n for (let i = 0; i < tempo; i++) {\n lutin.listeTraces.push([x + 0.08, y, x + 0.08, y + 0.08, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n lutin.listeTraces.push([x + 0.08, y + 0.08, x - 0.08, y + 0.08, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n lutin.listeTraces.push([x + 0.08, y + 0.08, x - 0.08, y + 0.08, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n lutin.listeTraces.push([x - 0.08, y + 0.08, x - 0.08, y - 0.08, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n lutin.listeTraces.push([x - 0.08, y - 0.08, x + 0.08, y - 0.08, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n lutin.listeTraces.push([x + 0.08, y - 0.08, x + 0.08, y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n }\n lutin.listeTraces.push([x + 0.03, y, x, y, lutin.color, lutin.epaisseur, lutin.pointilles, lutin.opacite])\n}\n\n/**\n * fork de https://javascript.developpez.com/actu/94357/JavaScript-moins-Realiser-une-copie-parfaite-d-objet/\n * Ne fonctionne pas complètement : ne copie pas les méthodes svg et tikz...\n * @param {ObjetMathalea2D} originalObject\n * @returns {object} copie de cet objet.\n */\nexport function clone (obj) {\n if (obj === null || typeof obj !== 'object') return obj\n if (obj instanceof Array) {\n const copy = []\n for (let i = 0, len = obj.length; i < len; i++) {\n copy[i] = clone(obj[i])\n }\n return copy\n }\n if (obj instanceof Object) {\n const copy = {}\n for (const attr in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, attr)) copy[attr] = clone(obj[attr])\n }\n return copy\n }\n throw new Error('Unable to copy obj this object.')\n}\n"],"names":["angleScratchTo2d","x","angle2d","angleModulo","ObjetLutin","ObjetMathalea2D","coeff","colorToLatexOrHTML","code","trace","A","point","B","color","epaisseur","pointilles","opacite","style","optionsDraw","tableauOptions","creerLutin","args","avance","d","lutin","context","xdepart","ydepart","radians","baisseCrayon","leveCrayon","orienter","a","tournerG","tournerD","allerA","y","ajouterAx","ajouterAy","attendre","tempo","i","clone","obj","copy","len","attr"],"mappings":"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"}