{{ langueActuelle === 'ar' ? 'أشكال تفاعلية — للقراءة فقط' : 'Figures interactives — lecture seule' }} {{ langueActuelle === 'ar' ? 'ابنِ بحرّية بأدوات اليسار · أو اختر شكلًا' : 'Construis librement avec les outils · ou choisis une figure' }}
t = {{ sceneIdx + 1 }} / {{ Math.max(1, scenes.length) }}
{{ Math.round(eleveZoomManuel * 100) }}%
☰ Menu de la figure

⚙️ Textes des boutons

Changez le texte de chaque bouton de la figure (laissez vide pour garder le texte par défaut). Ils sont enregistrés avec la figure.

{{ libellesNoms[k] }}

💡 Consigne de l'élève

Ce texte s'affiche en haut de la figure (et peut être lu à voix haute). Dites à l'élève quoi manipuler (le nom exact des curseurs et des points), quoi observer, et la question à se poser — sans donner la réponse : c'est ce qu'il doit découvrir. Écrivez de préférence en mots simples (A, B, f(x), a = 2, « racine de 2 », « 180 degrés »). Une formule reste possible entre ( … ) (ex. ( rac{a}{b} )) : elle s'affiche comme une vraie formule et la voix la dit en mots.

• voix prête

{{ modalPoint.editIdx != null ? 'Modifier le point' : 'Point par coordonnées' }}

Unité de θ :
Variables disponibles : {{ v.name }} = {{ getDynamicValDisplay(v) }}
Position calculée :

Ensemble de points défini par une condition

Choisissez la condition : « construire » crée la figure liée à vos points (elle suit si vous les bougez) ou active l'outil existant correspondant (↗).

{{ g.groupe }}
{{ e.titre }}
{{ e.condition }} — {{ e.aide }}

Ensemble des points M tels que…

Écrivez la relation : le labo trace l'ensemble, quelle que soit sa forme (droite, cercle, parabole, ellipse, hyperbole…). MA = MB n'est une médiatrice que si A et B sont fixes : si A ou B dépend de M (point lié à M, ligne du bas) ou d'une variable, la forme change — et la figure suit quand vous bougez les points ou les curseurs.

