Мастерим шахматы: ФЕРЗЬ

Рис1 Ферзь. Взято с сайта chess.com

Строительство ферзя вновь подарит нам возможность вспомнить уже знакомые приёмы и освоить новые. Сначала кратко рассмотрим план работы:

  • строим тело ферзя;

  • вырезаем ему корону;

  • достраиваем шапочку;

  • всё поднимаем и ставим на стандартное основание.

Тело фигуры

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

  1. скопируйте рис.3 в буфер обмена;

  2. вставьте его в пустой документ Inkscape;

  3. обведите кривой Безье, сделайте фигуре сплошную заливку и отключите обводку;

  4. скопируйте фигуру и вставьте в пустой документ Inkscape, выровняйте по левому нижнему углу и задайте подходящий размер.

  5. сохраните в формате SVG.

Рис.3 Контуры тела ферзя

Создание короны

Вот тут начинается самое интересное. Чтобы понять принцип предлагаю сравнить рис. 4 и рис.5.

Рис.4 Корона ферзя из 6 зубцов
Рис.5 Корона ферзя из 6 зубцов с элементами вырезания

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

Создание нескольких одинаковых объектов. Циклы

Для того, чтобы создать несколько объектов мы будем использовать циклы. Для начала создадим один цилиндр и сместим его по оси X.

translate([10,0,0])

cylinder(h=6, r1=4, r2=4, center=true, $fn=50);

Рис.6 Цилиндр, смещённый по оси X
Рис.7 Цилиндры полученные в цикле

Чтобы создать 3 таких цилиндра, повёрнутых на 120 градусов вокруг оси Z допишем команду поворота и цикл:

for(corner = [0 : 120 : 360]){

rotate([0,0,corner])

translate([10,0,0])

cylinder(h=6, r1=4, r2=4, center=true, $fn=50);

}

  • Прокомментируем код.

Цикл for(corner = [0 : 120 : 360]) по очереди присваивает переменной corner значения от 0 до 360 с шагом 120. То есть 1, 120, 240, 360. То есть:

  1. первый цилиндр смещается на 10 по оси X, а затем поворачивается на 0 градусов вокруг оси Z (то есть не поворачивается);

  2. второй цилиндр смещается на 10 по оси X, а затем поворачивается на 120 градусов вокруг оси Z;

  3. третий цилиндр смещается на 10 по оси X, а затем поворачивается на 240 градусов вокруг оси Z;

  4. на самом деле есть ещё и четвёртый, который повёрнут на 360 градусов, то есть совпадает с первым.

Однако, если нам надо чтобы и сам цилиндр был несколько повёрнут, то его надо повернуть с самого начала, еще перед командой translate([10,0,0]).

Повернём цилиндр сначала на 30 градусов вокруг оси Y. Просто добавим команду поворота в наш код и получим расположение как на рис.8.

Рис.8 Предварительно вывернутые цилиндры полученные в цикле

for(corner = [0 : 120 : 240]){

rotate([0,0,corner])

translate([10,0,0])

rotate([0,30,0]) //поворот первого на 30 градусов вокруг оси Y

cylinder(h=6, r1=4, r2=4, center=true, $fn=50);

}

Теперь остаётся только приподнять нашу группу цилиндров и, правильно настроив - вычесть её из верхней части тела ферзя.

Рис.9 Вычитание группы цилиндров из верхней части тела ферзя для создания короны
Рис.10 Шапочка ферзя

Шапочка ферзя

Рис.10 даёт наглядное представление о том, как сделать шапочку для ферзя. Чтобы вытянуть бОльшую сферу вдоль оси Z используйте команду scale([X,Y,Z]). Вместо букв нужно установить величину растяжения (числа больше 1), или сжатия (числа меньше 1) вдоль соответствующих направлений (смотри направление осей координат X,Y и Z в левом нижнем углу окна просмотра). Потом просто перемещаем растянутую сферу вверх (по оси Z) до необходимого уровня. Финальный вид тела ферзя представлен на рис.11.

Создаём группу объектов

Теперь нужно сдвинуть всё тело ферзя вверх, чтобы подставить под него основание, однако при этом нужно понимать, что тело состоит из нескольких фигур. А рас так, то тогда к каждой из них по отдельности придётся применять команду перемещения, что не очень-то удобно. Поэтому мы поступим иначе - объединим отдельные объекты в единый объект, а потом одной командой translate([X,Y,Z]) поднимем сразу всю фигуру целиком. В этом нам поможет команда union(){ ... }. Эта команда группирует все объекты, которые находятся внутри фигурных скобок в один, после чего достаточно перед ней поставить команду перемещения и всё объединение сместится.

Рис.11 Полностью готовое тело ферзя
Рис.12 Основание ферзя

Основание фигуры

Основание фигуры мы просто копируем из предыдущих работ. Можно на пару миллиметров увеличить диаметр и на миллиметр высоту основания, чтобы подчеркнуть статусность самой сильной фигуры в игре (рис.12). Финальный вид фигуры представлен на рис.13.


Рис.13 Готовая модель ферзя