Программно создавая излучающие ряды точек

17

Я хочу создать шаблон отверстия динамика: введите описание изображения здесь

Но я не уверен, с чего начать. Можно ли этого достичь без кропотливого позиционирования в Illustrator или подобном программном обеспечении?

Том
источник
Было бы тривиально использовать что-то вроде Python для создания SVG с правильно расположенными / размерными точками, затем открыть SVG в Illustrator, сохранить его как .ai и перейти оттуда.
Superbest
Тривиально это правильно. Запишите полярное преобразование в декартово, затем вложенные циклы, один радиус шага и другой угол шага. В вашем примере угловой шаг составляет 9 градусов или PI / 10.
Питер Воне

Ответы:

9

Я добавлю свой метод, так как мне кажется, что он самый простой. По сути, вы:

  1. Вычислительно генерировать круги в Python
  2. Визуализируйте их как простой файл SVG
  3. Открыть файл в Illustrator

Вот скрипт Python (требуется svgwriteи math):

"""
This script has two purposes:

- Simple demonstration of using Python (specifically the svgwrite library) to create an SVG file
- Answer the question http://graphicdesign.stackexchange.com/q/56200/21332
"""

# n[x] should give the number of circles at a distance of (x+1)*d from the center
d = 30
n = [8, 16, 20, 20, 20]

r = 7  # radius of each circle

# Calculate the center points of each circle
circles = [(0, 0)]  # There is always one circle in the middle

import math
for i in range(0, len(n)):
    m = n[i]  # m is the number of circle in this "row", i is the number of the row
    for j in range(0, m):  # for each circle...
        phi = 2*math.pi*j/m  # Calculate the angle at which the circle will be

        # Convert polar coordinates to cartesian
        x = d*(i+1)*math.cos(phi)
        y = d*(i+1)*math.sin(phi)

        circles.append((x, y))

# Write circles to SVG
import svgwrite

# Determine correct size of drawing
width = max([c[0] for c in circles])*2.2
height = max([c[1] for c in circles])*2.2

dwg = svgwrite.Drawing('demo.svg', size = (width, height))  # output will be in the same folder as this script

# offsets for shifting all circles so that the SVG can be easily viewed in browser
x_offset = min([c[0] for c in circles])*1.1
y_offset = min([c[1] for c in circles])*1.1

for c in circles:
    adjusted_x = c[0] - x_offset
    adjusted_y = c[1] - y_offset

    dwg.add(svgwrite.shapes.Circle((adjusted_x, adjusted_y), r))

# Save the file
dwg.save()

# Print SVG source to console
print(dwg.tostring())

Он создаст файл SVG в каталоге, в котором он находится. Вы можете открыть его в браузере:

введите описание изображения здесь

Или в Illustrator:

введите описание изображения здесь

Вы должны использовать окно Illustrator большего размера, чем у меня, хотя мое было слишком маленьким, чтобы работать с ним было комфортно ...

Если у вас не может быть сценариев Python, создающих файлы (возможно, запускающих это в онлайн-интерпретаторе Python), тогда просто закомментируйте dwg.save(). Последняя строка выводит содержимое SVG на консоль, вы можете вставить его в Блокнот, а затем сохранить как my file.svg.

Я увлекся и добавил несколько «аккуратных» функций, таких как:

  • Убедитесь, что круги правильно отцентрированы, чтобы круги с отрицательными координатами не обрезались при просмотре в браузере.
  • Измените размер SVG-холста.

Вы можете легко их пропустить, поскольку Illustrator не скрывает объекты за пределами холста и позволяет изменять размер холста вручную:

введите описание изображения здесь

Superbest
источник
16

Вы на самом деле не указываете, является ли изображение тем, что вы сами создали в ТЗ, имеете под рукой или нет. Если у вас уже есть этот код, вы можете экспортировать холст приложений TK как EPS и открыть его в Illustrator. Все, что вам нужно сделать, это позвонить canvas.postscript().

Если вы хотите использовать ТЗ

Простой пример в Python 2:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from Tkinter import *
import math

def circle(c, x, y, r=10):
    return c.create_oval(x-r, y-r, x+r, y+r, width=0, fill="black")

def draw_circles(c, num, r):
    step = (2.0*math.pi)/float(num)
    for i in range(num):
        x = 400 + r * math.sin(i*step)
        y = 400 + r * math.cos(i*step)
        circle(c, x, y)


main_window = Tk()
main_window.title('Pattern to EPS')
canvas = Canvas(main_window,
                    width=800, height=800, 
                    bg = 'white')

circle(canvas, 400, 400)
for i in range(1, 6):
    draw_circles(canvas, i*8, i*60)

canvas.pack()

# next line generates a eps file
canvas.postscript(file = "pattern.eps",  width=800, height=800 )

# uncomment next line if you want to see the tk window
# main_window.mainloop()

Это приводит к файлу с именем "patten.eps".

результат pattern.eps

Изображение 1 : Открытие сгенерированного EPS в иллюстраторе.

Вы можете сделать это в exteScript, SVG или непосредственно, написав программу EPS, которую легко сделать (см. Приложение ниже для некоторых примеров). Смотрите следующие сообщения для ресурсов:

