Преобразование круга в магический круг (фигуру)

 

 

 Алгоритм решение задачи

Пояснения и результаты

1)     Определяем  квадрат-сетку 9х9 (в см.)

2)     В этом квадрате-сетке, заданную от нуля, рисуем окружность, на которой вычисляем серию точек (пусть 10), координаты которых округляем до целых  значений.

3)      По координатам точек определяем, какому числу они соответствуют  в квадрате-сетке 9х9.

4)      По полученному числу, определяем, каким координатам по х и y, оно соответствует в магическом квадрате-сетке.

5)     По полученным координатам  строим (в той же последовательности)  новую фигуру магический круг.

 

Решение

Выполняем в системе Вектор через МК (макрокоманду) на языке JS.

 

1)     Определяем  два квадрата 9х9 – обычный и магический

 

а) обычный

 

1, 2, 3, 4, 5, 6, 7, 8, 9);  

10, 11, 12, 13, 14, 15, 16, 17, 18  

19, 20, 21, 22, 23, 24, 25, 26, 27  

28, 29, 30, 31, 32, 33, 34, 35, 36  

37, 38, 39, 40, 41, 42, 43, 44, 45  

46, 47, 48, 49, 50, 51, 52, 53, 54  

55, 56, 57, 58, 59, 60, 61, 62, 63  

64, 65, 66, 67, 68, 69, 70, 71, 72  

73, 74, 75, 76, 77, 78, 79, 80, 81  

 

б) магический

 

37, 78, 29, 70, 21, 62, 13, 54, 5  

6, 38, 79, 30, 71, 22, 63, 14, 46  

47, 7, 39, 80, 31, 72, 23, 55, 15  

16, 48, 8, 40, 81, 32, 64, 24, 56  

57, 17, 49, 9, 41, 73, 33, 65, 25  

26, 58, 18, 50, 1, 42, 74, 34, 66  

67, 27, 59, 10, 51, 2, 43, 75, 35  

36, 68, 19, 60, 11, 52, 3, 44, 76  

77, 28, 69, 20, 61, 12, 53, 4, 45  

 

Круг (xc = 5, yc = 5, r = 4) и его преобразование в магический на сетке 9х9

                                  

  

Круг (xc = 4.5, yc = 4.5, r = 4) слева,  r=3 в центре и r = 2 справа

 

 

В программе (см. листинг) сначала сделано преобразование для одной точки, потом этот блок заключен в цикл, и преобразование стало работать для массива точек из 10. Данный преобразование, как пример, чтобы сделать общий вариант для всех полилиний (в Векторе практически все объекты можно превратить  в полилинии). Для этого  поле в пикселях 729х729 «превратить» в магическое (вычисляется в маткаде (MathCade))

 

 

Листинг макроса построения преобразования круга в магический

 

Имя файла: (*.js)

 

// магическое расположение чисел в квадрате 9х9 (в см.) в массивах по строкам

 

 

 

var Rb = new Array(11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99) ;

 

var Rb1 = new Array(11, 12, 13, 14, 15, 16, 17, 18, 19)

var Rb2 = new Array(21, 22, 23, 24, 25, 26, 27, 28, 29)

var Rb3 = new Array(31, 32, 33, 34, 35, 36, 37, 38, 39)

var Rb4 = new Array(41, 42, 43, 44, 45, 46, 47, 48, 49)

var Rb5 = new Array(51, 52, 53, 54, 55, 56, 57, 58, 59)

var Rb6 = new Array(61, 62, 63, 64, 65, 66, 67, 68, 69)

var Rb7 = new Array(71, 72, 73, 74, 75, 76, 77, 78, 79)

var Rb8 = new Array(81, 82, 83, 84, 85, 86, 87, 88, 89)

var Rb9 = new Array(91, 92, 93, 94, 95, 96, 97, 98, 99)

 

 

var Rt1 = new Array(37, 78, 29, 70, 21, 62, 13, 54, 5);

var Rt2 = new Array(6, 38, 79, 30, 71, 22, 63, 14, 46);

var Rt3 = new Array(47, 7, 39, 80, 31, 72, 23, 55, 15);

var Rt4 = new Array(16, 48, 8, 40, 81, 32, 64, 24, 56);

var Rt5 = new Array(57, 17, 49, 9, 41, 73, 33, 65, 25);

var Rt6 = new Array(26, 58, 18, 50, 1, 42, 74, 34, 66);

var Rt7 = new Array(67, 27, 59, 10, 51, 2, 43, 75, 35);

var Rt8 = new Array(36, 68, 19, 60, 11, 52, 3, 44, 76);

var Rt9 = new Array(77, 28, 69, 20, 61, 12, 53, 4, 45);

var Stx = new Array (81)

var Sty = new Array (81)

var Mpx = new Array (81)

var Mpy = new Array (81)

 

var Mij = new Array (81)

var Mijn = new Array (81)

 

 

//VbsMsg (" Rt[5] = " + Rt5[5]); // вывод сообщений на экран

// данные

var R=4;

var xc = 5; var yc = 5;

if (R > 5) R=5;

