Програмно створення випромінюючих рядів точок


17

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

Але я не впевнений, з чого почати. Чи можна цього досягти без трудомісткого позиціонування в Illustrator чи подібному програмному забезпеченні?


Було б тривіально використовувати щось на зразок Python для створення SVG з правильно розташованими / розмірами крапками, потім відкрити SVG в Illustrator, зберегти як .ai і перейти звідти.
Супербест

Тривіально правильно. Напишіть полярну декартову трансформацію, потім вкладені петлі, один радіус кроку та інший кут кроку. У вашому прикладі кутовий крок становить 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 не приховує об'єкти поза межами полотна та дозволяє змінити розмір полотна вручну:

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


16

Ви фактично не вказуєте, чи є зображення чимось, що ви створили самі в TK, під рукою чи ні. Якщо у вас вже є цей код, ви можете експортувати полотно програм TK у вигляді EPS та відкрити його в ілюстраторі. Все, що вам потрібно зробити - це зателефонувати canvas.postscript().

Якщо ви хочете скористатися TK

Простий зразок у 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 : Я не знаю, чи варто сценаріїв, оскільки потрібно три хвилини, щоб залучити їх за допомогою інструмента обертання та Ctrl+D

Параметрична суміш в Illustrator

  1. Намалюйте коло.
  2. дублювати його.
  3. змішайте кола
  4. намалюйте ще одне коло, яке представляє хребет, виріжте його в одній точці
  5. Виберіть і суміш, і коло, і зробіть « Об’єкт» → «Змішайте» → замініть хребет
  6. регулюйте кількість сфер за допомогою Object → Blend → Blend Options ... мінус один об’єкт.
  7. Скопіюйте та відрегулюйте розмір та параметри кружечків. зроблено

одне кільце

Зображення 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);
}

Дякую - у мене немає вікна Tk, це був лише приклад шаблону, який я знайшов
Том

1
@ То чому я перерахував альтернативи.
joojaa

1
Так, це дивовижно, я десь читав, що PostScript є Тьюрінг завершеним, але я ніколи раніше не бачив, щоб хтось насправді кодував його.
Пітер Вон

9

Якщо вам не байдуже точки, що вишикуються ...

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

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

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

Параметри панелі обведення випромінюючи ряди крапок

Ви можете, звичайно, тонко налаштувати кожен рядок, щоб додати більше крапок, якщо потрібно, просто збільшити або зменшити значення окремого проміжку. Якщо активовано поле розриву, ви можете використовувати колесо прокрутки, щоб швидко змінити значення. Утримуйте Ctrl / Cmdклавішу прокрутки, щоб налаштувати більш точні кроки

Параметри панелі обведення випромінюючи ряди крапок

Проблема з цим методом полягає в тому, що в деяких точках може бути перекриття:

точкове перекриття

Їх, можливо, потрібно буде вручну редагувати, якщо вам потрібно, щоб вони були ідеальними. На ряду повинно бути не більше 1 перекриттів.


1
Хороший, суміш краще для вирівнювання жорсткої
joojaa

1
Це динамічна решітка, або він збирається шовковим екраном на якийсь алюміній і вручну просвердлює кожну марку, і в цьому випадку трохи широкий знак не має значення, або він збирається перетворити на DXF і використовувати фрезу з ЧПУ, в цьому випадку трохи широкий отвір не матиме значення.
Peter Wone

9

Якщо ви робите турботу про многоточии вибудовуватися ...

Ефект спотворення та перетворення ілюстратора ідеально підходить для такого типу повторюваного шаблону, але для отримання такої точної схеми знадобиться певна настройка. Почніть з пунктирної лінії (з вашого прикладу 11 крапок)

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

Додайте ефект перетворення через Effect > Distort & Transform > Transform...

Параметри ефекту трансформації випромінюючи ряди крапок

Ви помітите, що у внутрішніх рядах занадто багато крапок. Ось де підходить ручне налаштування, але це повинно зробити вас досить далеко, щоб зрозуміти решту.


8

Використовуйте Inkscape:

  1. Створіть коцентричні напрямні лінії та двічі клацніть по рядках, щоб обертатися на рівну кількість (я використав 30 градусів).
  2. Створіть ряд коцентричних незаповнених кіл вручну, встановивши ширину і висоту, і перемістіть їх до центру.
  3. Створіть заповнене коло та скопіюйте певну кількість разів.
  4. Використовуйте інструмент "Рядки та стовпці", щоб розкласти їх уздовж ряду з проміжком, рівним
  5. Згрупуйте кола та оберніть їх. Нарешті, розмістіть їх так, щоб лінія центру виходила з напрямним перетином.
  6. Скопіюйте та вставте знову.

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

І результат (використовуючи 22,5 градусів, щоб відповідати образу ОП):

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.