PS : я не знаю, стоит ли писать сценарии, так как на их рисование уходит около 3 минут с помощью инструмента поворота и Ctrl+D

Параметрическая смесь в Illustrator

  1. Нарисовать круг.
  2. продублируйте это.
  3. смешать круги
  4. нарисуйте еще один круг, представляющий позвоночник, обрежьте его в одной точке
  5. Выберите смесь и круг и сделайте Object → Blend → Replace spine
  6. отрегулируйте количество сфер с помощью Object → Blend → Blend Options ... минус один объект.
  7. Скопируйте и настройте размер и параметры кругов spne. сделано

одно кольцо

Изображение 2 : одно кольцо по методу выше


Приложение 1: С написанным вручную EPS

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 800 800
%%Title: pattern
%%Creator: joojaa
%%CreationDate:  2015-07-08
%%EndComments

/c {newpath 10 0 360 arc closepath fill} def
/cr {
    dup 8 mul 2 dict begin /i exch def /r exch 60 mul def 
    1 1 i {360 i div mul dup sin exch cos r mul exch r mul c} for 
    end
} def

400 400 translate
0 0 c
1 1 6 {cr} for
%%EOF

Приложение 2: Пример ExtendScript

#target illustrator

var doc = app.activeDocument; 

function circle(x,y) {
    doc.pathItems.ellipse(x+5,y-5,10,10);
}

function draw_circles(num, r){
    var step = (2.0*Math.PI)/num;
    for (var i = 0; i < num; i++) {
        var x = -200 + r * Math.sin(i*step);
        var y = 200 + r * Math.cos(i*step);
        circle(x, y);
    }
}

circle(-200,200);
for (var i = 1; i <= 6; i++) {
    draw_circles(i*8, i*30);
}
joojaa
источник
Спасибо - у меня нет окна tk, это был просто пример паттерна, который я нашел
Том
1
@ Вот почему я перечислил альтернативы.
joojaa
1
Ха, это круто, я где-то читал, что PostScript завершен по Тьюрингу, но я никогда раньше не видел, чтобы кто-то на самом деле кодировал его.
Питер Воне
9

Если вас не волнует то, что точки выстраиваются ...

Вы можете быстро сделать что-то похожее на ваш пример в Illustrator, используя пунктирный штрих. Чтобы легко нарисовать равномерно расположенные кольца, я бы использовал инструмент Polar Grid .

Параметры инструмента Полярная сетка Результат Polar Grid Tool

Тогда это просто вопрос установки штриха на кольцах с пробелами, которые соответствуют вашему вкусу:

Параметры панели обводки излучающие ряды точек

Конечно, вы можете точно настроить каждую строку, чтобы добавить больше точек, если это необходимо, просто увеличить или уменьшить значение отдельного разрыва. С активным полем пропуска вы можете использовать колесо прокрутки для быстрого изменения значения. Удерживайте Ctrl / Cmdво время прокрутки, чтобы отрегулировать с меньшим шагом

Параметры панели обводки излучающие ряды точек

Проблема с этим методом в том, что некоторые точки могут перекрываться:

точка перекрытия

Они могут быть отредактированы вручную, если вы хотите, чтобы они были идеальными. В каждом ряду должно быть не более 1 перекрытия.

Johnb
источник
1
Хорошо, смесь лучше для выравнивания жесткой
joojaa
1
Это решетка для динамика, либо он собирается навести шелк на алюминий и вручную просверлить каждую метку, в этом случае немного широкая отметка не имеет значения, либо он конвертирует в DXF и использует фрезу с ЧПУ, в этом случае слегка широкое отверстие не имеет значения.
Питер Воне
9

Если вы делаете заботу о многоточии выстраиваться ...

Эффект искажения и преобразования Illustrator идеально подходит для такого рода повторяющихся шаблонов, но для получения этого точного шаблона потребуется некоторая настройка. Начните с пунктирной линии (с 11 точками для вашего примера)

Панель параметров обводки Пунктирная линия

Добавить эффект трансформации через Effect > Distort & Transform > Transform...

Параметры эффекта трансформации излучающие ряды точек

Вы заметите, что во внутренних строках слишком много точек. Вот тут-то и происходит ручная настройка, но этого должно хватить, чтобы разобраться с остальными.

Johnb
источник
8

Используйте Inkscape:

  1. Создайте соцентрические направляющие линии и дважды щелкните по линиям, чтобы повернуть на равную величину (я использовал 30 градусов).
  2. Создайте серию соцентрических незаполненных кругов, задав вручную ширину и высоту и переместив их в центр.
  3. Создайте заполненный круг и скопируйте и вставьте несколько раз.
  4. Используйте инструмент «Rows and Columns», чтобы распределить их по ряду с равным интервалом
  5. Сгруппируйте круги, а затем вращайте их. Наконец, разместите их так, чтобы центр совпал с пересечением направляющих.
  6. Скопируйте и вставьте снова.

введите описание изображения здесь

И результат (используя 22,5 градуса, чтобы соответствовать изображению ОП):

введите описание изображения здесь

nbubis
источник