karabas2011 писал(а):
Всё правильно. Ты как раз и реализовал hull или что-то подобное.
Осталось пустить это по кривой. Это вторая задача. Поскольку нужна формула кривой позволяющая по ней отмерять длину, находить нормаль и тд. Соответственно сначала придётся выбрать способ аппроксимации. Я поглядел на безье и сплайны, там оказалось весьма нетривиально разбить кривую на кусочки равной длины. Поэтому пока всё сделал на спряженных дугах. Но вручную подбирать дуги тоже не особоприятная задача. Пытаюсь разобраться с биарк интерполяцией
http://hakantiftikci.wordpress.com/2009 ... e-fitting/Не совсем так. Hull - это генерация минимального плоского выпуклого полигона, охватывающего заданный набор точек. Этого я не делал.
Объясняю что сделал. Как работает экструзия - берем плоский полигон - это будет дно, сдвигаем по оси Z на величину экструзии - это будет крыша. Добавляем стенки между дном и крышей - получился 3х мерная модель.
Экструзия с поворотом - между дном и крышей генерим промежуточные/виртуальные "крыши" с поворотом, полученные в процессе стенки войдут в состав конечной 3D модели.
Это то, что было в OpenScad, OpenJSCad. Существующие ограничения - крыша и дно, это один и тот же полигон и они параллельны друг другу. Т.е. по произвольной 3х мерной кривой такой набор не пустишь.
Я добавил к этому процессу использование произвольных (пока только выпуклых) полигонов в качестве промежуточных "крыш" при этом можно использовать 3D трансформации. Т.е. полигоны уже не лежат в одной плоскости, как это было в начальной реализации, а могут следовать произвольной кривой в 3х мерном пространстве. Вот в демке первый пример - параметрическая кривая Роза. Посмотри код - там вычисляется из параметра очередная координата и нормаль в этой точке, чтобы задать положение полигона. Т.е. полигоны(срезы) вычисляешь по формуле, а я только создаю по этим срезам стенки 3х мерной модели. Полигоны могут отличаться. Там есть пример, когда треугольник на одном конце экструзии, переходит в квадрат на другом.