Как исправить jsxgraph код рисования обычного полигона? - PullRequest
0 голосов
/ 30 октября 2019

Я пишу код для рисования обычного полигона. Но он не рисует в соответствии со значением слайдера. Как это исправить?

var n = brd.create('slider', [[0,-2],[8,-2],[3,5,10]], {name:'n',snapWidth:1});
var pol = brd.create('regularpolygon',[
function() { return [3, 0];},
function() { return [4, 0];},
function() { return [n.Value()];}]);
brd.unsuspendUpdate();

1 Ответ

0 голосов
/ 15 ноября 2019

Действительно, в JSXGraph правильные многоугольники не могут принимать динамическое количество вершин. Обходной путь должен использовать кривую, см. https://jsfiddle.net/6emrfzyu/1/:

const board = JXG.JSXGraph.initBoard('jxgbox', { 
    boundingbox: [-3, 6, 6, -3], axis:true
});
var n = board.create('slider', [[-2,-2],[4,-2],[3,5,10]], {name:'n',snapWidth:1});

var A = board.create('point', [3, 0]);
var B = board.create('point', [4, 0]);

var pol = board.create('curve',[[], []], {fillColor: 'yellow', fillOpacity: 0.2});

pol.updateDataArray = function() {
    var i, dx, dy, alpha,
        no = n.Value();

    this.dataX = [A.X(), B.X()];
    this.dataY = [A.Y(), B.Y()];
    if (no < 2) { 
        return this; 
    }

    alpha = 2.0 * Math.PI / no;
    for (i = 2; i <= no; i++) {
        dx = this.dataX[i - 1] - this.dataX[i - 2];
        dy = this.dataY[i - 1] - this.dataY[i - 2];
        this.dataX.push(Math.cos(alpha) * dx - Math.sin(alpha) * dy + this.dataX[i - 1]);
        this.dataY.push(Math.sin(alpha) * dx + Math.cos(alpha) * dy + this.dataY[i - 1]);
}

    return this;
};
board.update();
...