File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/projections3d-Am93wM34.js.map
{"version":3,"file":"projections3d-Am93wM34.js","sources":["../../src/lib/2d/projections3d.js"],"sourcesContent":["import { abs, random, round } from 'mathjs'\nimport { colorToLatexOrHTML, ObjetMathalea2D } from '../../modules/2dGeneralites.js'\nimport { Cercle } from './cercle.js'\nimport { afficheCoteSegment } from './codages.js'\nimport { point, pointAdistance } from './points.js'\nimport { pattern, polygone } from './polygones.js'\nimport { longueur, segment, vecteur } from './segmentsVecteurs.js'\nimport { homothetie, rotation, translation } from './transformations.js'\n\n/**\n *\n * @param {int} Longueur\n * @param {int} largeur\n * @param {int} profondeur\n *\n */\nexport function Pave (L = 10, l = 5, h = 5, origine = point(0, 0), cote = true, angleDeFuite = 30, coefficientDeFuite = 0.5) {\n ObjetMathalea2D.call(this, {})\n const objets = []\n const A = origine\n const B = point(A.x + L, A.y)\n const C = point(B.x, B.y + l)\n const D = point(A.x, A.y + l)\n const p = polygone(A, B, C, D)\n const E = pointAdistance(A, h * coefficientDeFuite, angleDeFuite)\n const F = translation(B, vecteur(A, E))\n const G = translation(C, vecteur(A, E))\n const H = translation(D, vecteur(A, E))\n const sAE = segment(A, E)\n const sBF = segment(B, F)\n const sCG = segment(C, G)\n const sDH = segment(D, H)\n const sEF = segment(E, F)\n const sFG = segment(F, G)\n const sGH = segment(G, H)\n const sHE = segment(H, E)\n sAE.pointilles = 5\n sEF.pointilles = 5\n sHE.pointilles = 5\n \n objets.push(p, sAE, sBF, sCG, sDH, sEF, sFG, sGH, sHE)\n if (cote) {\n objets.push(afficheCoteSegment(segment(B, A), '', 1))\n objets.push(afficheCoteSegment(segment(A, D), '', 1))\n objets.push(afficheCoteSegment(segment(F, B), h + ' cm', 1))\n }\n this.svg = function (coeff) {\n let code = ''\n for (const objet of objets) {\n objet.color = this.color\n code += '\\n\\t' + objet.svg(coeff)\n }\n return code\n }\n this.tikz = function () {\n let code = ''\n for (const objet of objets) {\n code += '\\n\\t' + objet.tikz()\n }\n return code\n }\n}\n\nexport function pave (...args) {\n return new Pave(...args)\n}\n\n/** Trace l'ellipse de centre O et de rayon rx et ry (la construction, dite “par réduction d’ordonnée”, montre que l'ellipse est la transformée de Newton de 2 cercles concentriques)\n * @param {Point} O Centre de l'ellipse\n * @param {number} rx Premier rayon de l'ellipse\n * @param {number} ry Second rayon de l'ellipse\n * @param {string} [color = 'black'] Couleur de l'ellipse : du type 'blue' ou du type '#f15929'\n * @property {string} svg Sortie au format vectoriel (SVG) que l’on peut afficher dans un navigateur\n * @property {string} svgml Sortie, à main levée, au format vectoriel (SVG) que l’on peut afficher dans un navigateur\n * @property {string} tikz Sortie au format TikZ que l’on peut utiliser dans un fichier LaTeX\n * @property {string} tikzml Sortie, à main levée, au format TikZ que l’on peut utiliser dans un fichier LaTeX\n * @property {Point} centre Centre du cercle\n * @property {number} rx Premier rayon de l'ellipse\n * @property {number} ry Second rayon de l'ellipse\n * @property {string} color Couleur de l'ellipse. À associer obligatoirement à colorToLatexOrHTML().\n * @property {string} couleurDeRemplissage Couleur de remplissage. À associer obligatoirement à colorToLatexOrHTML().\n * @property {number} opaciteDeRemplissage Opacité de l'ellipse si couleur de remplissage choisie.\n * @property {number[]} bordures Coordonnées de la fenêtre d'affichage du genre [-2,-2,5,5]\n * @author Rémi Angot\n * @class\n */\n// JSDOC Validee par EE Aout 2022\nexport function Ellipse (O, rx, ry, color = 'black') {\n ObjetMathalea2D.call(this, {})\n this.color = colorToLatexOrHTML(color)\n this.centre = O\n this.rx = rx\n this.ry = ry\n this.couleurDeRemplissage = colorToLatexOrHTML('none')\n this.opaciteDeRemplissage = 1\n this.bordures = [O.x - rx, O.y - ry, O.x + rx, O.y + ry]\n this.svg = function (coeff) {\n if (this.epaisseur !== 1) {\n this.style += ` stroke-width=\"${this.epaisseur}\" `\n }\n switch (this.pointilles) {\n case 1:\n this.style += ' stroke-dasharray=\"6 10\" '\n break\n case 2:\n this.style += ' stroke-dasharray=\"6 3\" '\n break\n case 3:\n this.style += ' stroke-dasharray=\"3 2 6 2 \" '\n break\n case 4:\n this.style += ' stroke-dasharray=\"1 2\" '\n break\n case 5:\n this.style += ' stroke-dasharray=\"5 5\" '\n break\n }\n \n if (this.opacite !== 1) {\n this.style += ` stroke-opacity=\"${this.opacite}\" `\n }\n if (this.couleurDeRemplissage === '') {\n this.style += ' fill=\"none\" '\n } else {\n this.style += ` fill=\"${this.couleurDeRemplissage[0]}\" `\n this.style += ` fill-opacity=\"${this.opaciteDeRemplissage}\" `\n }\n \n return `<ellipse cx=\"${O.xSVG(coeff)}\" cy=\"${O.ySVG(coeff)}\" rx=\"${rx * coeff}\" ry=\"${ry * coeff}\" stroke=\"${this.color[0]}\" ${this.style} id=\"${this.id}\" />`\n }\n this.tikz = function () {\n let optionsDraw = []\n const tableauOptions = []\n if (this.color[1].length > 1 && this.color[1] !== 'black') {\n tableauOptions.push(`color=${this.color[1]}`)\n }\n if (this.epaisseur !== 1) {\n tableauOptions.push(`line width = ${this.epaisseur}`)\n }\n switch (this.pointilles) {\n case 1:\n tableauOptions.push(' dash dot ')\n break\n case 2:\n tableauOptions.push(' densely dash dot dot ')\n break\n case 3:\n tableauOptions.push(' dash dot dot ')\n break\n case 4:\n tableauOptions.push(' dotted ')\n break\n case 5:\n tableauOptions.push(' dashed ')\n break\n }\n \n if (this.opacite !== 1) {\n tableauOptions.push(`opacity = ${this.opacite}`)\n }\n if (this.opaciteDeRemplissage !== 1) {\n tableauOptions.push(`fill opacity = ${this.opaciteDeRemplissage}`)\n }\n if (this.couleurDeRemplissage !== '' && this.couleurDeRemplissage[1] !== 'none') {\n tableauOptions.push(`preaction={fill,color = ${this.couleurDeRemplissage[1]}}`)\n }\n if (tableauOptions.length > 0) {\n optionsDraw = '[' + tableauOptions.join(',') + ']'\n }\n return `\\\\draw${optionsDraw} (${O.x},${O.y}) ellipse (${rx}cm and ${ry}cm);`\n }\n this.svgml = function (coeff, amp) {\n if (this.epaisseur !== 1) {\n this.style += ` stroke-width=\"${this.epaisseur}\" `\n }\n \n if (this.opacite !== 1) {\n this.style += ` stroke-opacity=\"${this.opacite}\" `\n }\n \n let code = `<path d=\"M ${O.xSVG(coeff) + rx * coeff} ${O.ySVG(coeff)} C ${O.xSVG(coeff) + rx * coeff} ${O.ySVG(coeff)}, `\n let compteur = 1\n for (let k = 1, variation; k < 181; k++) {\n variation = (random(0, 2) - 1) * amp / 10\n code += `${O.xSVG(coeff) + round((rx + variation) * Math.cos(2 * k * Math.PI / 180) * coeff, 2)} ${O.ySVG(coeff) + round((ry + variation) * Math.sin(2 * k * Math.PI / 180) * coeff, 2)}, `\n compteur++\n }\n if (compteur % 2 === 0) code += ` ${O.xSVG(coeff) + rx * coeff} ${O.ySVG(coeff)}, `\n code += ` ${O.xSVG(coeff) + rx * coeff} ${O.ySVG(coeff)} Z\" stroke=\"${this.color[0]}\" ${this.style}\"/>`\n return code\n }\n this.tikzml = function (amp) {\n let optionsDraw = []\n const tableauOptions = []\n if (this.color[1].length > 1 && this.color[1] !== 'black') {\n tableauOptions.push(`color=${this.color[1]}`)\n }\n if (this.epaisseur !== 1) {\n tableauOptions.push(`line width = ${this.epaisseur}`)\n }\n \n if (this.opacite !== 1) {\n tableauOptions.push(`opacity = ${this.opacite}`)\n }\n tableauOptions.push(`decorate,decoration={random steps , amplitude = ${amp}pt}`)\n optionsDraw = '[' + tableauOptions.join(',') + ']'\n \n const code = `\\\\draw${optionsDraw} (${O.x},${O.y}) ellipse (${rx}cm and ${ry}cm);`\n return code\n }\n}\n\n/** Trace l'ellipse de centre O et de rayon rx et ry (la construction, dite “par réduction d’ordonnée”, montre que l'ellipse est la transformée de Newton de 2 cercles concentriques)\n * @param {Point} O Centre de l'ellipse\n * @param {number} rx Premier rayon de l'ellipse\n * @param {number} ry Second rayon de l'ellipse\n * @param {string} [color = 'black'] Couleur de l'ellipse : du type 'blue' ou du type '#f15929'\n * @example ellipse(M, 1, 3) // Trace, en noir, l'ellipse de centre M et de rayons 1 et 3\n * @example ellipse(M, 1, 3, 'red') // Trace, en rouge, l'ellipse de centre M et de rayons 1 et 3\n * @author Rémi Angot\n * @return {Ellipse}\n */\n// JSDOC Validee par EE Aout 2022\nexport function ellipse (O, rx, ry, color = 'black') {\n return new Ellipse(O, rx, ry, color)\n}\n\n/**\n * @param {Point} centre centre de l'ellipse\n * @param {number} Rx rayon en X\n * @param {number} Ry rayon en Y\n * @param {string} hemisphere 'nord' pour tracer au dessus du centre, 'sud' pour tracer en dessous\n * @param {boolean | number} pointilles Si false, l'ar est en trait plein, sinon en pointillés\n * @param {boolean} rayon Si true, alors l'arc est fermé par un segment.\n * @param {string} color Facultatif, 'black' par défaut\n * @param {string} couleurDeRemplissage si 'none' alors pas de remplissage.\n * @param {number} opaciteDeRemplissage Transparence de remplissage de 0 à 1. Facultatif, 0.2 par défaut\n * @author Jean-Claude Lhote\n * @return {SemiEllipse} Objet SemiEllipse\n */\nexport function SemiEllipse ({\n centre,\n Rx,\n Ry,\n hemisphere = 'nord',\n pointilles = false,\n rayon = false,\n couleurDeRemplissage = 'none',\n color = 'black',\n opaciteDeRemplissage = 0.2\n}) {\n ObjetMathalea2D.call(this, {})\n this.color = colorToLatexOrHTML(color)\n this.couleurDeRemplissage = colorToLatexOrHTML(couleurDeRemplissage)\n this.opaciteDeRemplissage = opaciteDeRemplissage\n this.hachures = false\n this.couleurDesHachures = colorToLatexOrHTML('black')\n this.epaisseurDesHachures = 1\n this.distanceDesHachures = 10\n this.pointilles = pointilles\n const angle = hemisphere === 'nord' ? 180 : -180\n const M = point(centre.x + Rx, centre.y)\n const med = homothetie(rotation(M, centre, angle / 2), centre, Ry / Rx)\n \n let large = 0\n let sweep = 0\n if (angle > 180) {\n sweep = 0 // option pour path : permet de savoir quel morceau de cercle tracé parmi les 2 possibles. Voir https://developer.mozilla.org/fr/docs/Web/SVG/Tutorial/Paths pour plus de détails\n large = 1 // option pour path : permet de savoir sur un morceau de cercle choisi, quel parcours prendre.\n } else if (angle < -180) {\n large = 1\n sweep = 1\n } else {\n large = 0\n sweep = 1 - (angle > 0)\n }\n const N = rotation(M, centre, angle)\n this.bordures = [Math.min(M.x, N.x, med.x) - 0.1, Math.min(M.y, N.y, med.y) - 0.1, Math.max(M.x, N.x, med.x) + 0.1, Math.max(M.y, N.y, med.y) + 0.1]\n if (rayon) {\n this.svg = function (coeff) {\n this.style = ''\n if (this.epaisseur !== 1) {\n this.style += ` stroke-width=\"${this.epaisseur}\" `\n }\n \n switch (this.pointilles) {\n case 1:\n this.style += ' stroke-dasharray=\"6 10\" '\n break\n case 2:\n this.style += ' stroke-dasharray=\"6 3\" '\n break\n case 3:\n this.style += ' stroke-dasharray=\"3 2 6 2 \" '\n break\n case 4:\n this.style += ' stroke-dasharray=\"1 2\" '\n break\n case 5:\n this.style += ' stroke-dasharray=\"5 5\" '\n break\n }\n \n if (this.hachures) {\n if (this.couleurDeRemplissage.length < 1) {\n this.couleurDeRemplissage = colorToLatexOrHTML('none')\n }\n \n return pattern({\n motif: this.hachures,\n id: this.id,\n distanceDesHachures: this.distanceDesHachures,\n epaisseurDesHachures: this.epaisseurDesHachures,\n couleurDesHachures: this.couleurDesHachures[0],\n couleurDeRemplissage: this.couleurDeRemplissage[0],\n opaciteDeRemplissage: this.opaciteDeRemplissage\n }) + `<path d=\"M${M.xSVG(coeff)} ${M.ySVG(coeff)} A ${Rx * coeff} ${Ry * coeff} 0 ${large} ${sweep} ${N.xSVG(coeff)} ${N.ySVG(coeff)} L ${centre.xSVG(coeff)} ${centre.ySVG(coeff)} Z\" stroke=\"${this.color[0]}\" ${this.style} id=\"${this.id}\" fill=\"url(#pattern${this.id})\" />`\n } else {\n if (this.opacite !== 1) {\n this.style += ` stroke-opacity=\"${this.opacite}\" `\n }\n if (this.couleurDeRemplissage !== 'none') {\n this.style += ` fill-opacity=\"${this.opaciteDeRemplissage}\" `\n }\n \n return `<path d=\"M${M.xSVG(coeff)} ${M.ySVG(coeff)} A ${Rx * coeff} ${Ry * coeff} 0 ${large} ${sweep} ${N.xSVG(coeff)} ${N.ySVG(coeff)} L ${centre.xSVG(coeff)} ${centre.ySVG(coeff)} Z\" stroke=\"${this.color[0]}\" fill=\"${this.couleurDeRemplissage[0]}\" ${this.style}/>`\n }\n }\n } else {\n this.svg = function (coeff) {\n this.style = ''\n if (this.epaisseur !== 1) {\n this.style += ` stroke-width=\"${this.epaisseur}\" `\n }\n \n switch (this.pointilles) {\n case 1:\n this.style += ' stroke-dasharray=\"6 10\" '\n break\n case 2:\n this.style += ' stroke-dasharray=\"6 3\" '\n break\n case 3:\n this.style += ' stroke-dasharray=\"3 2 6 2 \" '\n break\n case 4:\n this.style += ' stroke-dasharray=\"1 2\" '\n break\n case 5:\n this.style += ' stroke-dasharray=\"5 5\" '\n break\n }\n if (this.opacite !== 1) {\n this.style += ` stroke-opacity=\"${this.opacite}\" `\n }\n this.style += ` fill-opacity=\"${this.opaciteDeRemplissage}\" `\n \n return `<path d=\"M${M.xSVG(coeff)} ${M.ySVG(coeff)} A ${Rx * coeff} ${Ry * coeff} 0 ${large} ${sweep} ${N.xSVG(coeff)} ${N.ySVG(coeff)}\" stroke=\"${this.color[0]}\" fill=\"${this.couleurDeRemplissage[0]}\" ${this.style} id=\"${this.id}\" />`\n }\n }\n this.tikz = function () {\n let optionsDraw = []\n const tableauOptions = []\n if (this.color[1].length > 1 && this.color[1] !== 'black') {\n tableauOptions.push(`color=${this.color[1]}`)\n }\n if (this.epaisseur !== 1) {\n tableauOptions.push(`line width = ${this.epaisseur}`)\n }\n switch (this.pointilles) {\n case 1:\n tableauOptions.push(' dash dot ')\n break\n case 2:\n tableauOptions.push(' densely dash dot dot ')\n break\n case 3:\n tableauOptions.push(' dash dot dot ')\n break\n case 4:\n tableauOptions.push(' dotted ')\n break\n case 5:\n tableauOptions.push(' dashed ')\n break\n }\n \n if (this.opacite !== 1) {\n tableauOptions.push(`opacity = ${this.opacite}`)\n }\n \n if ((this.couleurDeRemplissage !== 'none' || this.couleurDeRemplissage !== '')) {\n tableauOptions.push(`fill opacity = ${this.opaciteDeRemplissage}`)\n tableauOptions.push(`fill = ${this.couleurDeRemplissage[1]}`)\n }\n \n if (this.hachures) {\n tableauOptions.push(pattern({\n motif: this.hachures,\n id: this.id,\n distanceDesHachures: this.distanceDesHachures,\n couleurDesHachures: this.couleurDesHachures[1],\n couleurDeRemplissage: this.couleurDeRemplissage[1],\n opaciteDeRemplissage: this.opaciteDeRemplissage\n }))\n }\n if (tableauOptions.length > 0) {\n optionsDraw = '[' + tableauOptions.join(',') + ']'\n }\n if (couleurDeRemplissage !== 'none') return `\\\\filldraw ${optionsDraw} (${M.x},${M.y}) arc [start angle=0, end angle = ${angle}, x radius = ${Rx}, y radius = ${Ry}]; -- cycle ;`\n else return `\\\\draw${optionsDraw} (${M.x},${M.y}) arc [start angle=0, end angle = ${angle}, x radius = ${Rx}, y radius = ${Ry}];`\n }\n let code, P\n \n this.svgml = function (coeff, amp) {\n this.style = ''\n if (this.epaisseur !== 1) {\n this.style += ` stroke-width=\"${this.epaisseur}\" `\n }\n if (this.opacite !== 1) {\n this.style += ` stroke-opacity=\"${this.opacite}\" `\n }\n this.style += ' fill=\"none\" '\n code = `<path d=\"M${M.xSVG(coeff)} ${M.ySVG(coeff)} S ${M.xSVG(coeff)} ${M.ySVG(coeff)}, `\n let compteur = 1\n const r = longueur(centre, M)\n for (let k = 0, variation; abs(k) <= abs(angle) - 2; k += angle < 0 ? -2 : 2) {\n variation = (random(0, 2) - 1) / r * amp / 10\n P = rotation(homothetie(M, centre, 1 + variation), centre, k)\n code += `${round(P.xSVG(coeff), 2)} ${round(P.ySVG(coeff), 2)}, `\n compteur++\n }\n P = rotation(M, centre, angle)\n if (compteur % 2 === 0) code += `${P.xSVG(coeff)} ${P.ySVG(coeff)}, ` // Parce qu'on utilise S et non C dans le path\n code += `${P.xSVG(coeff)} ${P.ySVG(coeff)}`\n code += `\" stroke=\"${this.color[0]}\" ${this.style}/>`\n return code\n }\n \n this.tikzml = function (amp) {\n let optionsDraw = []\n const tableauOptions = []\n if (this.color[1].length > 1 && this.color[1] !== 'black') {\n tableauOptions.push(`color=${this.color[1]}`)\n }\n if (this.epaisseur !== 1) {\n tableauOptions.push(`line width = ${this.epaisseur}`)\n }\n if (this.opacite !== 1) {\n tableauOptions.push(`opacity = ${this.opacite}`)\n }\n \n tableauOptions.push(`decorate,decoration={random steps , amplitude = ${amp}pt}`)\n \n optionsDraw = '[' + tableauOptions.join(',') + ']'\n if (this.couleurDeRemplissage[1] !== 'none') return `\\\\filldraw ${optionsDraw} (${M.x},${M.y}) arc [start angle=0, end angle = ${angle}, x radius = ${Rx}, y radius = ${Ry}]; -- cycle ;`\n else return `\\\\draw${optionsDraw} (${M.x},${M.y}) arc [start angle=0, end angle = ${angle}, x radius = ${Rx}, y radius = ${Ry}];`\n }\n}\n\n/**\n * @param {Point} centre centre de l'ellipse\n * @param {number} Rx rayon en X\n * @param {number} Ry rayon en Y\n * @param {string} hemisphere 'nord' pour tracer au dessus du centre, 'sud' pour tracer en dessous\n * @param {boolean | number} pointilles Si false, l'ar est en trait plein, sinon en pointillés\n * @param {boolean} rayon Si true, alors l'arc est fermé par un segment.\n * @param {string} color Facultatif, 'black' par défaut\n * @param {string} couleurDeRemplissage si 'none' alors pas de remplissage.\n * @param {number} opaciteDeRemplissage Transparence de remplissage de 0 à 1. Facultatif, 0.2 par défaut\n * @author Jean-Claude Lhote\n * @return {SemiEllipse} Objet SemiEllipse\n */\nexport function semiEllipse ({\n centre,\n Rx,\n Ry,\n hemisphere = 'nord',\n pointilles = false,\n rayon = false,\n couleurDeRemplissage = 'none',\n color = 'black',\n opaciteDeRemplissage = 0.2\n}) {\n return new SemiEllipse({\n centre,\n Rx,\n Ry,\n hemisphere,\n pointilles,\n rayon,\n couleurDeRemplissage,\n color,\n opaciteDeRemplissage\n })\n}\n\n/**\n * Trace un cône\n * @param {Point} centre Centre de la base\n * @param {number} Rx Rayon sur l'axe des abscisses\n * @param {number} hauteur Distance verticale entre le centre et le sommet.\n * @param {string} [color = 'black'] Facultatif, 'black' par défaut\n * @param {string} [couleurDeRemplissage = 'none'] none' si on ne veut pas de remplissage, sinon une couleur du type 'blue' ou du type '#f15929'\n * @param {number} [opaciteDeRemplissage = 0.2] Taux d'opacité du remplissage\n * @author Jean-Claude Lhote\n * @private\n */\nexport function Cone ({\n centre,\n Rx,\n hauteur,\n couleurDeRemplissage = 'none',\n color = 'black',\n opaciteDeRemplissage = 0.2\n}) {\n ObjetMathalea2D.call(this, {})\n const sommet = point(centre.x, centre.y + hauteur)\n this.sommet = sommet\n this.centre = centre\n this.color = color\n this.couleurDeRemplissage = couleurDeRemplissage\n this.opaciteDeRemplissage = opaciteDeRemplissage\n const objets = [\n semiEllipse({\n centre,\n Rx,\n Ry: Rx / 3,\n hemisphere: 'nord',\n rayon: false,\n pointilles: 1,\n couleurDeRemplissage,\n color: this.color,\n opaciteDeRemplissage\n }),\n semiEllipse({\n centre,\n Rx,\n Ry: Rx / 3,\n hemisphere: 'sud',\n rayon: false,\n pointilles: false,\n couleurDeRemplissage,\n color: this.color,\n opaciteDeRemplissage\n }),\n segment(point(centre.x + Rx, centre.y + 0.1), sommet, this.color),\n segment(point(centre.x - Rx, centre.y + 0.1), sommet, this.color)\n ]\n let xMin = 1000\n let yMin = 1000\n let yMax = -1000\n let xMax = -1000\n for (const obj of objets) {\n xMin = Math.min(xMin, obj.bordures[0])\n yMin = Math.min(yMin, obj.bordures[1])\n xMax = Math.max(xMax, obj.bordures[2])\n yMax = Math.max(yMax, obj.bordures[3])\n }\n this.bordures = [xMin, yMin, xMax, yMax]\n this.svg = function (coeff) {\n let code = ''\n for (const objet of objets) {\n objet.color = colorToLatexOrHTML(this.color)\n code += objet.svg(coeff) + '\\n'\n }\n return code\n }\n this.tikz = function () {\n let code = ''\n for (const objet of objets) {\n objet.color = this.color\n code += objet.tikz() + '\\n\\t'\n }\n return code\n }\n}\n\nexport function Sphere2d ({\n centre,\n Rx,\n couleurDeRemplissage = 'none',\n color = 'black',\n opaciteDeRemplissage = 0.2\n}) {\n ObjetMathalea2D.call(this, {})\n const grandCercle = new Cercle(centre, Rx, color, couleurDeRemplissage)\n this.centre = centre\n this.color = color\n this.couleurDeRemplissage = couleurDeRemplissage\n this.opaciteDeRemplissage = opaciteDeRemplissage\n const objets = [grandCercle,\n semiEllipse({\n centre,\n Rx,\n Ry: Rx / 3,\n hemisphere: 'nord',\n rayon: false,\n pointilles: 1,\n couleurDeRemplissage,\n color: this.color,\n opaciteDeRemplissage\n }),\n semiEllipse({\n centre,\n Rx,\n Ry: Rx / 3,\n hemisphere: 'sud',\n rayon: false,\n pointilles: false,\n couleurDeRemplissage,\n color: this.color,\n opaciteDeRemplissage\n })\n ]\n let xMin = 1000\n let yMin = 1000\n let yMax = -1000\n let xMax = -1000\n for (const obj of objets) {\n xMin = Math.min(xMin, obj.bordures[0])\n yMin = Math.min(yMin, obj.bordures[1])\n xMax = Math.max(xMax, obj.bordures[2])\n yMax = Math.max(yMax, obj.bordures[3])\n }\n this.bordures = [xMin, yMin, xMax, yMax]\n this.svg = function (coeff) {\n let code = ''\n for (const objet of objets) {\n objet.color = colorToLatexOrHTML(this.color)\n code += objet.svg(coeff) + '\\n'\n }\n return code\n }\n this.tikz = function () {\n let code = ''\n for (const objet of objets) {\n objet.color = this.color\n code += objet.tikz() + '\\n\\t'\n }\n return code\n }\n}\n\nexport function sphere2d ({\n centre,\n Rx,\n couleurDeRemplissage = 'none',\n color = 'black',\n opaciteDeRemplissage = 0.2\n}) {\n return new Sphere2d({ centre, Rx, couleurDeRemplissage, color, opaciteDeRemplissage })\n}\n\n// Cette fonction donne un rendu correct que si la hauteur est suffisamment grande\nexport function cone ({\n centre,\n Rx,\n hauteur,\n couleurDeRemplissage = 'none',\n color = 'black',\n opaciteDeRemplissage = 0.2\n}) {\n return new Cone({ centre, Rx, hauteur, couleurDeRemplissage, color, opaciteDeRemplissage })\n}\n"],"names":["Pave","L","l","h","origine","point","cote","angleDeFuite","coefficientDeFuite","ObjetMathalea2D","objets","A","B","C","D","p","polygone","E","pointAdistance","F","translation","vecteur","G","H","sAE","segment","sBF","sCG","sDH","sEF","sFG","sGH","sHE","afficheCoteSegment","coeff","code","objet","pave","args","Ellipse","O","rx","ry","color","colorToLatexOrHTML","optionsDraw","tableauOptions","amp","compteur","k","variation","random","round","ellipse","SemiEllipse","centre","Rx","Ry","hemisphere","pointilles","rayon","couleurDeRemplissage","opaciteDeRemplissage","angle","M","med","homothetie","rotation","large","sweep","N","pattern","P","r","longueur","abs","semiEllipse","Cone","hauteur","sommet","xMin","yMin","yMax","xMax","obj","Sphere2d","grandCercle","Cercle","sphere2d","cone"],"mappings":"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"}