Vector.Krug.ss (Vector.p(xc,yc,0), R, Vector.p(0,0,1))

Vector.SetFillColor (240,200,0) // цвет

var n1 = Vector.LastNmb()

// Зададим на окружности 10 точек и занесем их в массив

var k=0;

for ( var t=0; t <=1 ; t=t+0.1 ) {

Vector.CurrObjNmb = n1 // переопределение в активный

var K = Vector.Krug.P(t)

// Vector.Krug.ss (Vector.p(K.x,K.y,0), 0.1, Vector.p(0,0,1))

Stx[k]= rznn(K.x)

Sty[k]= rznn(K.y)

k=k+1;

}

//VbsMsg ("Stx[5]=" + Stx[5]);

//VbsMsg ("Sty[5]=" + Sty[5]);

/*

var ngroup

Vector.Polyline.Reset()

for ( var n=0; n < 10 ; n++ ) {

Vector.Polyline.AddP (Vector.p(Stx[n],Sty[n],0))

}

Vector.Polyline.AddP (Vector.p(Stx[0],Sty[0],0))

Vector.Polyline.SaveInDoc ( ngroup )

Vector.Polyline.Draw()

*/

// Сделаем для одной точки

var t = 0.5

Vector.CurrObjNmb = n1 // переопределение в активный

var K = Vector.Krug.P(t)

var xt = rznn(K.x)

var yt = rznn(K.y)

//VbsMsg ("xt=" + xt); // xt=2

//VbsMsg ("yt=" + yt); // yt=5

//Vector.Krug.ss (Vector.p(xt,yt,0), 0.25, Vector.p(0,0,1))

// определить, какому числу соответствуют координаты (x=2, y=5) из 1-м массива

var nij=0;

for ( var j=1; j < 10 ; j++ ) {

for ( var i=1; i < 10 ; i++ ) {

      if (i == xt && j == yt ) nij = (j-1)*9+i;

}

}

//VbsMsg ("nij=" + nij); // соответсвует числу 38

// определить из 2-го магического массива какие координаты соответсвуют числу 38

var xn=0; var yn=0;

for ( var i=1; i < 10 ; i++ ) {

if (Rt1[i-1] == nij) {xn = i; yn=1;}

if (Rt2[i-1] == nij) {xn = i; yn=2;}

if (Rt3[i-1] == nij) {xn = i; yn=3;}

if (Rt4[i-1] == nij) {xn = i; yn=4;}

if (Rt5[i-1] == nij) {xn = i; yn=5;}

if (Rt6[i-1] == nij) {xn = i; yn=6;}

if (Rt7[i-1] == nij) {xn = i; yn=7;}

if (Rt8[i-1] == nij) {xn = i; yn=8;}

if (Rt9[i-1] == nij) {xn = i; yn=9;}

}

//VbsMsg ("xn=" + xn); //

//VbsMsg ("yn=" + yn); //

//Vector.Krug.ss (Vector.p(xn,yn,0), 0.25, Vector.p(0,0,1))

 

 

 

// Сделаем для сикла

 

var kk =0; var kij =0;

 

for ( var t=0; t <=1 ; t=t+0.1 ) {

      Vector.CurrObjNmb = n1 // переопределение в активный

      var K = Vector.Krug.P(t)

      var xt = rznn(K.x)

      var yt = rznn(K.y)

      //VbsMsg ("xt=" + xt); // xt=2

      //VbsMsg ("yt=" + yt); // yt=5

      //Vector.Krug.ss (Vector.p(xt,yt,0), 0.25, Vector.p(0,0,1))

      // определить, какому числу соответствуют координаты (x=2, y=5) из 1-м массива

var nij=0;

for ( var j=1; j < 10 ; j++ ) {

      for ( var i=1; i < 10 ; i++ ) {

            if (i == xt && j == yt ) nij = (j-1)*9+i;

      }

}

 

Mij[kij] = nij // +10

kij=kij+1

 

 

// определить из 2-го магического массива какие координаты соответсвуют числу 38

var xn=0; var yn=0;

for ( var i=1; i < 10 ; i++ ) {

if (Rt1[i-1] == nij) {xn = i; yn=1;}

if (Rt2[i-1] == nij) {xn = i; yn=2;}

if (Rt3[i-1] == nij) {xn = i; yn=3;}

if (Rt4[i-1] == nij) {xn = i; yn=4;}

if (Rt5[i-1] == nij) {xn = i; yn=5;}

if (Rt6[i-1] == nij) {xn = i; yn=6;}

if (Rt7[i-1] == nij) {xn = i; yn=7;}

if (Rt8[i-1] == nij) {xn = i; yn=8;}

if (Rt9[i-1] == nij) {xn = i; yn=9;}

}

//Vector.Krug.ss (Vector.p(xn,yn,0), 0.25, Vector.p(0,0,1))

Mpx[kk] = xn;

Mpy[kk] = yn;

kk=kk+1

}

var ngroup

Vector.Polyline.Reset()

for ( var n=0; n < 10 ; n++ ) {

Vector.Polyline.AddP (Vector.p(Mpx[n],Mpy[n],0))

}

