Я разрабатываю веб-скрипт для автоматического создания файла Java для выполнения автономных действий для команды робототехники на основе узлов, созданных игроком. Он также имеет симуляцию для проверки столкновения (я мог бы использовать алгоритм, чтобы сделать это, но иногда мы хотим, чтобы он поразил стены). Робот принимает относительные градусы, но atan2
дает радианы на круге единицы. Если я использую atan
, это просто не работает правильно. Я пробовал это:
function findDegrees(node1, node2){
return Math.atan((node2.y - node1.y) / (node2.x - node1.x)) * 180 / Math.PI;
}
Но это просто не работает. Этот кусок кода записывает данные тоже на выход. (Кроме того, я следую схеме: двигайтесь, затем поверните к следующему узлу).
let theta = currentAngle - findDegrees(nextNode, twoNodes);
currentAngle += theta;
if (theta && typeof theta !== 'undefined'){
middle += `${INDENTSPACE}turn(${theta}, 1.0);\n`;
}
Способ изменения x и y симуляции робота таков:
turn(degrees, speed){
this.theta -= degrees;
}
Но иногда все идет иначе. Как заставить робота вращаться под относительным углом к текущему углу, где прямое направление вперед равно 0 °? (если вам нужен полный код , то здесь .)