Если вы намерены, чтобы первая вершина многоугольника достигала только целочисленных координат, тогда есть (как минимум) две возможности, обе используют group
: ваш подход с использованием группы работает нормально, но достаточно переместить только первуюточка. Другие вершины будут следовать автоматически из-за свойства группы.
const board = JXG.JSXGraph.initBoard('jxgbox', {
boundingbox: [-5, 5, 5, -5], axis:true
});
var p1 = board.create('point', [1, -1]);
var p2 = board.create('point', [2.5, -2]);
var p3 = board.create('point', [1, -3]);
var pol = board.create('polygon', [p1, p2, p3], {hasInnerPoints: true});
var group = board.create('group',[p1, p2, p3]);
pol.on('up', function() {
var dx = Math.round(this.vertices[0].X());
var dy = Math.round(this.vertices[0].Y());
p1.moveTo([dx, dy]);
});
Смотрите его вживую на https://jsfiddle.net/4gzhb127/.
Другой подход - просто дать первому вершина текст атрибутsnapToGrid: true
, смотрите его в прямом эфире на https://jsfiddle.net/bo7aks30/:
const board = JXG.JSXGraph.initBoard('jxgbox', {
boundingbox: [-5, 5, 5, -5], axis:true
});
var p1 = board.create('point', [1, -1], {snapToGrid: true});
var p2 = board.create('point', [2.5, -2]);
var p3 = board.create('point', [1, -3]);
var pol = board.create('polygon', [p1, p2, p3], {hasInnerPoints: true});
var group = board.create('group',[p1, p2, p3]);