Vector.Polyline.AddP (Vector.p(Mpx[0],Mpy[0],0))

Vector.Polyline.SaveInDoc ( ngroup )

Vector.Polyline.Draw()

Vector.Width=1 // для 2-го типа заливки полилинии

Vector.SetFillColor (240,0,0) // цвет

 

Vector.obj.All = 1; // (True) ошибку выдает!!!

Vector.Obj.Translate (Vector.p(-5, -5, 0))

 

//Vector.CurrObjNmb = n1 // переопределение в активный

//Vector.Obj.Translate (Vector.p(-5, -5, 0))

// функции округления

function rznn ( vv ) {

return ( Math.round ( vv * 1 ) ) / 1 ;

}

function rzn ( vv ) {

return ( Math.round ( vv * 10 ) ) / 10 ;

}

// Переопределим цифры в 99-арканную свертку

 

/*

var jk = Mij[0]

VbsMsg ("jk = " + jk)

Mijn[0] = Rb[jk-1]

VbsMsg ("Mijn[0] = " + Mijn[0])

*/

 

for ( var n=0; n < 10 ; n++ ) {

   var jk = Mij[n]

   Mijn[n] = Rb[jk-1]

 

}

// круг в цифрах 1-81

VbsMsg ("Mij[0] = " + Mij[0] +"=" + Mij[1]+"=" + Mij[2]+"=" + Mij[3]+"=" + Mij[4]+"=" + Mij[5]+"=" + Mij[6]+"=" + Mij[7]+"=" + Mij[8] + "=" + Mij[9]);

// круг в цифрах 11-99

VbsMsg ("Mijn[0] = " + Mijn[0] +"=" + Mijn[1]+"=" + Mijn[2]+"=" + Mijn[3]+"=" + Mijn[4]+"=" + Mijn[5]+"=" + Mijn[6]+"=" + Mijn[7]+"=" + Mijn[8] + "=" + Mijn[9]);

 

 

 

Пояснения и результаты

 

// Цифры в диапазоне (1-81), через которые проходит окружность:  45 62 78 76 56 37 20 4 6

// и преобразования в слово (буквы) вот: к ы к и х г т г е

// 12 29 12 11 23 44 22 44 66 = брбакэйэр = 99

// и прочтение через слова

//в диапазоне 1-81 (копия словаря (11-99):

 

// науки догорел мольбу разыщи Корабли держал вели представляли скульптором

// Готов Уезжая Сломлен положила нем-то войне Диана злословить сопротивление

// алтаре разница какая-то заточил туче рук Боги Адриатическое потревожившего

// Город вместо Тиринфа сделать живому Арете вели расходиться смелостью   

// Гордо златые изнурил Подошла твоя винил Пала неумолимый О

 

// переводим в -арканную свертку (11-99)

 

// вот они цифры в диапазоне (11-99), через которые проходит окружность:  59 78 96 94 72 51 32 14 16 38

// и преобразования в слово (буквы словаря Azbuka.dict) вот: к ы к и х г т г е ш

// 12 29 12 11 23 44 22 44 66 26 = брбакэйэрн = 66

// и прочтение через слова

//в диапазоне 11-99 (словаря Mifi_legendi_99.dict) 

// кинжал пробегала Любовь черном страже Для жила бога-целителя запятнанным под

// грота мелких горным отменил ценой КНИГИ ней грандиозности благополучные бедами

// показав городов сухих оглашая розы БЕРЕГАМ Рака возлюбленная высаживаются Знал

// гору обхватив культ уедешь умение сеча Кадм устрашенные Зевсу-Спасителю зари

// лугу великая царевны Тифию Эфра Иолк везла существовали решительная долг

// любая фраза сворачивается в первоначальные цифры  и код и ту графику - псевдокруг и магик-круг

// 59 78 96 94 72 51 32 14 16 38 = кыкихгтгеш = 11

// В итоге мы вернулись к тому же рисунку - кругу и преобразованному из него в магик-круг,

// использую во всех этих преобразованиях словарь в кодах 11-99.

 

 

Примечание. Чтобы запустить программу в системе Вектор, сохраните  листинг в файле с расширением  .js и откройте его в Векторе.

 

 

 

 

Преобразование  псевдоокружности в диалоге Дайдж (аркан-99) системы Вектор

 

Псевдоокружность по точкам-сверткам обычного  распределения чисел сетки 9х9:

15 27 38 59 78 87 95 83 72 51 32 23

 Из курсантского словаря  по ним фраза:

Электричку глаз когда галдите этой спать глупый центр дpyгое запах вы in

цифровой код:

15 27 38 59 78 87 95 83 72 51 32 23 = дошкыгуяхгтк = 77

и графический  при МК=0 и МК=1:

 

                      

 

Зададим фигуру по цифрам:

15 28 59 88 95 82 51 22

Фраза

Становитесь вами марш математикой ломаного забитый идите Санычу

Числовой код

15 28 59 88 95 82 51 22 = дпкдуюгй = 88

и графический  при МК=0 и МК=1: