Генерация полилиний в OpenSCAD

Описание проекта: Генерация полилиний в OpenSCAD

Цель проекта

Проект направлен на создание 3D-моделей полилиний с использованием языка программирования OpenSCAD. Он позволяет визуализировать последовательности точек, соединяя их прямыми линиями, что может быть полезно для различных приложений, таких как создание архитектурных чертежей, проектирование деталей и моделирование траекторий.

Описание функциональности

Проект включает в себя два основных модуля: polyline и line, а также вспомогательную функцию distance.

  1. Модуль polyline(points):

    • Принимает массив точек, каждая из которых представлена в виде координат (x, y).
    • Проходит по всем точкам и вызывает модуль line для каждой пары соседних точек, создавая тем самым последовательность соединенных линий.
  2. Модуль line(p1, p2):

    • Принимает две точки p1 и p2.
    • Вычисляет угол между линией, соединяющей эти две точки, и осью X, чтобы правильно ориентировать линию в 3D-пространстве.
    • Создает прямоугольный параллелепипед (линия) между двумя точками, вычитая из него небольшой куб, чтобы визуально обозначить линию.
  3. Функция distance(p1, p2):

    • Вычисляет расстояние между двумя точками в 2D-пространстве, используя теорему Пифагора.

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

В проекте определен массив points, который содержит координаты пяти точек. При вызове модуля polyline(points) создается 3D-модель, состоящая из соединенных линий, которые визуализируют заданные точки.

points = [[0, 0], [10, 5], [20, 0], [30, 10], [40, 0]];
polyline(points);

Применение

Данный проект может быть использован в различных областях, таких как:

  • Архитектурное проектирование для создания планов зданий.
  • Инженерное моделирование для проектирования деталей и механизмов.
  • Визуализация траекторий движения объектов в 2D и 3D пространстве.

Заключение

Проект демонстрирует возможности OpenSCAD для создания сложных 3D-форм на основе простых геометрических примитивов и алгоритмов. Он может быть расширен для поддержки более сложных форм, таких как кривые или замкнутые контуры, а также интегрирован с другими модулями для создания более сложных моделей.

module polyline(points) {
    for (i = [0 : len(points) - 2]) {
        line(points[i], points[i + 1]);
    }
}

module line(p1, p2) {
    translate(p1) {
        rotate(atan2(p2[1] - p1[1], p2[0] - p1[0]) * 180 / PI) {
            difference() {
                cube([distance(p1, p2), 1, 1], center = [0, 0, 0]);
                translate([0, -0.5, -0.5]) cube([1, 2, 2], center = [0, 0, 0]);
            }
        }
    }
}

function distance(p1, p2) = sqrt((p2[0] - p1[0])^2 + (p2[1] - p1[1])^2);

points = [[0, 0], [10, 5], [5, 5], [5, 25], [15, 5], [5, 52], [2, 13], [25, 5], [15, 5], [5, 5], [2, 1], [25, 5], [3, 5], [5, 10], [4, 0]];

polyline(points);
3D вид:
Скачать stl файл