Понял: судя по вашему тексту, вы хотите такую фигуру в OpenSCAD: три сферы на оси X, соединённые двумя цилиндрами между ними (между левой и средней сферой, и между средней и правой). Ниже готов полный рабочий пример и подробное пояснение.
Простой рабочий код (OpenSCAD)
// OpenSCAD: три сферы, соединённые двумя цилиндрами вдоль оси X
$fn = 250; // высокая плавность кругов
D = 15; // расстояние от центра средней сферы до внешних сфер (половина общей длины цепочки)
sphereR = 4.5; // радиус каждой сферы
rodR = 1.8; // радиус цилиндров-«соединителей»
union() {
// два цилиндра, соединяющие внешние сферы с центральной
// левый цилиндр: от x = -D до x = 0
translate([-D, 0, 0])
rotate([0, 90, 0])
cylinder(h = D, r = rodR, center = false);
// правый цилиндр: от x = 0 до x = +D
translate([ D, 0, 0])
rotate([0, 90, 0])
cylinder(h = D, r = rodR, center = false);
// три сферы: слева, в середине и справа
translate([-D, 0, 0]) sphere(sphereR);
translate([ 0, 0, 0]) sphere(sphereR);
translate([ D, 0, 0]) sphere(sphereR);
}
Как это работает (пошагово)
- Задаём настройки:
- $fn = 250 для плавной геометрии.
- D задаёт расстояние от средней сферы до каждой внешней (то есть половина общего длины фигуры).
- sphereR – радиус сфер, rodR – радиус цилиндров.
- Сферы размещаются вдоль оси X на координатах: -D, 0, +D.
- Цилиндры по умолчанию ориентированы вдоль оси Z в OpenSCAD. Чтобы они шли вдоль оси X, их поворачиваем на 90 градусов вокруг оси Y: rotate([0, 90, 0]).
- Расположение цилиндров достигается так:
- левый цилиндр начинается в точке x = -D и имеет длину D, поэтому заканчивается в x = 0.
- правый цилиндр начинается в x = +D и длину D, заканчивается в x = 0.
- совместно они образуют соединение между левой и правой парами позиций через центральную сферу.
- Если нужно изменить общую длину фигуры, изменяйте D. Если хотите больше/меньше сфер, меняйте sphereR. Чтобы сделать цилиндры толще/тоньше, меняйте rodR.
Дополнительные варианты и подсказки
- Менять ориентацию фигуры можно, добавив одну общую трансформацию над union, например:
// повести фигуру в другое направление
// rotate([angleX, angleY, angleZ])
- Чтобы сделать центральную сферу больше/меньше по сравнению с внешними, можно задать разные радиусы сфер, например:
translate([-D, 0, 0]) sphere(r = 5); // левая сфера
translate([ 0, 0, 0]) sphere(r = 6); // средняя сфера
translate([ D, 0, 0]) sphere(r = 5); // правая сфера
- Если нужно сделать фигуру без центральной сферы, удалите соответствующую строку в коде и, при желании, скорректируйте длину цилиндров.
Если хотите, могу адаптировать модель под конкретные параметры класса (например, другой размер шаров или другая шаговая раскладка) или превратить это в модуль, чтобы можно было легко менять параметры через входные аргументы. Скажите, какие именно размеры хотите получить (радиусы, расстояния, направление).