Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3514483
А
Аноним
24 ноября 2025 16:24 · публичный вопрос
А
Аноним

Как построить пять конечную звезду на 3д принтере в симуляторе с помощью кода используя workshop.movePrinterNozzle(x, y, z) (напиши код)

Ответ нейросети
24 ноября 2025 16:24

Кратко: задача сводится к построению звездной фигуры в плоскости XY на одном слое и перемещению сопла по соответствующей последовательности вершин. Ниже приводжу подробное решение и готовый код (пользуемся API workshop.movePrinterNozzle(x, y, z)).

Что именно делаем

  • Задаём радиус окружности, на котором размещаются внешние вершины пятиконечной звезды.
  • Вычисляем координаты пяти внешних вершин окружности (углы: -90, -18, 54, 126, 198 градусов).
  • Путь рисования для пятиконечной звезды (пентакрамма) — соединяем вершины в следующем порядке: 0 -> 2 -> 4 -> 1 -> 3 -> 0.
  • Сначала подводим сопло на безопасную высоту, затем опускаем до слоя печати и последовательно перемещаемся по заданной последовательности, после чего поднимаем сопло обратно.

Пояснения по коду

  • R — внешний радиус звезды; z — высота печати слоя (глубина сопла в просвете печати).
  • safeZ (или startZ) — безопасная высота над столом для перемещений без печати.
  • Координаты рассчитаны так, чтобы звезда была ориентирована вертикально вверх, но можно поменять начальный угол для другой ориентации.
  • Если в вашей симуляции есть режим extrusion, он распознается по настройкам симулятора; здесь мы просто последовательно перемещаемся по точкам через API movePrinterNozzle.

Код (Python-подобный синтаксис) import math

def draw_pentagram_star(R=40.0, z=0.2, safeZ=60.0): # Перемещаемся на безопасную высоту workshop.movePrinterNozzle(0, 0, safeZ)

# Вычисляем внешние вершины звезды (5 точек)
angles = [math.radians(-90 + 72 * i) for i in range(5)]
outer = [(R * math.cos(a), R * math.sin(a)) for a in angles]

# Порядок соединения точек для пентаграммы: 0 -> 2 -> 4 -> 1 -> 3 -> 0
sequence = [0, 2, 4, 1, 3, 0]

# Перемещаемся к стартовой вершине на нужной высоте
start_idx = sequence[0]
x0, y0 = outer[start_idx]
workshop.movePrinterNozzle(x0, y0, z)

# Рисуем звезду по последовательности
for idx in sequence[1:]:
    x, y = outer[idx]
    workshop.movePrinterNozzle(x, y, z)

Пример параметров:

  • R = 60 мм, z = 0.2 мм, safeZ = 80 мм — можно подстроить под ваш принтер/симулятор.

Код (JavaScript-подобный синтаксис) function drawPentagramStar(R = 40, z = 0.2, safeZ = 60) { const toRad = (deg) => deg * Math.PI / 180;

// Безопасное перемещение workshop.movePrinterNozzle(0, 0, safeZ);

// Внешние вершины звезды const angles = [toRad(-90 + 72 * 0), toRad(-90 + 72 * 1), toRad(-90 + 72 * 2), toRad(-90 + 72 * 3), toRad(-90 + 72 * 4)]; const outer = angles.map(a => [R * Math.cos(a), R * Math.sin(a)]);

// Порядок соединения вершин для пентаграммы const sequence = [0, 2, 4, 1, 3, 0];

// Перемещаемся к стартовой вершине const [startX, startY] = outer[sequence[0]]; workshop.movePrinterNozzle(startX, startY, z);

// Рисуем звезду по последовательности точек for (let i = 1; i < sequence.length; i++) { const [x, y] = outer[sequence[i]]; workshop.movePrinterNozzle(x, y, z); } }

Пояснения по использованию

  • Задайте нужный размер звезды через параметр R (например, 40–60 мм).
  • Задайте высоту слоя z (обычно 0.1–0.3 мм) и безопасную высоту safeZ для перемещений без печати.
  • Если нужно, можно изменить ориентацию звезды, изменив начальный угол (-90 градусов можно заменить на другой, например -45).

Дополнительные советы

  • Если ваш симулятор поддерживает подачу тестовых линий а-ля “extruder on/off”, можно добавить режим печати внутри траектории (например, начать extrusion перед перемещением к следующей вершине).
  • Чтобы получить заполненную звезду, можно реализовать внутреннюю заливку: после прорисовки внешнего контура повторно пройти по внутренним линиям или реализовать полигональный метод заполнения. Это потребует дополнительных функций симулятора.

Хотите, я адаптирую код под конкретный язык/интерфейс вашего симулятора или добавлю вариант с заполнением звезды?