2013-02-01 7 views
0

의 일부 지점 (X)에 대한 어레이 (Y)에 대해 원형으로 임의의 길이의 벡터 회전 :는 I 배열이 MATLAB

1 1 1 0 0 
1 2 2 0 0 
1 2 3 0 0 
0 0 0 0 0 
0 0 0 0 0 

제가 확인하려면 그것을

은 1 회전 같다
1 1 1 1 1 
1 2 2 2 1 
1 2 3 2 1 
1 2 2 2 1 
1 1 1 1 1 

/원형의 4 조각은 270 도의 원형 부분을 채우기 위해 나머지 부분을 채 웁니다. 기본적으로 전체 구석을 모든 방향으로 미러링합니다. 가능한 경우 빌드 된 MATLAB 기능을 사용하고 싶지는 않습니다. 가능한 경우 벡터 트릭을 사용하십시오. 감사.

편집 :

이 임의의 사이즈의 제로의 매트릭스 내에 매립된다. I는이 예를 상기 실시 예 모두에서 작동하고 싶은 말 : I는 벡터 대답해야 할 이상적

0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 1 1 1 0 0 0 0 0 0 0 0 0 
0 0 1 2 2 0 0 0 0 0 0 0 0 0 
0 0 1 2 3 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 

를 최고 값에 대해 원형으로 회전 할 수있다 [1,2,3 ... N] 그리드의 xc, yc 점을 중심으로 배열 (N)에 배치됩니다. 또는 이것이 가능하지 않은 경우 기본 배열 [1 1 1, 1 2 2, 1 2 3]을 가져 와서 3이 중앙에 오도록 회전하고 위의 두 번째 행렬에서와 같이 원을 채 웁니다.

EDIT :

제가 발견 rot90 (M, K)은 행렬 M의 K 회 회전하지만이 생성 :

Mrot = M + rot90 (M, 1) + rot90 (M 2) + rot90 (M, 3)

Mrot = 
1 1 2 1 1 
1 2 4 2 1 
2 4 12 4 2 
1 2 4 2 1 
1 1 2 1 1 

이것은 잘못된 x, y 방향으로 쌓입니다.

답변

1

복제 할 모서리가 대각선에 대해 대칭 인 경우 (예를 들어), 하나의 인덱싱 단계에서이를 수행 할 수 있습니다. 샘플 행렬이 포함 된 행렬 M을 얻는 방법은 다음과 같습니다.

>> index = [1 2 3 2 1]; 
>> M = M(index, index) 

M = 

    1  1  1  1  1 
    1  2  2  2  1 
    1  2  3  2  1 
    1  2  2  2  1 
    1  1  1  1  1 
+0

행이 3 개 밖에없는 방법이 있습니까? 즉, 임의의 NxN 배열에서 [1 2 3]을 가졌고 원형 주위에서 팬을 돌리고 싶기 때문에 각 x-y 방향에서 대칭입니다. – Griff

+0

그냥 답안에서 주어진대로 M을 만들고 그것을 더 큰 0의 행렬에 삽입합니다. – thang