falsefalsetrue6Symétrie centrale (widgets)diXTTrace la symétrique de la figure grise par rapport au point O.
{base:[[2,1],[2,2],[3,2],[4,2]],org:{name:"O",pos:[2.5,2.5],dim:[25,5],nameoffset:[0,-0.8],fontsize:48},width:400,height:400,cols:5,rows:5}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false],[false,false,false,false,false],[false,false,false,false,false],[false,true,true,true,false],[false,false,false,true,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[1,1],[2,1],[1,2],[2,2]],org:{name:"O",pos:[2,2],dim:[25,5],nameoffset:[0,-0.8],fontsize:48},width:400,height:400,cols:5,rows:5}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false],[false,false,false,false,false],[false,false,true,true,false],[false,false,true,true,false],[false,false,false,false,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[1,2],[1,3],[1,4],[1,5],[2,5]],org:{name:"O",pos:[2,3],dim:[25,5],nameoffset:[0,-0.8],fontsize:48},width:400,height:400,cols:5,rows:5}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false],[false,false,true,true,false],[false,false,false,true,false],[false,false,false,true,false],[false,false,false,true,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[1,1],[2,1],[1,2],[1,3],[1,4],[1,5]],org:{name:"O",pos:[2.5,2.5],dim:[25,5],nameoffset:[0,-0.8],fontsize:48},width:400,height:400,cols:5,rows:5}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,true],[false,false,false,false,true],[false,false,false,false,true],[false,false,false,false,true],[false,false,false,true,true]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[2,2],[3,2],[4,2],[5,2],[2,3],[2,4],[2,5],[3,5],[4,5],[2,6],[2,7],[2,8]],org:{name:"O",pos:[5,5],dim:[25,5],nameoffset:[-1,-1],fontsize:32},width:400,height:400,cols:10,rows:10}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,true,false],[false,false,false,false,false,false,false,false,true,false],[false,false,false,false,false,false,false,false,true,false],[false,false,false,false,false,false,true,true,true,false],[false,false,false,false,false,false,false,false,true,false],[false,false,false,false,false,false,false,false,true,false],[false,false,false,false,false,true,true,true,true,false],[false,false,false,false,false,false,false,false,false,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[3,2],[4,2],[5,2],[3,3],[3,4],[3,5],[4,5],[5,5]],org:{name:"O",pos:[5,5],dim:[25,5],nameoffset:[-1,-1],fontsize:32},width:400,height:400,cols:10,rows:10}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,true,true,true,false,false],[false,false,false,false,false,false,false,true,false,false],[false,false,false,false,false,false,false,true,false,false],[false,false,false,false,false,true,true,true,false,false],[false,false,false,false,false,false,false,false,false,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[2,1],[4,1],[2,2],[4,2],[2,3],[3,3],[4,3],[2,4],[4,4],[2,5],[4,5]],org:{name:"O",pos:[5,5],dim:[25,5],nameoffset:[-1,-1],fontsize:32},width:400,height:400,cols:10,rows:10}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,true,false,true,false],[false,false,false,false,false,false,true,false,true,false],[false,false,false,false,false,false,true,true,true,false],[false,false,false,false,false,false,true,false,true,false],[false,false,false,false,false,false,true,false,true,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[2,3],[3,3],[4,3],[2,4],[2,5],[2,6],[2,7],[2,8],[2,9],[3,9],[4,9]],org:{name:"O",pos:[3,5],dim:[25,5],nameoffset:[-1,-1],fontsize:32},width:400,height:400,cols:10,rows:10}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false,false,false,false,false,false],[false,false,true,true,true,false,false,false,false,false],[false,false,false,false,true,false,false,false,false,false],[false,false,false,false,true,false,false,false,false,false],[false,false,false,false,true,false,false,false,false,false],[false,false,false,false,true,false,false,false,false,false],[false,false,false,false,true,false,false,false,false,false],[false,false,true,true,true,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[4,2],[5,2],[4,3],[5,3],[4,4],[5,4],[4,5],[5,5]],org:{name:"O",pos:[5,4],dim:[25,5],nameoffset:[-1,-1],fontsize:32},width:400,height:400,cols:10,rows:10}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,true,true,false,false,false],[false,false,false,false,false,true,true,false,false,false],[false,false,false,false,false,true,true,false,false,false],[false,false,false,false,false,true,true,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[2,2],[3,2],[4,2],[2,3],[4,3],[2,4],[3,4],[4,4],[2,5],[2,6],[2,7],[3,7],[4,7]],org:{name:"O",pos:[5,5],dim:[25,5],nameoffset:[-1,-1],fontsize:32},width:400,height:400,cols:10,rows:10}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,true,true,true,false],[false,false,false,false,false,false,false,false,true,false],[false,false,false,false,false,false,false,false,true,false],[false,false,false,false,false,false,true,true,true,false],[false,false,false,false,false,false,true,false,true,false],[false,false,false,false,false,false,true,true,true,false],[false,false,false,false,false,false,false,false,false,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[3,2],[4,2],[5,2],[6,2],[7,2],[8,2],[3,3],[4,3],[5,3],[6,3],[7,3],[8,3],[4,4],[5,4]],org:{name:"O",pos:[5,5],dim:[25,5],nameoffset:[-1,-1],fontsize:32},width:400,height:400,cols:10,rows:10}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,true,true,false,false,false],[false,false,true,true,true,true,true,true,false,false],[false,false,true,true,true,true,true,true,false,false],[false,false,false,false,false,false,false,false,false,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}
Trace la symétrique de la figure grise par rapport au point O.
{base:[[8,10],[7,11],[8,11],[6,12],[7,12],[8,12],[5,13],[6,13],[7,13],[8,13],[4,14],[5,14],[6,14],[7,14],[8,14],[3,15],[4,15],[5,15],[6,15],[7,15],[8,15],[2,16],[3,16],[4,16],[5,16],[6,16],[7,16],[8,16],[7,17],[8,17],[1,18],[2,18],[3,18],[4,18],[5,18],[6,18],[7,18],[8,18],[9,18],[10,18],[11,18],[12,18],[13,18],[2,19],[3,19],[4,19],[5,19],[6,19],[7,19],[8,19],[9,19],[10,19],[11,19],[12,19],[13,19],[3,20],[4,20],[5,20],[6,20],[7,20],[8,20],[9,20],[10,20],[11,20],[12,20],[13,20]],org:{name:"O",pos:[10,10],dim:[25,5],nameoffset:[-2,-2],fontsize:32},width:400,height:400,cols:20,rows:20}