Distances : MA (ou AM, MH…) · AB · d(M, D) distance à la droite D · ps(A,B) produit scalaire MA·MB · variables k, a… · + − × / ^ ² · abs sqrt min max
Points et droites à définir : B = pt(0, 1) (ou aff(0, 1) pour l'affixe i) · D : y = 1/2 · H = proj(M, D) · K = sym(M, A) · K = symaxe(M, D) · I = mil(M, A) · R = rot(M, A, 90) · P = hom(M, A, k) · T = transl(M, A, B) · x, y = coordonnées de M
Dans votre figure — points : {{ relationDisponibles().points.join(', ') || 'aucun' }} · droites : {{ relationDisponibles().droites.join(', ') || 'aucune' }} · variables : {{ relationDisponibles().variables.join(', ') || 'aucune' }}
⚠ {{ relationErreur }}

Point Variable sur Objet

Aucun support compatible. Créez d'abord un segment, une droite, un cercle, une ellipse ou un polygone.

Partager en parts égales

Forme : {{ svgElements[partitionDraft.cibleIdx].name || svgElements[partitionDraft.cibleIdx].type }} (#{{ partitionDraft.cibleIdx }})
Le partage se met à jour tout seul quand vous bougez le curseur de cette variable.
Résultat : {{ partitionApercuGrille().cols }} × {{ partitionApercuGrille().rows }} = {{ partitionApercuGrille().total }} cases {{ partitionNApercu() }} parts égales

Ajouter un texte

Insérer une variable :
{{ modalTexte.label ? bmTexteVariables(modalTexte.label) : 'Aperçu...' }}
{{ langueActuelle==='ar' ? item.ar : item.label }}

{{ langueActuelle==='ar' ? 'اختصارات لوحة المفاتيح' : 'Raccourcis clavier' }}

{{ s.k }} {{ langueActuelle==='ar' ? s.ar : s.fr }}
{{ svgElements.length }} obj. {{ variables.length }} var. H {{ history.length }}/{{ getHistoryLimit() }} {{ perfStats.stateKo }} Ko
Dernier recalcul : {{ perfStats.lastPropagateMs }} ms
Dernière sauvegarde état : {{ perfStats.lastSaveMs }} ms
⚠ Figure lourde : limitez l'historique, les images et les traces.
Éditeur de Questions
Configuration de l'activité
Q{{ idx + 1 }} {{ tache.type }}
Cliquez "Détecter zones" ou "Zone"
Total : {{ taches.reduce((s,t)=>s+(t.points||0),0) }} points · {{ taches.length }} question(s)
Questions
{{ idx + 1 }}. {{ langueActuelle === 'ar' ? (tache.description_ar || tache.description) : tache.description }} ({{ tache.points }} pts)
À réaliser sur la zone de dessin
Colorier la zone spécifiée
{{ tache.estCorrect ? 'Validé' : 'À revoir' }}
{{ tache.explication }}

Score : {{ scoreResultat }} / {{ scoreTotal }}

Question {{ quizIndexActuel + 1 }} / {{ taches.length }}
{{ scoreResultat }} / {{ taches.reduce((s,t)=>s+(t.points||0),0) }} pts
{{ quizTimerRestant }}s
{{ langueActuelle === 'ar' ? (taches[quizIndexActuel].description_ar || taches[quizIndexActuel].description) : taches[quizIndexActuel].description }}
{{ taches[quizIndexActuel].unite }}
Réponse attendue : {{ taches[quizIndexActuel].reponseNumerique }} ± {{ taches[quizIndexActuel].tolerance }}
Réalisez la construction sur le plan géométrique
puis cliquez sur "Valider"
Colorez la zone demandée sur la figure
puis cliquez sur "Valider"
{{ taches[quizIndexActuel].estCorrect ? '✓ Bonne réponse !' : '✗ Réponse incorrecte' }} +{{ taches[quizIndexActuel].estCorrect ? (taches[quizIndexActuel].points || 0) : 0 }} pts
{{ taches[quizIndexActuel].explication }}
{{ scoreResultat >= scoreTotal * 0.8 ? '🏆' : scoreResultat >= scoreTotal * 0.5 ? '👍' : '💪' }}

Résultats

{{ scoreResultat }} / {{ scoreTotal }}
{{ Math.round(scoreResultat/scoreTotal*100) }}% de réussite
{{ i+1 }}. {{ t.description }} {{ t.estCorrect ? (t.points||0) : 0 }}/{{ t.points||0 }} pts
Texte
Taille
Couleur
Largeur
Ce texte parlera quand l'élève cliquera dessus
{{ svgElements[selectedShapeIndex].vocal.statut }}
{{ svgElements[selectedShapeIndex].type }} #{{ selectedShapeIndex }} Cliquer sur un objet ou taper son nom ci-contre pour le sélectionner

Objets & IDs ({{ svgElements.length }})

  • {{ el.type === 'text' ? (el.label || '(vide)') : (el.name || '(sans nom)') }} {{ bmDescriptionObjet(el) }} {{ el.relation }} → {{ relationNature(el) || 'courbe quelconque' }} {{ el.vertices.map(v=>v.name||'·').join(' ') }}
Variables
{{ v.vocal.statut }}
de à
Points vocaux multiples
Créer la série depuis une phrase

donne la valeur en chiffres — n'importe quelle variable, formule comprise.
{n1/n2} → la fraction dite en classe : « deux tiers », « trois quarts ».
{n1/n2:pi} → l'angle : « deux pi sur trois ». {a:deg} → « 60 degrés ».

Première phrase : « {{ bmSerieApercu(v) }} »

ET =
{{ pt.statut }}
🔊 Points Vocaux ElevenLabs
Langue lecture :

Cliquez sur la figure pour placer le pin

Points Vocaux ({{ pointsVocaux.length }})
Pin {{ pi+1 }}
FR🔊 ع🔊

Cliquez sur la figure, ou cochez dans la liste ci-dessous. Autant d'objets que vous voulez. Recliquez pour retirer.

{{ pinCibles(pinSelectionne).length }} objet(s) : {{ nomObjetCible(ci) }}

Aucun objet désigné — le vocal se lira sans rien mettre en avant.

FR lié
AR lié
{{ stepEtape }} {{ stepMessage }} ✓ Point capturé
📘 {{ (langueActuelle==='ar' && el.titre_ar) ? el.titre_ar : (el.name || 'Cours') }}
{{ el.name ? (el.name + ' (ID: ' + index + ')') : (el.type.toUpperCase() + ' - ID: ' + index) }} {{ el.name }} {{ el.name }} {{ el.name }} {{ el.name }}
{{ ligne }} ♪
{{el.name}}
{{ann.labelX}} {{ann.labelY}} ∩
🔊 {{ pi + 1 }}

{{ sceneTitre }}

{{ texteVocalComplet(pinQuiParle) }}

{{ Math.round(cropRect.w) }} × {{ Math.round(cropRect.h) }}
Tracez un rectangle sur le canvas pour sélectionner la zone à injecter
{{ Math.round(cropRect.w) }}×{{ Math.round(cropRect.h) }} px —
{{coordsLabel.text}}
Cliquez sur le Foyer (Point) ✓ Foyer sélectionné — Cliquez sur la Directrice (Droite/Segment)  (Échap pour annuler)
Cliquez sur le 1er objet (droite, cercle, conique…) ✓ Objet 1 sélectionné — Cliquez sur le 2ème objet  (Échap pour annuler)
Objet bibliothèque × {{ svgImportedObjects[selectedImportIndex].scale.toFixed(1) }}

Ma Bibliothèque > {{ dossierOuvert }}

{ } JSON — {{ jsonFig.item.nom || 'Figure' }}
Modifiez le texte, puis « Enregistrer » : la figure est mise à jour (même fichier). Gardez les guillemets, virgules et accolades.
{{ jsonFig.erreur }}

Générer une figure par IA (JSON)

1. Décrivez la figure voulue à une IA (ChatGPT, Claude…) en lui collant le prompt ci-dessous.
2. Collez le JSON qu'elle renvoie dans la zone du bas.
3. Cliquez « Importer » : la figure est construite, puis enregistrée dans votre bibliothèque — vous pourrez la rouvrir et la modifier normalement, comme toute autre figure.
Copié !
{{ figureIA_statut }}