cylinder() для создания цилиндров.
* cone() (или cylinder() с разными радиусами) для создания конусов.
* cube() для создания кубов (которые можно масштабировать и поворачивать для стабилизаторов).
* union() для объединения объектов.
* difference() для вычитания объектов.
* translate() для перемещения объектов.
* rotate() для поворота объектов.
* scale() для масштабирования объектов.
* minkowski() (возможно, для скругления, но для простой модели можно обойтись без него).
* hull() (возможно, для создания сложных форм, но для простой модели можно обойтись без него).
Давайте начнем с простого варианта, который будет похож на рисунок.
Код OpenSCAD для модели ракеты:
// Задание 53: Создание модели "Ракета" (рис. 135)
// Основные параметры ракеты
rocket_height = 60; // Общая высота ракеты
rocket_radius_bottom = 10; // Радиус нижней части корпуса
rocket_radius_top = 0; // Радиус верхней части корпуса (для конуса)
stabilizer_length = 20; // Длина стабилизатора
stabilizer_width = 10; // Ширина стабилизатора (вдоль оси Y)
stabilizer_thickness = 2; // Толщина стабилизатора
engine_radius = 3; // Радиус сопла двигателя
engine_height = 8; // Высота сопла двигателя
engine_offset_from_center = 5; // Смещение двигателей от центра
num_stabilizers = 3; // Количество стабилизаторов
num_engines = 4; // Количество двигателей
// 1. Корпус ракеты (цилиндр с конической верхушкой)
module rocket_body() {
// Нижняя цилиндрическая часть
cylinder(h = rocket_height * 0.7, r = rocket_radius_bottom, $fn = 50);
// Верхняя коническая часть
translate([0, 0, rocket_height * 0.7]) {
cylinder(h = rocket_height * 0.3, r1 = rocket_radius_bottom, r2 = rocket_radius_top, $fn = 50);
}
}
// 2. Стабилизатор
module stabilizer() {
// Создаем куб и масштабируем его, затем поворачиваем
cube([stabilizer_length, stabilizer_width, stabilizer_thickness], center = true);
}
// 3. Сопло двигателя
module engine_nozzle() {
cylinder(h = engine_height, r1 = engine_radius, r2 = engine_radius * 0.5, $fn = 30);
}
// Сборка всей ракеты
module rocket_model() {
union() {
// Корпус
rocket_body();
// Стабилизаторы
for (i = [0 : num_stabilizers - 1]) {
rotate([0, 0, i * (360 / num_stabilizers)]) {
translate([rocket_radius_bottom * 0.8, 0, rocket_height * 0.3]) { // Позиционируем стабилизаторы
rotate([90, 0, 0]) { // Поворачиваем стабилизатор, чтобы он был вертикально
stabilizer();
}
}
}
}
// Двигатели
for (i = [0 : num_engines - 1]) {
rotate([0, 0, i * (360 / num_engines)]) {
translate([engine_offset_from_center, 0, -engine_height / 2]) { // Позиционируем двигатели под корпусом
engine_nozzle();
}
}
}
}
}
// Вызов модуля для отображения модели
rocket_model();
Пояснения к коду для школьника:
-
// Задание 53: Создание модели "Ракета" (рис. 135)
Это комментарий. Все, что начинается с двух слешей//, компьютер игнорирует. Это нужно, чтобы мы могли писать пояснения к коду. -
rocket_height = 60;и другие переменные
Мы задаем основные размеры нашей ракеты. Например,rocket_height- это общая высота ракеты. Мы можем легко менять эти числа, чтобы ракета выглядела по-другому, не меняя весь код. -
module rocket_body() { ... }
Это "модуль" или "функция". Мы создаем отдельную часть ракеты - ее корпус. Внутри этого модуля мы описываем, как выглядит корпус.-
cylinder(h = rocket_height * 0.7, r = rocket_radius_bottom, $fn = 50);
Создаем цилиндр.h- это высота,r- радиус.$fn = 50делает цилиндр более гладким (больше граней). Мы делаем нижнюю часть корпуса цилиндрической. -
translate([0, 0, rocket_height * 0.7]) { ... }
Командаtranslate()перемещает объект. Мы перемещаем верхнюю часть корпуса вверх, чтобы она стояла на цилиндрической части.[0, 0, rocket_height * 0.7]означает перемещение на 0 по оси X, 0 по оси Y и наrocket_height * 0.7по оси Z (вверх). -
cylinder(h = rocket_height * 0.3, r1 = rocket_radius_bottom, r2 = rocket_radius_top, $fn = 50);
Это тоже цилиндр, но с двумя разными радиусами:r1(нижний радиус) иr2(верхний радиус). Еслиr2равен 0, то получается конус. Это наша коническая верхушка ракеты.
-
-
module stabilizer() { ... }
Модуль для создания одного стабилизатора (крыла).-
cube([stabilizer_length, stabilizer_width, stabilizer_thickness], center = true);
Создаем куб.[длина, ширина, толщина]- это размеры куба.center = trueозначает, что центр куба будет в точке[0,0,0], что удобно для поворотов.
-
-
module engine_nozzle() { ... }
Модуль для создания одного сопла двигателя.-
cylinder(h = engine_height, r1 = engine_radius, r2 = engine_radius * 0.5, $fn = 30);
Создаем небольшой конус для сопла.r1- широкий конец,r2- узкий конец.
-
-
module rocket_model() { ... }
Это главный модуль, который собирает все части ракеты вместе.-
union() { ... }
Командаunion()объединяет все объекты внутри нее в один. Это как склеить все части вместе. -
rocket_body();
Вызываем наш модульrocket_body, чтобы добавить корпус ракеты. -
for (i = [0 : num_stabilizers - 1]) { ... }
Это цикл. Он повторяет действия несколько раз. Здесь мы создаемnum_stabilizers(3) стабилизатора. Переменнаяiбудет меняться от 0 до 2. -
rotate([0, 0, i * (360 / num_stabilizers)]) { ... }
Командаrotate()поворачивает объект. Мы поворачиваем каждый стабилизатор вокруг оси Z (вертикальной оси) на определенный угол, чтобы они располагались равномерно по кругу.360 / num_stabilizers- это угол между стабилизаторами. -
translate([rocket_radius_bottom * 0.8, 0, rocket_height * 0.3]) { ... }
Перемещаем стабилизатор в нужное место на корпусе ракеты. -
rotate([90, 0, 0]) { ... }
Поворачиваем стабилизатор на 90 градусов вокруг оси X, чтобы он стоял вертикально, а не лежал горизонтально. -
Аналогично для двигателей: мы используем цикл
forи командыrotate()иtranslate(), чтобы расположить их равномерно под корпусом.
-
-
rocket_model();
В самом конце мы вызываем наш главный модульrocket_model(), чтобы OpenSCAD построил и показал нам всю ракету.
Как использовать этот код:
- Откройте программу OpenSCAD.
- Скопируйте весь код, приведенный выше, и вставьте его в текстовое окно OpenSCAD.
- Нажмите кнопку "Предварительный просмотр" (обычно F5) или "Рендеринг" (обычно F6), чтобы увидеть модель ракеты.
- Вы можете изменять значения переменных (например,
rocket_height,num_stabilizers), чтобы экспериментировать с внешним видом ракеты.
Эта модель достаточно проста, но использует основные команды, которые обычно изучаются. Она позволяет создать ракету, похожую на ту, что изображена на рисунке 135.