this.onload = function() {
    var me = this;
    var wait = function() {
        if ((me.reponse.find("#input-1") === null)) {
            setTimeout(wait, 100);
        } else {
            var G = me.question.find("#grid");
            var P = me.question.find("params").innerText;
            P = JSON.parse(P.replace(/(\w*):/g, "\"$1\":"));
            var REPS = null;
            if (me.reponse.find("#input-1").value) {
                REPS = JSON.parse(me.reponse.find("#input-1").value);
                if ((REPS.length !== P.rows) || (REPS[0].length !== P.cols)) {
                    REPS = null;
                }
            };
            var ALL = [];
            var d;
            var W = P.width;
            var H = P.height;
            G.inner("").stl(`width:${W}px;height:${H}px`);
            G.mdown = G.selected = false;
            G.paint = function(_elt) {
                _elt.stl(`background-color:${_elt.selected?"orange":"unset"}`);
            };
            G.store = function() {
                var reps = [];
                var logs = [];
                var line;
                for (var i = 0; i < ALL.length; i++) {
                    line = [];
                    for (var j = 0; j < ALL[i].length; j++) {
                        line.push(ALL[i][j].selected);
                        if (ALL[i][j].selected) logs.push([j + 1, i + 1]);
                    }
                    reps.push(line);
                };
                console.log(JSON.stringify(logs));
                me.reponse.find("#input-1").val(JSON.stringify(reps));
                me.reponse.find("#input-1").dispatchEvent(new KeyboardEvent('keyup', {}));
            };
            var line;
            for (var i = 0; i < P.rows; i++) {
                line = [];
                for (var j = 0; j < P.cols; j++) {
                    d = $.create("div").stl(`position:absolute;left:${j*W/P.cols}px;top:${i*H/P.rows}px;width:${W/P.cols}px;height:${H/P.rows}px;border:1px solid gray;`);
                    d.row = i;
                    d.col = j;
                    d.selected = REPS ? REPS[i][j] : false;
                    d.mousedown(function(e) {
                        var elt = e.target;
                        G.mdown = true;
                        G.selected = elt.selected = !elt.selected;
                        G.paint(elt);
                    });
                    d.mouseup(function() {
                        G.selected = G.mdown = false;
                        G.store();
                    });
                    d.ontouchmove = function(e) {
                        if (G.mdown) {
                            var elt = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    };
                    d.mouseover(function(e) {
                        if (G.mdown) {
                            var elt = e.target;
                            elt.selected = G.selected;
                            G.paint(elt);
                        }
                    });
                    G.paint(d);
                    line.push(d);
                    G.add(d);
                };
                ALL.push(line);
            };
            var B = P.base;
            for (var i = 0; i < B.length; i++) {
                var XY = [B[i][0] - 1, B[i][1] - 1];
                var DOM = $.create("div").stl(`position:absolute;left:${XY[0]*W/P.cols+1}px;top:${XY[1]*H/P.rows+1}px;width:${W/P.cols-2}px;height:${H/P.rows-2}px;background-color:rgba(150,150,150,0.5);pointer-events: none;`);
                G.add(DOM);
            }
            var O = P.org;
            var w = O.dim[0];
            var h = O.dim[1];
            var offx = O.nameoffset[0] * W / (2 * P.cols);
            var offy = O.nameoffset[1] * H / (2 * P.rows);
            var DOM = $.create("div").stl(`position:absolute;transform: rotate(45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;transform: rotate(-45deg);left:${O.pos[0]*W/P.cols-w/2}px;top:${O.pos[1]*H/P.rows-h/2}px;width:${w}px;height:${h}px;background-color:#2296F3;pointer-events: none`);
            G.add(DOM);
            DOM = $.create("div").stl(`position:absolute;left:${(O.pos[0]-0.5)*W/P.cols+offx}px;top:${(O.pos[1]-0.5)*H/P.rows+offy}px;width:${W/P.cols}px;height:${H/P.rows}px;text-align:center;pointer-events: none;color:#2296F3;font-size:${O.fontsize}px;font-weight:bold;line-height:${H/P.rows}px`).inner(O.name);
            G.add(DOM);
        };
    };
    wait();
    me.reponse.hide();
};

[["[[false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,false,false],[false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false],[false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true],[false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,false],[false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]]","text"]]custom-line{"inps":[["a","text"]],"sfx":"z"}