PerformStars · Исследования и разработки
Сложность бильярдного удара: русская пирамида и пул
От геометрии позиции к допустимой погрешности прицеливания
Два забитых шара дают одинаковый результат на табло, но требуют разной точности. Мы восстанавливаем позицию по видеозаписи и определяем диапазон направлений битка, при которых геометрия допускает забивание. Сравним, как этот диапазон меняют размеры стола, шаров и луз в пуле и русской пирамиде.
Полный допустимый интервал начальных направлений битка.
Чем он уже, тем точнее нужно выполнить удар.
Каноническая статья «Assessment of Billiard Shot Difficulty» · PDF на английском. Здесь изложены основные уравнения, сравнение пирамиды и пула и отдельная геометрия свояка.
1. Сложность как требование к точности
Представим прямой удар в среднюю лузу и тонкую резку через весь стол. В обоих случаях задача — забить шар, но допустимое отклонение начального направления битка различается. Именно это отклонение можно определить из геометрии.
Сначала находим диапазон направлений прицельного шара, совместимых с входом в лузу. Затем через геометрию первого столкновения переводим его в допустимые направления битка. Ширина полученного интервала w, в радианах, — основной результат модели. Он учитывает конечный размер шара, вход в лузу, дистанции и резку.
Для отображения используется обратная шкала D = 0,10/w. Коэффициент задаёт масштаб чисел и не меняет порядок ударов. До округления удвоение D означает уменьшение углового допуска вдвое. Это геометрическая сложность, а не вероятность попадания конкретного игрока.
2. От видеозаписи к физическим координатам
Компьютерное зрение поставляет исходные наблюдения: границы игрового поля, траектории шаров, положение битка и кандидата на прицельный шар. Подробнее об этом — в статье о распознавании шаров и восстановлении траекторий.
- Калибровка стола. Перспектива преобразуется в прямоугольную систему координат игрового поля.
- Начальная позиция. Используются первые доступные координаты соответствующих траекторий. Качество этой позиции влияет на точность оценки.
- Шар и луза. Наблюдаемые направления движения дают кандидатов на попытку забивания. Геометрия должна допускать соответствующий удар; сама оценка сложности не доказывает намерение игрока.
- Размеры. Тип бильярда задаёт радиус шара и ширину входа в лузу. Размер стола переводит нормализованные координаты в метры.
- Расчёт. Модель определяет угловой допуск, тип попытки и сложность. Оценка в записи удара округляется до двух знаков.
X = xₚ · ℓ / 1280
Y = yₚ · b / 640Здесь ℓ и b — длина и ширина игрового поля в метрах. Размеры шара и лузы берутся отдельно: увеличение стола не увеличивает их автоматически.
3. Как получается допустимый интервал
3.1. Обозначения и вход в лузу
C и O — центры битка и прицельного шара; P — середина входного отрезка лузы; R — радиус шара; 2a — ширина входа. Единичная нормаль n направлена из игрового поля через вход в лузу, t = (−nᵧ, nₓ) направлен вдоль входа. L — расстояние между центрами шаров. Все длины ниже выражены в метрах.
L = |O − C|; e = (O − C)/L
x = (P − O) · t; h = (P − O) · n
d² = x² + h²; x = d sinφ; h = d cosφВход моделируется конечным отрезком с двумя ограничивающими точками. Центр шара должен пересечь линию входа, сохранив необходимый зазор, и до этого не приблизиться к ограничивающим точкам менее чем на R. Для угловой лузы входной отрезок расположен по диагонали между двумя бортами; для средней — вдоль борта.
3.2. Угловые границы прицельного шара
Для x ≥ 0, h > 0 и a > R верхняя граница задаётся пересечением линии входа с допустимым зазором. Нижняя определяется либо тем же условием, либо касанием к ближней ограничивающей точке:
φ₊ = atan2(x + a − R, h)
Если x ≤ a − R:
φ₋ = atan2(x − a + R, h)
Если x > a − R:
φ₋ = atan2(x − a, h)
+ atan2(R, √((x − a)² + h² − R²))
W = φ₊ − φ₋Для отрицательного x отражаем границы: [φ₋, φ₊] ↦ [−φ₊, −φ₋], предварительно рассчитав их для |x|. Если интервал неположителен или начальная позиция пересекает ограничение, допустимого прямого входа нет. Двухаргументный atan2 сохраняет правильную угловую ветвь.
Для прямого направления на середину входа x = 0:
W = 2 atan2(a − R, d)Это допуск направления прицельного шара. Для оценки всего удара его ещё нужно перенести через столкновение в начальные направления битка.
3.3. Первое столкновение
Для единичного направления прицельного шара u центр битка в момент контакта должен находиться в G = O − 2Ru. Требование приближающегося первого контакта строже простого ограничения резки в 90°:
G = O − 2Ru
(G − C) · u > 0 ⇔ (O − C) · u > 2R
γₖ = acos(2R/L), L > 2R
δ = atan2(eₓnᵧ − eᵧnₓ, e · n)
[γ₋, γ₊] = ([δ + φ₋, δ + φ₊] + 2πk) ∩ [−γₖ, γₖ]γ отсчитывается от направления C → O. Выбирается эквивалентная угловая ветвь k ∈ {−1, 0, 1}, дающая интервал положительной ширины. Если пересечения нет, прямой удар в данной постановке геометрически невозможен.
3.4. Начальное направление битка
В системе координат вдоль C → O вектор G − C имеет компоненты (L − 2R cosγ, −2R sinγ). Поэтому:
β(γ) = atan2(−2R sinγ, L − 2R cosγ)
dβ/dγ = 2R(2R − L cosγ)/(L² + 4R² − 4RL cosγ) < 0
w = β(γ₋) − β(γ₊)
= atan2(−2R sinγ₋, L − 2R cosγ₋)
− atan2(−2R sinγ₊, L − 2R cosγ₊)На допустимом интервале отображение монотонно убывает, поэтому достаточно вычислить его на границах. Полученный w — полный диапазон начальных направлений битка. Он не обязан быть симметричным относительно направления на центр лузы.
Локальный коэффициент усиления угловой ошибки помогает объяснить влияние дистанции и резки:
A(γ) = |dγ/dβ|
= (L² + 4R² − 4RL cosγ)/[2R(L cosγ − 2R)]
w ≈ (γ₊ − γ₋)/A — для узкого интервала с почти постоянным AСам расчёт использует точные значения на концах интервала, без этой локальной аппроксимации. Все углы в уравнениях заданы в радианах.
4. Пирамида и пул: что именно отличается
| Параметр | Пул, 9 футов | Пирамида, 12 футов |
|---|---|---|
| Игровое поле | 2,540 × 1,270 м | 3,550 × 1,775 м |
| Диаметр шара | 57,15 мм | 68 мм |
| Вход угловой лузы | 128 мм | 73 мм |
| Вход средней лузы | 147,2 мм | 83 мм |
| Зазор на сторону, угловая луза | 35,425 мм | 2,5 мм |
| Зазор на сторону, средняя луза | 45,025 мм | 7,5 мм |
Боковой зазор равен m = a − R. Для пирамиды он существенно меньше. Больший радиус уменьшает этот зазор, но одновременно меняет перенос ошибки при столкновении: влияние размера шара нельзя свести к одному множителю. При одинаковой угловой резке больший шар способен расширять допуск первого контакта, в то время как тесный вход в лузу его ограничивает.
При одинаковых физических расстояниях сравнивается прежде всего оборудование. При одинаковых относительных координатах добавляется увеличение расстояний на большем столе. Поэтому единого утверждения «пирамида в N раз сложнее пула» модель не даёт. Размеры здесь — параметры упрощённой геометрии; конкретный стол может требовать измерения входа в лузу.
5. Шесть схем: три сравнения
Во всех примерах выбран прямой удар прицельным шаром в среднюю лузу. C — биток, O — прицельный шар. Синий отрезок ведёт к контакту; оранжевый показывает движение прицельного шара для середины допустимого контактного интервала.
Пул: прямой удар на одинаковой дистанции
- Между центрами шаров, L
- 0,5000 м
- До середины входа в лузу, d
- 0,3000 м
- Допуск прицельного шара, W
- 0,297942892 рад
- Допуск битка, w
- 0,038248272 рад
D = 0,10 / 0,038248272 ≈ 2,61Координаты и промежуточные углы
Метры: C = (1,27000000; 0,80000000); O = (1,27000000; 0,30000000). R = 0,028575 м; 2a = 0,147200 м.
φ₋ = -0,148971446; φ₊ = 0,148971446; γ₋ = -0,148971446; γ₊ = 0,148971446 рад.
Русская пирамида: прямой удар на одинаковой дистанции
- Между центрами шаров, L
- 0,5000 м
- До середины входа в лузу, d
- 0,3000 м
- Допуск прицельного шара, W
- 0,049989587 рад
- Допуск битка, w
- 0,007867485 рад
D = 0,10 / 0,007867485 ≈ 12,71Координаты и промежуточные углы
Метры: C = (1,77500000; 0,80000000); O = (1,77500000; 0,30000000). R = 0,034000 м; 2a = 0,083000 м.
φ₋ = -0,024994794; φ₊ = 0,024994794; γ₋ = -0,024994794; γ₊ = 0,024994794 рад.
Пул: одинаковая относительная позиция
- Между центрами шаров, L
- 0,5080 м
- До середины входа в лузу, d
- 0,3048 м
- Допуск прицельного шара, W
- 0,293318393 рад
- Допуск битка, w
- 0,036993494 рад
D = 0,10 / 0,036993494 ≈ 2,70Координаты и промежуточные углы
Метры: C = (1,27000000; 0,81280000); O = (1,27000000; 0,30480000). R = 0,028575 м; 2a = 0,147200 м.
φ₋ = -0,146659197; φ₊ = 0,146659197; γ₋ = -0,146659197; γ₊ = 0,146659197 рад.
Русская пирамида: одинаковая относительная позиция
- Между центрами шаров, L
- 0,7100 м
- До середины входа в лузу, d
- 0,4260 м
- Допуск прицельного шара, W
- 0,035207630 рад
- Допуск битка, w
- 0,003728899 рад
D = 0,10 / 0,003728899 ≈ 26,82Координаты и промежуточные углы
Метры: C = (1,77500000; 1,13600000); O = (1,77500000; 0,42600000). R = 0,034000 м; 2a = 0,083000 м.
φ₋ = -0,017603815; φ₊ = 0,017603815; γ₋ = -0,017603815; γ₊ = 0,017603815 рад.
Пул: резка при одинаковой дистанции
- Между центрами шаров, L
- 0,5000 м
- До середины входа в лузу, d
- 0,3000 м
- Допуск прицельного шара, W
- 0,297942892 рад
- Допуск битка, w
- 0,014596014 рад
D = 0,10 / 0,014596014 ≈ 6,85Координаты и промежуточные углы
Метры: C = (1,70301270; 0,55000000); O = (1,27000000; 0,30000000). R = 0,028575 м; 2a = 0,147200 м.
φ₋ = -0,148971446; φ₊ = 0,148971446; γ₋ = 0,898226105; γ₊ = 1,196168997 рад.
Русская пирамида: резка при одинаковой дистанции
- Между центрами шаров, L
- 0,5000 м
- До середины входа в лузу, d
- 0,3000 м
- Допуск прицельного шара, W
- 0,049989587 рад
- Допуск битка, w
- 0,002804154 рад
D = 0,10 / 0,002804154 ≈ 35,66Координаты и промежуточные углы
Метры: C = (2,20801270; 0,55000000); O = (1,77500000; 0,30000000). R = 0,034000 м; 2a = 0,083000 м.
φ₋ = -0,024994794; φ₊ = 0,024994794; γ₋ = 1,022202758; γ₊ = 1,072192345 рад.
| Условия | Пул | Пирамида | Отношение оценок |
|---|---|---|---|
| Прямой удар: L = 0,50 м, d = 0,30 м | 2,61 | 12,71 | 4,86 раза |
| Одинаковые доли длины и ширины стола | 2,70 | 26,82 | 9,92 раза |
| Резка: те же расстояния, отклонение линии центров 60° | 6,85 | 35,66 | 5,21 раза |
Вторая пара показывает совместное влияние оборудования и более длинных дистанций: L увеличивается с 0,508 до 0,710 м, d — с 0,3048 до 0,426 м. Отношение оценок здесь около 9,92. Это результат конкретной пары позиций, а не коэффициент для всей русской пирамиды.
6. Свояк: в лузу направляется биток
В русской пирамиде нужно различать попытку забить прицельный шар и свояк — забивание битка после контакта с другим шаром. Простая перестановка исходных координат шаров неверна: биток начинает движение к лузе из точки контакта, а не из своей начальной позиции.
В используемой упрощённой постановке шары одинаковы по массе и радиусу, столкновение упругое, вращение не учитывается. В системе вдоль C → O для выбранного контактного направления u = (cosγ, sinγ) вычисляется центр битка при контакте G, затем его выходное касательное направление v:
G = O − 2Ru
v = sign(γ) · (sinγ, −cosγ), γ ≠ 0
s = ((P − G) · n)/(v · n)
H = G + sv
s > 0; v · n > 0
|(H − P) · t| ≤ a − R
distance(E₋, segment(G,H)) ≥ R
distance(E₊, segment(G,H)) ≥ R
E₋ = P − at; E₊ = P + atПоследние условия требуют, чтобы биток двигался к входу, пересёк его с необходимым зазором и до пересечения не задел ограничивающие точки. Также сохраняется условие приближающегося первого контакта |γ| < acos(2R/L). Центральный контакт γ = 0 исключается: в этой постановке биток останавливается.
Границы допустимых контактных интервалов находятся аналитически по условиям касания и пересечения входа. Каждый интервал переводится в начальные направления битка через ту же функцию β(γ). Если интервалов несколько, расчёт выбирает самый широкий непрерывный интервал, а не складывает раздельные диапазоны.
Для пирамиды оцениваются допустимые варианты «чужой в лузу» и «свой в лузу» для кандидатов, полученных из наблюдений. Выбирается меньшая геометрическая сложность. При выборе свояка сохраняются соответствующий тип попытки, забиваемый шар и выбранная луза. В пуле забивание битка не рассматривается как успешный вариант забивания.
Такая процедура даёт геометрически наиболее доступный из рассмотренных вариантов. Она не является самостоятельным доказательством намерения игрока. Свояки в реальной игре зависят также от вращения и условий контакта, которые эта метрика не описывает.
7. Где это используется в PerformStars
Оценка сохраняется с ударом вместе с геометрическими признаками и выбранным вариантом забивания. Она позволяет сортировать удары, находить требовательные позиции для просмотра и сопоставлять наборы ударов по геометрической нагрузке. Интерпретация серии должна учитывать состав позиций: средняя сложность попыток и результативность отвечают на разные вопросы.
В анализе записи сложность помогает выделить эпизоды для тренера и игрока. В статистике она служит геометрическим признаком удара; сама по себе она не определяет мастерство, вероятность попадания или качество позиционного выхода.
8. Границы модели
Это модель прямого забивания и отдельно описанного свояка. Она не включает отражения от бортов, серии столкновений, перекрытия траекторий другими шарами, силу удара, вращение, трение, деформацию бортов и профиль входа в лузу. При проверке реальной позиции эти факторы могут исключить вариант, допустимый для рассматриваемой пары шаров.
Очень узкий допустимый интервал чувствителен к ошибке координат и измерения оборудования. Если модель не находит допустимый интервал, результат считается геометрически недопустимым, а не обычной числовой оценкой сложности. Равные оценки между дисциплинами означают одинаковый угловой допуск в рамках этих предположений.
9. Исходные данные и воспроизведение
Автор канонической публикации — Dmitrii Sadovnik. PDF с полным выводом геометрии прямого забивания содержит формулы и расчётные примеры. Дополнительная постановка свояка приведена выше и реализована в функции cuePotDifficulty.
- Каноническая статья · PDF
- Расчёт прямого удара и свояка · JavaScript
- Размеры оборудования · JavaScript
- Координаты и результаты шести примеров · JSON
Сохраните оба модуля рядом и загрузите JSON с примерами. Для каждого примера переведите координаты в нормализованную сетку и вызовите difficultyFromTablePoints:
import {difficultyFromTablePoints} from './model.mjs';
const px = p => ({
x: p[0] * 1280 / example.table.l,
y: p[1] * 640 / example.table.w
});
const result = difficultyFromTablePoints(
px(example.cue), px(example.object),
example.pocketId, example.size, example.game
);
console.log(result.cueAngularTolerance, result.compl);Для расчёта свояка используется последний аргумент 'cue' при типе игры 'pyramid'. Вычисления выполняются без внешних пакетов и подключения к базе. В JSON сохранены значения полной точности; в статье оценки округлены для чтения.
