|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Kluchnikov Eugene 2:5003/39.64 08 Mar 2003 11:48:35 To : Shura Maslov Subject : матpица по спиpали --------------------------------------------------------------------------------
SM> не удалось пpидумать кооpдинутные функции X(n) и Y(n), котоpые задают
SM> клетку (X,Y) матpицы по её поpядковому номеpу n пpи обходе по
SM> спиpали.
SM> Было бы очень интеpесно узнать пpимеp таких X(n) и Y(n).
Для начала рассмотрим квадратную матрицу - W*W и W делится на два
Пусть мы прошли a витков. 1 виток - (W-1)*4, 2 виток (W-3)*4,... a виток -
(W-2*a)*4
Можно посчитать сумму ряда -
n(a)=4*(W-1+W-2*a)*a/2=2*a*(2*W-1-2*a)=-4*a^2+(4*W-2)*a
Решаем уравнение -4*a^2+(4*W-2)*a<n
D=16*W^2+4-16*W-16*n
a1,a2=(2-4*W+-sqrt(D))/2
Ясно, что нам подходит только a=trunc((sqrt(D)+2-4*W)/2)
Когда нашли а, то можно вычислить n1=n-n(a)
Теперь поделим пусть n2=trunc(n1/(a-1)), и n3=n1-(a-1)*n2
Если n2=0, то X=a+n3, Y=a
Если n2=1, то X=W-a, Y=a+n3
Если n2=2, то X=W-a-n3, Y=W-a
Если n2=3, то X=a, Y=W-a-n3
Теперь говорилось что нужна функция. Тогда надо развернуть выражения
a,n1,n2,n3, а логический выбор (где сравнивается n2) построить примерно так
X=(1-sqr(sgn(n2-0)))*(a+n3)+(1-sqr(sgn(n2-1)))*(W-a)+...+...
Должно работать - не проверял.
_WBR_, _/*Eustas*/_.
--- I.Diamond
* Origin: She makes my life happier (2:5003/39.64)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/33763e6a4149.html, оценка из 5, голосов 60
|