Matlab матричный перевод и вращение несколько раз - PullRequest
0 голосов
/ 05 мая 2010

У меня есть карта отдельных деревьев из леса, хранящаяся в виде точек x, y в матрице. Я называю это фиксированным положением. Это декартово и (0,0) происхождение.

При заданной скорости и курсе, т.е. 0,5 м / с и 60 градусов (эквивалент 2 часов на часах), как мне повернуть точки x, y, чтобы новое начало было отцентрировано в (. 5cos (60), 5sin (60)) и 60 градусов теперь вверху экрана?

Тогда, если бы я дал вам еще один курс и скорость, то есть 0 градусов и 2 м / с, он должен был бы рассчитать его из последней точки, а не из исходного источника fixedPositions.

Я потратил впустую свой день, пытаясь понять это. Хотелось бы взять матричную алгебру, но я в растерянности.

Я пытался сделать cos (30), и даже те, которые не будут правильно вычисляться, которые, как я понимаю, через час были в радианах.

Ответы [ 2 ]

0 голосов
/ 05 мая 2010

Я бы попробовал следующее: В вашем объекте у вас уже есть свойство heading. Теперь вы добавляете другое свойство, currentPosition (возможно, переименуйте их в heading_robot и currentPos_robot). heading, а также currentPosition всегда должны быть относительно исходной системы координат

Затем вы добавляете новый метод updatePosition, который принимает (newHeading, distance) в качестве ввода. Этот метод обновит и heading, и currentPosition, сначала добавив угол в newHeading к углу в heading, после чего вы обновите currentPosition, добавив [distance*cos(heading),distance*sin(heading)] (проверьте наличие признаков sin / cos здесь!) к старому значению currentPosition.

Наконец, чтобы получить вид ландшафта (т.е. apparentPositions), вы запускаете bsxfun(@minus,fixedPositions,currentPosition), чтобы переместить начало координат туда, где робот находится в данный момент, а затем вы умножаете матрицу вращения 2D, используя сохраненный угол в heading.

0 голосов
/ 05 мая 2010

Вы просто сначала переводите координаты (-0.5cos(60),-0.5sin(60)), чтобы перенести начало координат к вашей целевой точке.

Затем поверните, умножив координаты на матрицу вращения .

Конечно, большинство языков программирования используют радианы в качестве угловых единиц, поэтому вместо 60 вы должны ввести 60 * PI / 180

...