Как мне создать эту матрицу в Matlab? - PullRequest
5 голосов
/ 30 июля 2010

Я пытаюсь решить проблему Code Golf: Build Me a Arc . Мое решение неплохое, но я полагаю, есть более простой способ сделать это. Кто-нибудь знает, как сгенерировать nxn матрицу, подобную этой, с учетом n? Я потратил 57 символов на его получение!

 3     0     0     0     2     0     0     0     1
 0     3     0     0     2     0     0     1     0
 0     0     3     0     2     0     1     0     0
 0     0     0     3     2     1     0     0     0
 4     4     4     4     8     8     8     8     8
 0     0     0     5     6     7     0     0     0
 0     0     5     0     6     0     7     0     0
 0     5     0     0     6     0     0     7     0
 5     0     0     0     6     0     0     0     7

Я хотел бы превратить некоторые из этих матриц в форму.

Обновление:

Вот как я понимаю это сейчас.

%%# Create the grid
[X Y]=meshgrid(-r:r);
%%# Compute the angles in degrees
T=atan2(-Y,X)/pi*180;
%%# Get all the angles
T=T+(T<=0)*360;

Как видите, мне не нужно большинство записей в T.

Ответы [ 2 ]

1 голос
/ 03 августа 2010

Так как это связано с вопросом Code Golf, рассмотрим:

[X Y]=meshgrid(r:-1:-r,-r:r);
T=180+atan2(Y,X)*180/pi;

, который спасет вас 3 символа ...

0 голосов
/ 31 марта 2015

В этом посте приведен однострочный код решения с bsxfun, который избавляет нас от использования временных переменных, поскольку он внутренне делает expansion, который meshgrid делает явно и в то же время дает Мы можем упомянуть математическую операцию, которая должна быть выполнена между двумя входами, перечисленными внутри bsxfun. С этими внутренними операциями решение, основанное на bsxfun, кажется идеальным для подобной игры в гольф с решением 43 characters для указанной проблемы -

T=180+bsxfun(@atan2,[-r:r]',r:-1:-r)*180/pi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...