Alopar
> Круто, но разобраться в ней не просто :)))
Что не просто то? Там готовая функция, ctrl+C/ctrl+V. В функцию передаешь индекс, в ответ получаешь координаты
MrShoor
> Что не просто то?
>Там готовая функция, ctrl+C/ctrl+V. В функцию передаешь индекс, в ответ получаешь координаты
1) специфика gws:
если у человека трудности с "улиткой", то будут ли трудности с двумя пунктами выше?!
exchg
А можно хоть небольшой кусок кода, а то как то не варится в голове эта геометрия, грани, вершины...
Да, вот для чего нужна была геометрия с алгеброй в школе :), ранее при разработке веб приложений вообще ничего это не надо было, кнопка тут, кнопка здесь, выборка тут, транзакция там.
О бизнес, бизнес, какой же ты простой :)))
skalogryz
И то верно, просто когда смотришь на код, надо сначала понять синтаксис, а этот я точно не знаю. Ну а только потом вникнуть в алгоритм.
>Alopar
А можно хоть небольшой кусок кода
Я не знаю там про вершины и прочие штуки, но заполнить массив по спирали как у вас написано можно как-то так, например:
Переделал, что бы визуально заполнение было видно:
Ссылка на результат работы
Может и не то что вам нужно.
Результат вот:
img=
> Код получается что-то вроде такого (не тестил)
Тест:
https://rextester.com/NUTW71130
Alopar
> А можно хоть небольшой кусок кода, а то как то не варится в голове эта
> геометрия, грани, вершины...
Вот псевдокод, именно так делать не нужно, это только для иллюстрации.
typedef struct point { int x; int y; } point_t; typedef struct rect { point_t top_left; point_t bottom_right; } rect_t; static void rect_inflate(rect_t* r, int value) { r->top_left.x -= value; r->top_left.y -= value; r->bottom_right.x += value; r->bottom_right.y += value; } void move_x( point_t beg, point_t end, int delta) { point_t point = beg; int len = abs( end.x - beg.x); for ( int u = 0; u < len; ++u) { point.x += delta; printf( "[%2d,%2d] ", point.x, point.y); } printf( "\n"); } void move_y( point_t beg, point_t end, int delta) { point_t point = beg; int len = abs( end.y - beg.y); for ( int u = 0; u < len; ++u) { point.y += delta; printf( "[%2d,%2d] ", point.x, point.y); } printf( "\n"); } void fill( point_t* at) { rect_t r; r.top_left.x = at->x - 1; r.top_left.y = at->y - 1; r.bottom_right.x = at->x + 1; r.bottom_right.y = at->y + 1; point_t point; int size = 5; while ( size--) { point.x = r.bottom_right.x; point.y = r.top_left.y; move_x( r.top_left, point, 1); move_y( point, r.bottom_right, 1); point.x = r.top_left.x; point.y = r.bottom_right.y; move_x( r.bottom_right, point, -1); move_y( point, r.top_left, -1); rect_inflate( &r, 1); } } int main( ) { point_t at = { 0, 0 }; fill( &at); return 0; }
На выходе будет что-то похожее на вот такое, я не проверял правильно оно или нет. (Вроди правильно)
[ 0,-1] [ 1,-1] [ 1, 0] [ 1, 1] [ 0, 1] [-1, 1] [-1, 0] [-1,-1] [-1,-2] [ 0,-2] [ 1,-2] [ 2,-2] [ 2,-1] [ 2, 0] [ 2, 1] [ 2, 2] [ 1, 2] [ 0, 2] [-1, 2] [-2, 2] [-2, 1] [-2, 0] [-2,-1] [-2,-2] [-2,-3] [-1,-3] [ 0,-3] [ 1,-3] [ 2,-3] [ 3,-3] [ 3,-2] [ 3,-1] [ 3, 0] [ 3, 1] [ 3, 2] [ 3, 3] [ 2, 3] [ 1, 3] [ 0, 3] [-1, 3] [-2, 3] [-3, 3] [-3, 2] [-3, 1] [-3, 0] [-3,-1] [-3,-2] [-3,-3] [-3,-4] [-2,-4] [-1,-4] [ 0,-4] [ 1,-4] [ 2,-4] [ 3,-4] [ 4,-4] [ 4,-3] [ 4,-2] [ 4,-1] [ 4, 0] [ 4, 1] [ 4, 2] [ 4, 3] [ 4, 4] [ 3, 4] [ 2, 4] [ 1, 4] [ 0, 4] [-1, 4] [-2, 4] [-3, 4] [-4, 4] [-4, 3] [-4, 2] [-4, 1] [-4, 0] [-4,-1] [-4,-2] [-4,-3] [-4,-4] [-4,-5] [-3,-5] [-2,-5] [-1,-5] [ 0,-5] [ 1,-5] [ 2,-5] [ 3,-5] [ 4,-5] [ 5,-5] [ 5,-4] [ 5,-3] [ 5,-2] [ 5,-1] [ 5, 0] [ 5, 1] [ 5, 2] [ 5, 3] [ 5, 4] [ 5, 5] [ 4, 5] [ 3, 5] [ 2, 5] [ 1, 5] [ 0, 5] [-1, 5] [-2, 5] [-3, 5] [-4, 5] [-5, 5] [-5, 4] [-5, 3] [-5, 2] [-5, 1] [-5, 0] [-5,-1] [-5,-2] [-5,-3] [-5,-4] [-5,-5]
>exchg
На выходе будет что-то похожее на вот такое, я не проверял правильно оно или нет
Спираль вроде как из центра начинается... должно быть что то типа:
555555555
544444445
543333345
543222345
543212345
543222345
543333345
544444445
555555555
[4,4][4,5]
[5,5]
[5,4][5,3]
[4,3][3,3]
[3,4][3,5][3,6]
[3,6][4,6][5,6][6,6]
[6,5][6,4][6,3][6,2]
[5,2][4,2][3,2][2,2]
[2,3][2,4][2,5][2,6][2,7]
[2,7][3,7][4,7][5,7][6,7][7,7]
[7,6][7,5][7,4][7,3][7,2][7,1]
[6,1][5,1][4,1][3,1][2,1][1,1]
[1,2][1,3][1,4][1,5][1,6][1,7][1,8]
[1,8][2,8][3,8][4,8][5,8][6,8][7,8][8,8]
[8,7][8,6][8,5][8,4][8,3][8,2][8,1][8,0]
[7,0][6,0][5,0][4,0][3,0][2,0][1,0][0,0]
[0,1][0,2][0,3][0,4][0,5][0,6][0,7][0,8]
P.S.
Хотя может и одна фигня смотря где центр...
FourGen
> Спираль вроде как из центра начинается... должно быть что то типа:
Да, у меня вообще не обработана центральная точка. Это ошибка, нужно ее конечно добавить.
>exchg
Да это мелочи, суть то такая же... я просто сразу не заметил. У меня во вписанные границы сделано, а у вас оно динамически расширается. Одинаково получается.
Я просто запутался почему нулевые координаты меньше центра массива.
Тема в архиве.