2010-05-04 4 views
0

매트릭스의 x, y 포인트로 저장된 포리스트의 개별 트리 맵이 있습니다. 나는 그것을 fixedPositions라고 부른다. 그것은 데카르트이고 (0,0)은 원점입니다.Matlab 매트릭스 변환 및 회전

속도와 표제, 즉 .5 m/s와 60도 (시계에서 2시와 등가 임)가 주어지면 x, y 점을 어떻게 회전시켜 새로운 원점이 .5cos (60), .5sin (60)) 및 60 도가 이제 화면 상단에 있습니까?

그런 다음 다른 제목과 속도, 즉 0도 및 2m/s를 제공하면 원본 고정 위치 원점이 아닌 마지막 점에서 계산해야합니다.

나는 이것을 알아 내려고 노력하면서 낭비했다. 행렬 대수학을 택했으면 좋겠어.

저는 cos (30)을 시도했는데 정확하게 계산하지 못했지만, 시간이 지나면 라디안으로 나타났습니다.

답변

0

를 입력해야하는 대신 60 수 있도록 물론

는, 대부분의 프로그래밍 언어는 내가 시도 할 것, 각도 단위로 라디안을 사용하여 다음 개체에서 이미 속성 heading 있습니다. 이제 다른 속성 인 currentPosition을 추가합니다 (이름을 heading_robotcurrentPos_robot으로 바꿀 수 있습니다). heading뿐만 아니라 currentPosition 항상

그런 다음 당신이 입력으로 (newHeading, distance) 소요 새로운 방법, updatePosition를 추가 좌표계 원래 상대해야한다. 이 방법은 newHeading의 각도를 heading의 각도에 먼저 추가하고 currentPosition[distance*cos(heading),distance*sin(heading)] (여기에서 sin/cos의 부호를 확인하십시오.)을 사용하여 currentPosition으로 업데이트하여 headingcurrentPosition을 모두 업데이트합니다. 마지막으로

가, 풍경 (즉, apparentPositions)의보기를 얻기 위해, 당신은 로봇이이 순간에 어디에 원점을 이동 bsxfun(@minus,fixedPositions,currentPosition)를 실행하고 당신은 heading에 저장된 각도를 사용하여 2 차원 회전 행렬과 곱하면됩니다.

+0

currentPosition은 행렬입니까? currentPosition = [x; y] 그것을 만들까요? –

+0

또한, 기존의 각도가 아닌 머리글을 사용하기 때문에 0은 직선이며 90도는 오른쪽이며 각도는 시계 방향으로 측정됩니다. 이렇게하려면 x와 y를 서로 바꿉니다. 그래서 새로운 좌표는 [거리 * sind (heading), 거리 * cosd (heading)]가 될 것입니다. –

+0

@ pinnacler : 예 (그렇습니다) 예. 제목의 경우 표제를 변경하면 올바른 방향으로 방향이 바뀌는 것을 확인하기 위해 정직하게 두 가지 예를 시도해야합니다. – Jonas

0

먼저 좌표 (-0.5cos(60),-0.5sin(60))을 번역하여 원점을 목표 지점으로 가져옵니다.

그런 다음 좌표에 rotation matrix을 곱하여 회전합니다. 당신이 60 * PI/180

+0

그래서 내가 원점이 되고자하는 지점으로 이동 한 다음 회전 하시겠습니까? 또한 시계 방향으로 0도 직선으로 가고 싶기 때문에 x와 y를 바꿀 수 있습니까? (.5sin (60), .5cos (60))? –

+0

쌍 (-0.5cos (60), - 0.5sin (60))은 회전이 아니라 이동을 나타냅니다. 각도의 부호 (따라서 행렬의 Sin() 계수의 부호)를 변경하면 시계 방향에서 시계 반대 방향으로 회전이 변경됩니다. – leonbloy