Comments 28
На трёхмерное пространство есть два способа обобщить: систему координат брать цилиндрическую (\rho,\phi,z)=(p,p,p) для простых p или сферическую (r,\phi,\theta)=(р, р, р). С цилиндрической всё проще: получатся те же 280 лучей (которые постепенно поворачиваются), но лежать они будут в конусе с уравнением z^2=x^2+y^2 (другими словами конус этот это множество точек, равноудалённых от оси z и плоскости xOy, потому что для \rho=√(x^2+y^2) и для z мы берём одно и то же значение p). В сферической системе сложнее, по скольку круги наматывают не только в горизонтальном круге вокруг оси Oz посредством увеличения \phi, но и в вертикальных кругах посредством увеличения \theta, которое отсчитывается от оси z. Тут сложнее сказать как получается.
<joke оff>Если не сказать ошеломляют. Кроме шуток. Давние ковыряния в Excel с попытками узреть неуловимые закономерности распределения простых чисел и близко не настолько результативны.
<joke оn>
Кажется можно начинать собирать машину на выбор.
Где бы исходники взять? что бы не с нуля рисовать. интересно стало на результат взглянуть
попробовал на observablehq.com, нашел у кого-то отображение простых чисел в полярные.
поделил углы на 2*pi, мистика исчезла. остались более менее равномерное распределение с двумя полосками, которые, я уверен, являются результатом ошибки вычислений.
Чтобы убедиться что это баг отображения достаточно посмотреть какие числа в том месте отображены. А так у вас все те же классы делимости рисуются в менее муарном виде
а если попробовать взять целый оборот не за 2*pi, а за 10это странное предложение. в 2*pi есть определенный смысл — это длина окружности радиуса 1. а 10 — это просто основание нашей системы счисления. при этом одно и то же число является простым в любой системе счисления
final int numbers = 10000;
final float radiusStep = 300.0 / numbers;
final float angleStep = TWO_PI / ((sqrt(5) + 1) / 2);
boolean prime[] = new boolean[numbers];
prime[0] = false; prime[1] = false;
for(int n = 2; n < numbers; n++) {
prime[n] = true;
}
for(int n = 2; n * n < numbers; n++) {
if(prime[n]) {
for(int i = n * n; i < numbers; i += n) prime[i] = false;
}
}
size(600, 600);
background(0);
set(width / 2, height / 2, #FFFFFF);
for(int n = 0; n < numbers; n++) {
float r = n * radiusStep;
float a = n * angleStep;
int x = int(width / 2 + r * cos(a));
int y = int(height / 2 - r * sin(a));
if(prime[n]) set(x, y, #BBDDFF); else set(x, y, #0055AA);
}
Числа от 0 до 9999, простые числа обозначены белыми точками:
А вообще, наблюдаемое количество спиралей и их форма сильно зависят от масштаба; при фиксированном значении angleStep, взяв в 10 раз больше чисел, уменьшив соответственно radiusStep и уплотнив график равномерно по осям, мы получим совершенно другую на вид фигуру.
А если взять не десятичную систему?
Бесполезный паттерн в полярных координатах, открывающий полезное свойство простых чисел