Pull to refresh

Математика сторон света

Reading time5 min
Views5.6K

Привет, Хабр!

В этом посте рассматривается математика сторон горизонта, которой я занимался 20 лет назад. Насколько я знаю, об этом еще никто не писал. Надеюсь, что вам будет интересно.

Основные и промежуточные стороны

Обозначим основные стороны (основы) как N, S, W и E. Тогда промежуточные стороны будут соответственно NE, NW, SE и SW. Назовем их первыми промежуточными сторонами. Если сложить их с основами, то получим вторые промежуточные. Их уже будет восемь.

Основы, первые, вторые и остальные промежуточные назовем видами и будем обозначать целыми положительными числами. Основы обозначим нулем. Тогда формулы образования для первых и вторых промежуточных будут иметь такой вид:

1 = 0 + 0

2 = 0 + 1

Виды, начиная с третьего, существуют уже не в одной форме. Так, стороны третьего вида существуют в двух формах. Это значит, что они образуются двумя способами:

1.3 = 0 + 2

2.3 = 1 + 2

От вида к виду количество форм постоянно удваивается. Первое слагаемое в формуле будем называть первой образующей, а второе слагаемое, соответственно, будет второй образующей. Результат сложения назовем производной от образующих. Задача состоит в том, чтобы вычислить формулу для формы произвольного вида. Например, вот формула для 27-й формы восьмого вида:

27.8 = 7.6 + 14.7

Как ее вывести? Далее узнаем как.

Первые образующие

Составим специальную таблицу. Слева в первой колонке будут располагаться номера вида первых образующих. Сверху в самой первой строке расположим номера форм первых образующих. В остальных ячейках таблицы расставим номера форм производных. Вот таблица для седьмого вида:

1

2

3

4

5

6

7

8

5

2

6

10

14

18

22

26

30

4

4

12

20

28

3

8

24

2

16

1

32

Можно заметить, что в таблице приведены только четные номера форм производных. Это из-за того, что у двух соседних форм одна общая образующая. Это может быть или первая или вторая образующая. Фрагмент списка формул для седьмого вида это подтверждает:

5.7 = 1.4 + 3.6

6.7 = 2.5 + 3.6

7.7 = 2.5 + 4.6

Но вернемся к таблице. Возьмем число 12. Из таблицы следует, что первая образующая 12-й формы седьмого вида – это вторая форма четвертого вида. Числа по вертикалям представляют собой геометрическую прогрессию со знаменателем 2, а числа по горизонталям это арифметические прогрессии с увеличивающейся к низу таблицы разностью. Увеличивается она в геометрической прогрессии с тем же знаменателем равным 2. В первой строке сверху разность равна четырем, во второй равна восьми, а в третьей равна 16-и.

Введем понятие числа n. Это число можно получить, если развернуть наоборот крайнюю левую колонку. Также оно получится, если подсчитать количество последовательных целочисленных делений на 2 любого числа из ячеек таблицы. То есть число n – это номер члена геометрической прогрессии со знаменателем 1/2. Для примера возьмем число 28:

28 / 2 = 14

14 / 2 = 7

Число 7 дальше нацело на 2 не делится. Число делений равно 2. Значит n = 2. Для числа 32:

32 / 2 = 16, 16 / 2 = 8, 8 / 2 = 4, 4 / 2 = 2, 2 / 2 = 1

n = 5

Учитывая все вышесказанное и пользуясь формулой n-ого члена арифметической прогрессии можно вывести такую формулу для расчета номеров форм производных:

F_{пр}=2^n+2*2^n(F_{обр}-1)

Путем несложных преобразований получаем:

F_{обр} = \frac{F_{пр} + 2^n}{2*2^n}

Для вывода формулы расчета номера вида потребуется вот такое определение числа n:

n=V_{пр}-V_{обр}-1

Это определение следует из того, что ряд числа n обратный по отношению к видовому ряду и при увеличении номера вида на единицу, количество видов среди первых образующих также увеличивается на единицу. Теперь формула номера вида легко выводится из формулы номера формы:

V_{обр}=V_{пр}-log_2\left(\frac{F_{пр}}{2F_{обр}-1}\right)-1

Если из предпоследней формулы выразить второе слагаемое через первое и число n, то получим:

V_{обр}=V_{пр}-n-1

Ничего не напоминает? Двоичный логарифм представляет собой не что иное, как число n, но уже выраженное через формы, а не через виды:

n=log_2\left(\frac{F_{пр}}{2F_{обр}-1}\right)

Вторые образующие и вывод формулы

Что касается вторых образующих, то с ними все гораздо проще. Вот формулы пятого вида:

1.5 = 0 + 1.4

2.5 = 1.3 + 1.4

3.5 = 1.3 + 2.4

4.5 = 2 + 2.4

5.5 = 2 + 3.4

6.5 = 2.3 + 3.4

7.5 = 2.3 + 4.4

8.5 = 1 + 4.4

