Я думаю, ты должен быть в состоянии сделать это очень хорошо.
docker-compose:
version: '3'
services:
my-shared-build:
image: my-shared-build:latest
build: my-shared-build
my-process-one:
image: my-process-one:latest
build: my-process-one
depends_on:
- my-shared-build
my-process-two:
image: my-process-two:latest
build: my-process-two
depends_on:
- my-shared-build
- my-process-one
Предполагая, что ваши файлы Docker находятся в подкаталогах my-shared-build, my-process-one, my-process-two, это должно собрать все 3 образа заказ)
Можно определить угол двух векторов просто путем взятия скалярного произведения (скалярное произведение). Полезное свойство - то, что, если векторы являются ортогональными, их скалярное произведение является нулем; если их угол является тупым, продукт отрицателен, в других отношениях положителен. Так, шаги для взятия:
(x y)
кому: (-y x)
)(x1 * x2) + (y1 * y2)
)править: Можно найти, заказаны ли вершины против часовой стрелки или по часовой стрелке при помощи следующей формулы для вычисления области полигона:
1 n-1 A = --- SUM( x(i)*y(i+1) - x(i+1)*y(i) ) 2 i=0
где n
количество вершин. x(n)
и y(n)
совпадают с x(0)
и y(0)
(для закрытия полигона).
Если это положительно, то вершины заказаны против часовой стрелки иначе по часовой стрелке.
править: При упрощении шагов вращения и скалярного произведения Вы прибываете в формулу для двумерного векторного произведения, x1*y2 - x2*y1
. Это упрощает первые шаги выше:
((x1 * y2) - (x2 * y1))
Извините за замысловатый первый подход.
Это - вопрос, связанный с геометрией, не точно progamming связанный.
Если у Вас есть вершины, можно просто найти внутренние углы тригонометрией, подобной тому, как Вы находите углы треугольника.
Используя три смежных вершины, предположите, что треугольник и они находят внутренние углы.
Например, посмотрите на полигон:
Мы можем создать треугольник как:
Я предполагаю, что это - неправильный полигон, так как для правильного многоугольника было бы действительно трудно иметь внутренний угол, больше, чем 180 градусов.
Для каждой вершины необходимо было бы также знать две соседних вершины. Можно затем превратить это в проблему тригонометрии, где Вы находите угол от основной вершины до, скажем, левой вершины и добавляете его к углу от основной вершины до правильной вершины.
Например,
tan(angle_to_left) = (v.y-left.x)/(v.y-left.y) tan(angle_to_right) = (v.y-right.x)/(v.y-right.y)
Затем добавьте углы вместе.
Наконец, для всех углов, которые больше, чем 180, увеличьте счетчик. После прохождения через всех вершин Ваш счетчик скажет Вам, сколько внутренних углов больше, чем 180.
Проблема с касательной состоит в том когда x == 0. Если Вы только знаете вершины полигона, Вы не знаете достаточно, если это не треугольник, так как у них мог быть любой вид возможности соединения.
Принятие Вас знает возможность соединения, необходимо ли будет затем вычислить извилистый порядок (т.е. в том, какое направление точки обходят полигон?). С извилистым порядком можно затем взять векторное произведение каждой точки с ее соседними точками и взять обратный синус величины этого для получения угла.