Если координаты линии являются Ax, Ay и Bx, By и центр кругов Cx, Cy, то формулы прямых:
x = Ax * t + Bx * (1 - t)
y = Ay * t + By * (1 - t)
, где 0 & lt; = t & lt; = 1
и окружность
(Cx - x) ^ 2 + (Cy - y) ^ 2 = R ^ 2
, если вы подставляете формулы x и y линии в формулу кругов, вы получаете уравнение второго порядка t и его решения являются точками пересечения (если они есть). Если вы получаете t, который меньше 0 или больше 1, то это не решение, но оно показывает, что линия «указывает» на направление круга.
Песочница Ruby чрезвычайно сложна (есть много способов для рубинового кода сделать вашу жизнь трудной, помимо использования ``
). Существуют различные проекты, которые пытаются это сделать, будь то предварительная валидация, изменение среды выполнения, упаковка всего в контейнер докеров или иное. Я бы относился ко всем им как к крайнему приложению.
Самый безопасный вариант - использовать намеренно ограниченный язык шаблонов, например Liquid .
eval
с пользовательским вводом, что является плохой идеей по всем тем же причинам, что и выполнение команд оболочки из пользовательского ввода ... все, что может сделать команда оболочки, и чистый рубиновый скрипт. – matthewd 13 July 2018 в 16:02