Как видим, чтобы вычислить номер вида второй образующей нужно просто вычесть единицу из номера вида производной. Чтобы узнать номер формы нужно поделить пополам номер производной формы с учетом четности последней. Если номер нечетный, то его следует увеличить на единицу.

Выведем формулу для 27-й формы восьмого вида. Сразу же вычисляем вторую образующую:

27 + 1 = 28, 28 / 2 = 14, F = 14

8 - 1 = 7, V = 7

27.8 = ... + 14.7

Вычислим первую образующую. Так как номер формы нечетный, то в данном случае его следует уменьшить на единицу для последующих расчетов. Далее вычислим n:

26 / 2 = 13, n = 1

Теперь можно узнать номер формы первой образующей:

F = (26 + 2) / (2 * 2) = 28 / 4

F = 7

Рассчитаем номер вида:

V = 8 - log2 (26 / (2 * 7 - 1)) - 1 = 6 или

V = 8 - 1 - 1 = 6, так как n = 1

V = 6

Искомая формула имеет следующий вид:

27.8 = 7.6 + 14.7

Расчетные скрипты для Scilab

Изучал я как-то Scilab и решил написать скрипт для вывода формул образования сторон. Вот скрипт, который рассчитывает отдельную формулу:

F = input("Введите номер формы: ")
if F == 0 then
    disp("Неверный номер формы!")
    return
end
V = input("Введите номер вида: ")
if F == 1 then
    disp("1."+string(V)+" = "+"0 + 1."+string(V - 1))
    return
end
H = F
if modulo(F,2) ~= 0 then
G = F + 1
F = F - 1
else
G = F
end
M = F
n = 0
while modulo(M,2) == 0
M = M ./2
n = n + 1
end
f1 = (F + (2 .^n))./(2 .*(2 .^n))
v1 = V - n - 1
f2 = G ./2
v2 = V - 1
disp(string(H)+"."+string(V)+" = "+string(f1)+"."+string(v1)+" + "+string(f2)+"."+string(v2))

А этот скрипт выводит все формулы для определенного вида:

V = input("Введите номер вида: ")
disp("1."+string(V)+" = "+"0 + 1."+string(V - 1))
q = 2 .^(V - 2)
for i = 2:1:q
   if modulo(i,2) ~= 0 then
   G = i + 1
   F = i - 1
   else
   G = i
   F = i
   end
   M = F
   n = 0
   while modulo(M,2) == 0
   M = M ./2
   n = n + 1
   end
   f1 = (F + (2 .^n))./(2 .*(2 .^n))
   v1 = V - n - 1
   f2 = G ./2
   v2 = V - 1
   disp(string(i)+"."+string(V)+" = "+string(f1)+"."+string(v1)+" + "+string(f2)+"."+string(v2)) 
end

Получение состава сторон

Под составом стороны горизонта подразумевается количество компонентов, из которых она состоит. Для примера возьмем вторую форму третьего вида. Ее формула:

2.3 = 1 + 2

Пусть нас интересует северо-восточный сектор. Тогда:

1 = NE

2 = NNE или ENE

2.3 = NE + NNE или 2.3 = NE + ENE

То есть у нас 2 результата. В записи с применением коэффициентов это можно выразить так:

NE + (2N + E) = 3N + 2E

NE + (N + 2E) = 2N + 3E

Получаем две обратные по составу стороны. По количественному составу все секторы одинаковые. У каждой стороны, начиная со второго вида, есть обратная ей сторона, которая находится в другой половине сектора. Так как секторы не отличаются друг от друга по численному составу сторон, то можно записывать стороны используя только числа. Например, предыдущие выражения можно записать так:

1/1 + 2/1 = 3/2

1/1 + 1/2 = 2/3

Мне не удалось найти универсального способа вычисления состава сторон. Может быть, что его вообще не существует. Могу показать только довольно очевидный способ разложения до низших видов. Допустим, нам нужно вычислить состав стороны третьей формы шестого вида. По вышеприведенным формулам получаем образующие:

3.6 = 1.4 + 2.5

Наша задача заключается в том, чтобы расписать все образующие до единиц и нулей. Идем дальше:

1.4 = 0 + 1.3

1.3 = 0 + 2

2 = 0 + 1

2.5 = 1.3 + 1.4

Далее снова расписываем 1.3 и 1.4. Продолжаем пока не останутся только 0 и 1.

Учитывая повторы в разложении, подсчитываем количество нулей и единиц. Нуль считается как 0/1 или 1/0. Единица считается как 1/1. Сделав все подсчеты, получим 11/3 или 3/11. Понятно, что для более высших видов такой способ вычисления состава становится довольно громоздким и неудобным.

На этом все! Надеюсь, что вам было интересно!


Дата-центр ITSOFT — размещение и аренда серверов и стоек в двух дата-центрах в Москве. За последние годы UPTIME 100%. Размещение GPU-ферм и ASIC-майнеров, аренда GPU-серверов, лицензии связи, SSL-сертификаты, администрирование серверов и поддержка сайтов.

Tags:
Hubs:
Total votes 20: ↑9 and ↓11-2
Comments14

Articles